1 """Support for HomeKit Controller humidifier."""
3 from __future__
import annotations
7 from aiohomekit.model.characteristics
import CharacteristicsTypes
8 from aiohomekit.model.services
import Service, ServicesTypes
9 from propcache
import cached_property
16 HumidifierDeviceClass,
18 HumidifierEntityFeature,
26 from .
import KNOWN_DEVICES
27 from .connection
import HKDevice
28 from .entity
import HomeKitEntity
45 """Representation of a HomeKit Controller Humidifier."""
47 _attr_supported_features = HumidifierEntityFeature.MODES
48 _attr_available_modes = [MODE_NORMAL, MODE_AUTO]
49 _humidity_char = CharacteristicsTypes.RELATIVE_HUMIDITY_HUMIDIFIER_THRESHOLD
54 """Reconfigure entity."""
60 """Return true if device is on."""
61 return self.
serviceservice.value(CharacteristicsTypes.ACTIVE)
64 def mode(self) -> str | None:
65 """Return the current mode, e.g., home, auto, baby.
67 Requires HumidifierEntityFeature.MODES.
69 mode = self.
serviceservice.value(
70 CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE
72 return MODE_AUTO
if mode == 1
else MODE_NORMAL
76 """Return the current humidity."""
77 return self.
serviceservice.value(CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT)
81 """Return the humidity we try to reach."""
86 """Return the minimum humidity."""
91 """Return the maximum humidity."""
95 """Set new target humidity."""
99 """Turn the specified valve on."""
103 """Turn the specified valve off."""
108 if mode == MODE_AUTO:
111 CharacteristicsTypes.TARGET_HUMIDIFIER_DEHUMIDIFIER_STATE: 0,
112 CharacteristicsTypes.ACTIVE:
True,
118 CharacteristicsTypes.TARGET_HUMIDIFIER_DEHUMIDIFIER_STATE: self.
_on_mode_value_on_mode_value,
119 CharacteristicsTypes.ACTIVE:
True,
124 """Define the homekit characteristics the entity cares about."""
126 CharacteristicsTypes.ACTIVE,
127 CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE,
128 CharacteristicsTypes.TARGET_HUMIDIFIER_DEHUMIDIFIER_STATE,
129 CharacteristicsTypes.RELATIVE_HUMIDITY_HUMIDIFIER_THRESHOLD,
134 """Representation of a HomeKit Controller Humidifier."""
136 _attr_device_class = HumidifierDeviceClass.HUMIDIFIER
140 """Representation of a HomeKit Controller Humidifier."""
142 _attr_device_class = HumidifierDeviceClass.DEHUMIDIFIER
143 _humidity_char = CharacteristicsTypes.RELATIVE_HUMIDITY_DEHUMIDIFIER_THRESHOLD
146 def __init__(self, accessory: HKDevice, devinfo: ConfigType) ->
None:
147 """Initialise the dehumidifier."""
148 super().
__init__(accessory, devinfo)
152 """Define the homekit characteristics the entity cares about."""
155 CharacteristicsTypes.RELATIVE_HUMIDITY_DEHUMIDIFIER_THRESHOLD,
160 """Return the old ID of this device."""
161 serial = self.
accessory_infoaccessory_info.value(CharacteristicsTypes.SERIAL_NUMBER)
162 return f
"homekit-{serial}-{self._iid}-{self.device_class}"
167 config_entry: ConfigEntry,
168 async_add_entities: AddEntitiesCallback,
170 """Set up Homekit humidifer."""
171 hkid: str = config_entry.data[
"AccessoryPairingID"]
172 conn: HKDevice = hass.data[KNOWN_DEVICES][hkid]
175 def async_add_service(service: Service) -> bool:
176 if service.type != ServicesTypes.HUMIDIFIER_DEHUMIDIFIER:
179 info = {
"aid": service.accessory.aid,
"iid": service.iid}
181 entities: list[HomeKitHumidifier | HomeKitDehumidifier] = []
183 if service.has(CharacteristicsTypes.RELATIVE_HUMIDITY_HUMIDIFIER_THRESHOLD):
186 if service.has(CharacteristicsTypes.RELATIVE_HUMIDITY_DEHUMIDIFIER_THRESHOLD):
189 for entity
in entities:
190 conn.async_migrate_unique_id(
191 entity.old_unique_id, entity.unique_id, Platform.HUMIDIFIER
198 conn.add_listener(async_add_service)
None async_put_characteristics(self, dict[str, Any] characteristics)
None _async_clear_property_cache(self, tuple[str,...] properties)
None async_turn_on(self, **Any kwargs)
int|None current_humidity(self)
int|None target_humidity(self)
None async_set_mode(self, str mode)
None async_set_humidity(self, int humidity)
list[str] get_characteristic_types(self)
None async_turn_off(self, **Any kwargs)
None _async_reconfigure(self)
list[str] get_characteristic_types(self)
None __init__(self, HKDevice accessory, ConfigType devinfo)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)