Try using an external counter

This commit is contained in:
2025-10-25 22:23:04 -07:00
parent 3f82719fa4
commit d5034210ed

View File

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