From 5f6b60cb78b143333456c67dec1650081d75f47c Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 25 Mar 2026 15:59:13 +0100 Subject: [PATCH] use mode instead --- .../components/air_quality/conditions.yaml | 4 +-- .../components/air_quality/triggers.yaml | 5 +-- .../alarm_control_panel/conditions.yaml | 4 +-- .../alarm_control_panel/triggers.yaml | 5 +-- .../assist_satellite/conditions.yaml | 4 +-- .../components/assist_satellite/triggers.yaml | 5 +-- .../components/battery/conditions.yaml | 4 +-- .../components/climate/conditions.yaml | 4 +-- .../components/climate/triggers.yaml | 5 +-- .../components/cover/conditions.yaml | 4 +-- homeassistant/components/cover/triggers.yaml | 5 +-- .../components/device_tracker/conditions.yaml | 4 +-- .../components/device_tracker/triggers.yaml | 5 +-- homeassistant/components/door/conditions.yaml | 4 +-- homeassistant/components/door/triggers.yaml | 5 +-- homeassistant/components/fan/conditions.yaml | 4 +-- homeassistant/components/fan/triggers.yaml | 5 +-- .../components/garage_door/conditions.yaml | 4 +-- .../components/garage_door/triggers.yaml | 5 +-- homeassistant/components/gate/conditions.yaml | 4 +-- homeassistant/components/gate/triggers.yaml | 5 +-- .../components/humidifier/conditions.yaml | 4 +-- .../components/humidifier/triggers.yaml | 5 +-- .../components/humidity/conditions.yaml | 4 +-- .../components/humidity/triggers.yaml | 5 +-- .../components/illuminance/conditions.yaml | 4 +-- .../components/illuminance/triggers.yaml | 5 +-- .../components/lawn_mower/conditions.yaml | 4 +-- .../components/lawn_mower/triggers.yaml | 5 +-- .../components/light/conditions.yaml | 4 +-- homeassistant/components/light/triggers.yaml | 5 +-- homeassistant/components/lock/conditions.yaml | 4 +-- homeassistant/components/lock/triggers.yaml | 5 +-- .../components/media_player/conditions.yaml | 4 +-- .../components/media_player/triggers.yaml | 5 +-- .../components/moisture/triggers.yaml | 5 +-- .../components/motion/conditions.yaml | 4 +-- homeassistant/components/motion/triggers.yaml | 5 +-- .../components/occupancy/conditions.yaml | 4 +-- .../components/occupancy/triggers.yaml | 5 +-- .../components/person/conditions.yaml | 4 +-- homeassistant/components/person/triggers.yaml | 5 +-- .../components/power/conditions.yaml | 4 +-- homeassistant/components/power/triggers.yaml | 5 +-- homeassistant/components/remote/triggers.yaml | 5 +-- .../components/schedule/conditions.yaml | 4 +-- .../components/schedule/triggers.yaml | 5 +-- .../components/siren/conditions.yaml | 4 +-- homeassistant/components/siren/triggers.yaml | 5 +-- .../components/switch/conditions.yaml | 4 +-- homeassistant/components/switch/triggers.yaml | 5 +-- .../components/temperature/triggers.yaml | 5 +-- homeassistant/components/text/conditions.yaml | 4 +-- homeassistant/components/update/triggers.yaml | 5 +-- .../components/vacuum/conditions.yaml | 4 +-- homeassistant/components/vacuum/triggers.yaml | 5 +-- .../components/water_heater/conditions.yaml | 4 +-- .../components/water_heater/triggers.yaml | 5 +-- .../components/window/conditions.yaml | 4 +-- homeassistant/components/window/triggers.yaml | 5 +-- homeassistant/helpers/selector.py | 35 +++++++++++++------ tests/helpers/test_selector.py | 13 +++---- 62 files changed, 90 insertions(+), 229 deletions(-) diff --git a/homeassistant/components/air_quality/conditions.yaml b/homeassistant/components/air_quality/conditions.yaml index b643a55724f..c1a5604cf15 100644 --- a/homeassistant/components/air_quality/conditions.yaml +++ b/homeassistant/components/air_quality/conditions.yaml @@ -6,9 +6,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition # --- Number or entity selectors --- diff --git a/homeassistant/components/air_quality/triggers.yaml b/homeassistant/components/air_quality/triggers.yaml index f44048b91c8..7a92a8a49b4 100644 --- a/homeassistant/components/air_quality/triggers.yaml +++ b/homeassistant/components/air_quality/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity_co: &number_or_entity_co required: false diff --git a/homeassistant/components/alarm_control_panel/conditions.yaml b/homeassistant/components/alarm_control_panel/conditions.yaml index b23d80c7660..5d38192bb14 100644 --- a/homeassistant/components/alarm_control_panel/conditions.yaml +++ b/homeassistant/components/alarm_control_panel/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_armed: *condition_common diff --git a/homeassistant/components/alarm_control_panel/triggers.yaml b/homeassistant/components/alarm_control_panel/triggers.yaml index 6ebde2f800d..47704f6d886 100644 --- a/homeassistant/components/alarm_control_panel/triggers.yaml +++ b/homeassistant/components/alarm_control_panel/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger armed: *trigger_common diff --git a/homeassistant/components/assist_satellite/conditions.yaml b/homeassistant/components/assist_satellite/conditions.yaml index 75ed240f70c..d5cff978ab3 100644 --- a/homeassistant/components/assist_satellite/conditions.yaml +++ b/homeassistant/components/assist_satellite/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_idle: *condition_common is_listening: *condition_common diff --git a/homeassistant/components/assist_satellite/triggers.yaml b/homeassistant/components/assist_satellite/triggers.yaml index ee8f269b016..cd08885e8db 100644 --- a/homeassistant/components/assist_satellite/triggers.yaml +++ b/homeassistant/components/assist_satellite/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger idle: *trigger_common listening: *trigger_common diff --git a/homeassistant/components/battery/conditions.yaml b/homeassistant/components/battery/conditions.yaml index 1f863e3ef6b..69cced9e24f 100644 --- a/homeassistant/components/battery/conditions.yaml +++ b/homeassistant/components/battery/conditions.yaml @@ -10,9 +10,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/climate/conditions.yaml b/homeassistant/components/climate/conditions.yaml index 32fed50bef2..8b967acbd09 100644 --- a/homeassistant/components/climate/conditions.yaml +++ b/homeassistant/components/climate/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition .number_or_entity_humidity: &number_or_entity_humidity required: false diff --git a/homeassistant/components/climate/triggers.yaml b/homeassistant/components/climate/triggers.yaml index 1ab2be23773..f427b2c25ec 100644 --- a/homeassistant/components/climate/triggers.yaml +++ b/homeassistant/components/climate/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity_humidity: &number_or_entity_humidity required: false diff --git a/homeassistant/components/cover/conditions.yaml b/homeassistant/components/cover/conditions.yaml index 237473df990..f177660c93a 100644 --- a/homeassistant/components/cover/conditions.yaml +++ b/homeassistant/components/cover/conditions.yaml @@ -5,9 +5,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition awning_is_closed: fields: *condition_common_fields diff --git a/homeassistant/components/cover/triggers.yaml b/homeassistant/components/cover/triggers.yaml index 3db75692c39..22a63f4a551 100644 --- a/homeassistant/components/cover/triggers.yaml +++ b/homeassistant/components/cover/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger awning_closed: fields: *trigger_common_fields diff --git a/homeassistant/components/device_tracker/conditions.yaml b/homeassistant/components/device_tracker/conditions.yaml index a6630f4b3ed..55f6c467b4b 100644 --- a/homeassistant/components/device_tracker/conditions.yaml +++ b/homeassistant/components/device_tracker/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_home: *condition_common is_not_home: *condition_common diff --git a/homeassistant/components/device_tracker/triggers.yaml b/homeassistant/components/device_tracker/triggers.yaml index 682b738d6f7..ac701395f60 100644 --- a/homeassistant/components/device_tracker/triggers.yaml +++ b/homeassistant/components/device_tracker/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger entered_home: *trigger_common left_home: *trigger_common diff --git a/homeassistant/components/door/conditions.yaml b/homeassistant/components/door/conditions.yaml index 2b841752695..aa544332cd0 100644 --- a/homeassistant/components/door/conditions.yaml +++ b/homeassistant/components/door/conditions.yaml @@ -5,9 +5,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_closed: fields: *condition_common_fields diff --git a/homeassistant/components/door/triggers.yaml b/homeassistant/components/door/triggers.yaml index 9f67eeeaba2..cb7c4409096 100644 --- a/homeassistant/components/door/triggers.yaml +++ b/homeassistant/components/door/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger closed: fields: *trigger_common_fields diff --git a/homeassistant/components/fan/conditions.yaml b/homeassistant/components/fan/conditions.yaml index 6e485a24ee7..4caaea00fd8 100644 --- a/homeassistant/components/fan/conditions.yaml +++ b/homeassistant/components/fan/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_off: *condition_common is_on: *condition_common diff --git a/homeassistant/components/fan/triggers.yaml b/homeassistant/components/fan/triggers.yaml index 220e07bdfb3..d62c74b0045 100644 --- a/homeassistant/components/fan/triggers.yaml +++ b/homeassistant/components/fan/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger turned_on: *trigger_common turned_off: *trigger_common diff --git a/homeassistant/components/garage_door/conditions.yaml b/homeassistant/components/garage_door/conditions.yaml index ecd0559eb38..f996446cb47 100644 --- a/homeassistant/components/garage_door/conditions.yaml +++ b/homeassistant/components/garage_door/conditions.yaml @@ -5,9 +5,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_closed: fields: *condition_common_fields diff --git a/homeassistant/components/garage_door/triggers.yaml b/homeassistant/components/garage_door/triggers.yaml index 417cb8657b9..29ccf7a2766 100644 --- a/homeassistant/components/garage_door/triggers.yaml +++ b/homeassistant/components/garage_door/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger closed: fields: *trigger_common_fields diff --git a/homeassistant/components/gate/conditions.yaml b/homeassistant/components/gate/conditions.yaml index 347da70ad20..feacacef6ad 100644 --- a/homeassistant/components/gate/conditions.yaml +++ b/homeassistant/components/gate/conditions.yaml @@ -5,9 +5,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_closed: fields: *condition_common_fields diff --git a/homeassistant/components/gate/triggers.yaml b/homeassistant/components/gate/triggers.yaml index e5425424e36..7e3a05af510 100644 --- a/homeassistant/components/gate/triggers.yaml +++ b/homeassistant/components/gate/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger closed: fields: *trigger_common_fields diff --git a/homeassistant/components/humidifier/conditions.yaml b/homeassistant/components/humidifier/conditions.yaml index d2e5dab8bcd..cbf660f55f1 100644 --- a/homeassistant/components/humidifier/conditions.yaml +++ b/homeassistant/components/humidifier/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/humidifier/triggers.yaml b/homeassistant/components/humidifier/triggers.yaml index 1f35cd560b6..01735f670be 100644 --- a/homeassistant/components/humidifier/triggers.yaml +++ b/homeassistant/components/humidifier/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger started_drying: *trigger_common started_humidifying: *trigger_common diff --git a/homeassistant/components/humidity/conditions.yaml b/homeassistant/components/humidity/conditions.yaml index 61f2c9ce39c..8b531ebe6e6 100644 --- a/homeassistant/components/humidity/conditions.yaml +++ b/homeassistant/components/humidity/conditions.yaml @@ -36,8 +36,6 @@ is_value: selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition above: *number_or_entity below: *number_or_entity diff --git a/homeassistant/components/humidity/triggers.yaml b/homeassistant/components/humidity/triggers.yaml index 6104d0db9f8..bda37790b62 100644 --- a/homeassistant/components/humidity/triggers.yaml +++ b/homeassistant/components/humidity/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/illuminance/conditions.yaml b/homeassistant/components/illuminance/conditions.yaml index a6debd0e162..49ab6c151c0 100644 --- a/homeassistant/components/illuminance/conditions.yaml +++ b/homeassistant/components/illuminance/conditions.yaml @@ -10,9 +10,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/illuminance/triggers.yaml b/homeassistant/components/illuminance/triggers.yaml index 8e7f7341197..3cc2c91b6b1 100644 --- a/homeassistant/components/illuminance/triggers.yaml +++ b/homeassistant/components/illuminance/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/lawn_mower/conditions.yaml b/homeassistant/components/lawn_mower/conditions.yaml index 114854bb862..e0f95bce5f0 100644 --- a/homeassistant/components/lawn_mower/conditions.yaml +++ b/homeassistant/components/lawn_mower/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_docked: *condition_common is_encountering_an_error: *condition_common diff --git a/homeassistant/components/lawn_mower/triggers.yaml b/homeassistant/components/lawn_mower/triggers.yaml index 10df0404616..c9a593f7c6b 100644 --- a/homeassistant/components/lawn_mower/triggers.yaml +++ b/homeassistant/components/lawn_mower/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger docked: *trigger_common errored: *trigger_common diff --git a/homeassistant/components/light/conditions.yaml b/homeassistant/components/light/conditions.yaml index de863fb8c94..573e01f0356 100644 --- a/homeassistant/components/light/conditions.yaml +++ b/homeassistant/components/light/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_off: *condition_common is_on: *condition_common diff --git a/homeassistant/components/light/triggers.yaml b/homeassistant/components/light/triggers.yaml index b331f98d7bc..79aa0944841 100644 --- a/homeassistant/components/light/triggers.yaml +++ b/homeassistant/components/light/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/lock/conditions.yaml b/homeassistant/components/lock/conditions.yaml index 4ffa2b596b0..f3197dcd573 100644 --- a/homeassistant/components/lock/conditions.yaml +++ b/homeassistant/components/lock/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_jammed: *condition_common is_locked: *condition_common diff --git a/homeassistant/components/lock/triggers.yaml b/homeassistant/components/lock/triggers.yaml index 7517dd13cb3..0733b9899f5 100644 --- a/homeassistant/components/lock/triggers.yaml +++ b/homeassistant/components/lock/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger jammed: *trigger_common locked: *trigger_common diff --git a/homeassistant/components/media_player/conditions.yaml b/homeassistant/components/media_player/conditions.yaml index 509070c1797..b2651216c0a 100644 --- a/homeassistant/components/media_player/conditions.yaml +++ b/homeassistant/components/media_player/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_off: *condition_common is_on: *condition_common diff --git a/homeassistant/components/media_player/triggers.yaml b/homeassistant/components/media_player/triggers.yaml index e1fd9a1eb30..c9c46f9e7b4 100644 --- a/homeassistant/components/media_player/triggers.yaml +++ b/homeassistant/components/media_player/triggers.yaml @@ -9,7 +9,4 @@ stopped_playing: selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger diff --git a/homeassistant/components/moisture/triggers.yaml b/homeassistant/components/moisture/triggers.yaml index b66f82236dc..5208a71d3aa 100644 --- a/homeassistant/components/moisture/triggers.yaml +++ b/homeassistant/components/moisture/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/motion/conditions.yaml b/homeassistant/components/motion/conditions.yaml index 576af9975dd..f741ba90c3a 100644 --- a/homeassistant/components/motion/conditions.yaml +++ b/homeassistant/components/motion/conditions.yaml @@ -5,9 +5,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_detected: fields: *condition_common_fields diff --git a/homeassistant/components/motion/triggers.yaml b/homeassistant/components/motion/triggers.yaml index a6fe09523dc..f0b6a0f7e55 100644 --- a/homeassistant/components/motion/triggers.yaml +++ b/homeassistant/components/motion/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger detected: fields: *trigger_common_fields diff --git a/homeassistant/components/occupancy/conditions.yaml b/homeassistant/components/occupancy/conditions.yaml index 4979c67b2f7..7e0aa575a9d 100644 --- a/homeassistant/components/occupancy/conditions.yaml +++ b/homeassistant/components/occupancy/conditions.yaml @@ -5,9 +5,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_detected: fields: *condition_common_fields diff --git a/homeassistant/components/occupancy/triggers.yaml b/homeassistant/components/occupancy/triggers.yaml index 7bc890d9550..72fa4abc5b6 100644 --- a/homeassistant/components/occupancy/triggers.yaml +++ b/homeassistant/components/occupancy/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger detected: fields: *trigger_common_fields diff --git a/homeassistant/components/person/conditions.yaml b/homeassistant/components/person/conditions.yaml index 9c4fcfbea88..eef330add5a 100644 --- a/homeassistant/components/person/conditions.yaml +++ b/homeassistant/components/person/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_home: *condition_common is_not_home: *condition_common diff --git a/homeassistant/components/person/triggers.yaml b/homeassistant/components/person/triggers.yaml index 972071c0fe6..f4d3b4cc52d 100644 --- a/homeassistant/components/person/triggers.yaml +++ b/homeassistant/components/person/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger entered_home: *trigger_common left_home: *trigger_common diff --git a/homeassistant/components/power/conditions.yaml b/homeassistant/components/power/conditions.yaml index 51544b907dd..db85b52e67e 100644 --- a/homeassistant/components/power/conditions.yaml +++ b/homeassistant/components/power/conditions.yaml @@ -53,9 +53,7 @@ is_value: selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition above: *number_or_entity_power below: *number_or_entity_power unit: *condition_unit_power diff --git a/homeassistant/components/power/triggers.yaml b/homeassistant/components/power/triggers.yaml index 3432366ddcd..a4df924a4fe 100644 --- a/homeassistant/components/power/triggers.yaml +++ b/homeassistant/components/power/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/remote/triggers.yaml b/homeassistant/components/remote/triggers.yaml index aa9af3aa34a..019412f3009 100644 --- a/homeassistant/components/remote/triggers.yaml +++ b/homeassistant/components/remote/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger turned_off: *trigger_common turned_on: *trigger_common diff --git a/homeassistant/components/schedule/conditions.yaml b/homeassistant/components/schedule/conditions.yaml index 059fbe2a0f1..fd1b6249f40 100644 --- a/homeassistant/components/schedule/conditions.yaml +++ b/homeassistant/components/schedule/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_off: *condition_common is_on: *condition_common diff --git a/homeassistant/components/schedule/triggers.yaml b/homeassistant/components/schedule/triggers.yaml index bd6eca28e2a..d490865f47d 100644 --- a/homeassistant/components/schedule/triggers.yaml +++ b/homeassistant/components/schedule/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger turned_off: *trigger_common turned_on: *trigger_common diff --git a/homeassistant/components/siren/conditions.yaml b/homeassistant/components/siren/conditions.yaml index 600a1cbbc11..1adeef34bbe 100644 --- a/homeassistant/components/siren/conditions.yaml +++ b/homeassistant/components/siren/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_off: *condition_common is_on: *condition_common diff --git a/homeassistant/components/siren/triggers.yaml b/homeassistant/components/siren/triggers.yaml index 5cbcac69d49..bfb36026853 100644 --- a/homeassistant/components/siren/triggers.yaml +++ b/homeassistant/components/siren/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger turned_off: *trigger_common turned_on: *trigger_common diff --git a/homeassistant/components/switch/conditions.yaml b/homeassistant/components/switch/conditions.yaml index bd3a7826c26..fd5b7575d3c 100644 --- a/homeassistant/components/switch/conditions.yaml +++ b/homeassistant/components/switch/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_off: *condition_common is_on: *condition_common diff --git a/homeassistant/components/switch/triggers.yaml b/homeassistant/components/switch/triggers.yaml index 698f140ae89..8b22c912578 100644 --- a/homeassistant/components/switch/triggers.yaml +++ b/homeassistant/components/switch/triggers.yaml @@ -10,10 +10,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger turned_off: *trigger_common turned_on: *trigger_common diff --git a/homeassistant/components/temperature/triggers.yaml b/homeassistant/components/temperature/triggers.yaml index cb554582550..19471cc6316 100644 --- a/homeassistant/components/temperature/triggers.yaml +++ b/homeassistant/components/temperature/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .number_or_entity: &number_or_entity required: false diff --git a/homeassistant/components/text/conditions.yaml b/homeassistant/components/text/conditions.yaml index 3d93d3f4dff..08b1a1e5042 100644 --- a/homeassistant/components/text/conditions.yaml +++ b/homeassistant/components/text/conditions.yaml @@ -10,9 +10,7 @@ is_equal_to: selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition value: required: true selector: diff --git a/homeassistant/components/update/triggers.yaml b/homeassistant/components/update/triggers.yaml index 6b928e947b2..d5caddfd827 100644 --- a/homeassistant/components/update/triggers.yaml +++ b/homeassistant/components/update/triggers.yaml @@ -9,9 +9,6 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger update_became_available: *trigger_common diff --git a/homeassistant/components/vacuum/conditions.yaml b/homeassistant/components/vacuum/conditions.yaml index e35f4cf0201..5ae23fd2087 100644 --- a/homeassistant/components/vacuum/conditions.yaml +++ b/homeassistant/components/vacuum/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_cleaning: *condition_common is_docked: *condition_common diff --git a/homeassistant/components/vacuum/triggers.yaml b/homeassistant/components/vacuum/triggers.yaml index 2f4cdcc98f2..01fb3554638 100644 --- a/homeassistant/components/vacuum/triggers.yaml +++ b/homeassistant/components/vacuum/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger docked: *trigger_common errored: *trigger_common diff --git a/homeassistant/components/water_heater/conditions.yaml b/homeassistant/components/water_heater/conditions.yaml index f2842055693..b3d4e8e3fec 100644 --- a/homeassistant/components/water_heater/conditions.yaml +++ b/homeassistant/components/water_heater/conditions.yaml @@ -9,9 +9,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition .number_or_entity_temperature: &number_or_entity_temperature required: false diff --git a/homeassistant/components/water_heater/triggers.yaml b/homeassistant/components/water_heater/triggers.yaml index 6a00d6212b4..f76ecdce1c1 100644 --- a/homeassistant/components/water_heater/triggers.yaml +++ b/homeassistant/components/water_heater/triggers.yaml @@ -9,10 +9,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger .trigger_threshold_type: &trigger_threshold_type required: true diff --git a/homeassistant/components/window/conditions.yaml b/homeassistant/components/window/conditions.yaml index afbbc3081d1..1da4cd035bd 100644 --- a/homeassistant/components/window/conditions.yaml +++ b/homeassistant/components/window/conditions.yaml @@ -5,9 +5,7 @@ selector: automation_behavior: translation_key: condition_behavior - behavior: - - all - - any + mode: condition is_closed: fields: *condition_common_fields diff --git a/homeassistant/components/window/triggers.yaml b/homeassistant/components/window/triggers.yaml index 8ec7b5bf537..ae1694fb1aa 100644 --- a/homeassistant/components/window/triggers.yaml +++ b/homeassistant/components/window/triggers.yaml @@ -5,10 +5,7 @@ selector: automation_behavior: translation_key: trigger_behavior - behavior: - - first - - last - - any + mode: trigger closed: fields: *trigger_common_fields diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index 159757a93a9..314914eefd9 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -252,11 +252,31 @@ class AutomationBehavior(StrEnum): ANY = "any" +class AutomationBehaviorSelectorMode(StrEnum): + """Possible modes for an automation behavior selector.""" + + TRIGGER = "trigger" + CONDITION = "condition" + + +_AUTOMATION_BEHAVIOR_MODES: dict[AutomationBehaviorSelectorMode, list[str]] = { + AutomationBehaviorSelectorMode.TRIGGER: [ + AutomationBehavior.FIRST, + AutomationBehavior.LAST, + AutomationBehavior.ANY, + ], + AutomationBehaviorSelectorMode.CONDITION: [ + AutomationBehavior.ALL, + AutomationBehavior.ANY, + ], +} + + class AutomationBehaviorConfig(BaseSelectorConfig, total=False): """Class to represent an automation behavior selector config.""" + mode: Required[AutomationBehaviorSelectorMode] translation_key: str - behavior: list[str] @SELECTORS.register("automation_behavior") @@ -267,9 +287,8 @@ class AutomationBehaviorSelector(Selector[AutomationBehaviorConfig]): CONFIG_SCHEMA = make_selector_config_schema( { - vol.Optional("behavior"): vol.All( - cv.ensure_list, - [vol.All(vol.Coerce(AutomationBehavior), lambda val: val.value)], + vol.Required("mode"): vol.All( + vol.Coerce(AutomationBehaviorSelectorMode), lambda val: val.value ), vol.Optional("translation_key"): cv.string, }, @@ -283,12 +302,8 @@ class AutomationBehaviorSelector(Selector[AutomationBehaviorConfig]): """Validate the passed selection.""" if not isinstance(data, str): raise vol.Invalid("Value should be a string") - allowed = self.config.get("behavior") or [ - AutomationBehavior.FIRST, - AutomationBehavior.LAST, - AutomationBehavior.ANY, - ] - return vol.In(allowed)(data) + mode = AutomationBehaviorSelectorMode(self.config["mode"]) + return vol.In(_AUTOMATION_BEHAVIOR_MODES[mode])(data) class ActionSelectorConfig(BaseSelectorConfig): diff --git a/tests/helpers/test_selector.py b/tests/helpers/test_selector.py index 0a84c7b138f..3f080d1f66d 100644 --- a/tests/helpers/test_selector.py +++ b/tests/helpers/test_selector.py @@ -1187,20 +1187,17 @@ def test_action_selector_schema(schema, valid_selections, invalid_selections) -> ("schema", "valid_selections", "invalid_selections"), [ ( - {}, + {"mode": "trigger"}, ("first", "last", "any"), ("all", "invalid", None), ), ( - {"behavior": ["all", "any"]}, + {"mode": "condition"}, ("all", "any"), ("first", "last", "invalid", None), ), ( - { - "behavior": ["first", "last", "any"], - "translation_key": "trigger_behavior", - }, + {"mode": "trigger", "translation_key": "trigger_behavior"}, ("first", "last", "any"), ("all", "invalid", None), ), @@ -1216,8 +1213,8 @@ def test_automation_behavior_selector_schema( @pytest.mark.parametrize( "schema", [ - {"behavior": ["invalid_behavior"]}, - {"behavior": ["first", "invalid"]}, + {}, + {"mode": "invalid_mode"}, ], ) def test_automation_behavior_selector_schema_error(schema) -> None: