1 """Provide the device automations for Humidifier."""
3 from __future__
import annotations
5 import voluptuous
as vol
8 async_get_entity_registry_entry_or_raise,
24 config_validation
as cv,
25 entity_registry
as er,
31 from .
import DOMAIN, const
33 TOGGLE_CONDITION = toggle_entity.CONDITION_SCHEMA.extend(
34 {vol.Required(CONF_DOMAIN): DOMAIN}
37 MODE_CONDITION = DEVICE_CONDITION_BASE_SCHEMA.extend(
39 vol.Required(CONF_ENTITY_ID): cv.entity_id_or_uuid,
40 vol.Required(CONF_TYPE):
"is_mode",
41 vol.Required(ATTR_MODE): str,
45 CONDITION_SCHEMA = vol.Any(TOGGLE_CONDITION, MODE_CONDITION)
49 hass: HomeAssistant, device_id: str
50 ) -> list[dict[str, str]]:
51 """List device conditions for Humidifier devices."""
52 registry = er.async_get(hass)
53 conditions = await toggle_entity.async_get_conditions(hass, device_id, DOMAIN)
56 for entry
in er.async_entries_for_device(registry, device_id):
57 if entry.domain != DOMAIN:
62 if supported_features & const.HumidifierEntityFeature.MODES:
65 CONF_CONDITION:
"device",
66 CONF_DEVICE_ID: device_id,
68 CONF_ENTITY_ID: entry.id,
78 hass: HomeAssistant, config: ConfigType
79 ) -> condition.ConditionCheckerType:
80 """Create a function to test a device condition."""
81 if config[CONF_TYPE] ==
"is_mode":
84 return toggle_entity.async_condition_from_config(hass, config)
86 registry = er.async_get(hass)
87 entity_id = er.async_resolve_entity_id(registry, config[ATTR_ENTITY_ID])
89 def test_is_state(hass: HomeAssistant, variables: TemplateVarsType) -> bool:
90 """Test if an entity is a certain state."""
93 and (state := hass.states.get(entity_id))
is not None
94 and state.attributes.get(attribute) == config[attribute]
101 hass: HomeAssistant, config: ConfigType
102 ) -> dict[str, vol.Schema]:
103 """List condition capabilities."""
104 condition_type = config[CONF_TYPE]
108 if condition_type ==
"is_mode":
111 hass, config[CONF_ENTITY_ID]
114 get_capability(hass, entry.entity_id, const.ATTR_AVAILABLE_MODES)
or []
116 except HomeAssistantError:
119 fields[vol.Required(ATTR_MODE)] = vol.In(modes)
121 return {
"extra_fields": vol.Schema(fields)}
123 return await toggle_entity.async_get_condition_capabilities(hass, config)
er.RegistryEntry async_get_entity_registry_entry_or_raise(HomeAssistant hass, str entity_registry_id)
dict[str, vol.Schema] async_get_condition_capabilities(HomeAssistant hass, ConfigType config)
condition.ConditionCheckerType async_condition_from_config(HomeAssistant hass, ConfigType config)
list[dict[str, str]] async_get_conditions(HomeAssistant hass, str device_id)
int get_supported_features(HomeAssistant hass, str entity_id)
Any|None get_capability(HomeAssistant hass, str entity_id, str capability)