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

View file

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

View file

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

View file

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