Compare commits
No commits in common. "master" and "v2.1.0" have entirely different histories.
@ -25,13 +25,4 @@ The automation also obeys a toggle helper to enable/disable motion activation. T
|
||||
|
||||
This automation can retry a scene multiple times in a row to help overcome buggy/slow networks or lights that fail to set brightness/color correctly when first turned on.
|
||||
|
||||
## Disclaimer
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
By using this software you agree to the disclaimer.
|
||||
|
||||
|
@ -138,22 +138,22 @@ blueprint:
|
||||
mode: box
|
||||
|
||||
|
||||
on_just_before_off_seconds:
|
||||
name: "\"On\" just before \"Off\""
|
||||
description: >
|
||||
When the "Off" scene is about to be shown, you may wish to quickly show the "On" scene for a number of seconds just before.
|
||||
This is sometimes helpful to mitigate an issue where the "On" scene doesn't apply all colors and settings correctly from an "Off" state.
|
||||
Set this to a value greater than 0 to enable.
|
||||
A value of 0 will disable this feature.
|
||||
Note that sometimes, a value that is too short (e.g., 1) may also cause issues.
|
||||
|
||||
default: 1
|
||||
selector:
|
||||
number:
|
||||
min: 1
|
||||
max: 86400
|
||||
step: 0.1
|
||||
mode: box
|
||||
# on_just_before_off_seconds:
|
||||
# name: "\"On\" just before \"Off\""
|
||||
# description: >
|
||||
# When the "Off" scene is about to be shown, you may wish to quickly show the "On" scene for a number of seconds just before.
|
||||
# This is sometimes helpful to mitigate an issue where the "On" scene doesn't apply all colors and settings correctly from an "Off" state.
|
||||
# Set this to a value greater than 0 to enable.
|
||||
# A value of 0 will disable this feature.
|
||||
# Note that sometimes, a value that is too short (e.g., 1) may also cause issues.
|
||||
#
|
||||
# default: 1
|
||||
# selector:
|
||||
# number:
|
||||
# min: 1
|
||||
# max: 86400
|
||||
# step: 1
|
||||
# mode: box
|
||||
|
||||
|
||||
enabled_helper:
|
||||
@ -197,23 +197,22 @@ blueprint:
|
||||
|
||||
variables:
|
||||
|
||||
motion_sensor: !input motion_sensor
|
||||
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
|
||||
disabled_scene: !input disabled_scene
|
||||
debug_mode: !input debug_mode
|
||||
motion_sensor: !input motion_sensor
|
||||
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
|
||||
disabled_scene: !input disabled_scene
|
||||
debug_mode: !input debug_mode
|
||||
|
||||
scene_repeat_count: !input scene_repeat_count
|
||||
scene_repeat_delay_milliseconds: 500
|
||||
scene_repeat_count: !input scene_repeat_count
|
||||
|
||||
trigger_variables:
|
||||
enabled_helper: !input enabled_helper
|
||||
enabled_helper: !input enabled_helper
|
||||
|
||||
|
||||
############
|
||||
@ -279,11 +278,11 @@ action:
|
||||
name: "Delay seconds"
|
||||
message: "Delay seconds is: {{ states[delay_seconds_helper].state }}"
|
||||
|
||||
- alias: "Debug log the on_just_before_off_seconds value"
|
||||
service: logbook.log
|
||||
data:
|
||||
name: "Debug: On just before off seconds"
|
||||
message: "On just before off is: {{ on_just_before_off_seconds }} "
|
||||
# - alias: "Debug log the on_just_before_off_seconds value"
|
||||
# service: logbook.log
|
||||
# data:
|
||||
# name: "Debug: On just before off seconds"
|
||||
# message: "On just before off is: {{ on_just_before_off_seconds }} "
|
||||
|
||||
# Take actions based on whether the "Enabled helper" was just toggled on or off
|
||||
# Action #1
|
||||
@ -310,20 +309,6 @@ action:
|
||||
name: "Debug: Disabled scene"
|
||||
message: "Disabled scene is currently set to: {{ disabled_scene }}"
|
||||
|
||||
# If the enabled helper is OFF, we should start by resetting
|
||||
# the countdown timer to default
|
||||
- alias: "If the enabled helper is OFF, reset countdown timer to default"
|
||||
if:
|
||||
- condition: trigger
|
||||
id:
|
||||
- Enabled Helper is off
|
||||
then:
|
||||
- alias: "Reset countdown timer when enabled helper is switched OFF."
|
||||
service: input_number.set_value
|
||||
data:
|
||||
entity_id: !input delay_seconds_helper
|
||||
value: "{{ delay_seconds_default }}"
|
||||
|
||||
# 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"
|
||||
@ -337,30 +322,18 @@ action:
|
||||
state: "on"
|
||||
then:
|
||||
- alias: "Activate the ON scene"
|
||||
repeat:
|
||||
count: "{{ scene_repeat_count }}"
|
||||
sequence:
|
||||
- service: scene.turn_on
|
||||
target:
|
||||
entity_id: !input scene_on
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
service: scene.turn_on
|
||||
target:
|
||||
entity_id: !input scene_on
|
||||
else:
|
||||
- alias: "Activate the OFF scene"
|
||||
repeat:
|
||||
count: "{{ scene_repeat_count }}"
|
||||
sequence:
|
||||
- service: scene.turn_on
|
||||
target:
|
||||
entity_id: !input scene_off
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
- stop: "Enabled helper was on or auto mode was on; Determined scene to activate based on current motion."
|
||||
service: scene.turn_on
|
||||
target:
|
||||
entity_id: !input scene_off
|
||||
- stop: ""
|
||||
|
||||
# At this point, the enabled helper is assumed to be OFF
|
||||
|
||||
# In disabled_scene::ON mode, just activate the ON scene
|
||||
- alias: "disabled_scene::on mode: just activate the ON scene"
|
||||
# In ON mode, just activate the ON scene
|
||||
- alias: "on mode: just activate the ON scene"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ disabled_scene == 'on' }}"
|
||||
@ -372,11 +345,11 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_on
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
- stop: "Enabled helper is off and disabled scene was ON; Set ON scene"
|
||||
milliseconds: 500
|
||||
- stop: ""
|
||||
|
||||
# In disabled_scene::OFF mode, just activate the OFF scene
|
||||
- alias: "disabled_scene::off mode: just activate the OFF scene"
|
||||
# In OFF mode, just activate the OFF scene
|
||||
- alias: "off mode: just activate the ON scene"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ disabled_scene == 'off' }}"
|
||||
@ -388,11 +361,11 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_off
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
- stop: "Enabled helper is off and disabled scene was OFF; Set OFF scene"
|
||||
milliseconds: 500
|
||||
- stop: ""
|
||||
|
||||
# In disabled_scene::notice mode, just activate the NOTICE scene
|
||||
- alias: "disabled_scene::notice mode: just activate the NOTICE scene"
|
||||
# In notice mode, just activate the NOTICE scene
|
||||
- alias: "notice mode: just activate the NOTICE scene"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ disabled_scene == 'notice' }}"
|
||||
@ -404,11 +377,11 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_notice
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
- stop: "Enabled helper is off and disabled scene was NOTICE; Set NOTICE scene"
|
||||
milliseconds: 500
|
||||
- stop: ""
|
||||
|
||||
# In disabled_scene::warning mode, just activate the WARNING scene
|
||||
- alias: "disabed_scene::warning mode: just activate the WARNING scene"
|
||||
# In warning mode, just activate the WARNING scene
|
||||
- alias: "warning mode: just activate the WARNING scene"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ disabled_scene == 'warning' }}"
|
||||
@ -420,8 +393,8 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_warning
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
- stop: "Enabled helper is off and disabled scene was WATNING; Set WARNING scene"
|
||||
milliseconds: 500
|
||||
- stop: ""
|
||||
|
||||
# Don't do anything after processing the enabled_helper triggers
|
||||
- stop: "Done handling enabled helper"
|
||||
@ -467,7 +440,7 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_on
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
milliseconds: 500
|
||||
|
||||
|
||||
# Motion is not detected
|
||||
@ -486,8 +459,8 @@ action:
|
||||
|
||||
# Initial period where nothing happens
|
||||
- alias: "Delay appropriately before doing anything"
|
||||
wait_template: "{{ states[motion_sensor].state == 'on' or (enabled_helper != None and is_state(enabled_helper, 'off') ) }}"
|
||||
timeout: "{{ states[delay_seconds_helper].state }}"
|
||||
wait_template: "{{ states[motion_sensor].state == 'on' }}"
|
||||
timeout: "{{ states[delay_seconds_helper].state or (enabled_helper != None and is_state(enabled_helper, 'off') ) }}"
|
||||
|
||||
- alias: "Quit now if the enabled-helper went OFF"
|
||||
if:
|
||||
@ -496,10 +469,9 @@ action:
|
||||
- condition: template
|
||||
value_template: "{{ is_state( enabled_helper, 'off' ) }}"
|
||||
then:
|
||||
stop: "Interrupted initial delay because the enabled helper turned OFF."
|
||||
stop: "Quitting early because the enabled-helper went OFF."
|
||||
|
||||
- alias: "Motion detected again during initial delay; Interrupt initial delay"
|
||||
if:
|
||||
- if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
state: "on"
|
||||
@ -536,7 +508,7 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_notice
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
milliseconds: 500
|
||||
|
||||
- alias: "Delay during the notice period"
|
||||
wait_template: "{{ states[motion_sensor].state == 'on' or (enabled_helper != None and is_state('enabled_helper', 'off') ) }}"
|
||||
@ -549,14 +521,13 @@ action:
|
||||
- condition: template
|
||||
value_template: "{{ is_state( enabled_helper, 'off' ) }}"
|
||||
then:
|
||||
stop: "Interrupting NOTICE period because the enabled-helper went OFF."
|
||||
stop: "Quitting early because the enabled-helper went OFF."
|
||||
|
||||
|
||||
- alias: "If motion interrupted the NOTICE period, activate the ON scene"
|
||||
if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
state: "on"
|
||||
- if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
state: "on"
|
||||
then:
|
||||
|
||||
- alias: "Activate Scene: On"
|
||||
@ -625,7 +596,7 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_warning
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
milliseconds: 500
|
||||
|
||||
- alias: "Delay during the warning period"
|
||||
wait_template: "{{ states[motion_sensor].state == 'on' or (enabled_helper != None and is_state('enabled_helper', 'off') ) }}"
|
||||
@ -638,13 +609,12 @@ action:
|
||||
- condition: template
|
||||
value_template: "{{ is_state( enabled_helper, 'off' ) }}"
|
||||
then:
|
||||
stop: "Interrupting the WARNING sequence because the enabled-helper went OFF."
|
||||
stop: "Quitting early because the enabled-helper went OFF."
|
||||
|
||||
- alias: "If motion interrupts the WARNING sequence, just activate the ON scene"
|
||||
if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
state: "on"
|
||||
- if:
|
||||
- condition: state
|
||||
entity_id: !input motion_sensor
|
||||
state: "on"
|
||||
then:
|
||||
|
||||
- alias: "Activate Scene: On"
|
||||
@ -655,7 +625,7 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_on
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
milliseconds: 500
|
||||
|
||||
- alias: "Double countdown timer when user interrupts the warning period."
|
||||
service: input_number.set_value
|
||||
@ -704,34 +674,34 @@ action:
|
||||
# Finally, we decide to actually turn off the lights with the "Off" scene.
|
||||
|
||||
# Maybe turn on the "On" scene just before the "Off" scene, if the user enabled this option
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ on_just_before_off_seconds > 0 }}"
|
||||
then:
|
||||
- alias: "Log the number of on-before-off seconds"
|
||||
if:
|
||||
- condition: template
|
||||
value_template: "{{ debug_mode == true }}"
|
||||
then:
|
||||
service: logbook.log
|
||||
data:
|
||||
name: "On-Before-Off seconds"
|
||||
message: "Will turn on for {{ on_just_before_off_seconds }} seconds before off."
|
||||
- service: scene.turn_on
|
||||
target:
|
||||
entity_id: !input scene_on
|
||||
- alias: "Wait a second to set the \"On\" scene."
|
||||
delay:
|
||||
seconds: "{{ on_just_before_off_seconds }}"
|
||||
else:
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ debug_mode == true }}"
|
||||
then:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: "Won't run on-before-off"
|
||||
message: "Won't run on-before-off because seconds was less than 1"
|
||||
# - if:
|
||||
# - condition: template
|
||||
# value_template: "{{ on_just_before_off_seconds > 0 }}"
|
||||
# then:
|
||||
# - alias: "Log the number of on-before-off seconds"
|
||||
# if:
|
||||
# - condition: template
|
||||
# value_template: "{{ debug_mode == true }}"
|
||||
# then:
|
||||
# service: logbook.log
|
||||
# data:
|
||||
# name: "On-Before-Off seconds"
|
||||
# message: "Will turn on for {{ on_just_before_off_seconds }} seconds before off."
|
||||
# - service: scene.turn_on
|
||||
# target:
|
||||
# entity_id: !input scene_on
|
||||
# - alias: "Wait a second to set the \"On\" scene."
|
||||
# delay:
|
||||
# seconds: "{{ on_just_before_off_seconds }}"
|
||||
# else:
|
||||
# - if:
|
||||
# - condition: template
|
||||
# value_template: "{{ debug_mode == true }}"
|
||||
# then:
|
||||
# - service: logbook.log
|
||||
# data:
|
||||
# name: "Won't run on-before-off"
|
||||
# message: "Won't run on-before-off because seconds was less than 1"
|
||||
|
||||
- alias: "Activate Scene: Off (Done)"
|
||||
repeat:
|
||||
@ -741,7 +711,7 @@ action:
|
||||
target:
|
||||
entity_id: !input scene_off
|
||||
- delay:
|
||||
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
|
||||
milliseconds: 500
|
||||
|
||||
- alias: "Reset countdown timer after turning off lights."
|
||||
service: input_number.set_value
|
||||
|
Loading…
Reference in New Issue
Block a user