From d262aa1771174dfbbe1192385001bd5bd2ae4a02 Mon Sep 17 00:00:00 2001 From: John Ogle Date: Sat, 25 Oct 2025 21:39:35 -0700 Subject: [PATCH] Add multi_press_action --- multi_press_action.yaml | 121 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 multi_press_action.yaml diff --git a/multi_press_action.yaml b/multi_press_action.yaml new file mode 100644 index 0000000..e23bcd6 --- /dev/null +++ b/multi_press_action.yaml @@ -0,0 +1,121 @@ +blueprint: + name: Multi-Press Action + description: Trigger different actions based on how many times an entity changes state rapidly + domain: automation + input: + trigger_entity: + name: Trigger Entity + description: The entity to monitor for state changes + selector: + entity: {} + + time_window: + name: Time Window + description: Maximum time between presses (in seconds) + default: 1.5 + selector: + number: + min: 0.5 + max: 5 + step: 0.1 + unit_of_measurement: seconds + + immediate_single_press: + name: Execute Single Press Immediately + description: If enabled, single press action runs immediately without waiting. If disabled, waits to see if it's a multi-press before acting. + default: true + selector: + boolean: {} + + single_press_action: + name: Single Press Action + description: Action to run on single press + default: [] + selector: + action: {} + + double_press_action: + name: Double Press Action + description: Action to run on double press + default: [] + selector: + action: {} + + triple_press_action: + name: Triple Press Action + description: Action to run on triple press + default: [] + selector: + action: {} + + quad_press_action: + name: Quad Press Action + description: Action to run on quad press (4 times) + default: [] + selector: + action: {} + +mode: restart +max_exceeded: silent + +trigger: + - platform: state + entity_id: !input trigger_entity + +action: + - variables: + press_count: 1 + time_window: !input time_window + immediate: !input immediate_single_press + + # Execute single press immediately if enabled + - if: + - condition: template + value_template: "{{ immediate }}" + then: + - choose: + - conditions: [] + sequence: !input single_press_action + + # Wait for additional presses + - repeat: + while: + - condition: template + value_template: "{{ press_count < 4 }}" + sequence: + - wait_for_trigger: + - platform: state + entity_id: !input trigger_entity + timeout: + seconds: "{{ time_window }}" + continue_on_timeout: false + + - if: + - condition: template + value_template: "{{ wait.trigger is not none }}" + then: + - variables: + press_count: "{{ press_count + 1 }}" + + # 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 }}" + sequence: !input single_press_action + + - conditions: + - condition: template + value_template: "{{ press_count == 2 }}" + sequence: !input double_press_action + + - conditions: + - condition: template + value_template: "{{ press_count == 3 }}" + sequence: !input triple_press_action + + - conditions: + - condition: template + value_template: "{{ press_count == 4 }}" + sequence: !input quad_press_action