1 """Support for the Airzone Cloud binary sensors."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from typing
import Any, Final
8 from aioairzone_cloud.const
import (
17 AZD_THERMOSTAT_BATTERY_LOW,
23 BinarySensorDeviceClass,
25 BinarySensorEntityDescription,
31 from .
import AirzoneCloudConfigEntry
32 from .coordinator
import AirzoneUpdateCoordinator
41 @dataclass(frozen=True)
43 """A class that describes Airzone Cloud binary sensor entities."""
45 attributes: dict[str, str] |
None =
None
48 AIDOO_BINARY_SENSOR_TYPES: Final[tuple[AirzoneBinarySensorEntityDescription, ...]] = (
50 device_class=BinarySensorDeviceClass.RUNNING,
56 "warnings": AZD_WARNINGS,
58 device_class=BinarySensorDeviceClass.PROBLEM,
59 entity_category=EntityCategory.DIAGNOSTIC,
65 SYSTEM_BINARY_SENSOR_TYPES: Final[tuple[AirzoneBinarySensorEntityDescription, ...]] = (
69 "warnings": AZD_WARNINGS,
71 device_class=BinarySensorDeviceClass.PROBLEM,
72 entity_category=EntityCategory.DIAGNOSTIC,
78 ZONE_BINARY_SENSOR_TYPES: Final[tuple[AirzoneBinarySensorEntityDescription, ...]] = (
80 device_class=BinarySensorDeviceClass.RUNNING,
84 device_class=BinarySensorDeviceClass.RUNNING,
86 translation_key=
"air_demand",
90 translation_key=
"air_quality_active",
93 device_class=BinarySensorDeviceClass.BATTERY,
94 key=AZD_THERMOSTAT_BATTERY_LOW,
97 device_class=BinarySensorDeviceClass.RUNNING,
99 translation_key=
"floor_demand",
103 "warnings": AZD_WARNINGS,
105 device_class=BinarySensorDeviceClass.PROBLEM,
106 entity_category=EntityCategory.DIAGNOSTIC,
114 entry: AirzoneCloudConfigEntry,
115 async_add_entities: AddEntitiesCallback,
117 """Add Airzone Cloud binary sensors from a config_entry."""
118 coordinator = entry.runtime_data
120 binary_sensors: list[AirzoneBinarySensor] = [
127 for aidoo_id, aidoo_data
in coordinator.data.get(AZD_AIDOOS, {}).items()
128 for description
in AIDOO_BINARY_SENSOR_TYPES
129 if description.key
in aidoo_data
132 binary_sensors.extend(
139 for system_id, system_data
in coordinator.data.get(AZD_SYSTEMS, {}).items()
140 for description
in SYSTEM_BINARY_SENSOR_TYPES
141 if description.key
in system_data
144 binary_sensors.extend(
151 for zone_id, zone_data
in coordinator.data.get(AZD_ZONES, {}).items()
152 for description
in ZONE_BINARY_SENSOR_TYPES
153 if description.key
in zone_data
160 """Define an Airzone Cloud binary sensor."""
162 entity_description: AirzoneBinarySensorEntityDescription
166 """Return Airzone Cloud binary sensor availability."""
167 return super().available
and self.is_on
is not None
171 """Update attributes when the coordinator updates."""
177 """Update binary sensor attributes."""
179 if self.entity_description.attributes:
182 for key, val
in self.entity_description.attributes.items()
187 """Define an Airzone Cloud Aidoo binary sensor."""
191 coordinator: AirzoneUpdateCoordinator,
192 description: AirzoneBinarySensorEntityDescription,
194 aidoo_data: dict[str, Any],
197 super().
__init__(coordinator, aidoo_id, aidoo_data)
206 """Define an Airzone Cloud System binary sensor."""
210 coordinator: AirzoneUpdateCoordinator,
211 description: AirzoneBinarySensorEntityDescription,
213 system_data: dict[str, Any],
216 super().
__init__(coordinator, system_id, system_data)
225 """Define an Airzone Cloud Zone binary sensor."""
229 coordinator: AirzoneUpdateCoordinator,
230 description: AirzoneBinarySensorEntityDescription,
232 zone_data: dict[str, Any],
235 super().
__init__(coordinator, zone_id, zone_data)
None __init__(self, AirzoneUpdateCoordinator coordinator, AirzoneBinarySensorEntityDescription description, str aidoo_id, dict[str, Any] aidoo_data)
None _handle_coordinator_update(self)
None _async_update_attrs(self)
_attr_extra_state_attributes
None __init__(self, AirzoneUpdateCoordinator coordinator, AirzoneBinarySensorEntityDescription description, str system_id, dict[str, Any] system_data)
None __init__(self, AirzoneUpdateCoordinator coordinator, AirzoneBinarySensorEntityDescription description, str zone_id, dict[str, Any] zone_data)
Any get_airzone_value(self, str key)
None async_setup_entry(HomeAssistant hass, AirzoneCloudConfigEntry entry, AddEntitiesCallback async_add_entities)