Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Number platform for Plugwise integration."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 
8  NumberDeviceClass,
9  NumberEntity,
10  NumberEntityDescription,
11  NumberMode,
12 )
13 from homeassistant.const import EntityCategory, UnitOfTemperature
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from . import PlugwiseConfigEntry
18 from .const import NumberType
19 from .coordinator import PlugwiseDataUpdateCoordinator
20 from .entity import PlugwiseEntity
21 from .util import plugwise_command
22 
23 
24 @dataclass(frozen=True, kw_only=True)
26  """Class describing Plugwise Number entities."""
27 
28  key: NumberType
29 
30 
31 NUMBER_TYPES = (
33  key="maximum_boiler_temperature",
34  translation_key="maximum_boiler_temperature",
35  device_class=NumberDeviceClass.TEMPERATURE,
36  entity_category=EntityCategory.CONFIG,
37  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
38  ),
40  key="max_dhw_temperature",
41  translation_key="max_dhw_temperature",
42  device_class=NumberDeviceClass.TEMPERATURE,
43  entity_category=EntityCategory.CONFIG,
44  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
45  ),
47  key="temperature_offset",
48  translation_key="temperature_offset",
49  device_class=NumberDeviceClass.TEMPERATURE,
50  entity_category=EntityCategory.CONFIG,
51  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
52  ),
53 )
54 
55 
57  hass: HomeAssistant,
58  entry: PlugwiseConfigEntry,
59  async_add_entities: AddEntitiesCallback,
60 ) -> None:
61  """Set up Plugwise number platform."""
62  coordinator = entry.runtime_data
63 
64  @callback
65  def _add_entities() -> None:
66  """Add Entities."""
67  if not coordinator.new_devices:
68  return
69 
71  PlugwiseNumberEntity(coordinator, device_id, description)
72  for device_id in coordinator.new_devices
73  for description in NUMBER_TYPES
74  if description.key in coordinator.data.devices[device_id]
75  )
76 
77  _add_entities()
78  entry.async_on_unload(coordinator.async_add_listener(_add_entities))
79 
80 
82  """Representation of a Plugwise number."""
83 
84  entity_description: PlugwiseNumberEntityDescription
85 
86  def __init__(
87  self,
88  coordinator: PlugwiseDataUpdateCoordinator,
89  device_id: str,
90  description: PlugwiseNumberEntityDescription,
91  ) -> None:
92  """Initiate Plugwise Number."""
93  super().__init__(coordinator, device_id)
94  self._attr_mode_attr_mode = NumberMode.BOX
95  self._attr_native_max_value_attr_native_max_value = self.devicedevice[description.key]["upper_bound"]
96  self._attr_native_min_value_attr_native_min_value = self.devicedevice[description.key]["lower_bound"]
97  self._attr_unique_id_attr_unique_id = f"{device_id}-{description.key}"
98  self.device_iddevice_id = device_id
99  self.entity_descriptionentity_description = description
100 
101  native_step = self.devicedevice[description.key]["resolution"]
102  if description.key != "temperature_offset":
103  native_step = max(native_step, 0.5)
104  self._attr_native_step_attr_native_step = native_step
105 
106  @property
107  def native_value(self) -> float:
108  """Return the present setpoint value."""
109  return self.devicedevice[self.entity_descriptionentity_description.key]["setpoint"]
110 
111  @plugwise_command
112  async def async_set_native_value(self, value: float) -> None:
113  """Change to the new setpoint value."""
114  await self.coordinator.api.set_number(
115  self.device_iddevice_id, self.entity_descriptionentity_description.key, value
116  )
None __init__(self, PlugwiseDataUpdateCoordinator coordinator, str device_id, PlugwiseNumberEntityDescription description)
Definition: number.py:91
None async_setup_entry(HomeAssistant hass, PlugwiseConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: number.py:60