Files
home-assistant-blueprints/multi_press_action.yaml
2025-10-25 22:09:16 -07:00

123 lines
3.4 KiB
YAML

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: single
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
trigger_entity: !input trigger_entity
initial_last_changed: "{{ states[trigger_entity].last_changed }}"
# Execute single press immediately if enabled
- if:
- condition: template
value_template: "{{ immediate }}"
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:
seconds: "{{ time_window }}"
continue_on_timeout: true
- if:
- condition: template
value_template: "{{ not wait.completed }}"
then:
- variables:
press_count: "{{ press_count + 1 }}"
initial_last_changed: "{{ states[trigger_entity].last_changed }}"
# 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