Fix non-light domain entities on trigger

This commit is contained in:
abmantis
2025-08-05 18:07:42 +01:00
parent 43c228393c
commit 80cd461146
2 changed files with 24 additions and 5 deletions

View File

@@ -11,7 +11,13 @@ from homeassistant.const import (
STATE_OFF,
STATE_ON,
)
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
from homeassistant.core import (
CALLBACK_TYPE,
HassJob,
HomeAssistant,
callback,
split_entity_id,
)
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.event import process_state_match
from homeassistant.helpers.target import (
@@ -28,7 +34,7 @@ BEHAVIOR_FIRST = "first"
BEHAVIOR_LAST = "last"
BEHAVIOR_ANY = "any"
STATE_PLATFORM_TYPE = f"state"
STATE_PLATFORM_TYPE = "state"
STATE_TRIGGER_SCHEMA = vol.All(
cv.TRIGGER_BASE_SCHEMA.extend(
{
@@ -132,8 +138,16 @@ class StateTrigger(Trigger):
event.context,
)
def entity_filter(entities: set[str]) -> set[str]:
"""Filter entities of this domain."""
return {
entity_id
for entity_id in entities
if split_entity_id(entity_id)[0] == DOMAIN
}
return async_track_target_selector_state_change_event(
self.hass, self.config, state_change_listener
self.hass, self.config, state_change_listener, entity_filter
)

View File

@@ -268,11 +268,13 @@ class TargetStateChangeTracker:
hass: HomeAssistant,
selector_data: TargetSelectorData,
action: Callable[[TargetStateChangedData], Any],
entity_filter: Callable[[set[str]], set[str]],
) -> None:
"""Initialize the state change tracker."""
self._hass = hass
self._selector_data = selector_data
self._action = action
self._entity_filter = entity_filter
self._state_change_unsub: CALLBACK_TYPE | None = None
self._registry_unsubs: list[CALLBACK_TYPE] = []
@@ -289,7 +291,9 @@ class TargetStateChangeTracker:
self._hass, self._selector_data, expand_group=False
)
tracked_entities = selected.referenced.union(selected.indirectly_referenced)
tracked_entities = self._entity_filter(
selected.referenced.union(selected.indirectly_referenced)
)
@callback
def state_change_listener(event: Event[EventStateChangedData]) -> None:
@@ -348,6 +352,7 @@ def async_track_target_selector_state_change_event(
hass: HomeAssistant,
target_selector_config: ConfigType,
action: Callable[[TargetStateChangedData], Any],
entity_filter: Callable[[set[str]], set[str]] = lambda x: x,
) -> CALLBACK_TYPE:
"""Track state changes for entities referenced directly or indirectly in a target selector."""
selector_data = TargetSelectorData(target_selector_config)
@@ -355,5 +360,5 @@ def async_track_target_selector_state_change_event(
raise HomeAssistantError(
f"Target selector {target_selector_config} does not have any selectors defined"
)
tracker = TargetStateChangeTracker(hass, selector_data, action)
tracker = TargetStateChangeTracker(hass, selector_data, action, entity_filter)
return tracker.async_setup()