1 """Support for Rituals Perfume Genie numbers."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
8 from pyrituals
import Diffuser
16 from .const
import DOMAIN
17 from .coordinator
import RitualsDataUpdateCoordinator
18 from .entity
import DiffuserEntity
21 @dataclass(frozen=True, kw_only=True)
23 """Class describing Rituals select entities."""
25 current_fn: Callable[[Diffuser], str]
26 select_fn: Callable[[Diffuser, str], Awaitable[
None]]
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))
46 config_entry: ConfigEntry,
47 async_add_entities: AddEntitiesCallback,
49 """Set up the diffuser select entities."""
50 coordinators: dict[str, RitualsDataUpdateCoordinator] = hass.data[DOMAIN][
56 for coordinator
in coordinators.values()
57 for description
in ENTITY_DESCRIPTIONS
62 """Representation of a diffuser select entity."""
64 entity_description: RitualsSelectEntityDescription
68 coordinator: RitualsDataUpdateCoordinator,
69 description: RitualsSelectEntityDescription,
71 """Initialize the diffuser room size select entity."""
72 super().
__init__(coordinator, description)
74 self.coordinator.diffuser.has_battery
79 """Return the selected entity option to represent the entity state."""
83 """Change the selected option."""
84 await self.
entity_descriptionentity_description.select_fn(self.coordinator.diffuser, option)
_attr_entity_registry_enabled_default
None __init__(self, RitualsDataUpdateCoordinator coordinator, RitualsSelectEntityDescription description)
None async_select_option(self, str option)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)