diff --git a/homeassistant/components/tuya/base.py b/homeassistant/components/tuya/base.py index 0e8f8add2fa..8d1d8d26f94 100644 --- a/homeassistant/components/tuya/base.py +++ b/homeassistant/components/tuya/base.py @@ -26,6 +26,25 @@ class IntegerTypeData: scale: float step: float + @property + def max_scaled(self) -> float: + """Return the max scaled.""" + return self.scale_value(self.max) + + @property + def min_scaled(self) -> float: + """Return the min scaled.""" + return self.scale_value(self.min) + + @property + def step_scaled(self) -> float: + """Return the step scaled.""" + return self.scale_value(self.step) + + def scale_value(self, value: float | int) -> float: + """Scale a value.""" + return value * 1.0 / (10 ** self.scale) + @classmethod def from_json(cls, data: str) -> IntegerTypeData: """Load JSON string and return a IntegerTypeData object.""" @@ -96,8 +115,3 @@ class TuyaEntity(Entity): "Sending commands for device %s: %s", self.tuya_device.id, commands ) self.tuya_device_manager.send_commands(self.tuya_device.id, commands) - - @staticmethod - def scale(value: float | int, scale: float | int) -> float: - """Scale a value.""" - return value * 1.0 / (10 ** scale) diff --git a/homeassistant/components/tuya/climate.py b/homeassistant/components/tuya/climate.py index f667eed4e93..d05d063df05 100644 --- a/homeassistant/components/tuya/climate.py +++ b/homeassistant/components/tuya/climate.py @@ -188,11 +188,9 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): ) self._attr_supported_features |= SUPPORT_TARGET_TEMPERATURE self._set_temperature_type = type_data - self._attr_max_temp = self.scale(type_data.max, type_data.scale) - self._attr_min_temp = self.scale(type_data.min, type_data.scale) - self._attr_target_temperature_step = self.scale( - type_data.step, type_data.scale - ) + self._attr_max_temp = type_data.max_scaled + self._attr_min_temp = type_data.min_scaled + self._attr_target_temperature_step = type_data.step_scaled # Determine dpcode to use for getting the current temperature if all( @@ -243,8 +241,8 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): device.status_range[DPCode.HUMIDITY_SET].values ) self._set_humidity_type = type_data - self._attr_min_humidity = int(self.scale(type_data.max, type_data.scale)) - self._attr_max_humidity = int(self.scale(type_data.min, type_data.scale)) + self._attr_min_humidity = int(type_data.min_scaled) + self._attr_max_humidity = int(type_data.max_scaled) # Determine dpcode to use for getting the current humidity if ( @@ -324,7 +322,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): [ { "code": self._set_humidity_dpcode, - "value": self.scale(humidity, self._set_humidity_type.scale), + "value": self._set_humidity_type.scale_value(humidity), } ] ) @@ -366,9 +364,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): { "code": self._set_temperature_dpcode, "value": round( - self.scale( - kwargs["temperature"], self._set_temperature_type.scale - ) + self._set_temperature_type.scale_value(kwargs["temperature"]) ), } ] @@ -387,7 +383,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): if temperature is None: return None - return self.scale(temperature, self._current_temperature_type.scale) + return self._current_temperature_type.scale_value(temperature) @property def current_humidity(self) -> int | None: @@ -399,7 +395,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): if humidity is None: return None - return round(self.scale(humidity, self._current_humidity_type.scale)) + return round(self._current_humidity_type.scale_value(humidity)) @property def target_temperature(self) -> float | None: @@ -411,7 +407,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): if temperature is None: return None - return self.scale(temperature, self._set_temperature_type.scale) + return self._set_temperature_type.scale_value(temperature) @property def target_humidity(self) -> int | None: @@ -423,7 +419,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): if humidity is None: return None - return round(self.scale(humidity, self._set_humidity_type.scale)) + return round(self._set_humidity_type.scale_value(humidity)) @property def hvac_mode(self) -> str: diff --git a/homeassistant/components/tuya/number.py b/homeassistant/components/tuya/number.py index f31929f8f69..d048bc214b1 100644 --- a/homeassistant/components/tuya/number.py +++ b/homeassistant/components/tuya/number.py @@ -125,7 +125,7 @@ class TuyaNumberEntity(TuyaEntity, NumberEntity): # Scale integer/float value if value and isinstance(self._type_data, IntegerTypeData): - return self.scale(value, self._type_data.scale) + return self._type_data.scale_value(value) return None @@ -138,7 +138,7 @@ class TuyaNumberEntity(TuyaEntity, NumberEntity): [ { "code": self.entity_description.key, - "value": int(self.scale(value, self._type_data.scale)), + "value": self._type_data.scale_value(value), } ] ) diff --git a/homeassistant/components/tuya/sensor.py b/homeassistant/components/tuya/sensor.py index 54543ba984d..c56c9a851b4 100644 --- a/homeassistant/components/tuya/sensor.py +++ b/homeassistant/components/tuya/sensor.py @@ -167,7 +167,7 @@ class TuyaSensorEntity(TuyaEntity, SensorEntity): # Scale integer/float value if isinstance(self._type_data, IntegerTypeData): - return self.scale(value, self._type_data.scale) + return self._type_data.scale_value(value) # Unexpected enum value if (