summaryrefslogtreecommitdiffstats
path: root/blueprints/automation/motion/motion_switch.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'blueprints/automation/motion/motion_switch.yaml')
-rw-r--r--blueprints/automation/motion/motion_switch.yaml169
1 files changed, 115 insertions, 54 deletions
diff --git a/blueprints/automation/motion/motion_switch.yaml b/blueprints/automation/motion/motion_switch.yaml
index 31ba62c..dbc5374 100644
--- a/blueprints/automation/motion/motion_switch.yaml
+++ b/blueprints/automation/motion/motion_switch.yaml
@@ -13,12 +13,33 @@ blueprint:
door_entity:
name: Door Contact
description: Additionally trigger if door opens while no motion detected
- default: {}
+ default: []
selector:
entity:
+ multiple: true
domain: binary_sensor
# device_class: contact
+ light_target:
+ name: Light Target
+ default: []
+ selector:
+ entity:
+ multiple: true
+ domain: [switch, light]
+
+ no_motion_wait:
+ name: Wait time
+ description: Time to leave the light on after last motion is detected.
+ default: 120
+ selector:
+ number:
+ min: 0
+ max: 3600
+ unit_of_measurement: seconds
+
+
+############## Light based ##########################
illumination_test:
name: Illumination Test
description: Select how to check if existing illumination is sufficient
@@ -58,23 +79,48 @@ blueprint:
max: 30
unit_of_measurement: °
+############################# Preconditions #########################################
- light_target:
- name: Light Target
+# Also should be off for some time, otherwise it can get switched back on once we turn light off
+ on_cond_should_be_off:
+ name: Switch-on precondition - entities which must be off
+ description: E.g. all lights should be off in the room
default: []
selector:
entity:
multiple: true
- domain: [switch, light]
- no_motion_wait:
- name: Wait time
- description: Time to leave the light on after last motion is detected.
- default: 120
+ domain: [ input_boolean, binary_sensor, switch, light ]
+
+# We can wait a bit if events slightly desynchronized and motion in hall noticed later than in the room
+ on_cond_should_be_on:
+ name: Switch-on precondition - entities which must be on
+ description: E.g. we only turn light if entering from the hall
+ default: []
selector:
- number:
- min: 0
- max: 3600
- unit_of_measurement: seconds
+ entity:
+ multiple: true
+ domain: [ input_boolean, binary_sensor, switch, light ]
+
+ off_cond_should_be_off:
+ name: Switch-off precondition - entities which must be off
+ description: E.g. if some lights or devices are on, we assume room is still occupied
+ default: []
+ selector:
+ entity:
+ multiple: true
+ domain: [ input_boolean, binary_sensor, switch, light ]
+
+ off_cond_should_be_on:
+ name: Switch-off precondition - entities which must be on
+ description: E.g. motion in coridor should be detected
+ default: []
+ selector:
+ entity:
+ multiple: true
+ domain: [ input_boolean, binary_sensor, switch, light ]
+
+
+############################# Custom Actions #####################################
on_click:
name: on_click
@@ -127,56 +173,71 @@ action:
- conditions:
- condition: or
conditions:
- - condition: trigger
- id: "turn_on"
- - condition: and
- conditions:
- - condition: trigger
- id: "door"
- - condition: state
- entity_id: !input motion_entity
- state: 'off'
- sequence:
- - choose:
- - conditions:
+ - condition: trigger
+ id: "turn_on"
+ - condition: and
+ conditions:
+ - condition: trigger
+ id: "door"
+ - condition: state
+ entity_id: !input motion_entity
+ state: 'off'
+ - condition: or
+ conditions:
+ - condition: and
+ conditions:
- condition: template
value_template: '{{ test == "sensor" }}'
- sequence:
- - if:
- - condition: template
- value_template: '{{ (states(illuminance_entity) | float) < lux_threshold }}'
- then:
- - choose: []
- default: !input "on_click"
- - service: switch.turn_on
- target:
- entity_id: !input light_target
-
- - conditions:
+ - condition: template
+ value_template: '{{ (states(illuminance_entity) | float) < lux_threshold }}'
+ - condition: and
+ conditions:
- condition: template
value_template: '{{ test == "sun" }}'
- sequence:
- - if:
- - condition: numeric_state
- entity_id: sun.sun
- attribute: elevation
- below: !input sun_elevation
- then:
- - choose: []
- default: !input "on_click"
- - service: switch.turn_on
- target:
- entity_id: !input light_target
- default:
- - choose: []
- default: !input "on_click"
- - service: switch.turn_on
- target:
- entity_id: !input light_target
+ - condition: numeric_state
+ entity_id: sun.sun
+ attribute: elevation
+ below: !input sun_elevation
+ - condition: template
+ value_template: '{{ test == "none" }}'
+ - condition: state
+ entity_id: !input on_cond_should_be_off
+ state: 'off'
+ for:
+ hours: 0
+ minutes: 0
+ seconds: 10
+ sequence:
+ - repeat:
+ while:
+ - condition: state
+ entity_id: !input on_cond_should_be_on
+ match: any
+ state: 'off'
+ sequence:
+ - wait_for_trigger:
+ - platform: state
+ entity_id: !input on_cond_should_be_on
+ to: 'on'
+ timeout:
+ seconds: 2
+ continue_on_timeout: false
+
+ - choose: []
+ default: !input "on_click"
+ - service: switch.turn_on
+ target:
+ entity_id: !input light_target
- conditions:
- condition: trigger
id: "turn_off"
+ - condition: state
+ entity_id: !input off_cond_should_be_off
+ state: 'off'
+ - condition: state
+ entity_id: !input off_cond_should_be_on
+ state: 'on'
sequence:
- choose: []
default: !input "off_click"