1 """Support for the Airzone Cloud select."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import Any, Final
9 from aioairzone_cloud.common
import AirQualityMode, OperationMode
10 from aioairzone_cloud.const
import (
26 from .
import AirzoneCloudConfigEntry
27 from .coordinator
import AirzoneUpdateCoordinator
28 from .entity
import AirzoneEntity, AirzoneZoneEntity
31 @dataclass(frozen=True, kw_only=True)
33 """Class to describe an Airzone select entity."""
36 options_dict: dict[str, Any]
37 options_fn: Callable[[dict[str, Any], dict[str, Any]], list[str]] = (
38 lambda zone_data, value:
list(value)
42 AIR_QUALITY_MAP: Final[dict[str, str]] = {
43 "off": AirQualityMode.OFF,
44 "on": AirQualityMode.ON,
45 "auto": AirQualityMode.AUTO,
48 MODE_MAP: Final[dict[str, int]] = {
49 "cool": OperationMode.COOLING,
50 "dry": OperationMode.DRY,
51 "fan": OperationMode.VENTILATION,
52 "heat": OperationMode.HEATING,
53 "heat_cool": OperationMode.AUTO,
54 "stop": OperationMode.STOP,
59 zone_data: dict[str, Any],
60 options: dict[str, int],
62 """Filter available modes."""
63 modes = zone_data.get(AZD_MODES, [])
64 return [k
for k, v
in options.items()
if v
in modes]
67 MAIN_ZONE_SELECT_TYPES: Final[tuple[AirzoneSelectDescription, ...]] = (
71 options_dict=MODE_MAP,
72 options_fn=main_zone_options,
73 translation_key=
"modes",
78 ZONE_SELECT_TYPES: Final[tuple[AirzoneSelectDescription, ...]] = (
80 api_param=API_AQ_MODE_CONF,
81 entity_category=EntityCategory.CONFIG,
83 options=
list(AIR_QUALITY_MAP),
84 options_dict=AIR_QUALITY_MAP,
85 translation_key=
"air_quality",
92 entry: AirzoneCloudConfigEntry,
93 async_add_entities: AddEntitiesCallback,
95 """Add Airzone Cloud select from a config_entry."""
96 coordinator = entry.runtime_data
99 entities: list[AirzoneZoneSelect] = [
106 for description
in MAIN_ZONE_SELECT_TYPES
107 for zone_id, zone_data
in coordinator.data.get(AZD_ZONES, {}).items()
108 if description.key
in zone_data
and zone_data.get(AZD_MASTER)
118 for description
in ZONE_SELECT_TYPES
119 for zone_id, zone_data
in coordinator.data.get(AZD_ZONES, {}).items()
120 if description.key
in zone_data
127 """Define an Airzone Cloud select."""
129 entity_description: AirzoneSelectDescription
130 values_dict: dict[str, str]
134 """Update attributes when the coordinator updates."""
139 """Get current selected option."""
141 return self.values_dict.
get(value)
145 """Update select attributes."""
150 """Define an Airzone Cloud Zone select."""
154 coordinator: AirzoneUpdateCoordinator,
155 description: AirzoneSelectDescription,
157 zone_data: dict[str, Any],
160 super().
__init__(coordinator, zone_id, zone_data)
166 zone_data, description.options_dict
169 self.
values_dictvalues_dict = {v: k
for k, v
in description.options_dict.items()}
174 """Change the selected option."""
177 params: dict[str, Any] = {}
None _async_update_params(self, dict[str, Any] params)
Any get_airzone_value(self, str key)
None _async_update_params(self, dict[str, Any] params)
None _handle_coordinator_update(self)
None _async_update_attrs(self)
str|None _get_current_option(self)
None __init__(self, AirzoneUpdateCoordinator coordinator, AirzoneSelectDescription description, str zone_id, dict[str, Any] zone_data)
None async_select_option(self, str option)
None async_setup_entry(HomeAssistant hass, AirzoneCloudConfigEntry entry, AddEntitiesCallback async_add_entities)
list[str] main_zone_options(dict[str, Any] zone_data, dict[str, int] options)
web.Response get(self, web.Request request, str config_key)