1
mirror of https://github.com/home-assistant/core synced 2024-08-02 23:40:32 +02:00

Move Tuya value scaling into IntegerTypeData (#57757)

This commit is contained in:
Franck Nijhof 2021-10-15 10:33:20 +02:00 committed by GitHub
parent 19d812602e
commit 6e6313272d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 23 deletions

View File

@ -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)

View File

@ -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:

View File

@ -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),
}
]
)

View File

@ -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 (