Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Support for hunterdouglas_powerview numbers."""
2 
3 from collections.abc import Callable
4 from dataclasses import dataclass
5 from typing import Final
6 
7 from aiopvapi.helpers.constants import ATTR_NAME, MOTION_VELOCITY
8 from aiopvapi.resources.shade import BaseShade, ShadePosition
9 
11  NumberEntityDescription,
12  NumberMode,
13  RestoreNumber,
14 )
15 from homeassistant.const import EntityCategory
16 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 
19 from .coordinator import PowerviewShadeUpdateCoordinator
20 from .entity import ShadeEntity
21 from .model import PowerviewConfigEntry, PowerviewDeviceInfo
22 
23 
24 @dataclass(frozen=True, kw_only=True)
26  """Class to describe a Number entity."""
27 
28  create_entity_fn: Callable[[BaseShade], bool]
29  store_value_fn: Callable[[PowerviewShadeUpdateCoordinator, int, float | None], None]
30  entity_category: EntityCategory = EntityCategory.CONFIG
31 
32 
34  coordinator: PowerviewShadeUpdateCoordinator,
35  shade_id: int,
36  value: float | None,
37 ) -> None:
38  """Store the desired shade velocity in the coordinator."""
39  coordinator.data.update_shade_velocity(shade_id, ShadePosition(velocity=value))
40 
41 
42 NUMBERS: Final = (
44  key="velocity",
45  name="Velocity",
46  mode=NumberMode.SLIDER,
47  icon="mdi:speedometer",
48  create_entity_fn=lambda shade: shade.is_supported(MOTION_VELOCITY),
49  store_value_fn=store_velocity,
50  ),
51 )
52 
53 
55  hass: HomeAssistant,
56  entry: PowerviewConfigEntry,
57  async_add_entities: AddEntitiesCallback,
58 ) -> None:
59  """Set up the hunter douglas number entities."""
60  pv_entry = entry.runtime_data
61  entities: list[PowerViewNumber] = []
62  for shade in pv_entry.shade_data.values():
63  room_name = getattr(pv_entry.room_data.get(shade.room_id), ATTR_NAME, "")
64  entities.extend(
66  pv_entry.coordinator,
67  pv_entry.device_info,
68  room_name,
69  shade,
70  shade.name,
71  description,
72  )
73  for description in NUMBERS
74  if description.create_entity_fn(shade)
75  )
76  async_add_entities(entities)
77 
78 
80  """Representation of a number entity."""
81 
82  entity_description: PowerviewNumberDescription
83 
84  def __init__(
85  self,
86  coordinator: PowerviewShadeUpdateCoordinator,
87  device_info: PowerviewDeviceInfo,
88  room_name: str,
89  shade: BaseShade,
90  name: str,
91  description: PowerviewNumberDescription,
92  ) -> None:
93  """Initialize the number entity."""
94  super().__init__(coordinator, device_info, room_name, shade, name)
95  self.entity_descriptionentity_description = description
96  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{self._attr_unique_id}_{description.key}"
97 
98  async def async_set_native_value(self, value: float) -> None:
99  """Update the current value."""
100  self._attr_native_value_attr_native_value = value
101  self.entity_descriptionentity_description.store_value_fn(self.coordinator, self._shade_shade.id, value)
102  self.async_write_ha_stateasync_write_ha_state()
103 
104  async def async_added_to_hass(self) -> None:
105  """Restore last state."""
106  await super().async_added_to_hass()
107  last_number_data = await self.async_get_last_number_dataasync_get_last_number_data()
108  value = last_number_data.native_value if last_number_data is not None else 0
109  self._attr_native_value_attr_native_value = value
110  self.entity_descriptionentity_description.store_value_fn(self.coordinator, self._shade_shade.id, value)
None __init__(self, PowerviewShadeUpdateCoordinator coordinator, PowerviewDeviceInfo device_info, str room_name, BaseShade shade, str name, PowerviewNumberDescription description)
Definition: number.py:92
NumberExtraStoredData|None async_get_last_number_data(self)
Definition: __init__.py:549
None store_velocity(PowerviewShadeUpdateCoordinator coordinator, int shade_id, float|None value)
Definition: number.py:37
None async_setup_entry(HomeAssistant hass, PowerviewConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: number.py:58