diff options
Diffstat (limited to 'blueprints/automation/motion/motion_switch.yaml')
-rw-r--r-- | blueprints/automation/motion/motion_switch.yaml | 169 |
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" |