New feature: Allow optional boolean input helper to enable/disable motion activation, so we can activate proper ON/OFF scene based on motion at the time of enabling/disabling.
(also rename an input variable)
This commit is contained in:
parent
9f143ffb9a
commit
aa187ac3a2
@ -141,6 +141,18 @@ blueprint:
|
||||
mode: box
|
||||
|
||||
|
||||
enabled_helper:
|
||||
name: "Enabled helper"
|
||||
description: >
|
||||
Helper variable that will control whether motion activation is enabled or disabled.
|
||||
This will allow this blueprint to correctly select the "On" or "Off" scene, based on whether motion is currently detected when disabled.
|
||||
An example would be a "Toggle" helper.
|
||||
default: # Allows no selection
|
||||
selector:
|
||||
entity:
|
||||
domain: input_boolean
|
||||
|
||||
|
||||
debug_mode:
|
||||
name: "Debug mode."
|
||||
description: "Enable debug mode, which increases logging."
|
||||
@ -156,16 +168,21 @@ blueprint:
|
||||
variables:
|
||||
|
||||
motion_sensor: !input motion_sensor
|
||||
delay_seconds: !input delay_seconds_helper
|
||||
delay_seconds_helper: !input delay_seconds_helper
|
||||
delay_seconds_default: !input delay_seconds_default
|
||||
delay_seconds_multiplier: !input delay_seconds_multiplier
|
||||
delay_seconds_max: !input delay_seconds_max
|
||||
notice_seconds: !input notice_seconds
|
||||
warning_seconds: !input warning_seconds
|
||||
on_just_before_off_seconds: !input on_just_before_off_seconds
|
||||
enabled_helper: !input enabled_helper
|
||||
debug_mode: !input debug_mode
|
||||
|
||||
|
||||
trigger_variables:
|
||||
enabled_helper: !input enabled_helper
|
||||
|
||||
|
||||
############
|
||||
### Triggers
|
||||
############
|
||||
@ -173,22 +190,66 @@ variables:
|
||||
trigger:
|
||||
|
||||
- platform: state
|
||||
id: Motion changed
|
||||
entity_id:
|
||||
- !input motion_sensor
|
||||
to:
|
||||
- "on"
|
||||
- "off"
|
||||
|
||||
- platform: template
|
||||
id: "Enabled helper is on"
|
||||
value_template: "{{ (enabled_helper != None) and is_state( enabled_helper, 'on' ) }}"
|
||||
|
||||
- platform: template
|
||||
id: "Enabled helper is off"
|
||||
value_template: "{{ (enabled_helper != None) and is_state( enabled_helper, 'off' ) }}"
|
||||
|
||||
|
||||
###########
|
||||
### Actions
|
||||
###########
|
||||
|
||||
action:
|
||||
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "First log"
|
||||
message: "Motion automation has started. Delay counter is: {{ states[delay_seconds].state }}"
|
||||
- alias: "Debug log whether the enabled_helper was set"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ debug_mode == true or true }}"
|
||||
then:
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ not enabled_helper == None }}"
|
||||
then:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "Enabled helper"
|
||||
message: "Enabled helper is: {{ enabled_helper }}"
|
||||
else:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "Enabled helper"
|
||||
message: "Enabled helper is not set."
|
||||
|
||||
- alias: "Debug log the enabled_helper name"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ debug_mode == true }}"
|
||||
then:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "Enabled helper"
|
||||
message: "Enabled helper name is: {{ enabled_helper }}"
|
||||
|
||||
- alias: "Debug log the current delay_seconds value"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ debug_mode == true }}"
|
||||
then:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "Delay seconds"
|
||||
message: "Delay seconds is: {{ states[delay_seconds_helper].state }}"
|
||||
|
||||
- alias: "Debug log the on_just_before_off_seconds value"
|
||||
if:
|
||||
@ -200,12 +261,67 @@ action:
|
||||
name: "Debug: On just before off seconds"
|
||||
message: "On just before off is: {{ on_just_before_off_seconds }} "
|
||||
|
||||
- if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
state: "on"
|
||||
|
||||
# Take actions based on Motion being detected!
|
||||
# Take actions based on whether the "Enabled helper" was just toggled on or off
|
||||
- if:
|
||||
- condition: trigger
|
||||
id:
|
||||
- Enabled helper is on
|
||||
- Enabled helper is off
|
||||
then:
|
||||
|
||||
# Debug log
|
||||
- alias: "Debug log"
|
||||
if:
|
||||
- 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"
|
||||
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: "Done handling enabled helper"
|
||||
|
||||
|
||||
|
||||
|
||||
# Take actions based on whether Motion is detected
|
||||
- alias: "Refuse to do anything if the enabled-helper says we're OFF."
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ enabled_helper != None }}"
|
||||
- condition: template
|
||||
value_template: "{{ not is_state( enabled_helper, 'on' ) }}"
|
||||
then:
|
||||
stop: "Refusing to continue because the enabled-helper is OFF."
|
||||
|
||||
- if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
state: "on"
|
||||
|
||||
|
||||
# Motion is detected
|
||||
then:
|
||||
|
||||
- alias: "Log that motion was detected."
|
||||
@ -221,7 +337,7 @@ action:
|
||||
entity_id: !input scene_on
|
||||
|
||||
|
||||
# Take actions based on Motion being undetected
|
||||
# Motion is not detected
|
||||
else:
|
||||
|
||||
- alias: "Log that the motion-off sequence will run, due to motion no longer detected."
|
||||
@ -234,7 +350,7 @@ action:
|
||||
# Initial period where nothing happens
|
||||
- alias: "Delay appropriately before doing anything"
|
||||
wait_template: "{{ states[motion_sensor].state == 'on' }}"
|
||||
timeout: "{{ states[delay_seconds].state }}"
|
||||
timeout: "{{ states[delay_seconds_helper].state }}"
|
||||
- if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
@ -277,11 +393,11 @@ action:
|
||||
service: input_number.set_value
|
||||
data:
|
||||
entity_id: !input delay_seconds_helper
|
||||
value: "{{ states[delay_seconds].state | int * delay_seconds_multiplier }}"
|
||||
value: "{{ states[delay_seconds_helper].state | int * delay_seconds_multiplier }}"
|
||||
- alias: "Limit delay seconds to its defined maximum"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ states[delay_seconds].state | int > delay_seconds_max | int }}"
|
||||
value_template: "{{ states[delay_seconds_helper].state | int > delay_seconds_max | int }}"
|
||||
then:
|
||||
- service: input_number.set_value
|
||||
data:
|
||||
@ -294,7 +410,7 @@ action:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "Limiting delay seconds"
|
||||
message: "Delay limited to max: {{ states[delay_seconds].state }}"
|
||||
message: "Delay limited to max: {{ states[delay_seconds_helper].state }}"
|
||||
- alias: "Log new delay"
|
||||
if:
|
||||
- condition: template
|
||||
@ -303,7 +419,7 @@ action:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "New delay"
|
||||
message: "New delay is {{ states[delay_seconds].state }} seconds"
|
||||
message: "New delay is {{ states[delay_seconds_helper].state }} seconds"
|
||||
- stop: "Motion detected during notice period."
|
||||
- service: logbook.log
|
||||
data:
|
||||
@ -339,11 +455,11 @@ action:
|
||||
service: input_number.set_value
|
||||
data:
|
||||
entity_id: !input delay_seconds_helper
|
||||
value: "{{ states[delay_seconds].state | int * delay_seconds_multiplier }}"
|
||||
value: "{{ states[delay_seconds_helper].state | int * delay_seconds_multiplier }}"
|
||||
- alias: "Limit delay seconds to its defined maximum"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ states[delay_seconds].state | int > delay_seconds_max | int }}"
|
||||
value_template: "{{ states[delay_seconds_helper].state | int > delay_seconds_max | int }}"
|
||||
then:
|
||||
- service: input_number.set_value
|
||||
data:
|
||||
@ -356,7 +472,7 @@ action:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "Limiting delay seconds"
|
||||
message: "Delay limited to max: {{ states[delay_seconds].state }}"
|
||||
message: "Delay limited to max: {{ states[delay_seconds_helper].state }}"
|
||||
- alias: "Log new delay seconds"
|
||||
if:
|
||||
- condition: template
|
||||
@ -365,7 +481,7 @@ action:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "New delay seconds"
|
||||
message: "New delay is {{ states[delay_seconds].state }} seconds."
|
||||
message: "New delay is {{ states[delay_seconds_helper].state }} seconds."
|
||||
- stop: "Motion detected during the warning period."
|
||||
- service: logbook.log
|
||||
data:
|
||||
|
Loading…
Reference in New Issue
Block a user