Move Tuya value scaling into IntegerTypeData (#57757)
This commit is contained in:
parent
19d812602e
commit
6e6313272d
4 changed files with 33 additions and 23 deletions
|
@ -26,6 +26,25 @@ class IntegerTypeData:
|
||||||
scale: float
|
scale: float
|
||||||
step: 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
|
@classmethod
|
||||||
def from_json(cls, data: str) -> IntegerTypeData:
|
def from_json(cls, data: str) -> IntegerTypeData:
|
||||||
"""Load JSON string and return a IntegerTypeData object."""
|
"""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
|
"Sending commands for device %s: %s", self.tuya_device.id, commands
|
||||||
)
|
)
|
||||||
self.tuya_device_manager.send_commands(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)
|
|
||||||
|
|
|
@ -188,11 +188,9 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
||||||
)
|
)
|
||||||
self._attr_supported_features |= SUPPORT_TARGET_TEMPERATURE
|
self._attr_supported_features |= SUPPORT_TARGET_TEMPERATURE
|
||||||
self._set_temperature_type = type_data
|
self._set_temperature_type = type_data
|
||||||
self._attr_max_temp = self.scale(type_data.max, type_data.scale)
|
self._attr_max_temp = type_data.max_scaled
|
||||||
self._attr_min_temp = self.scale(type_data.min, type_data.scale)
|
self._attr_min_temp = type_data.min_scaled
|
||||||
self._attr_target_temperature_step = self.scale(
|
self._attr_target_temperature_step = type_data.step_scaled
|
||||||
type_data.step, type_data.scale
|
|
||||||
)
|
|
||||||
|
|
||||||
# Determine dpcode to use for getting the current temperature
|
# Determine dpcode to use for getting the current temperature
|
||||||
if all(
|
if all(
|
||||||
|
@ -243,8 +241,8 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
||||||
device.status_range[DPCode.HUMIDITY_SET].values
|
device.status_range[DPCode.HUMIDITY_SET].values
|
||||||
)
|
)
|
||||||
self._set_humidity_type = type_data
|
self._set_humidity_type = type_data
|
||||||
self._attr_min_humidity = int(self.scale(type_data.max, type_data.scale))
|
self._attr_min_humidity = int(type_data.min_scaled)
|
||||||
self._attr_max_humidity = int(self.scale(type_data.min, type_data.scale))
|
self._attr_max_humidity = int(type_data.max_scaled)
|
||||||
|
|
||||||
# Determine dpcode to use for getting the current humidity
|
# Determine dpcode to use for getting the current humidity
|
||||||
if (
|
if (
|
||||||
|
@ -324,7 +322,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"code": self._set_humidity_dpcode,
|
"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,
|
"code": self._set_temperature_dpcode,
|
||||||
"value": round(
|
"value": round(
|
||||||
self.scale(
|
self._set_temperature_type.scale_value(kwargs["temperature"])
|
||||||
kwargs["temperature"], self._set_temperature_type.scale
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -387,7 +383,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
||||||
if temperature is None:
|
if temperature is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self.scale(temperature, self._current_temperature_type.scale)
|
return self._current_temperature_type.scale_value(temperature)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def current_humidity(self) -> int | None:
|
def current_humidity(self) -> int | None:
|
||||||
|
@ -399,7 +395,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
||||||
if humidity is None:
|
if humidity is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return round(self.scale(humidity, self._current_humidity_type.scale))
|
return round(self._current_humidity_type.scale_value(humidity))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def target_temperature(self) -> float | None:
|
def target_temperature(self) -> float | None:
|
||||||
|
@ -411,7 +407,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
||||||
if temperature is None:
|
if temperature is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self.scale(temperature, self._set_temperature_type.scale)
|
return self._set_temperature_type.scale_value(temperature)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def target_humidity(self) -> int | None:
|
def target_humidity(self) -> int | None:
|
||||||
|
@ -423,7 +419,7 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
||||||
if humidity is None:
|
if humidity is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return round(self.scale(humidity, self._set_humidity_type.scale))
|
return round(self._set_humidity_type.scale_value(humidity))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hvac_mode(self) -> str:
|
def hvac_mode(self) -> str:
|
||||||
|
|
|
@ -125,7 +125,7 @@ class TuyaNumberEntity(TuyaEntity, NumberEntity):
|
||||||
|
|
||||||
# Scale integer/float value
|
# Scale integer/float value
|
||||||
if value and isinstance(self._type_data, IntegerTypeData):
|
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
|
return None
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ class TuyaNumberEntity(TuyaEntity, NumberEntity):
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"code": self.entity_description.key,
|
"code": self.entity_description.key,
|
||||||
"value": int(self.scale(value, self._type_data.scale)),
|
"value": self._type_data.scale_value(value),
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -167,7 +167,7 @@ class TuyaSensorEntity(TuyaEntity, SensorEntity):
|
||||||
|
|
||||||
# Scale integer/float value
|
# Scale integer/float value
|
||||||
if isinstance(self._type_data, IntegerTypeData):
|
if isinstance(self._type_data, IntegerTypeData):
|
||||||
return self.scale(value, self._type_data.scale)
|
return self._type_data.scale_value(value)
|
||||||
|
|
||||||
# Unexpected enum value
|
# Unexpected enum value
|
||||||
if (
|
if (
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue