mirror of
https://github.com/home-assistant/core.git
synced 2025-04-28 03:07:50 +00:00
Simplify device trigger code (#48507)
This commit is contained in:
parent
9526701e57
commit
b3b0904b94
@ -32,14 +32,8 @@ from homeassistant.helpers.typing import ConfigType
|
||||
|
||||
from . import DOMAIN
|
||||
|
||||
TRIGGER_TYPES = {
|
||||
"triggered",
|
||||
"disarmed",
|
||||
"arming",
|
||||
"armed_home",
|
||||
"armed_away",
|
||||
"armed_night",
|
||||
}
|
||||
BASIC_TRIGGER_TYPES = {"triggered", "disarmed", "arming"}
|
||||
TRIGGER_TYPES = BASIC_TRIGGER_TYPES | {"armed_home", "armed_away", "armed_night"}
|
||||
|
||||
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]
|
||||
|
||||
# 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 += [
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
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",
|
||||
},
|
||||
**base_trigger,
|
||||
CONF_TYPE: trigger,
|
||||
}
|
||||
for trigger in BASIC_TRIGGER_TYPES
|
||||
]
|
||||
if supported_features & SUPPORT_ALARM_ARM_HOME:
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
**base_trigger,
|
||||
CONF_TYPE: "armed_home",
|
||||
}
|
||||
)
|
||||
if supported_features & SUPPORT_ALARM_ARM_AWAY:
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
**base_trigger,
|
||||
CONF_TYPE: "armed_away",
|
||||
}
|
||||
)
|
||||
if supported_features & SUPPORT_ALARM_ARM_NIGHT:
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
**base_trigger,
|
||||
CONF_TYPE: "armed_night",
|
||||
}
|
||||
)
|
||||
|
@ -71,12 +71,16 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
|
||||
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: "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:
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
**base_trigger,
|
||||
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:
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
**base_trigger,
|
||||
CONF_TYPE: "current_humidity_changed",
|
||||
}
|
||||
)
|
||||
|
@ -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)
|
||||
|
||||
# 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:
|
||||
triggers.append(
|
||||
triggers += [
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
CONF_TYPE: "opened",
|
||||
**base_trigger,
|
||||
CONF_TYPE: trigger,
|
||||
}
|
||||
)
|
||||
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",
|
||||
}
|
||||
)
|
||||
for trigger in STATE_TRIGGER_TYPES
|
||||
]
|
||||
if supported_features & SUPPORT_SET_POSITION:
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
**base_trigger,
|
||||
CONF_TYPE: "position",
|
||||
}
|
||||
)
|
||||
if supported_features & SUPPORT_SET_TILT_POSITION:
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
**base_trigger,
|
||||
CONF_TYPE: "tilt_position",
|
||||
}
|
||||
)
|
||||
|
@ -151,15 +151,12 @@ async def async_attach_trigger(
|
||||
"""Listen for state changes based on configuration."""
|
||||
trigger_type = config[CONF_TYPE]
|
||||
if trigger_type == CONF_TURNED_ON:
|
||||
from_state = "off"
|
||||
to_state = "on"
|
||||
else:
|
||||
from_state = "on"
|
||||
to_state = "off"
|
||||
state_config = {
|
||||
CONF_PLATFORM: "state",
|
||||
state_trigger.CONF_ENTITY_ID: config[CONF_ENTITY_ID],
|
||||
state_trigger.CONF_FROM: from_state,
|
||||
state_trigger.CONF_TO: to_state,
|
||||
}
|
||||
if CONF_FOR in config:
|
||||
|
@ -42,24 +42,16 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
|
||||
continue
|
||||
|
||||
# Add triggers for each entity that belongs to this integration
|
||||
triggers.append(
|
||||
triggers += [
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
CONF_TYPE: "locked",
|
||||
CONF_TYPE: trigger,
|
||||
}
|
||||
)
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
CONF_TYPE: "unlocked",
|
||||
}
|
||||
)
|
||||
for trigger in TRIGGER_TYPES
|
||||
]
|
||||
|
||||
return triggers
|
||||
|
||||
|
@ -39,24 +39,16 @@ async def async_get_triggers(hass: HomeAssistant, device_id: str) -> list[dict]:
|
||||
if entry.domain != DOMAIN:
|
||||
continue
|
||||
|
||||
triggers.append(
|
||||
triggers += [
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
CONF_TYPE: "cleaning",
|
||||
CONF_TYPE: trigger,
|
||||
}
|
||||
)
|
||||
triggers.append(
|
||||
{
|
||||
CONF_PLATFORM: "device",
|
||||
CONF_DEVICE_ID: device_id,
|
||||
CONF_DOMAIN: DOMAIN,
|
||||
CONF_ENTITY_ID: entry.entity_id,
|
||||
CONF_TYPE: "docked",
|
||||
}
|
||||
)
|
||||
for trigger in TRIGGER_TYPES
|
||||
]
|
||||
|
||||
return triggers
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user