3 Commits

Author SHA1 Message Date
c059a2773f Whoops name 2023-11-15 05:54:36 -08:00
acaf3518c2 Upgrades might be working:
* Specify max delay
* Specify delay multiplier
* Specify off-before-on seconds
* Specify debug mode logging
2023-11-15 05:53:03 -08:00
c289fce42b Work 2023-11-15 05:00:36 -08:00

View File

@ -16,7 +16,7 @@ blueprint:
description: "Entity ID of the motion sensor" description: "Entity ID of the motion sensor"
selector: selector:
entity: entity:
domain: binary_sensor # domain: binary_sensor
# for some reason, using a device_class of motion_sensor ends up hiding the actual motion sensors # for some reason, using a device_class of motion_sensor ends up hiding the actual motion sensors
# device_class: motion_sensor # device_class: motion_sensor
@ -41,6 +41,30 @@ blueprint:
mode: box mode: box
delay_seconds_multiplier:
name: "Delay seconds multiplier"
description: "When the off sequence gets interrupted by new motion, multiply the delay seconds by this number. A decent value might be 2."
default: 2.0
selector:
number:
min: 1.0
max: 1000.0
step: 0.1
mode: box
delay_seconds_max:
name: "Maximum delay seconds"
description: "The maximum delay during no motion before the motion-off sequence begins."
default: 3600
selector:
number:
min: 5
max: 3000000
step: 1
mode: box
notice_seconds: notice_seconds:
name: "Notice seconds" name: "Notice seconds"
description: "The number of seconds to wait in the Prep1 (Notice) scene." description: "The number of seconds to wait in the Prep1 (Notice) scene."
@ -97,9 +121,28 @@ blueprint:
domain: scene domain: scene
on_just_before_off: on_just_before_off_seconds:
name: "Use On scene just before Off scene." name: "\"On\" just before \"Off\""
description: "Toggle this to \"on\" if you would like the \"On\" scene to trigger just before the \"Off\" scene. This is sometimes helpful to mitigate an issue where the \"On\" scene doesn't apply all colors and settings correctly from an \"Off\" state." 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
debug_mode:
name: "Debug mode."
description: "Enable debug mode, which increases logging."
default: false
selector: selector:
boolean: {} boolean: {}
@ -110,12 +153,15 @@ blueprint:
variables: variables:
motion_sensor: !input motion_sensor motion_sensor: !input motion_sensor
delay_seconds: !input delay_seconds_helper delay_seconds: !input delay_seconds_helper
delay_seconds_default: !input delay_seconds_default delay_seconds_default: !input delay_seconds_default
notice_seconds: !input notice_seconds delay_seconds_multiplier: !input delay_seconds_multiplier
warning_seconds: !input warning_seconds delay_seconds_max: !input delay_seconds_max
on_just_before_off: !input on_just_before_off notice_seconds: !input notice_seconds
warning_seconds: !input warning_seconds
on_just_before_off_seconds: !input on_just_before_off_seconds
debug_mode: !input debug_mode
############ ############
@ -142,12 +188,15 @@ action:
name: "First log" name: "First log"
message: "Motion automation has started. Delay counter is: {{ states[delay_seconds].state }}" message: "Motion automation has started. Delay counter is: {{ states[delay_seconds].state }}"
- alias: "Debug log the on_just_before_off bool" - alias: "Debug log the on_just_before_off_seconds value"
enabled: false if:
service: logbook.log - condition: template
data: value_template: "{{ debug_mode == true }}"
name: "Debug: On just before off?" then:
message: "On just before off is: {{ on_just_before_off }} " service: logbook.log
data:
name: "Debug: On just before off seconds"
message: "On just before off is: {{ on_just_before_off_seconds }} "
- if: - if:
- condition: state - condition: state
@ -180,7 +229,7 @@ action:
message: "Initiating motion-off sequence, because motion no longer detected." message: "Initiating motion-off sequence, because motion no longer detected."
# Initial period where nothing happens # Initial period where nothing happens
- alias: "Delay appropriately before doing anything" - alias: "Delay appropriately before doing anything"
wait_template: "{{ states[motion_sensor].state == 'on' }}" wait_template: "{{ states[motion_sensor].state == 'on' }}"
timeout: "{{ states[delay_seconds].state }}" timeout: "{{ states[delay_seconds].state }}"
@ -222,11 +271,37 @@ action:
service: scene.turn_on service: scene.turn_on
target: target:
entity_id: !input scene_on entity_id: !input scene_on
- alias: "Double countdown timer when user interrupts the notice period." - alias: "Increase countdown timer when user interrupts the notice period."
service: input_number.set_value service: input_number.set_value
data: data:
entity_id: !input delay_seconds_helper entity_id: !input delay_seconds_helper
value: "{{ states[delay_seconds].state | int * 2 }}" value: "{{ states[delay_seconds].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 }}"
then:
- service: input_number.set_value
data:
entity_id: !input delay_seconds_helper
value: "{{ delay_seconds_max | int }}"
- if:
- condition: template
value_template: "{{ debug_mode == true }}"
then:
- service: logbook.log
data:
name: "Limiting delay seconds"
message: "Delay limited to max: {{ states[delay_seconds].state }}"
- alias: "Log new delay"
if:
- condition: template
value_template: "{{ debug_mode == true }}"
then:
- service: logbook.log
data:
name: "New delay"
message: "New delay is {{ states[delay_seconds].state }} seconds"
- stop: "Motion detected during notice period." - stop: "Motion detected during notice period."
- service: logbook.log - service: logbook.log
data: data:
@ -262,7 +337,33 @@ action:
service: input_number.set_value service: input_number.set_value
data: data:
entity_id: !input delay_seconds_helper entity_id: !input delay_seconds_helper
value: "{{ states[delay_seconds].state | int * 2 }}" value: "{{ states[delay_seconds].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 }}"
then:
- service: input_number.set_value
data:
entity_id: !input delay_seconds_helper
value: "{{ delay_seconds_max | int }}"
- if:
- condition: template
value_template: "{{ debug_mode == true }}"
then:
- service: logbook.log
data:
name: "Limiting delay seconds"
message: "Delay limited to max: {{ states[delay_seconds].state }}"
- alias: "Log new delay seconds"
if:
- condition: template
value_template: "{{ debug_mode == true }}"
then:
- service: logbook.log
data:
name: "New delay seconds"
message: "New delay is {{ states[delay_seconds].state }} seconds."
- stop: "Motion detected during the warning period." - stop: "Motion detected during the warning period."
- service: logbook.log - service: logbook.log
data: data:
@ -275,20 +376,32 @@ action:
# Maybe turn on the "On" scene just before the "Off" scene, if the user enabled this option # Maybe turn on the "On" scene just before the "Off" scene, if the user enabled this option
- if: - if:
- condition: template - condition: template
value_template: "{{ on_just_before_off == true }}" value_template: "{{ on_just_before_off_seconds > 0 }}"
then: then:
- alias: "Do a debug log" - alias: "Log the number of on-before-off seconds"
enabled: false if:
service: logbook.log - condition: template
data: value_template: "{{ debug_mode == true }}"
name: "DEBUG: Will turn on before off?" then:
message: "Yes, will turn on just before off!" 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 - service: scene.turn_on
target: target:
entity_id: !input scene_on entity_id: !input scene_on
- alias: "Wait a second to set the \"On\" scene." - alias: "Wait a second to set the \"On\" scene."
delay: delay:
seconds: 1 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"
- parallel: - parallel:
- alias: "Activate Scene: Off (Done)" - alias: "Activate Scene: Off (Done)"