diff --git a/homeassistant/components/humidifier/device_trigger.py b/homeassistant/components/humidifier/device_trigger.py index 5fbb248a8bc..79074a06e18 100644 --- a/homeassistant/components/humidifier/device_trigger.py +++ b/homeassistant/components/humidifier/device_trigger.py @@ -26,10 +26,23 @@ from homeassistant.helpers import config_validation as cv, entity_registry as er from homeassistant.helpers.trigger import TriggerActionType, TriggerInfo from homeassistant.helpers.typing import ConfigType -from . import DOMAIN +from . import ATTR_CURRENT_HUMIDITY, DOMAIN # mypy: disallow-any-generics +CURRENT_TRIGGER_SCHEMA = vol.All( + DEVICE_TRIGGER_BASE_SCHEMA.extend( + { + vol.Required(CONF_ENTITY_ID): cv.entity_id, + vol.Required(CONF_TYPE): "current_humidity_changed", + vol.Optional(CONF_BELOW): vol.Any(vol.Coerce(float)), + vol.Optional(CONF_ABOVE): vol.Any(vol.Coerce(float)), + vol.Optional(CONF_FOR): cv.positive_time_period_dict, + } + ), + cv.has_at_least_one_key(CONF_BELOW, CONF_ABOVE), +) + HUMIDIFIER_TRIGGER_SCHEMA = vol.All( DEVICE_TRIGGER_BASE_SCHEMA.extend( { @@ -45,6 +58,7 @@ HUMIDIFIER_TRIGGER_SCHEMA = vol.All( TRIGGER_SCHEMA = vol.All( vol.Any( + CURRENT_TRIGGER_SCHEMA, HUMIDIFIER_TRIGGER_SCHEMA, toggle_entity.TRIGGER_SCHEMA, ), @@ -64,15 +78,31 @@ async def async_get_triggers( if entry.domain != DOMAIN: continue + state = hass.states.get(entry.entity_id) + + # Add triggers for each entity that belongs to this integration + base_trigger = { + CONF_PLATFORM: "device", + CONF_DEVICE_ID: device_id, + CONF_DOMAIN: DOMAIN, + CONF_ENTITY_ID: entry.entity_id, + } + triggers.append( { - CONF_PLATFORM: "device", - CONF_DEVICE_ID: device_id, - CONF_DOMAIN: DOMAIN, - CONF_ENTITY_ID: entry.entity_id, + **base_trigger, CONF_TYPE: "target_humidity_changed", } ) + + if state and ATTR_CURRENT_HUMIDITY in state.attributes: + triggers.append( + { + **base_trigger, + CONF_TYPE: "current_humidity_changed", + } + ) + return triggers diff --git a/tests/components/humidifier/test_device_trigger.py b/tests/components/humidifier/test_device_trigger.py index 350f3d64a11..db557509463 100644 --- a/tests/components/humidifier/test_device_trigger.py +++ b/tests/components/humidifier/test_device_trigger.py @@ -65,6 +65,7 @@ async def test_get_triggers( STATE_ON, { const.ATTR_HUMIDITY: 23, + const.ATTR_CURRENT_HUMIDITY: 48, ATTR_MODE: "home", const.ATTR_AVAILABLE_MODES: ["home", "away"], ATTR_SUPPORTED_FEATURES: 1, @@ -80,6 +81,7 @@ async def test_get_triggers( "metadata": {"secondary": False}, } for trigger in [ + "current_humidity_changed", "target_humidity_changed", "turned_off", "turned_on",