Add device trigger for humidifier current_humidity (#94926)

This commit is contained in:
Jan Bouwhuis 2023-06-20 22:57:44 +02:00 committed by GitHub
parent d2d6389742
commit a4399a4cb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 5 deletions

View File

@ -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.trigger import TriggerActionType, TriggerInfo
from homeassistant.helpers.typing import ConfigType from homeassistant.helpers.typing import ConfigType
from . import DOMAIN from . import ATTR_CURRENT_HUMIDITY, DOMAIN
# mypy: disallow-any-generics # 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( HUMIDIFIER_TRIGGER_SCHEMA = vol.All(
DEVICE_TRIGGER_BASE_SCHEMA.extend( DEVICE_TRIGGER_BASE_SCHEMA.extend(
{ {
@ -45,6 +58,7 @@ HUMIDIFIER_TRIGGER_SCHEMA = vol.All(
TRIGGER_SCHEMA = vol.All( TRIGGER_SCHEMA = vol.All(
vol.Any( vol.Any(
CURRENT_TRIGGER_SCHEMA,
HUMIDIFIER_TRIGGER_SCHEMA, HUMIDIFIER_TRIGGER_SCHEMA,
toggle_entity.TRIGGER_SCHEMA, toggle_entity.TRIGGER_SCHEMA,
), ),
@ -64,15 +78,31 @@ async def async_get_triggers(
if entry.domain != DOMAIN: if entry.domain != DOMAIN:
continue continue
triggers.append( state = hass.states.get(entry.entity_id)
{
# Add triggers for each entity that belongs to this integration
base_trigger = {
CONF_PLATFORM: "device", CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id, CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN, CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id, CONF_ENTITY_ID: entry.entity_id,
}
triggers.append(
{
**base_trigger,
CONF_TYPE: "target_humidity_changed", 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 return triggers

View File

@ -65,6 +65,7 @@ async def test_get_triggers(
STATE_ON, STATE_ON,
{ {
const.ATTR_HUMIDITY: 23, const.ATTR_HUMIDITY: 23,
const.ATTR_CURRENT_HUMIDITY: 48,
ATTR_MODE: "home", ATTR_MODE: "home",
const.ATTR_AVAILABLE_MODES: ["home", "away"], const.ATTR_AVAILABLE_MODES: ["home", "away"],
ATTR_SUPPORTED_FEATURES: 1, ATTR_SUPPORTED_FEATURES: 1,
@ -80,6 +81,7 @@ async def test_get_triggers(
"metadata": {"secondary": False}, "metadata": {"secondary": False},
} }
for trigger in [ for trigger in [
"current_humidity_changed",
"target_humidity_changed", "target_humidity_changed",
"turned_off", "turned_off",
"turned_on", "turned_on",