Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Support for Vallox ventilation unit numbers."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 
7 from vallox_websocket_api import Vallox
8 
10  NumberDeviceClass,
11  NumberEntity,
12  NumberEntityDescription,
13 )
14 from homeassistant.config_entries import ConfigEntry
15 from homeassistant.const import EntityCategory, UnitOfTemperature
16 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 
19 from .const import DOMAIN
20 from .coordinator import ValloxDataUpdateCoordinator
21 from .entity import ValloxEntity
22 
23 
25  """Representation of a Vallox number entity."""
26 
27  entity_description: ValloxNumberEntityDescription
28  _attr_entity_category = EntityCategory.CONFIG
29 
30  def __init__(
31  self,
32  name: str,
33  coordinator: ValloxDataUpdateCoordinator,
34  description: ValloxNumberEntityDescription,
35  client: Vallox,
36  ) -> None:
37  """Initialize the Vallox number entity."""
38  super().__init__(name, coordinator)
39 
40  self.entity_descriptionentity_description = description
41 
42  self._attr_unique_id_attr_unique_id = f"{self._device_uuid}-{description.key}"
43  self._client_client = client
44 
45  @property
46  def native_value(self) -> float | None:
47  """Return the value reported by the sensor."""
48  if (
49  value := self.coordinator.data.get(self.entity_descriptionentity_description.metric_key)
50  ) is None:
51  return None
52 
53  return float(value)
54 
55  async def async_set_native_value(self, value: float) -> None:
56  """Update the current value."""
57  await self._client_client.set_values(
58  {self.entity_descriptionentity_description.metric_key: float(value)}
59  )
60  await self.coordinator.async_request_refresh()
61 
62 
63 @dataclass(frozen=True, kw_only=True)
65  """Describes Vallox number entity."""
66 
67  metric_key: str
68 
69 
70 NUMBER_ENTITIES: tuple[ValloxNumberEntityDescription, ...] = (
72  key="supply_air_target_home",
73  translation_key="supply_air_target_home",
74  metric_key="A_CYC_HOME_AIR_TEMP_TARGET",
75  device_class=NumberDeviceClass.TEMPERATURE,
76  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
77  native_min_value=5.0,
78  native_max_value=25.0,
79  native_step=1.0,
80  ),
82  key="supply_air_target_away",
83  translation_key="supply_air_target_away",
84  metric_key="A_CYC_AWAY_AIR_TEMP_TARGET",
85  device_class=NumberDeviceClass.TEMPERATURE,
86  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
87  native_min_value=5.0,
88  native_max_value=25.0,
89  native_step=1.0,
90  ),
92  key="supply_air_target_boost",
93  translation_key="supply_air_target_boost",
94  metric_key="A_CYC_BOOST_AIR_TEMP_TARGET",
95  device_class=NumberDeviceClass.TEMPERATURE,
96  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
97  native_min_value=5.0,
98  native_max_value=25.0,
99  native_step=1.0,
100  ),
101 )
102 
103 
105  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
106 ) -> None:
107  """Set up the sensors."""
108  data = hass.data[DOMAIN][entry.entry_id]
109 
112  data["name"], data["coordinator"], description, data["client"]
113  )
114  for description in NUMBER_ENTITIES
115  )
None __init__(self, str name, ValloxDataUpdateCoordinator coordinator, ValloxNumberEntityDescription description, Vallox client)
Definition: number.py:36
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: number.py:106