mirror of
https://github.com/home-assistant/core.git
synced 2025-05-03 21:49:17 +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
|
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",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -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",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -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",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user