1 """Support for the Airzone Cloud sensors."""
3 from __future__
import annotations
5 from typing
import Any, Final
7 from aioairzone_cloud.const
import (
15 AZD_INDOOR_EXCHANGER_TEMP,
16 AZD_INDOOR_RETURN_TEMP,
19 AZD_OUTDOOR_CONDENSER_PRESS,
20 AZD_OUTDOOR_DISCHARGE_TEMP,
21 AZD_OUTDOOR_ELECTRIC_CURRENT,
22 AZD_OUTDOOR_EVAPORATOR_PRESS,
23 AZD_OUTDOOR_EXCHANGER_TEMP,
26 AZD_THERMOSTAT_BATTERY,
27 AZD_THERMOSTAT_COVERAGE,
36 SensorEntityDescription,
40 CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
42 SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
44 UnitOfElectricCurrent,
52 from .
import AirzoneCloudConfigEntry
53 from .coordinator
import AirzoneUpdateCoordinator
57 AirzoneWebServerEntity,
61 AIDOO_SENSOR_TYPES: Final[tuple[SensorEntityDescription, ...]] = (
63 entity_category=EntityCategory.DIAGNOSTIC,
64 entity_registry_enabled_default=
False,
65 key=AZD_INDOOR_EXCHANGER_TEMP,
66 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
67 state_class=SensorStateClass.MEASUREMENT,
68 translation_key=
"indoor_exchanger_temp",
71 entity_category=EntityCategory.DIAGNOSTIC,
72 entity_registry_enabled_default=
False,
73 key=AZD_INDOOR_RETURN_TEMP,
74 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
75 state_class=SensorStateClass.MEASUREMENT,
76 translation_key=
"indoor_return_temp",
79 entity_category=EntityCategory.DIAGNOSTIC,
80 entity_registry_enabled_default=
False,
81 key=AZD_INDOOR_WORK_TEMP,
82 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
83 state_class=SensorStateClass.MEASUREMENT,
84 translation_key=
"indoor_work_temp",
87 entity_category=EntityCategory.DIAGNOSTIC,
88 entity_registry_enabled_default=
False,
89 key=AZD_OUTDOOR_CONDENSER_PRESS,
90 native_unit_of_measurement=UnitOfPressure.KPA,
91 state_class=SensorStateClass.MEASUREMENT,
92 translation_key=
"outdoor_condenser_press",
95 entity_category=EntityCategory.DIAGNOSTIC,
96 entity_registry_enabled_default=
False,
97 key=AZD_OUTDOOR_DISCHARGE_TEMP,
98 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
99 state_class=SensorStateClass.MEASUREMENT,
100 translation_key=
"outdoor_discharge_temp",
103 entity_category=EntityCategory.DIAGNOSTIC,
104 entity_registry_enabled_default=
False,
105 key=AZD_OUTDOOR_ELECTRIC_CURRENT,
106 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
107 state_class=SensorStateClass.MEASUREMENT,
108 translation_key=
"outdoor_electric_current",
111 entity_category=EntityCategory.DIAGNOSTIC,
112 entity_registry_enabled_default=
False,
113 key=AZD_OUTDOOR_EVAPORATOR_PRESS,
114 native_unit_of_measurement=UnitOfPressure.KPA,
115 state_class=SensorStateClass.MEASUREMENT,
116 translation_key=
"outdoor_evaporator_press",
119 entity_category=EntityCategory.DIAGNOSTIC,
120 entity_registry_enabled_default=
False,
121 key=AZD_OUTDOOR_EXCHANGER_TEMP,
122 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
123 state_class=SensorStateClass.MEASUREMENT,
124 translation_key=
"outdoor_exchanger_temp",
127 entity_category=EntityCategory.DIAGNOSTIC,
128 entity_registry_enabled_default=
False,
129 key=AZD_OUTDOOR_TEMP,
130 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
131 state_class=SensorStateClass.MEASUREMENT,
132 translation_key=
"outdoor_temp",
135 device_class=SensorDeviceClass.TEMPERATURE,
137 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
138 state_class=SensorStateClass.MEASUREMENT,
142 WEBSERVER_SENSOR_TYPES: Final[tuple[SensorEntityDescription, ...]] = (
144 entity_category=EntityCategory.DIAGNOSTIC,
145 entity_registry_enabled_default=
False,
147 native_unit_of_measurement=PERCENTAGE,
148 state_class=SensorStateClass.MEASUREMENT,
149 translation_key=
"cpu_usage",
152 entity_category=EntityCategory.DIAGNOSTIC,
153 entity_registry_enabled_default=
False,
155 native_unit_of_measurement=UnitOfInformation.BYTES,
156 state_class=SensorStateClass.MEASUREMENT,
157 translation_key=
"free_memory",
160 device_class=SensorDeviceClass.SIGNAL_STRENGTH,
161 entity_category=EntityCategory.DIAGNOSTIC,
162 entity_registry_enabled_default=
False,
164 native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
165 state_class=SensorStateClass.MEASUREMENT,
169 ZONE_SENSOR_TYPES: Final[tuple[SensorEntityDescription, ...]] = (
171 device_class=SensorDeviceClass.AQI,
173 state_class=SensorStateClass.MEASUREMENT,
176 device_class=SensorDeviceClass.PM1,
178 native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
179 state_class=SensorStateClass.MEASUREMENT,
182 device_class=SensorDeviceClass.PM25,
184 native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
185 state_class=SensorStateClass.MEASUREMENT,
188 device_class=SensorDeviceClass.PM10,
190 native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
191 state_class=SensorStateClass.MEASUREMENT,
194 device_class=SensorDeviceClass.TEMPERATURE,
196 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
197 state_class=SensorStateClass.MEASUREMENT,
200 device_class=SensorDeviceClass.HUMIDITY,
202 native_unit_of_measurement=PERCENTAGE,
203 state_class=SensorStateClass.MEASUREMENT,
206 device_class=SensorDeviceClass.BATTERY,
207 key=AZD_THERMOSTAT_BATTERY,
208 native_unit_of_measurement=PERCENTAGE,
209 state_class=SensorStateClass.MEASUREMENT,
212 entity_category=EntityCategory.DIAGNOSTIC,
213 entity_registry_enabled_default=
False,
214 key=AZD_THERMOSTAT_COVERAGE,
215 native_unit_of_measurement=PERCENTAGE,
216 state_class=SensorStateClass.MEASUREMENT,
217 translation_key=
"thermostat_coverage",
224 entry: AirzoneCloudConfigEntry,
225 async_add_entities: AddEntitiesCallback,
227 """Add Airzone Cloud sensors from a config_entry."""
228 coordinator = entry.runtime_data
231 sensors: list[AirzoneSensor] = [
238 for aidoo_id, aidoo_data
in coordinator.data.get(AZD_AIDOOS, {}).items()
239 for description
in AIDOO_SENSOR_TYPES
240 if description.key
in aidoo_data
251 for ws_id, ws_data
in coordinator.data.get(AZD_WEBSERVERS, {}).items()
252 for description
in WEBSERVER_SENSOR_TYPES
253 if description.key
in ws_data
264 for zone_id, zone_data
in coordinator.data.get(AZD_ZONES, {}).items()
265 for description
in ZONE_SENSOR_TYPES
266 if description.key
in zone_data
273 """Define an Airzone Cloud sensor."""
277 """Return Airzone Cloud sensor availability."""
278 return super().available
and self.
native_valuenative_value
is not None
282 """Update attributes when the coordinator updates."""
288 """Update sensor attributes."""
293 """Define an Airzone Cloud Aidoo sensor."""
297 coordinator: AirzoneUpdateCoordinator,
298 description: SensorEntityDescription,
300 aidoo_data: dict[str, Any],
303 super().
__init__(coordinator, aidoo_id, aidoo_data)
312 """Define an Airzone Cloud WebServer sensor."""
316 coordinator: AirzoneUpdateCoordinator,
317 description: SensorEntityDescription,
319 ws_data: dict[str, Any],
322 super().
__init__(coordinator, ws_id, ws_data)
331 """Define an Airzone Cloud Zone sensor."""
335 coordinator: AirzoneUpdateCoordinator,
336 description: SensorEntityDescription,
338 zone_data: dict[str, Any],
341 super().
__init__(coordinator, zone_id, zone_data)
Any get_airzone_value(self, str key)
None __init__(self, AirzoneUpdateCoordinator coordinator, SensorEntityDescription description, str aidoo_id, dict[str, Any] aidoo_data)
None _handle_coordinator_update(self)
None _async_update_attrs(self)
None __init__(self, AirzoneUpdateCoordinator coordinator, SensorEntityDescription description, str ws_id, dict[str, Any] ws_data)
None __init__(self, AirzoneUpdateCoordinator coordinator, SensorEntityDescription description, str zone_id, dict[str, Any] zone_data)
StateType|date|datetime|Decimal native_value(self)
None async_setup_entry(HomeAssistant hass, AirzoneCloudConfigEntry entry, AddEntitiesCallback async_add_entities)