1 """Support for Rituals Perfume Genie binary sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
8 from pyrituals
import Diffuser
11 BinarySensorDeviceClass,
13 BinarySensorEntityDescription,
20 from .const
import DOMAIN
21 from .coordinator
import RitualsDataUpdateCoordinator
22 from .entity
import DiffuserEntity
25 @dataclass(frozen=True, kw_only=True)
27 """Class describing Rituals binary sensor entities."""
29 is_on_fn: Callable[[Diffuser], bool]
30 has_fn: Callable[[Diffuser], bool]
33 ENTITY_DESCRIPTIONS = (
36 device_class=BinarySensorDeviceClass.BATTERY_CHARGING,
37 entity_category=EntityCategory.DIAGNOSTIC,
38 is_on_fn=
lambda diffuser: diffuser.charging,
39 has_fn=
lambda diffuser: diffuser.has_battery,
46 config_entry: ConfigEntry,
47 async_add_entities: AddEntitiesCallback,
49 """Set up the diffuser binary sensors."""
50 coordinators: dict[str, RitualsDataUpdateCoordinator] = hass.data[DOMAIN][
56 for coordinator
in coordinators.values()
57 for description
in ENTITY_DESCRIPTIONS
58 if description.has_fn(coordinator.diffuser)
63 """Defines a Rituals binary sensor entity."""
65 entity_description: RitualsBinarySensorEntityDescription
69 """Return the state of the binary sensor."""
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)