1 """Support for Fritzbox binary sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import Final
9 from pyfritzhome.fritzhomedevice
import FritzhomeDevice
12 BinarySensorDeviceClass,
14 BinarySensorEntityDescription,
20 from .coordinator
import FritzboxConfigEntry
21 from .entity
import FritzBoxDeviceEntity
22 from .model
import FritzEntityDescriptionMixinBase
25 @dataclass(frozen=True)
27 """BinarySensor description mixin for Fritz!Smarthome entities."""
29 is_on: Callable[[FritzhomeDevice], bool |
None]
32 @dataclass(frozen=True)
34 BinarySensorEntityDescription, FritzEntityDescriptionMixinBinarySensor
36 """Description for Fritz!Smarthome binary sensor entities."""
39 BINARY_SENSOR_TYPES: Final[tuple[FritzBinarySensorEntityDescription, ...]] = (
42 translation_key=
"alarm",
43 device_class=BinarySensorDeviceClass.WINDOW,
44 suitable=
lambda device: device.has_alarm,
45 is_on=
lambda device: device.alert_state,
49 translation_key=
"lock",
50 device_class=BinarySensorDeviceClass.LOCK,
51 entity_category=EntityCategory.DIAGNOSTIC,
52 suitable=
lambda device: device.lock
is not None,
53 is_on=
lambda device:
not device.lock,
57 translation_key=
"device_lock",
58 device_class=BinarySensorDeviceClass.LOCK,
59 entity_category=EntityCategory.DIAGNOSTIC,
60 suitable=
lambda device: device.device_lock
is not None,
61 is_on=
lambda device:
not device.device_lock,
68 entry: FritzboxConfigEntry,
69 async_add_entities: AddEntitiesCallback,
71 """Set up the FRITZ!SmartHome binary sensor from ConfigEntry."""
72 coordinator = entry.runtime_data
75 def _add_entities(devices: set[str] |
None =
None) ->
None:
78 devices = coordinator.new_devices
84 for description
in BINARY_SENSOR_TYPES
85 if description.suitable(coordinator.data.devices[ain])
88 entry.async_on_unload(coordinator.async_add_listener(_add_entities))
90 _add_entities(set(coordinator.data.devices))
94 """Representation of a binary FRITZ!SmartHome device."""
96 entity_description: FritzBinarySensorEntityDescription
100 """Return true if sensor is on."""
FritzhomeDevice data(self)
FritzhomeEntityBase data(self)
None async_setup_entry(HomeAssistant hass, FritzboxConfigEntry entry, AddEntitiesCallback async_add_entities)