diff --git a/homeassistant/components/alarm_control_panel/trigger.py b/homeassistant/components/alarm_control_panel/trigger.py index 6efd2a492c9..d52f2e3cacd 100644 --- a/homeassistant/components/alarm_control_panel/trigger.py +++ b/homeassistant/components/alarm_control_panel/trigger.py @@ -4,10 +4,10 @@ from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity import get_supported_features from homeassistant.helpers.trigger import ( - EntityStateTriggerBase, + EntityTargetStateTriggerBase, Trigger, - make_conditional_entity_state_trigger, - make_entity_state_trigger, + make_entity_target_state_trigger, + make_entity_transition_trigger, ) from .const import DOMAIN, AlarmControlPanelEntityFeature, AlarmControlPanelState @@ -21,7 +21,7 @@ def supports_feature(hass: HomeAssistant, entity_id: str, features: int) -> bool return False -class EntityStateTriggerRequiredFeatures(EntityStateTriggerBase): +class EntityStateTriggerRequiredFeatures(EntityTargetStateTriggerBase): """Trigger for entity state changes.""" _required_features: int @@ -38,7 +38,7 @@ class EntityStateTriggerRequiredFeatures(EntityStateTriggerBase): def make_entity_state_trigger_required_features( domain: str, to_state: str, required_features: int -) -> type[EntityStateTriggerBase]: +) -> type[EntityTargetStateTriggerBase]: """Create an entity state trigger class.""" class CustomTrigger(EntityStateTriggerRequiredFeatures): @@ -52,7 +52,7 @@ def make_entity_state_trigger_required_features( TRIGGERS: dict[str, type[Trigger]] = { - "armed": make_conditional_entity_state_trigger( + "armed": make_entity_transition_trigger( DOMAIN, from_states={ AlarmControlPanelState.ARMING, @@ -89,8 +89,12 @@ TRIGGERS: dict[str, type[Trigger]] = { AlarmControlPanelState.ARMED_VACATION, AlarmControlPanelEntityFeature.ARM_VACATION, ), - "disarmed": make_entity_state_trigger(DOMAIN, AlarmControlPanelState.DISARMED), - "triggered": make_entity_state_trigger(DOMAIN, AlarmControlPanelState.TRIGGERED), + "disarmed": make_entity_target_state_trigger( + DOMAIN, AlarmControlPanelState.DISARMED + ), + "triggered": make_entity_target_state_trigger( + DOMAIN, AlarmControlPanelState.TRIGGERED + ), } diff --git a/homeassistant/components/assist_satellite/trigger.py b/homeassistant/components/assist_satellite/trigger.py index 6f2584224ea..31dc212ac96 100644 --- a/homeassistant/components/assist_satellite/trigger.py +++ b/homeassistant/components/assist_satellite/trigger.py @@ -1,16 +1,22 @@ """Provides triggers for assist satellites.""" from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_target_state_trigger from .const import DOMAIN from .entity import AssistSatelliteState TRIGGERS: dict[str, type[Trigger]] = { - "idle": make_entity_state_trigger(DOMAIN, AssistSatelliteState.IDLE), - "listening": make_entity_state_trigger(DOMAIN, AssistSatelliteState.LISTENING), - "processing": make_entity_state_trigger(DOMAIN, AssistSatelliteState.PROCESSING), - "responding": make_entity_state_trigger(DOMAIN, AssistSatelliteState.RESPONDING), + "idle": make_entity_target_state_trigger(DOMAIN, AssistSatelliteState.IDLE), + "listening": make_entity_target_state_trigger( + DOMAIN, AssistSatelliteState.LISTENING + ), + "processing": make_entity_target_state_trigger( + DOMAIN, AssistSatelliteState.PROCESSING + ), + "responding": make_entity_target_state_trigger( + DOMAIN, AssistSatelliteState.RESPONDING + ), } diff --git a/homeassistant/components/binary_sensor/trigger.py b/homeassistant/components/binary_sensor/trigger.py index e7b614ebdf1..b63c1420c98 100644 --- a/homeassistant/components/binary_sensor/trigger.py +++ b/homeassistant/components/binary_sensor/trigger.py @@ -4,7 +4,7 @@ from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity import get_device_class -from homeassistant.helpers.trigger import EntityStateTriggerBase, Trigger +from homeassistant.helpers.trigger import EntityTargetStateTriggerBase, Trigger from homeassistant.helpers.typing import UNDEFINED, UndefinedType from . import DOMAIN, BinarySensorDeviceClass @@ -20,7 +20,7 @@ def get_device_class_or_undefined( return UNDEFINED -class BinarySensorOnOffTrigger(EntityStateTriggerBase): +class BinarySensorOnOffTrigger(EntityTargetStateTriggerBase): """Class for binary sensor on/off triggers.""" _device_class: BinarySensorDeviceClass | None diff --git a/homeassistant/components/climate/trigger.py b/homeassistant/components/climate/trigger.py index a8699a4ab47..db7570030fb 100644 --- a/homeassistant/components/climate/trigger.py +++ b/homeassistant/components/climate/trigger.py @@ -3,22 +3,22 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.trigger import ( Trigger, - make_conditional_entity_state_trigger, - make_entity_state_attribute_trigger, - make_entity_state_trigger, + make_entity_target_state_attribute_trigger, + make_entity_target_state_trigger, + make_entity_transition_trigger, ) from .const import ATTR_HVAC_ACTION, DOMAIN, HVACAction, HVACMode TRIGGERS: dict[str, type[Trigger]] = { - "started_cooling": make_entity_state_attribute_trigger( + "started_cooling": make_entity_target_state_attribute_trigger( DOMAIN, ATTR_HVAC_ACTION, HVACAction.COOLING ), - "started_drying": make_entity_state_attribute_trigger( + "started_drying": make_entity_target_state_attribute_trigger( DOMAIN, ATTR_HVAC_ACTION, HVACAction.DRYING ), - "turned_off": make_entity_state_trigger(DOMAIN, HVACMode.OFF), - "turned_on": make_conditional_entity_state_trigger( + "turned_off": make_entity_target_state_trigger(DOMAIN, HVACMode.OFF), + "turned_on": make_entity_transition_trigger( DOMAIN, from_states={ HVACMode.OFF, @@ -32,7 +32,7 @@ TRIGGERS: dict[str, type[Trigger]] = { HVACMode.HEAT_COOL, }, ), - "started_heating": make_entity_state_attribute_trigger( + "started_heating": make_entity_target_state_attribute_trigger( DOMAIN, ATTR_HVAC_ACTION, HVACAction.HEATING ), } diff --git a/homeassistant/components/device_tracker/trigger.py b/homeassistant/components/device_tracker/trigger.py index 7d0792b199f..7f1d2bd068e 100644 --- a/homeassistant/components/device_tracker/trigger.py +++ b/homeassistant/components/device_tracker/trigger.py @@ -4,15 +4,15 @@ from homeassistant.const import STATE_HOME from homeassistant.core import HomeAssistant from homeassistant.helpers.trigger import ( Trigger, - make_entity_from_state_trigger, - make_entity_state_trigger, + make_entity_origin_state_trigger, + make_entity_target_state_trigger, ) from .const import DOMAIN TRIGGERS: dict[str, type[Trigger]] = { - "entered_home": make_entity_state_trigger(DOMAIN, STATE_HOME), - "left_home": make_entity_from_state_trigger(DOMAIN, from_state=STATE_HOME), + "entered_home": make_entity_target_state_trigger(DOMAIN, STATE_HOME), + "left_home": make_entity_origin_state_trigger(DOMAIN, from_state=STATE_HOME), } diff --git a/homeassistant/components/fan/trigger.py b/homeassistant/components/fan/trigger.py index 9135f22deb0..e36970afdfc 100644 --- a/homeassistant/components/fan/trigger.py +++ b/homeassistant/components/fan/trigger.py @@ -2,13 +2,13 @@ from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_target_state_trigger from . import DOMAIN TRIGGERS: dict[str, type[Trigger]] = { - "turned_off": make_entity_state_trigger(DOMAIN, STATE_OFF), - "turned_on": make_entity_state_trigger(DOMAIN, STATE_ON), + "turned_off": make_entity_target_state_trigger(DOMAIN, STATE_OFF), + "turned_on": make_entity_target_state_trigger(DOMAIN, STATE_ON), } diff --git a/homeassistant/components/lawn_mower/trigger.py b/homeassistant/components/lawn_mower/trigger.py index e1dcada66ef..7bfcf0ea31e 100644 --- a/homeassistant/components/lawn_mower/trigger.py +++ b/homeassistant/components/lawn_mower/trigger.py @@ -1,15 +1,17 @@ """Provides triggers for lawn mowers.""" from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_target_state_trigger from .const import DOMAIN, LawnMowerActivity TRIGGERS: dict[str, type[Trigger]] = { - "docked": make_entity_state_trigger(DOMAIN, LawnMowerActivity.DOCKED), - "errored": make_entity_state_trigger(DOMAIN, LawnMowerActivity.ERROR), - "paused_mowing": make_entity_state_trigger(DOMAIN, LawnMowerActivity.PAUSED), - "started_mowing": make_entity_state_trigger(DOMAIN, LawnMowerActivity.MOWING), + "docked": make_entity_target_state_trigger(DOMAIN, LawnMowerActivity.DOCKED), + "errored": make_entity_target_state_trigger(DOMAIN, LawnMowerActivity.ERROR), + "paused_mowing": make_entity_target_state_trigger(DOMAIN, LawnMowerActivity.PAUSED), + "started_mowing": make_entity_target_state_trigger( + DOMAIN, LawnMowerActivity.MOWING + ), } diff --git a/homeassistant/components/light/trigger.py b/homeassistant/components/light/trigger.py index ea85b2eda80..3ba7976c71a 100644 --- a/homeassistant/components/light/trigger.py +++ b/homeassistant/components/light/trigger.py @@ -2,13 +2,13 @@ from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_target_state_trigger from .const import DOMAIN TRIGGERS: dict[str, type[Trigger]] = { - "turned_off": make_entity_state_trigger(DOMAIN, STATE_OFF), - "turned_on": make_entity_state_trigger(DOMAIN, STATE_ON), + "turned_off": make_entity_target_state_trigger(DOMAIN, STATE_OFF), + "turned_on": make_entity_target_state_trigger(DOMAIN, STATE_ON), } diff --git a/homeassistant/components/media_player/trigger.py b/homeassistant/components/media_player/trigger.py index 0313be56286..a39ccfa9ced 100644 --- a/homeassistant/components/media_player/trigger.py +++ b/homeassistant/components/media_player/trigger.py @@ -1,13 +1,13 @@ """Provides triggers for media players.""" from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_conditional_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_transition_trigger from . import MediaPlayerState from .const import DOMAIN TRIGGERS: dict[str, type[Trigger]] = { - "stopped_playing": make_conditional_entity_state_trigger( + "stopped_playing": make_entity_transition_trigger( DOMAIN, from_states={ MediaPlayerState.BUFFERING, diff --git a/homeassistant/components/switch/trigger.py b/homeassistant/components/switch/trigger.py index 13a52fbdd72..6797cad0f6b 100644 --- a/homeassistant/components/switch/trigger.py +++ b/homeassistant/components/switch/trigger.py @@ -2,13 +2,13 @@ from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_target_state_trigger from .const import DOMAIN TRIGGERS: dict[str, type[Trigger]] = { - "turned_on": make_entity_state_trigger(DOMAIN, STATE_ON), - "turned_off": make_entity_state_trigger(DOMAIN, STATE_OFF), + "turned_on": make_entity_target_state_trigger(DOMAIN, STATE_ON), + "turned_off": make_entity_target_state_trigger(DOMAIN, STATE_OFF), } diff --git a/homeassistant/components/update/trigger.py b/homeassistant/components/update/trigger.py index 6320d17b948..bd258e5498b 100644 --- a/homeassistant/components/update/trigger.py +++ b/homeassistant/components/update/trigger.py @@ -2,12 +2,12 @@ from homeassistant.const import STATE_ON from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_target_state_trigger from .const import DOMAIN TRIGGERS: dict[str, type[Trigger]] = { - "update_became_available": make_entity_state_trigger(DOMAIN, STATE_ON), + "update_became_available": make_entity_target_state_trigger(DOMAIN, STATE_ON), } diff --git a/homeassistant/components/vacuum/trigger.py b/homeassistant/components/vacuum/trigger.py index b0857d7f694..50ca8af7d47 100644 --- a/homeassistant/components/vacuum/trigger.py +++ b/homeassistant/components/vacuum/trigger.py @@ -1,15 +1,17 @@ """Provides triggers for vacuum cleaners.""" from homeassistant.core import HomeAssistant -from homeassistant.helpers.trigger import Trigger, make_entity_state_trigger +from homeassistant.helpers.trigger import Trigger, make_entity_target_state_trigger from .const import DOMAIN, VacuumActivity TRIGGERS: dict[str, type[Trigger]] = { - "docked": make_entity_state_trigger(DOMAIN, VacuumActivity.DOCKED), - "errored": make_entity_state_trigger(DOMAIN, VacuumActivity.ERROR), - "paused_cleaning": make_entity_state_trigger(DOMAIN, VacuumActivity.PAUSED), - "started_cleaning": make_entity_state_trigger(DOMAIN, VacuumActivity.CLEANING), + "docked": make_entity_target_state_trigger(DOMAIN, VacuumActivity.DOCKED), + "errored": make_entity_target_state_trigger(DOMAIN, VacuumActivity.ERROR), + "paused_cleaning": make_entity_target_state_trigger(DOMAIN, VacuumActivity.PAUSED), + "started_cleaning": make_entity_target_state_trigger( + DOMAIN, VacuumActivity.CLEANING + ), } diff --git a/homeassistant/helpers/trigger.py b/homeassistant/helpers/trigger.py index 23f09543ad4..bd0d55a7a8f 100644 --- a/homeassistant/helpers/trigger.py +++ b/homeassistant/helpers/trigger.py @@ -430,8 +430,8 @@ class EntityTriggerBase(Trigger): ) -class EntityStateTriggerBase(EntityTriggerBase): - """Trigger for entity state changes.""" +class EntityTargetStateTriggerBase(EntityTriggerBase): + """Trigger for entity state changes to a specific state.""" _to_state: str @@ -440,8 +440,8 @@ class EntityStateTriggerBase(EntityTriggerBase): return state.state == self._to_state -class ConditionalEntityStateTriggerBase(EntityTriggerBase): - """Class for entity state changes where the from state is restricted.""" +class EntityTransitionTriggerBase(EntityTriggerBase): + """Trigger for entity state changes between specific states.""" _from_states: set[str] _to_states: set[str] @@ -458,8 +458,8 @@ class ConditionalEntityStateTriggerBase(EntityTriggerBase): return state.state in self._to_states -class EntityFromStateTriggerBase(EntityTriggerBase): - """Class for entity state changes from a specific state.""" +class EntityOriginStateTriggerBase(EntityTriggerBase): + """Trigger for entity state changes from a specific state.""" _from_state: str @@ -474,8 +474,8 @@ class EntityFromStateTriggerBase(EntityTriggerBase): return state.state != self._from_state -class EntityStateAttributeTriggerBase(EntityTriggerBase): - """Trigger for entity state attribute changes.""" +class EntityTargetStateAttributeTriggerBase(EntityTriggerBase): + """Trigger for entity state attribute changes to a specific state.""" _attribute: str _attribute_to_state: str @@ -494,12 +494,12 @@ class EntityStateAttributeTriggerBase(EntityTriggerBase): return state.attributes.get(self._attribute) == self._attribute_to_state -def make_entity_state_trigger( +def make_entity_target_state_trigger( domain: str, to_state: str -) -> type[EntityStateTriggerBase]: - """Create an entity state trigger class.""" +) -> type[EntityTargetStateTriggerBase]: + """Create a trigger for entity state changes to a specific state.""" - class CustomTrigger(EntityStateTriggerBase): + class CustomTrigger(EntityTargetStateTriggerBase): """Trigger for entity state changes.""" _domain = domain @@ -508,12 +508,12 @@ def make_entity_state_trigger( return CustomTrigger -def make_conditional_entity_state_trigger( +def make_entity_transition_trigger( domain: str, *, from_states: set[str], to_states: set[str] -) -> type[ConditionalEntityStateTriggerBase]: - """Create a conditional entity state trigger class.""" +) -> type[EntityTransitionTriggerBase]: + """Create a trigger for entity state changes between specific states.""" - class CustomTrigger(ConditionalEntityStateTriggerBase): + class CustomTrigger(EntityTransitionTriggerBase): """Trigger for conditional entity state changes.""" _domain = domain @@ -523,12 +523,12 @@ def make_conditional_entity_state_trigger( return CustomTrigger -def make_entity_from_state_trigger( +def make_entity_origin_state_trigger( domain: str, *, from_state: str -) -> type[EntityFromStateTriggerBase]: - """Create an entity "from state" trigger class.""" +) -> type[EntityOriginStateTriggerBase]: + """Create a trigger for entity state changes from a specific state.""" - class CustomTrigger(EntityFromStateTriggerBase): + class CustomTrigger(EntityOriginStateTriggerBase): """Trigger for entity "from state" changes.""" _domain = domain @@ -537,12 +537,12 @@ def make_entity_from_state_trigger( return CustomTrigger -def make_entity_state_attribute_trigger( +def make_entity_target_state_attribute_trigger( domain: str, attribute: str, to_state: str -) -> type[EntityStateAttributeTriggerBase]: - """Create an entity state attribute trigger class.""" +) -> type[EntityTargetStateAttributeTriggerBase]: + """Create a trigger for entity state attribute changes to a specific state.""" - class CustomTrigger(EntityStateAttributeTriggerBase): + class CustomTrigger(EntityTargetStateAttributeTriggerBase): """Trigger for entity state changes.""" _domain = domain @@ -1135,6 +1135,5 @@ async def async_get_all_descriptions( description["target"] = target new_descriptions_cache[missing_trigger] = description - hass.data[TRIGGER_DESCRIPTION_CACHE] = new_descriptions_cache return new_descriptions_cache