1 """Support for Rituals Perfume Genie switches."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
9 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 switch entities."""
25 is_on_fn: Callable[[Diffuser], bool]
26 turn_on_fn: Callable[[Diffuser], Awaitable[
None]]
27 turn_off_fn: Callable[[Diffuser], Awaitable[
None]]
30 ENTITY_DESCRIPTIONS = (
34 translation_key=
"fan",
35 is_on_fn=
lambda diffuser: diffuser.is_on,
36 turn_on_fn=
lambda diffuser: diffuser.turn_on(),
37 turn_off_fn=
lambda diffuser: diffuser.turn_off(),
44 config_entry: ConfigEntry,
45 async_add_entities: AddEntitiesCallback,
47 """Set up the diffuser switch."""
48 coordinators: dict[str, RitualsDataUpdateCoordinator] = hass.data[DOMAIN][
54 for coordinator
in coordinators.values()
55 for description
in ENTITY_DESCRIPTIONS
60 """Representation of a diffuser switch."""
62 entity_description: RitualsSwitchEntityDescription
66 coordinator: RitualsDataUpdateCoordinator,
67 description: RitualsSwitchEntityDescription,
69 """Initialize the diffuser switch."""
70 super().
__init__(coordinator, description)
71 self.
_attr_is_on_attr_is_on = description.is_on_fn(coordinator.diffuser)
74 """Turn the switch on."""
80 """Turn the switch off."""
87 """Handle updated data from the coordinator."""
None _handle_coordinator_update(self)
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None __init__(self, RitualsDataUpdateCoordinator coordinator, RitualsSwitchEntityDescription description)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)