Try using an external counter
This commit is contained in:
@@ -9,6 +9,14 @@ blueprint:
|
|||||||
selector:
|
selector:
|
||||||
entity: {}
|
entity: {}
|
||||||
|
|
||||||
|
press_counter:
|
||||||
|
name: Multi-Press Counter
|
||||||
|
description: House-wide counter helper for tracking presses (create counter.multi_press_counter)
|
||||||
|
default: counter.multi_press_counter
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: counter
|
||||||
|
|
||||||
time_window:
|
time_window:
|
||||||
name: Time Window
|
name: Time Window
|
||||||
description: Maximum time between presses (in seconds)
|
description: Maximum time between presses (in seconds)
|
||||||
@@ -55,7 +63,7 @@ blueprint:
|
|||||||
selector:
|
selector:
|
||||||
action: {}
|
action: {}
|
||||||
|
|
||||||
mode: single
|
mode: restart
|
||||||
max_exceeded: silent
|
max_exceeded: silent
|
||||||
|
|
||||||
trigger:
|
trigger:
|
||||||
@@ -64,59 +72,56 @@ trigger:
|
|||||||
|
|
||||||
action:
|
action:
|
||||||
- variables:
|
- variables:
|
||||||
press_count: 1
|
|
||||||
time_window: !input time_window
|
time_window: !input time_window
|
||||||
immediate: !input immediate_single_press
|
immediate: !input immediate_single_press
|
||||||
trigger_entity: !input trigger_entity
|
counter_entity: !input press_counter
|
||||||
initial_last_changed: "{{ states[trigger_entity].last_changed }}"
|
|
||||||
|
# Increment the counter (each restart = new press)
|
||||||
|
- action: counter.increment
|
||||||
|
target:
|
||||||
|
entity_id: !input press_counter
|
||||||
|
|
||||||
# Execute single press immediately if enabled
|
# Execute single press immediately if enabled
|
||||||
- if:
|
- if:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ immediate }}"
|
value_template: "{{ immediate and states(counter_entity) | int == 1 }}"
|
||||||
then:
|
then:
|
||||||
- choose:
|
- choose:
|
||||||
- conditions: []
|
- conditions: []
|
||||||
sequence: !input single_press_action
|
sequence: !input single_press_action
|
||||||
|
|
||||||
# Wait for additional presses by monitoring last_changed
|
# Wait for the time window to see if more presses come
|
||||||
- repeat:
|
- delay:
|
||||||
while:
|
|
||||||
- condition: template
|
|
||||||
value_template: "{{ press_count < 4 }}"
|
|
||||||
sequence:
|
|
||||||
- wait_template: "{{ states[trigger_entity].last_changed != initial_last_changed }}"
|
|
||||||
timeout:
|
|
||||||
seconds: "{{ time_window }}"
|
seconds: "{{ time_window }}"
|
||||||
continue_on_timeout: true
|
|
||||||
|
|
||||||
- if:
|
# Get final press count and execute appropriate action
|
||||||
- condition: template
|
|
||||||
value_template: "{{ not wait.completed }}"
|
|
||||||
then:
|
|
||||||
- variables:
|
- variables:
|
||||||
press_count: "{{ press_count + 1 }}"
|
final_count: "{{ states(counter_entity) | int }}"
|
||||||
initial_last_changed: "{{ states[trigger_entity].last_changed }}"
|
|
||||||
|
# Reset counter before executing actions
|
||||||
|
- action: counter.reset
|
||||||
|
target:
|
||||||
|
entity_id: !input press_counter
|
||||||
|
|
||||||
# Execute action based on final press count
|
# Execute action based on final press count
|
||||||
- choose:
|
- choose:
|
||||||
# Only run single press if NOT immediate (delayed mode)
|
# Only run single press if NOT immediate (delayed mode)
|
||||||
- conditions:
|
- conditions:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ press_count == 1 and not immediate }}"
|
value_template: "{{ final_count == 1 and not immediate }}"
|
||||||
sequence: !input single_press_action
|
sequence: !input single_press_action
|
||||||
|
|
||||||
- conditions:
|
- conditions:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ press_count == 2 }}"
|
value_template: "{{ final_count == 2 }}"
|
||||||
sequence: !input double_press_action
|
sequence: !input double_press_action
|
||||||
|
|
||||||
- conditions:
|
- conditions:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ press_count == 3 }}"
|
value_template: "{{ final_count == 3 }}"
|
||||||
sequence: !input triple_press_action
|
sequence: !input triple_press_action
|
||||||
|
|
||||||
- conditions:
|
- conditions:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ press_count == 4 }}"
|
value_template: "{{ final_count >= 4 }}"
|
||||||
sequence: !input quad_press_action
|
sequence: !input quad_press_action
|
||||||
|
|||||||
Reference in New Issue
Block a user