diff --git a/homeassistant/components/plugwise/number.py b/homeassistant/components/plugwise/number.py index 5a3e394b119..25667ea16c6 100644 --- a/homeassistant/components/plugwise/number.py +++ b/homeassistant/components/plugwise/number.py @@ -4,7 +4,7 @@ from __future__ import annotations from collections.abc import Awaitable, Callable from dataclasses import dataclass -from plugwise import Smile +from plugwise import ActuatorData, Smile from homeassistant.components.number import ( NumberDeviceClass, @@ -24,13 +24,13 @@ from .entity import PlugwiseEntity @dataclass class PlugwiseEntityDescriptionMixin: - """Mixin values for Plugwse entities.""" + """Mixin values for Plugwise entities.""" command: Callable[[Smile, str, float], Awaitable[None]] - native_max_value_key: str - native_min_value_key: str - native_step_key: str - native_value_key: str + native_max_value_fn: Callable[[ActuatorData], float] + native_min_value_fn: Callable[[ActuatorData], float] + native_step_fn: Callable[[ActuatorData], float] + native_value_fn: Callable[[ActuatorData], float] @dataclass @@ -47,11 +47,11 @@ NUMBER_TYPES = ( command=lambda api, number, value: api.set_number_setpoint(number, value), device_class=NumberDeviceClass.TEMPERATURE, entity_category=EntityCategory.CONFIG, - native_max_value_key="upper_bound", - native_min_value_key="lower_bound", - native_step_key="resolution", native_unit_of_measurement=UnitOfTemperature.CELSIUS, - native_value_key="setpoint", + native_max_value_fn=lambda data: data["upper_bound"], + native_min_value_fn=lambda data: data["lower_bound"], + native_step_fn=lambda data: data["resolution"], + native_value_fn=lambda data: data["setpoint"], ), ) @@ -70,7 +70,7 @@ async def async_setup_entry( entities: list[PlugwiseNumberEntity] = [] for device_id, device in coordinator.data.devices.items(): for description in NUMBER_TYPES: - if description.key in device and "setpoint" in device[description.key]: + if (actuator := device.get(description.key)) and "setpoint" in actuator: entities.append( PlugwiseNumberEntity(coordinator, device_id, description) ) @@ -91,40 +91,30 @@ class PlugwiseNumberEntity(PlugwiseEntity, NumberEntity): ) -> None: """Initiate Plugwise Number.""" super().__init__(coordinator, device_id) + self.actuator = self.device[description.key] self.entity_description = description self._attr_unique_id = f"{device_id}-{description.key}" self._attr_mode = NumberMode.BOX @property - def native_step(self) -> float: - """Return the setpoint step value.""" - return max( - self.device[self.entity_description.key][ - self.entity_description.native_step_key - ], - 1, - ) - - @property - def native_value(self) -> float: - """Return the present setpoint value.""" - return self.device[self.entity_description.key][ - self.entity_description.native_value_key - ] + def native_max_value(self) -> float: + """Return the setpoint max. value.""" + return self.entity_description.native_max_value_fn(self.actuator) @property def native_min_value(self) -> float: """Return the setpoint min. value.""" - return self.device[self.entity_description.key][ - self.entity_description.native_min_value_key - ] + return self.entity_description.native_min_value_fn(self.actuator) @property - def native_max_value(self) -> float: - """Return the setpoint max. value.""" - return self.device[self.entity_description.key][ - self.entity_description.native_max_value_key - ] + def native_step(self) -> float: + """Return the setpoint step value.""" + return max(self.entity_description.native_step_fn(self.actuator), 1) + + @property + def native_value(self) -> float: + """Return the present setpoint value.""" + return self.entity_description.native_value_fn(self.actuator) async def async_set_native_value(self, value: float) -> None: """Change to the new setpoint value."""