Simplify device trigger code (#48507)

This commit is contained in:
Erik Montnemery 2021-03-30 13:54:27 +02:00 committed by GitHub
parent 9526701e57
commit b3b0904b94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 48 additions and 121 deletions

View File

@ -32,14 +32,8 @@ from homeassistant.helpers.typing import ConfigType
from . import DOMAIN from . import DOMAIN
TRIGGER_TYPES = { BASIC_TRIGGER_TYPES = {"triggered", "disarmed", "arming"}
"triggered", TRIGGER_TYPES = BASIC_TRIGGER_TYPES | {"armed_home", "armed_away", "armed_night"}
"disarmed",
"arming",
"armed_home",
"armed_away",
"armed_night",
}
TRIGGER_SCHEMA = TRIGGER_BASE_SCHEMA.extend( TRIGGER_SCHEMA = TRIGGER_BASE_SCHEMA.extend(
{ {
@ -69,56 +63,38 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
supported_features = entity_state.attributes[ATTR_SUPPORTED_FEATURES] supported_features = entity_state.attributes[ATTR_SUPPORTED_FEATURES]
# Add triggers for each entity that belongs to this integration # 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 += [ triggers += [
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id, CONF_TYPE: trigger,
CONF_DOMAIN: DOMAIN, }
CONF_ENTITY_ID: entry.entity_id, for trigger in BASIC_TRIGGER_TYPES
CONF_TYPE: "disarmed",
},
{
CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "triggered",
},
{
CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "arming",
},
] ]
if supported_features & SUPPORT_ALARM_ARM_HOME: if supported_features & SUPPORT_ALARM_ARM_HOME:
triggers.append( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "armed_home", CONF_TYPE: "armed_home",
} }
) )
if supported_features & SUPPORT_ALARM_ARM_AWAY: if supported_features & SUPPORT_ALARM_ARM_AWAY:
triggers.append( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "armed_away", CONF_TYPE: "armed_away",
} }
) )
if supported_features & SUPPORT_ALARM_ARM_NIGHT: if supported_features & SUPPORT_ALARM_ARM_NIGHT:
triggers.append( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "armed_night", CONF_TYPE: "armed_night",
} }
) )

View File

@ -71,12 +71,16 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
state = hass.states.get(entry.entity_id) state = hass.states.get(entry.entity_id)
# Add triggers for each entity that belongs to this integration # 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( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "hvac_mode_changed", CONF_TYPE: "hvac_mode_changed",
} }
) )
@ -84,10 +88,7 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
if state and const.ATTR_CURRENT_TEMPERATURE in state.attributes: if state and const.ATTR_CURRENT_TEMPERATURE in state.attributes:
triggers.append( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "current_temperature_changed", CONF_TYPE: "current_temperature_changed",
} }
) )
@ -95,10 +96,7 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
if state and const.ATTR_CURRENT_HUMIDITY in state.attributes: if state and const.ATTR_CURRENT_HUMIDITY in state.attributes:
triggers.append( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "current_humidity_changed", CONF_TYPE: "current_humidity_changed",
} }
) )

View File

@ -85,60 +85,32 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
supports_open_close = supported_features & (SUPPORT_OPEN | SUPPORT_CLOSE) supports_open_close = supported_features & (SUPPORT_OPEN | SUPPORT_CLOSE)
# Add triggers for each entity that belongs to this integration # 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,
}
if supports_open_close: if supports_open_close:
triggers.append( triggers += [
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id, CONF_TYPE: trigger,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "opened",
} }
) for trigger in STATE_TRIGGER_TYPES
triggers.append( ]
{
CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "closed",
}
)
triggers.append(
{
CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "opening",
}
)
triggers.append(
{
CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "closing",
}
)
if supported_features & SUPPORT_SET_POSITION: if supported_features & SUPPORT_SET_POSITION:
triggers.append( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "position", CONF_TYPE: "position",
} }
) )
if supported_features & SUPPORT_SET_TILT_POSITION: if supported_features & SUPPORT_SET_TILT_POSITION:
triggers.append( triggers.append(
{ {
CONF_PLATFORM: "device", **base_trigger,
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "tilt_position", CONF_TYPE: "tilt_position",
} }
) )

View File

@ -151,15 +151,12 @@ async def async_attach_trigger(
"""Listen for state changes based on configuration.""" """Listen for state changes based on configuration."""
trigger_type = config[CONF_TYPE] trigger_type = config[CONF_TYPE]
if trigger_type == CONF_TURNED_ON: if trigger_type == CONF_TURNED_ON:
from_state = "off"
to_state = "on" to_state = "on"
else: else:
from_state = "on"
to_state = "off" to_state = "off"
state_config = { state_config = {
CONF_PLATFORM: "state", CONF_PLATFORM: "state",
state_trigger.CONF_ENTITY_ID: config[CONF_ENTITY_ID], state_trigger.CONF_ENTITY_ID: config[CONF_ENTITY_ID],
state_trigger.CONF_FROM: from_state,
state_trigger.CONF_TO: to_state, state_trigger.CONF_TO: to_state,
} }
if CONF_FOR in config: if CONF_FOR in config:

View File

@ -42,24 +42,16 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
continue continue
# Add triggers for each entity that belongs to this integration # Add triggers for each entity that belongs to this integration
triggers.append( triggers += [
{ {
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,
CONF_TYPE: "locked", CONF_TYPE: trigger,
} }
) for trigger in TRIGGER_TYPES
triggers.append( ]
{
CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "unlocked",
}
)
return triggers return triggers

View File

@ -39,24 +39,16 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
if entry.domain != DOMAIN: if entry.domain != DOMAIN:
continue continue
triggers.append( triggers += [
{ {
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,
CONF_TYPE: "cleaning", CONF_TYPE: trigger,
} }
) for trigger in TRIGGER_TYPES
triggers.append( ]
{
CONF_PLATFORM: "device",
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_ENTITY_ID: entry.entity_id,
CONF_TYPE: "docked",
}
)
return triggers return triggers