Bugfixes and upgrades:

- Fix bug where initial timeout wouldn't be interruptted by enabled_helper
- Turned scene repeat delay into a variable (non-input for now)
- Fixed enabled_helper==off not repeating the ON scene
- Tried clarifying some logs, aliases, comments
This commit is contained in:
mike 2024-04-26 02:28:23 -07:00
parent 7626c05ad2
commit 832a71380f
1 changed files with 82 additions and 60 deletions

View File

@ -197,22 +197,23 @@ 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_count: !input scene_repeat_count
scene_repeat_delay_milliseconds: 500
trigger_variables:
enabled_helper: !input enabled_helper
enabled_helper: !input enabled_helper
############
@ -311,11 +312,17 @@ action:
# If the enabled helper is OFF, we should start by resetting
# the countdown timer to default
- 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 }}"
- 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.
@ -330,18 +337,30 @@ action:
state: "on"
then:
- alias: "Activate the ON scene"
service: scene.turn_on
target:
entity_id: !input scene_on
repeat:
count: "{{ scene_repeat_count }}"
sequence:
- service: scene.turn_on
target:
entity_id: !input scene_on
- delay:
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
else:
- alias: "Activate the OFF scene"
service: scene.turn_on
target:
entity_id: !input scene_off
- stop: ""
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."
# In ON mode, just activate the ON scene
- alias: "on mode: just activate the ON scene"
# 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"
if:
- condition: template
value_template: "{{ disabled_scene == 'on' }}"
@ -353,11 +372,11 @@ action:
target:
entity_id: !input scene_on
- delay:
milliseconds: 500
- stop: ""
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- stop: "Enabled helper is off and disabled scene was ON; Set ON scene"
# In OFF mode, just activate the OFF scene
- alias: "off mode: just activate the ON scene"
# In disabled_scene::OFF mode, just activate the OFF scene
- alias: "disabled_scene::off mode: just activate the OFF scene"
if:
- condition: template
value_template: "{{ disabled_scene == 'off' }}"
@ -369,11 +388,11 @@ action:
target:
entity_id: !input scene_off
- delay:
milliseconds: 500
- stop: ""
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- stop: "Enabled helper is off and disabled scene was OFF; Set OFF scene"
# In notice mode, just activate the NOTICE scene
- alias: "notice mode: just activate the NOTICE scene"
# In disabled_scene::notice mode, just activate the NOTICE scene
- alias: "disabled_scene::notice mode: just activate the NOTICE scene"
if:
- condition: template
value_template: "{{ disabled_scene == 'notice' }}"
@ -385,11 +404,11 @@ action:
target:
entity_id: !input scene_notice
- delay:
milliseconds: 500
- stop: ""
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- stop: "Enabled helper is off and disabled scene was NOTICE; Set NOTICE scene"
# In warning mode, just activate the WARNING scene
- alias: "warning mode: just activate the WARNING scene"
# In disabled_scene::warning mode, just activate the WARNING scene
- alias: "disabed_scene::warning mode: just activate the WARNING scene"
if:
- condition: template
value_template: "{{ disabled_scene == 'warning' }}"
@ -401,8 +420,8 @@ action:
target:
entity_id: !input scene_warning
- delay:
milliseconds: 500
- stop: ""
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- stop: "Enabled helper is off and disabled scene was WATNING; Set WARNING scene"
# Don't do anything after processing the enabled_helper triggers
- stop: "Done handling enabled helper"
@ -448,7 +467,7 @@ action:
target:
entity_id: !input scene_on
- delay:
milliseconds: 500
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
# Motion is not detected
@ -467,8 +486,8 @@ action:
# Initial period where nothing happens
- alias: "Delay appropriately before doing anything"
wait_template: "{{ states[motion_sensor].state == 'on' }}"
timeout: "{{ states[delay_seconds_helper].state or (enabled_helper != None and is_state(enabled_helper, 'off') ) }}"
wait_template: "{{ states[motion_sensor].state == 'on' or (enabled_helper != None and is_state(enabled_helper, 'off') ) }}"
timeout: "{{ states[delay_seconds_helper].state }}"
- alias: "Quit now if the enabled-helper went OFF"
if:
@ -477,9 +496,10 @@ action:
- condition: template
value_template: "{{ is_state( enabled_helper, 'off' ) }}"
then:
stop: "Quitting early because the enabled-helper went OFF."
stop: "Interrupted initial delay because the enabled helper turned OFF."
- if:
- alias: "Motion detected again during initial delay; Interrupt initial delay"
if:
- condition: state
entity_id: !input motion_sensor
state: "on"
@ -516,7 +536,7 @@ action:
target:
entity_id: !input scene_notice
- delay:
milliseconds: 500
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- alias: "Delay during the notice period"
wait_template: "{{ states[motion_sensor].state == 'on' or (enabled_helper != None and is_state('enabled_helper', 'off') ) }}"
@ -529,13 +549,14 @@ action:
- condition: template
value_template: "{{ is_state( enabled_helper, 'off' ) }}"
then:
stop: "Quitting early because the enabled-helper went OFF."
stop: "Interrupting NOTICE period because the enabled-helper went OFF."
- if:
- condition: state
entity_id: !input motion_sensor
state: "on"
- alias: "If motion interrupted the NOTICE period, activate the ON scene"
if:
- condition: state
entity_id: !input motion_sensor
state: "on"
then:
- alias: "Activate Scene: On"
@ -604,7 +625,7 @@ action:
target:
entity_id: !input scene_warning
- delay:
milliseconds: 500
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- alias: "Delay during the warning period"
wait_template: "{{ states[motion_sensor].state == 'on' or (enabled_helper != None and is_state('enabled_helper', 'off') ) }}"
@ -617,12 +638,13 @@ action:
- condition: template
value_template: "{{ is_state( enabled_helper, 'off' ) }}"
then:
stop: "Quitting early because the enabled-helper went OFF."
stop: "Interrupting the WARNING sequence because the enabled-helper went OFF."
- if:
- condition: state
entity_id: !input motion_sensor
state: "on"
- alias: "If motion interrupts the WARNING sequence, just activate the ON scene"
if:
- condition: state
entity_id: !input motion_sensor
state: "on"
then:
- alias: "Activate Scene: On"
@ -633,7 +655,7 @@ action:
target:
entity_id: !input scene_on
- delay:
milliseconds: 500
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- alias: "Double countdown timer when user interrupts the warning period."
service: input_number.set_value
@ -719,7 +741,7 @@ action:
target:
entity_id: !input scene_off
- delay:
milliseconds: 500
milliseconds: "{{ scene_repeat_delay_milliseconds }}"
- alias: "Reset countdown timer after turning off lights."
service: input_number.set_value