1 """Binary Sensor platform for Sensibo integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import TYPE_CHECKING
9 from pysensibo.model
import MotionSensor, SensiboDevice
12 BinarySensorDeviceClass,
14 BinarySensorEntityDescription,
20 from .
import SensiboConfigEntry
21 from .coordinator
import SensiboDataUpdateCoordinator
22 from .entity
import SensiboDeviceBaseEntity, SensiboMotionBaseEntity
27 @dataclass(frozen=True, kw_only=True)
29 """Describes Sensibo Motion sensor entity."""
31 value_fn: Callable[[MotionSensor], bool |
None]
34 @dataclass(frozen=True, kw_only=True)
36 """Describes Sensibo Motion sensor entity."""
38 value_fn: Callable[[SensiboDevice], bool |
None]
43 translation_key=
"filter_clean",
44 device_class=BinarySensorDeviceClass.PROBLEM,
45 value_fn=
lambda data: data.filter_clean,
48 MOTION_SENSOR_TYPES: tuple[SensiboMotionBinarySensorEntityDescription, ...] = (
51 device_class=BinarySensorDeviceClass.CONNECTIVITY,
52 entity_category=EntityCategory.DIAGNOSTIC,
53 value_fn=
lambda data: data.alive,
57 translation_key=
"is_main_sensor",
58 entity_category=EntityCategory.DIAGNOSTIC,
59 value_fn=
lambda data: data.is_main_sensor,
63 device_class=BinarySensorDeviceClass.MOTION,
64 value_fn=
lambda data: data.motion,
68 MOTION_DEVICE_SENSOR_TYPES: tuple[SensiboDeviceBinarySensorEntityDescription, ...] = (
71 translation_key=
"room_occupied",
72 device_class=BinarySensorDeviceClass.MOTION,
73 value_fn=
lambda data: data.room_occupied,
77 DEVICE_SENSOR_TYPES: tuple[SensiboDeviceBinarySensorEntityDescription, ...] = (
78 FILTER_CLEAN_REQUIRED_DESCRIPTION,
81 PURE_SENSOR_TYPES: tuple[SensiboDeviceBinarySensorEntityDescription, ...] = (
83 key=
"pure_ac_integration",
84 translation_key=
"pure_ac_integration",
85 entity_category=EntityCategory.DIAGNOSTIC,
86 device_class=BinarySensorDeviceClass.CONNECTIVITY,
87 value_fn=
lambda data: data.pure_ac_integration,
90 key=
"pure_geo_integration",
91 translation_key=
"pure_geo_integration",
92 entity_category=EntityCategory.DIAGNOSTIC,
93 device_class=BinarySensorDeviceClass.CONNECTIVITY,
94 value_fn=
lambda data: data.pure_geo_integration,
97 key=
"pure_measure_integration",
98 translation_key=
"pure_measure_integration",
99 entity_category=EntityCategory.DIAGNOSTIC,
100 device_class=BinarySensorDeviceClass.CONNECTIVITY,
101 value_fn=
lambda data: data.pure_measure_integration,
104 key=
"pure_prime_integration",
105 translation_key=
"pure_prime_integration",
106 entity_category=EntityCategory.DIAGNOSTIC,
107 device_class=BinarySensorDeviceClass.CONNECTIVITY,
108 value_fn=
lambda data: data.pure_prime_integration,
110 FILTER_CLEAN_REQUIRED_DESCRIPTION,
113 DESCRIPTION_BY_MODELS = {
"pure": PURE_SENSOR_TYPES}
118 entry: SensiboConfigEntry,
119 async_add_entities: AddEntitiesCallback,
121 """Set up Sensibo binary sensor platform."""
123 coordinator = entry.runtime_data
125 entities: list[SensiboMotionSensor | SensiboDeviceSensor] = []
127 for device_id, device_data
in coordinator.data.parsed.items():
128 if device_data.motion_sensors:
131 coordinator, device_id, sensor_id, sensor_data, description
133 for sensor_id, sensor_data
in device_data.motion_sensors.items()
134 for description
in MOTION_SENSOR_TYPES
138 for description
in MOTION_DEVICE_SENSOR_TYPES
139 for device_id, device_data
in coordinator.data.parsed.items()
140 if device_data.motion_sensors
144 for device_id, device_data
in coordinator.data.parsed.items()
145 for description
in DESCRIPTION_BY_MODELS.get(
146 device_data.model, DEVICE_SENSOR_TYPES
154 """Representation of a Sensibo Motion Binary Sensor."""
156 entity_description: SensiboMotionBinarySensorEntityDescription
160 coordinator: SensiboDataUpdateCoordinator,
163 sensor_data: MotionSensor,
164 entity_description: SensiboMotionBinarySensorEntityDescription,
166 """Initiate Sensibo Motion Binary Sensor."""
178 """Return true if the binary sensor is on."""
185 """Representation of a Sensibo Device Binary Sensor."""
187 entity_description: SensiboDeviceBinarySensorEntityDescription
191 coordinator: SensiboDataUpdateCoordinator,
193 entity_description: SensiboDeviceBinarySensorEntityDescription,
195 """Initiate Sensibo Device Binary Sensor."""
205 """Return true if the binary sensor is on."""
None __init__(self, SensiboDataUpdateCoordinator coordinator, str device_id, SensiboDeviceBinarySensorEntityDescription entity_description)
None __init__(self, SensiboDataUpdateCoordinator coordinator, str device_id, str sensor_id, MotionSensor sensor_data, SensiboMotionBinarySensorEntityDescription entity_description)
SensiboDevice device_data(self)
MotionSensor|None sensor_data(self)
None async_setup_entry(HomeAssistant hass, SensiboConfigEntry entry, AddEntitiesCallback async_add_entities)