From 0fe550576a306f9f93e356554628f4fdd9e7a8fd Mon Sep 17 00:00:00 2001 From: sibowler Date: Thu, 14 Jul 2022 06:29:56 +1000 Subject: [PATCH] Fix NumberEntity HA changes and add step control --- custom_components/localtuya/common.py | 6 ++--- custom_components/localtuya/number.py | 32 +++++++++++++++++++++------ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/custom_components/localtuya/common.py b/custom_components/localtuya/common.py index 1dcdee0..0e7fc8b 100644 --- a/custom_components/localtuya/common.py +++ b/custom_components/localtuya/common.py @@ -323,10 +323,10 @@ class LocalTuyaEntity(RestoreEntity, pytuya.ContextualLogger): self._state = None self._last_state = None - #Default value is available to be provided by Platform entities if required + # Default value is available to be provided by Platform entities if required self._default_value = self._config.get(CONF_DEFAULT_VALUE) - #Restore on connect setting is available to be provided by Platform entities if required + # Restore on connect setting is available to be provided by Platform entities if required self._restore_on_reconnect = ( self._config.get(CONF_RESTORE_ON_RECONNECT) or False ) @@ -366,7 +366,7 @@ class LocalTuyaEntity(RestoreEntity, pytuya.ContextualLogger): @property def extra_state_attributes(self): """Return entity specific state attributes to be saved & then available for restore - when the entity is restored at startup. + when the entity is restored at startup. """ attributes = {} if self._state is not None: diff --git a/custom_components/localtuya/number.py b/custom_components/localtuya/number.py index eae033f..85974e8 100644 --- a/custom_components/localtuya/number.py +++ b/custom_components/localtuya/number.py @@ -5,7 +5,6 @@ from functools import partial import voluptuous as vol from homeassistant.components.number import DOMAIN, NumberEntity from homeassistant.const import CONF_DEVICE_CLASS, STATE_UNKNOWN -from homeassistant.helpers.restore_state import RestoreEntity from .common import LocalTuyaEntity, async_setup_entry @@ -17,10 +16,12 @@ from .const import ( CONF_MAX_VALUE, CONF_DEFAULT_VALUE, CONF_RESTORE_ON_RECONNECT, + CONF_STEPSIZE_VALUE, ) DEFAULT_MIN = 0 DEFAULT_MAX = 100000 +DEFAULT_STEP = 1.0 def flow_schema(dps): @@ -34,12 +35,16 @@ def flow_schema(dps): vol.Coerce(float), vol.Range(min=-1000000.0, max=1000000.0), ), + vol.Required(CONF_STEPSIZE_VALUE, default=DEFAULT_STEP): vol.All( + vol.Coerce(float), + vol.Range(min=0.0, max=1000000.0), + ), vol.Optional(CONF_DEFAULT_VALUE): str, vol.Required(CONF_RESTORE_ON_RECONNECT): bool, } -class LocaltuyaNumber(LocalTuyaEntity, NumberEntity, RestoreEntity): +class LocaltuyaNumber(LocalTuyaEntity, NumberEntity): """Representation of a Tuya Number.""" def __init__( @@ -57,34 +62,47 @@ class LocaltuyaNumber(LocalTuyaEntity, NumberEntity, RestoreEntity): if CONF_MIN_VALUE in self._config: self._min_value = self._config.get(CONF_MIN_VALUE) - self._max_value = self._config.get(CONF_MAX_VALUE) + self._max_value = DEFAULT_MAX + if CONF_MAX_VALUE in self._config: + self._max_value = self._config.get(CONF_MAX_VALUE) + + + self._step_size = DEFAULT_STEP + if CONF_STEPSIZE_VALUE in self._config: + self._step_size = self._config.get(CONF_STEPSIZE_VALUE) #Override standard default value handling to cast to a float default_value = self._config.get(CONF_DEFAULT_VALUE) if default_value is not None: self._default_value = float(default_value) + @property - def value(self) -> float: + def native_value(self) -> float: """Return sensor state.""" return self._state @property - def min_value(self) -> float: + def native_min_value(self) -> float: """Return the minimum value.""" return self._min_value @property - def max_value(self) -> float: + def native_max_value(self) -> float: """Return the maximum value.""" return self._max_value + @property + def native_step(self) -> float: + """Return the maximum value.""" + return self._step_size + @property def device_class(self): """Return the class of this device.""" return self._config.get(CONF_DEVICE_CLASS) - async def async_set_value(self, value: float) -> None: + async def async_set_native_value(self, value: float) -> None: """Update the current value.""" await self._device.set_dp(value, self._dp_id)