Add multi_press_action
This commit is contained in:
121
multi_press_action.yaml
Normal file
121
multi_press_action.yaml
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user