mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 07:07:28 +00:00
Correct referenced entities and devices for event triggers (#76818)
This commit is contained in:
parent
f400a404cd
commit
1c1b23ef69
@ -36,6 +36,7 @@ from homeassistant.core import (
|
|||||||
HomeAssistant,
|
HomeAssistant,
|
||||||
callback,
|
callback,
|
||||||
split_entity_id,
|
split_entity_id,
|
||||||
|
valid_entity_id,
|
||||||
)
|
)
|
||||||
from homeassistant.exceptions import (
|
from homeassistant.exceptions import (
|
||||||
ConditionError,
|
ConditionError,
|
||||||
@ -355,7 +356,7 @@ class AutomationEntity(ToggleEntity, RestoreEntity):
|
|||||||
referenced |= condition.async_extract_devices(conf)
|
referenced |= condition.async_extract_devices(conf)
|
||||||
|
|
||||||
for conf in self._trigger_config:
|
for conf in self._trigger_config:
|
||||||
referenced |= set(_trigger_extract_device(conf))
|
referenced |= set(_trigger_extract_devices(conf))
|
||||||
|
|
||||||
self._referenced_devices = referenced
|
self._referenced_devices = referenced
|
||||||
return referenced
|
return referenced
|
||||||
@ -762,7 +763,7 @@ async def _async_process_if(hass, name, config, p_config):
|
|||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _trigger_extract_device(trigger_conf: dict) -> list[str]:
|
def _trigger_extract_devices(trigger_conf: dict) -> list[str]:
|
||||||
"""Extract devices from a trigger config."""
|
"""Extract devices from a trigger config."""
|
||||||
if trigger_conf[CONF_PLATFORM] == "device":
|
if trigger_conf[CONF_PLATFORM] == "device":
|
||||||
return [trigger_conf[CONF_DEVICE_ID]]
|
return [trigger_conf[CONF_DEVICE_ID]]
|
||||||
@ -771,6 +772,7 @@ def _trigger_extract_device(trigger_conf: dict) -> list[str]:
|
|||||||
trigger_conf[CONF_PLATFORM] == "event"
|
trigger_conf[CONF_PLATFORM] == "event"
|
||||||
and CONF_EVENT_DATA in trigger_conf
|
and CONF_EVENT_DATA in trigger_conf
|
||||||
and CONF_DEVICE_ID in trigger_conf[CONF_EVENT_DATA]
|
and CONF_DEVICE_ID in trigger_conf[CONF_EVENT_DATA]
|
||||||
|
and isinstance(trigger_conf[CONF_EVENT_DATA][CONF_DEVICE_ID], str)
|
||||||
):
|
):
|
||||||
return [trigger_conf[CONF_EVENT_DATA][CONF_DEVICE_ID]]
|
return [trigger_conf[CONF_EVENT_DATA][CONF_DEVICE_ID]]
|
||||||
|
|
||||||
@ -802,6 +804,8 @@ def _trigger_extract_entities(trigger_conf: dict) -> list[str]:
|
|||||||
trigger_conf[CONF_PLATFORM] == "event"
|
trigger_conf[CONF_PLATFORM] == "event"
|
||||||
and CONF_EVENT_DATA in trigger_conf
|
and CONF_EVENT_DATA in trigger_conf
|
||||||
and CONF_ENTITY_ID in trigger_conf[CONF_EVENT_DATA]
|
and CONF_ENTITY_ID in trigger_conf[CONF_EVENT_DATA]
|
||||||
|
and isinstance(trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID], str)
|
||||||
|
and valid_entity_id(trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID])
|
||||||
):
|
):
|
||||||
return [trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID]]
|
return [trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID]]
|
||||||
|
|
||||||
|
@ -1103,6 +1103,24 @@ async def test_extraction_functions(hass):
|
|||||||
"event_type": "state_changed",
|
"event_type": "state_changed",
|
||||||
"event_data": {"entity_id": "sensor.trigger_event"},
|
"event_data": {"entity_id": "sensor.trigger_event"},
|
||||||
},
|
},
|
||||||
|
# entity_id is a list of strings (not supported)
|
||||||
|
{
|
||||||
|
"platform": "event",
|
||||||
|
"event_type": "state_changed",
|
||||||
|
"event_data": {"entity_id": ["sensor.trigger_event2"]},
|
||||||
|
},
|
||||||
|
# entity_id is not a valid entity ID
|
||||||
|
{
|
||||||
|
"platform": "event",
|
||||||
|
"event_type": "state_changed",
|
||||||
|
"event_data": {"entity_id": "abc"},
|
||||||
|
},
|
||||||
|
# entity_id is not a string
|
||||||
|
{
|
||||||
|
"platform": "event",
|
||||||
|
"event_type": "state_changed",
|
||||||
|
"event_data": {"entity_id": 123},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
"condition": {
|
"condition": {
|
||||||
"condition": "state",
|
"condition": "state",
|
||||||
@ -1151,6 +1169,18 @@ async def test_extraction_functions(hass):
|
|||||||
"event_type": "esphome.button_pressed",
|
"event_type": "esphome.button_pressed",
|
||||||
"event_data": {"device_id": "device-trigger-event"},
|
"event_data": {"device_id": "device-trigger-event"},
|
||||||
},
|
},
|
||||||
|
# device_id is a list of strings (not supported)
|
||||||
|
{
|
||||||
|
"platform": "event",
|
||||||
|
"event_type": "esphome.button_pressed",
|
||||||
|
"event_data": {"device_id": ["device-trigger-event"]},
|
||||||
|
},
|
||||||
|
# device_id is not a string
|
||||||
|
{
|
||||||
|
"platform": "event",
|
||||||
|
"event_type": "esphome.button_pressed",
|
||||||
|
"event_data": {"device_id": 123},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
"condition": {
|
"condition": {
|
||||||
"condition": "device",
|
"condition": "device",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user