Add ability to select a default scene mode when DISABLED (including all scenes or auto mode, based on motion)
Also tweaked logging and stuff
This commit is contained in:
		| @@ -5,7 +5,7 @@ | ||||
| ######################## | ||||
|  | ||||
| mode: queued | ||||
| max: 10 | ||||
| max: 25 | ||||
| blueprint: | ||||
|  | ||||
|   name: "Mike's Motion Activated Light" | ||||
| @@ -153,6 +153,21 @@ blueprint: | ||||
|           domain: input_boolean | ||||
|  | ||||
|  | ||||
|     disabled_scene: | ||||
|       name: "Disabled scene" | ||||
|       description: > | ||||
|         Choose the scene that will be activated when the "enabled_helper" is set to off. | ||||
|         In the "auto" mode, the "on" or "off" scene will be chosen based on whether motion is currently detected. | ||||
|       selector: | ||||
|         select: | ||||
|           options: | ||||
|             - "auto" | ||||
|             - "on" | ||||
|             - "off" | ||||
|             - "notice" | ||||
|             - "warning" | ||||
|  | ||||
|  | ||||
|     debug_mode: | ||||
|       name: "Debug mode." | ||||
|       description: "Enable debug mode, which increases logging." | ||||
| @@ -176,6 +191,7 @@ variables: | ||||
|   warning_seconds:             !input warning_seconds | ||||
|   on_just_before_off_seconds:  !input on_just_before_off_seconds | ||||
|   enabled_helper:              !input enabled_helper | ||||
|   disabled_scene:              !input disabled_scene | ||||
|   debug_mode:                  !input debug_mode | ||||
|  | ||||
|  | ||||
| @@ -212,10 +228,11 @@ trigger: | ||||
|  | ||||
| action: | ||||
|  | ||||
|   # Action #0 | ||||
|   - alias: "Debug log whether the enabled_helper was set" | ||||
|     if: | ||||
|       - condition: template | ||||
|         value_template: "{{ debug_mode == true or true }}" | ||||
|         value_template: "{{ debug_mode == true }}" | ||||
|     then: | ||||
|       - if: | ||||
|         - condition: template | ||||
| @@ -231,6 +248,8 @@ action: | ||||
|               name: "Enabled helper" | ||||
|               message: "Enabled helper is not set." | ||||
|  | ||||
|  | ||||
|   # Action #1 | ||||
|   - alias: "Debug log the enabled_helper name" | ||||
|     if: | ||||
|       - condition: template | ||||
| @@ -241,6 +260,7 @@ action: | ||||
|           name: "Enabled helper" | ||||
|           message: "Enabled helper name is: {{ enabled_helper }}" | ||||
|  | ||||
|   # Action #2 | ||||
|   - alias: "Debug log the current delay_seconds value" | ||||
|     if: | ||||
|       - condition: template | ||||
| @@ -251,6 +271,7 @@ action: | ||||
|           name: "Delay seconds" | ||||
|           message: "Delay seconds is: {{ states[delay_seconds_helper].state }}" | ||||
|  | ||||
|   # Action #3 | ||||
|   - alias: "Debug log the on_just_before_off_seconds value" | ||||
|     if: | ||||
|       - condition: template | ||||
| @@ -263,6 +284,7 @@ action: | ||||
|  | ||||
|  | ||||
|   # Take actions based on whether the "Enabled helper" was just toggled on or off | ||||
|   # Action #4 | ||||
|   - if: | ||||
|       - condition: trigger | ||||
|         id: | ||||
| @@ -271,35 +293,100 @@ action: | ||||
|     then: | ||||
|      | ||||
|       # Debug log | ||||
|       - alias: "Debug log" | ||||
|       - alias: "Debug log - Enabled Helper On/Off" | ||||
|         if: | ||||
|         - condition: template | ||||
|           value_template: "{{ debug_mode == true }}" | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           - service: logbook.log | ||||
|             data: | ||||
|               name: "Debug: Trigger" | ||||
|               message: "Enabled helper was toggled, and has triggered this automation" | ||||
|   | ||||
|   | ||||
|       # Activate the "On" scene, if motion is currently detected | ||||
|       - alias: "Activate ON scene, if motion is currently detected, otherwise activate the OFF scene" | ||||
|       - alias: "Debug log - Disabled scene" | ||||
|         if: | ||||
|           - condition: state | ||||
|             entity_id: !input motion_sensor | ||||
|             state: "on" | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           - service: logbook.log | ||||
|             data: | ||||
|               name: "Debug: Disabled scene" | ||||
|               message: "Disabled scene is currently set to: {{ disabled_scene }}" | ||||
|  | ||||
|   | ||||
|       # In "auto" mode, activate the ON or OFF scene based on whether motion is currently detected | ||||
|       # Also use "auto" mode if motion activation is ENABLED. | ||||
|       - alias: "auto mode: Activate ON scene, if motion is currently detected, otherwise activate the OFF scene" | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ disabled_scene == 'auto' or is_state( enabled_helper, 'on' ) }}" | ||||
|         then: | ||||
|           - if: | ||||
|             - condition: state | ||||
|               entity_id: !input motion_sensor | ||||
|               state: "on" | ||||
|             then: | ||||
|               - parallel: | ||||
|                 - alias: "Activate the ON scene" | ||||
|                   service: scene.turn_on | ||||
|                   target: | ||||
|                     entity_id: !input scene_on | ||||
|             else: | ||||
|               - parallel: | ||||
|                 - alias: "Activate the OFF scene" | ||||
|                   service: scene.turn_on | ||||
|                   target: | ||||
|                     entity_id: !input scene_off | ||||
|           - stop: "" | ||||
|  | ||||
|       # In ON mode, just activate the ON scene | ||||
|       - alias: "on mode: just activate the ON scene" | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ disabled_scene == 'on' }}" | ||||
|         then: | ||||
|           - parallel: | ||||
|             - alias: "Activate the ON scene" | ||||
|               service: scene.turn_on | ||||
|             - service: scene.turn_on | ||||
|               target: | ||||
|                 entity_id: !input scene_on | ||||
|         else: | ||||
|           - stop: "" | ||||
|  | ||||
|       # In OFF mode, just activate the OF scene | ||||
|       - alias: "off mode: just activate the ON scene" | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ disabled_scene == 'off' }}" | ||||
|         then: | ||||
|           - parallel: | ||||
|             - alias: "Activate the OFF scene" | ||||
|               service: scene.turn_on | ||||
|             - service: scene.turn_on | ||||
|               target: | ||||
|                 entity_id: !input scene_off | ||||
|           - stop: "" | ||||
|  | ||||
|       # In notice mode, just activate the NOTICE scene | ||||
|       - alias: "notice mode: just activate the NOTICE scene" | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ disabled_scene == 'notice' }}" | ||||
|         then: | ||||
|           - parallel: | ||||
|             - service: scene.turn_on | ||||
|               target: | ||||
|                 entity_id: !input scene_off_prep_1 | ||||
|           - stop: "" | ||||
|  | ||||
|       # In warning mode, just activate the WARNING scene | ||||
|       - alias: "warning mode: just activate the WARNING scene" | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ disabled_scene == 'warning' }}" | ||||
|         then: | ||||
|           - parallel: | ||||
|             - service: scene.turn_on | ||||
|               target: | ||||
|                 entity_id: !input scene_off_prep_2 | ||||
|           - stop: "" | ||||
|  | ||||
|       # Don't do anything after processing the enabled_helper triggers | ||||
|       - stop: "Done handling enabled helper" | ||||
|  | ||||
|  | ||||
| @@ -324,11 +411,15 @@ action: | ||||
|     # Motion is detected | ||||
|     then: | ||||
|  | ||||
|       - alias: "Log that motion was detected." | ||||
|         service: logbook.log | ||||
|         data: | ||||
|           name: "Motion On" | ||||
|           message: "Motion was detected." | ||||
|       - alias: "Debug Log that motion was detected." | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           service: logbook.log | ||||
|           data: | ||||
|             name: "Motion On" | ||||
|             message: "Motion was detected." | ||||
|  | ||||
|       - parallel: | ||||
|         - alias: "Activate the ON scene" | ||||
| @@ -340,11 +431,15 @@ action: | ||||
|     # Motion is not detected | ||||
|     else: | ||||
|  | ||||
|       - alias: "Log that the motion-off sequence will run, due to motion no longer detected." | ||||
|         service: logbook.log | ||||
|         data: | ||||
|           name: "Motion Off" | ||||
|           message: "Initiating motion-off sequence, because motion no longer detected." | ||||
|       - alias: "Debug Log that the motion-off sequence will run, due to motion no longer detected." | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           service: logbook.log | ||||
|           data: | ||||
|             name: "Motion Off" | ||||
|             message: "Initiating motion-off sequence, because motion no longer detected." | ||||
|  | ||||
|  | ||||
|       # Initial period where nothing happens | ||||
| @@ -358,19 +453,27 @@ action: | ||||
|         then: | ||||
|           - stop: "Motion detected again during initial delay." | ||||
|       - alias: "Log that the initial delay has finished." | ||||
|         service: logbook.log | ||||
|         data: | ||||
|           name: "Motion Off" | ||||
|           message: "Finished initial no-motion delay" | ||||
|         if: | ||||
|          - condition: template | ||||
|            value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           service: logbook.log | ||||
|           data: | ||||
|             name: "Motion Off" | ||||
|             message: "Finished initial no-motion delay" | ||||
|  | ||||
|  | ||||
|  | ||||
|       # Notice period, where the notice scene is shown | ||||
|       - alias: "Log that the notice period has begun." | ||||
|         service: logbook.log | ||||
|         data: | ||||
|           name: "Begin notice period" | ||||
|           message: "Begin notice period; Waiting while motion is still off." | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           service: logbook.log | ||||
|           data: | ||||
|             name: "Begin notice period" | ||||
|             message: "Begin notice period; Waiting while motion is still off." | ||||
|       - parallel: | ||||
|         - alias: "Activate Scene: Off Prep 1 (Notice)" | ||||
|           service: scene.turn_on | ||||
| @@ -421,18 +524,26 @@ action: | ||||
|                   name: "New delay" | ||||
|                   message: "New delay is {{ states[delay_seconds_helper].state }} seconds" | ||||
|           - stop: "Motion detected during notice period." | ||||
|       - service: logbook.log | ||||
|         data: | ||||
|           name: "Notice period finished." | ||||
|           message: "Notice period has finished (motion is still off)." | ||||
|       - if: | ||||
|           condition: template | ||||
|           value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           - service: logbook.log | ||||
|             data: | ||||
|               name: "Notice period finished." | ||||
|               message: "Notice period has finished (motion is still off)." | ||||
|  | ||||
|  | ||||
|       # Warning period, just before the light turns off. The warning scene is shown. | ||||
|       - alias: "Log that the warning period has begun." | ||||
|         service: logbook.log | ||||
|         data: | ||||
|           name: "Begin warning period" | ||||
|           message: "Begin warning period; Waiting while motion is still off." | ||||
|         if: | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           service: logbook.log | ||||
|           data: | ||||
|             name: "Begin warning period" | ||||
|             message: "Begin warning period; Waiting while motion is still off." | ||||
|       - parallel: | ||||
|         - alias: "Activate Scene: Off Prep 2 (Warning)" | ||||
|           service: scene.turn_on | ||||
| @@ -483,10 +594,14 @@ action: | ||||
|                   name: "New delay seconds" | ||||
|                   message: "New delay is {{ states[delay_seconds_helper].state }} seconds." | ||||
|           - stop: "Motion detected during the warning period." | ||||
|       - service: logbook.log | ||||
|         data: | ||||
|           name: "Warning period finished." | ||||
|           message: "Warning period has finished and motion is still off." | ||||
|       - if: | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           - service: logbook.log | ||||
|             data: | ||||
|               name: "Warning period finished." | ||||
|               message: "Warning period has finished and motion is still off." | ||||
|  | ||||
|  | ||||
|       # Finally, we decide to actually turn off the lights with the "Off" scene. | ||||
| @@ -533,10 +648,14 @@ action: | ||||
|           entity_id: !input delay_seconds_helper | ||||
|           value: "{{ delay_seconds_default }}" | ||||
|  | ||||
|       - service: logbook.log | ||||
|         data: | ||||
|           name: "Turning off light, due to motion off." | ||||
|           message: "Activated off-scene and reset delay." | ||||
|       - if: | ||||
|           - condition: template | ||||
|             value_template: "{{ debug_mode == true }}" | ||||
|         then: | ||||
|           - service: logbook.log | ||||
|             data: | ||||
|               name: "Turning off light, due to motion off." | ||||
|               message: "Activated off-scene and reset delay." | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user