1 """Support for Rituals Perfume Genie numbers."""
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 number entities."""
25 value_fn: Callable[[Diffuser], int]
26 set_value_fn: Callable[[Diffuser, int], Awaitable[Any]]
29 ENTITY_DESCRIPTIONS = (
32 translation_key=
"perfume_amount",
35 value_fn=
lambda diffuser: diffuser.perfume_amount,
36 set_value_fn=
lambda diffuser, value: diffuser.set_perfume_amount(value),
43 config_entry: ConfigEntry,
44 async_add_entities: AddEntitiesCallback,
46 """Set up the diffuser numbers."""
47 coordinators: dict[str, RitualsDataUpdateCoordinator] = hass.data[DOMAIN][
52 for coordinator
in coordinators.values()
53 for description
in ENTITY_DESCRIPTIONS
58 """Representation of a diffuser number entity."""
60 entity_description: RitualsNumberEntityDescription
64 """Return the number value."""
68 """Change to new number value."""
69 if not value.is_integer():
70 raise ValueError(f
"Can't set value to {value}. Value must be an integer.")
72 self.coordinator.diffuser,
int(value)
None async_set_native_value(self, float value)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)