Skip to content

Instantly share code, notes, and snippets.

@exciton
Created January 14, 2023 00:01
Show Gist options
  • Save exciton/54eb2bf42513e2685b44cd63a97041ce to your computer and use it in GitHub Desktop.
Save exciton/54eb2bf42513e2685b44cd63a97041ce to your computer and use it in GitHub Desktop.
blueprint:
name: Lutron Caseta Four Button Scene Pico Actions
description:
Short and long press automations for Pico four button scene remotes.
Release actions will always fire.
Short press actions will fire on button release if long press actions are defined,
and immediately on button press otherwise.
Long press actions will fire on release timeout.
domain: automation
input:
pico_remote:
name: Pico Four-Button Scene Remote
selector:
device:
model: PJ2-4B-GXX-X31 (Pico4ButtonScene)
multiple: true
button_0_press:
name: Scene One Button - Short press
default: []
selector:
action: {}
button_0_hold:
name: Scene One Button - Long press
default: []
selector:
action: {}
button_0_release:
name: Scene One Button - Release
default: []
selector:
action: {}
button_1_press:
name: Scene Two Button - Short press
default: []
selector:
action: {}
button_1_hold:
name: Scene Two Button - Long press
default: []
selector:
action: {}
button_1_release:
name: Scene Two Button - Release
default: []
selector:
action: {}
button_2_press:
name: Scene Three Button - Short press
default: []
selector:
action: {}
button_2_hold:
name: Scene Three Button - Long press
default: []
selector:
action: {}
button_2_release:
name: Scene Three Button - Released
default: []
selector:
action: {}
button_3_press:
name: Off Button - Short Press
default: []
selector:
action: {}
button_3_hold:
name: Off Button - Long Press
default: []
selector:
action: {}
button_3_release:
name: Off Button - Release
default: []
selector:
action: {}
time_before_long_press:
name: Time before long press
description:
Amount of time button needs to be held before triggering "long
press" action.
default: 1
selector:
number:
min: 0.25
max: 10.0
step: 0.25
unit_of_measurement: seconds
mode: slider
auto_mode:
name: Automation Mode
description: Mode that automation runs in (single, restart, queued, parallel).
default: parallel
selector:
select:
options:
- single
- restart
- queued
- parallel
multiple: false
custom_value: false
mode_max:
name: Mode Max (ignored by Single and Restart Modes)
description: Maximum number of runs that can be executed or queued at a time.
default: 10
selector:
number:
min: 1.0
max: 15.0
step: 1.0
mode: slider
trigger:
- platform: event
event_type: lutron_caseta_button_event
event_data:
type: Pico4ButtonScene
variables:
button_numbers: [8, 9, 10, 11]
device_ids: !input pico_remote
button_0_hold_actions: !input button_0_hold
button_1_hold_actions: !input button_1_hold
button_2_hold_actions: !input button_2_hold
button_3_hold_actions: !input button_3_hold
condition:
- condition: template
value_template: "{{ trigger.event.data.device_id in device_ids }}"
action:
- choose:
- conditions: '{{ trigger.event.data.action == "release" }}'
sequence:
- choose:
- conditions: "{{ trigger.event.data.button_number == button_numbers[0] }}"
sequence: !input button_0_release
- conditions: "{{ trigger.event.data.button_number == button_numbers[1] }}"
sequence: !input button_1_release
- conditions: "{{ trigger.event.data.button_number == button_numbers[2] }}"
sequence: !input button_2_release
- conditions: "{{ trigger.event.data.button_number == button_numbers[3] }}"
sequence: !input button_3_release
- conditions: '{{ trigger.event.data.action == "press" }}'
sequence:
- choose:
- conditions: "{{ trigger.event.data.button_number == button_numbers[0] }}"
sequence:
- choose:
- conditions:
- condition: template
value_template: "{{button_0_hold_actions != []}}"
sequence:
- wait_for_trigger:
- platform: event
event_type: lutron_caseta_button_event
event_data:
button_number: "{{ trigger.event.data.button_number }}"
action: release
device_id: "{{ trigger.event.data.device_id }}"
timeout: !input time_before_long_press
- choose:
- conditions:
- condition: template
value_template: "{{ not wait.trigger }}"
sequence: !input button_0_hold
default: !input button_0_press
default: !input button_0_press
- conditions: "{{ trigger.event.data.button_number == button_numbers[1] }}"
sequence:
- choose:
- conditions:
- condition: template
value_template: "{{button_1_hold_actions != []}}"
sequence:
- wait_for_trigger:
- platform: event
event_type: lutron_caseta_button_event
event_data:
button_number: "{{ trigger.event.data.button_number }}"
action: release
device_id: "{{ trigger.event.data.device_id }}"
timeout: !input time_before_long_press
- choose:
- conditions:
- condition: template
value_template: "{{ not wait.trigger }}"
sequence: !input button_1_hold
default: !input button_1_press
default: !input button_1_press
- conditions: "{{ trigger.event.data.button_number == button_numbers[2] }}"
sequence:
- choose:
- conditions:
- condition: template
value_template: "{{button_2_hold_actions != []}}"
sequence:
- wait_for_trigger:
- platform: event
event_type: lutron_caseta_button_event
event_data:
button_number: "{{ trigger.event.data.button_number }}"
action: release
device_id: "{{ trigger.event.data.device_id }}"
timeout: !input time_before_long_press
- choose:
- conditions:
- condition: template
value_template: "{{ not wait.trigger }}"
sequence: !input button_2_hold
default: !input button_2_press
default: !input button_2_press
- conditions: "{{ trigger.event.data.button_number == button_numbers[3] }}"
sequence:
- choose:
- conditions:
- condition: template
value_template: "{{button_3_hold_actions != []}}"
sequence:
- wait_for_trigger:
- platform: event
event_type: lutron_caseta_button_event
event_data:
button_number: "{{ trigger.event.data.button_number }}"
action: release
device_id: "{{ trigger.event.data.device_id }}"
timeout: !input time_before_long_press
- choose:
- conditions:
- condition: template
value_template: "{{ not wait.trigger }}"
sequence: !input button_3_hold
default: !input button_3_press
default: !input button_3_press
default: []
mode: !input auto_mode
max: !input mode_max
trace:
stored_traces: 10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment