1 """The Aprilaire humidifier component."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
7 from typing
import Any, cast
9 from pyaprilaire.const
import Attribute
13 HumidifierDeviceClass,
15 HumidifierEntityDescription,
21 from .coordinator
import AprilaireConfigEntry, AprilaireCoordinator
22 from .entity
import BaseAprilaireEntity
24 HUMIDIFIER_ACTION_MAP: dict[StateType, HumidifierAction] = {
25 0: HumidifierAction.IDLE,
26 1: HumidifierAction.IDLE,
27 2: HumidifierAction.HUMIDIFYING,
28 3: HumidifierAction.OFF,
31 DEHUMIDIFIER_ACTION_MAP: dict[StateType, HumidifierAction] = {
32 0: HumidifierAction.IDLE,
33 1: HumidifierAction.IDLE,
34 2: HumidifierAction.DRYING,
35 3: HumidifierAction.DRYING,
36 4: HumidifierAction.OFF,
42 config_entry: AprilaireConfigEntry,
43 async_add_entities: AddEntitiesCallback,
45 """Set up Aprilaire humidifier devices."""
47 coordinator = config_entry.runtime_data
49 assert config_entry.unique_id
is not None
51 descriptions: list[AprilaireHumidifierDescription] = []
53 if coordinator.data.get(Attribute.HUMIDIFICATION_AVAILABLE)
in (0, 1, 2):
57 translation_key=
"humidifier",
58 device_class=HumidifierDeviceClass.HUMIDIFIER,
59 action_key=Attribute.HUMIDIFICATION_STATUS,
60 action_map=HUMIDIFIER_ACTION_MAP,
61 current_humidity_key=Attribute.INDOOR_HUMIDITY_CONTROLLING_SENSOR_VALUE,
62 target_humidity_key=Attribute.HUMIDIFICATION_SETPOINT,
66 set_humidity_fn=coordinator.client.set_humidification_setpoint,
70 if coordinator.data.get(Attribute.DEHUMIDIFICATION_AVAILABLE)
in (0, 1):
74 translation_key=
"dehumidifier",
75 device_class=HumidifierDeviceClass.DEHUMIDIFIER,
76 action_key=Attribute.DEHUMIDIFICATION_STATUS,
77 action_map=DEHUMIDIFIER_ACTION_MAP,
78 current_humidity_key=Attribute.INDOOR_HUMIDITY_CONTROLLING_SENSOR_VALUE,
79 target_humidity_key=Attribute.DEHUMIDIFICATION_SETPOINT,
83 set_humidity_fn=coordinator.client.set_dehumidification_setpoint,
89 for description
in descriptions
93 @dataclass(frozen=True, kw_only=True)
95 """Class describing Aprilaire humidifier entities."""
98 action_map: dict[StateType, HumidifierAction]
99 current_humidity_key: str
100 target_humidity_key: str
103 default_humidity: int
104 set_humidity_fn: Callable[[int], Awaitable]
108 """Base humidity entity for Aprilaire."""
110 entity_description: AprilaireHumidifierDescription
111 last_target_humidity: int |
None =
None
115 coordinator: AprilaireCoordinator,
116 description: AprilaireHumidifierDescription,
119 """Initialize a select for an Aprilaire device."""
123 super().
__init__(coordinator, unique_id)
126 def action(self) -> HumidifierAction | None:
127 """Get the current action."""
129 action = self.coordinator.data.get(self.
entity_descriptionentity_description.action_key)
131 return self.
entity_descriptionentity_description.action_map.get(action, HumidifierAction.OFF)
135 """Get whether the humidifier is on."""
141 """Get the current humidity."""
145 self.coordinator.data.get(self.
entity_descriptionentity_description.current_humidity_key),
150 """Get the target humidity."""
152 target_humidity = cast(
154 self.coordinator.data.get(self.
entity_descriptionentity_description.target_humidity_key),
157 if target_humidity
is not None and target_humidity > 0:
160 return target_humidity
164 """Return the minimum humidity."""
170 """Return the maximum humidity."""
175 """Set the humidity."""
180 """Turn the device on."""
190 """Turn the device off."""
float|None target_humidity(self)
None async_turn_on(self, **Any kwargs)
None async_set_humidity(self, int humidity)
None async_turn_off(self, **Any kwargs)
float|None current_humidity(self)
HumidifierAction|None action(self)
None __init__(self, AprilaireCoordinator coordinator, AprilaireHumidifierDescription description, str unique_id)
float|None target_humidity(self)
None async_setup_entry(HomeAssistant hass, AprilaireConfigEntry config_entry, AddEntitiesCallback async_add_entities)