Compare commits

..

No commits in common. "master" and "v2.1.0" have entirely different histories.

2 changed files with 105 additions and 144 deletions

View File

@ -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.

View File

@ -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