From 7b37258f2221da1dd2c94132822f3cf432c79f84 Mon Sep 17 00:00:00 2001 From: mike Date: Fri, 28 Jul 2023 20:29:37 -0700 Subject: [PATCH] First commit, yay --- motion-activated-light.yaml | 231 ++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 motion-activated-light.yaml diff --git a/motion-activated-light.yaml b/motion-activated-light.yaml new file mode 100644 index 0000000..2b557ed --- /dev/null +++ b/motion-activated-light.yaml @@ -0,0 +1,231 @@ + + +blueprint: + + name: "Mike's Motion Activated Light" + description: "Turn lights on or off based on motion, plus an increasing delay when motion is continuously detected." + domain: automation + input: + + motion_sensor: + name: Motion Sensor + description: Entity ID of the motion sensor + selector: + entity: + domain: binary_sensor + + delay_seconds_helper: + name: Delay seconds (helper) + description: The delay before the motion-off sequence will be initiated. Must be a helper so it can persist across activations. + selector: + entity: + domain: input_number + + delay_seconds_default: + name: Default delay seconds + description: The default delay before the motion-off sequence begins. Will be used to reset the running delay. + default: 30 + selector: + number: + min: 1 + max: 86400 + step: 1 + mode: box + + notice_seconds: + name: Notice seconds + description: "The number of seconds to wait in the Prep1 (Notice) scene." + default: 15 + selector: + number: + min: 1 + max: 86400 + step: 1 + mode: box + + warning_seconds: + name: Warning seconds + description: "The number of seconds to wait in the Prep2 (Warning) scene." + default: 15 + selector: + number: + min: 1 + max: 86400 + step: 1 + mode: box + + scene_on: + name: On Scene + description: The scene to activate when motion is detected + selector: + entity: + domain: scene + + scene_off_prep_1: + name: Off Prep Scene 1 (Notice) + description: The first scene to activate when motion is no longer detected (notice phase). + selector: + entity: + domain: scene + + scene_off_prep_2: + name: Off Prep Scene 2 (Warning) + description: The second scene to activate when motion is no longer detected (warning phase). + selector: + entity: + domain: scene + + scene_off: + name: Off Scene + description: "The scene to activate when the user has failed to produce motion, and the light should be considered \"off\"." + selector: + entity: + domain: scene + +variables: + + motion_sensor: !input motion_sensor + delay_seconds: !input delay_seconds_helper + delay_seconds_default: !input delay_seconds_default + notice_seconds: !input notice_seconds + warning_seconds: !input warning_seconds + +trigger: + + - platform: state + entity_id: + - !input motion_sensor + to: + - "on" + - "off" + +action: + + - service: logbook.log + data: + name: First log + message: "Test Poop Blueprint has started. Motion delay counter is: {{ states[delay_seconds].state }}" + + - if: + - condition: state + entity_id: !input motion_sensor + state: "on" + + # Take actions based on Motion being detected! + then: + + - alias: Trying to log the motion state + service: logbook.log + data: + name: Motion On + message: Motion Detected + + - alias: "Activate the ON scene" + service: scene.turn_on + target: + entity_id: !input scene_on + + # Take actions based on Motion being undetected + else: + + - alias: Announce motion-off sequence + service: logbook.log + data: + name: Motion Off + message: Initiating motion-off sequence. + + + - alias: Delay appropriately before doing anything + wait_template: "{{ states[motion_sensor].state == 'on' }}" + timeout: "{{ states[delay_seconds].state }}" + - if: + - condition: state + entity_id: !input motion_sensor + state: "on" + then: + - stop: "Motion detected during initial delay." + - service: logbook.log + data: + name: Motion Off + message: Finished initial no-motion delay + + + + - alias: "Activate Scene: Off Prep 1 (Notice)" + service: scene.turn_on + target: + entity_id: !input scene_off_prep_1 + - alias: "Delay during the notice period" + wait_template: "{{ states[motion_sensor].state == 'on' }}" + timeout: "{{ notice_seconds }}" + - if: + - condition: state + entity_id: !input motion_sensor + state: "on" + then: + - alias: "Activate Scene: On" + service: scene.turn_on + target: + entity_id: !input scene_on + - alias: "Double countdown timer when user interrupts the notice period." + service: input_number.set_value + data: + entity_id: !input delay_seconds_helper + value: "{{ states[delay_seconds].state | int * 2 }}" + - stop: "Motion detected during notice period." + - service: logbook.log + data: + name: Motion Off + message: Finished notice delay + + - alias: "Activate Scene: Off Prep 2 (Warning)" + service: scene.turn_on + target: + entity_id: !input scene_off_prep_2 + - alias: "Delay during the warning period" + wait_template: "{{ states[motion_sensor].state == 'on' }}" + timeout: "{{ warning_seconds }}" + - if: + - condition: state + entity_id: !input motion_sensor + state: "on" + then: + - alias: "Activate Scene: On" + service: scene.turn_on + target: + entity_id: !input scene_on + - alias: "Double countdown timer when user interrupts the warning period." + service: input_number.set_value + data: + entity_id: !input delay_seconds_helper + value: "{{ states[delay_seconds].state | int * 2 }}" + - stop: "Motion detected during the warning period." + - service: logbook.log + data: + name: Motion Off + message: Finished warning delay + + - alias: "Activate Scene: Off (Done)" + service: scene.turn_on + target: + entity_id: !input scene_off + + - alias: "Reset countdown timer after turning on lights." + service: input_number.set_value + data: + entity_id: !input delay_seconds_helper + value: "{{ delay_seconds_default }}" + + - service: logbook.log + data: + name: Motion Off + message: Activated off-scene and reset delay. + + + + + + + + +