Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """Support for Rituals Perfume Genie numbers."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Awaitable, Callable
6 from dataclasses import dataclass
7 
8 from pyrituals import Diffuser
9 
10 from homeassistant.components.select import SelectEntity, SelectEntityDescription
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import EntityCategory, UnitOfArea
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from .const import DOMAIN
17 from .coordinator import RitualsDataUpdateCoordinator
18 from .entity import DiffuserEntity
19 
20 
21 @dataclass(frozen=True, kw_only=True)
23  """Class describing Rituals select entities."""
24 
25  current_fn: Callable[[Diffuser], str]
26  select_fn: Callable[[Diffuser, str], Awaitable[None]]
27 
28 
29 ENTITY_DESCRIPTIONS = (
31  key="room_size_square_meter",
32  translation_key="room_size_square_meter",
33  unit_of_measurement=UnitOfArea.SQUARE_METERS,
34  entity_category=EntityCategory.CONFIG,
35  options=["15", "30", "60", "100"],
36  current_fn=lambda diffuser: str(diffuser.room_size_square_meter),
37  select_fn=lambda diffuser, value: (
38  diffuser.set_room_size_square_meter(int(value))
39  ),
40  ),
41 )
42 
43 
45  hass: HomeAssistant,
46  config_entry: ConfigEntry,
47  async_add_entities: AddEntitiesCallback,
48 ) -> None:
49  """Set up the diffuser select entities."""
50  coordinators: dict[str, RitualsDataUpdateCoordinator] = hass.data[DOMAIN][
51  config_entry.entry_id
52  ]
53 
55  RitualsSelectEntity(coordinator, description)
56  for coordinator in coordinators.values()
57  for description in ENTITY_DESCRIPTIONS
58  )
59 
60 
62  """Representation of a diffuser select entity."""
63 
64  entity_description: RitualsSelectEntityDescription
65 
66  def __init__(
67  self,
68  coordinator: RitualsDataUpdateCoordinator,
69  description: RitualsSelectEntityDescription,
70  ) -> None:
71  """Initialize the diffuser room size select entity."""
72  super().__init__(coordinator, description)
73  self._attr_entity_registry_enabled_default_attr_entity_registry_enabled_default = (
74  self.coordinator.diffuser.has_battery
75  )
76 
77  @property
78  def current_option(self) -> str:
79  """Return the selected entity option to represent the entity state."""
80  return self.entity_descriptionentity_description.current_fn(self.coordinator.diffuser)
81 
82  async def async_select_option(self, option: str) -> None:
83  """Change the selected option."""
84  await self.entity_descriptionentity_description.select_fn(self.coordinator.diffuser, option)
None __init__(self, RitualsDataUpdateCoordinator coordinator, RitualsSelectEntityDescription description)
Definition: select.py:70
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: select.py:48