3 new versions
- Advanced with all functions
- Dimming version, with smooth dimming
- Simple version for setting scenes etc.
3 new versions
Dimming version
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Dimming, v2
description: |
This blueprint is focusing on easy setting scenes and easy dimming of lights
The button on the left will dim+/dim- on one light (or a Z2M light group) when hold
domain: automation
input:
controller:
name: (Zigbee2MQTT) Device Name
description: The name of the device as defined in z2m (e.g. Livingroom lamp). Important, If more lights are to be controlled, make a group in Z2M
default: ''
base_topic:
name: (Zigbee2MQTT) Base mqtt topic
description: The base topic as configured in z2m. The standard is zigbee2mqtt
default: zigbee2mqtt
switch:
name: HA device name, action entity
description: The entity from HA
selector:
entity:
integration: mqtt
domain: sensor
dim_speed:
name: Dimming Speed
description: The speed of the dimming effect.
default: 50
selector:
number:
min: 1
max: 500
step: 1
button_1_short_release:
name: Button 1 short release (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short release (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short release (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_3_long_release:
name: Button 3 long release (upper right)
description: Action to run, when the button 3 is released after long press.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short release (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_4_long_release:
name: Button 4 long release (lower right)
description: Action to run, when the button 4 is released after long press.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1 and 3 short release (both upper)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1 and 3 long release (both upper)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
button_24_short_release:
name: Button 2 and 4 short release (both lower)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 2 and 4 long release (both lower)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
trigger:
- platform: state
entity_id: !input 'switch'
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
action:
- variables:
base_topic: !input base_topic
controller: !input controller
dimspeed_p: !input 'dim_speed'
keypress: '{{ trigger.to_state.state }}'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
- variables:
dimspeed_n: '{{ dimspeed_p | int * -1 }}'
- choose:
- conditions: '{{ keypress == ''press_1'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move_onoff\": {{ dimspeed_p }} }"
- conditions: '{{ keypress == ''press_2'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move_onoff\": {{ dimspeed_n }} }"
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_3_long_release
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_4_long_release
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_and_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_and_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release
Advanced version:
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Advanced, v2
description: Includes all button functions, Advanced use
domain: automation
input:
switch:
name: HA device name, action entity
description: If more switches share same functionality, you can choose 2 or more
selector:
entity:
integration: mqtt
domain: sensor
multiple: true
hold_delay:
name: Hold delay
description: If the button has been held more than the configured Hold delay,
the corresponding repeat action will be triggered
default: 1000
selector:
number:
min: 300
max: 3000
unit_of_measurement: milliseconds
step: 100
button_1_press:
name: Button 1 Pressed (upper left)
description: Action to run, when button 1 is pressed.
default: []
selector:
action: {}
button_1_repeat:
name: Button 1 Repeted action (upper left)
description: Action to repeat, when the button 1 is held.
default: []
selector:
action: {}
button_1_short_release:
name: Button 1 short released (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_1_long_release:
name: Button 1 long released (upper left)
description: Action to run, when the button 1 is released after long press.
default: []
selector:
action: {}
button_2_press:
name: Button 2 Pressed (lower left)
description: Action to run, when button 2 is pressed.
default: []
selector:
action: {}
button_2_repeat:
name: Button 2 Repeted action (lower left)
description: Action to repeat, when the button 2 is held.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short released (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_2_long_release:
name: Button 2 long released (lower left)
description: Action to run, when the button 2 is released after long press.
default: []
selector:
action: {}
button_3_press:
name: Button 3 Pressed (upper right)
description: Action to run, when button 3 is pressed.
default: []
selector:
action: {}
button_3_repeat:
name: Button 3 Repeted action (upper right)
description: Action to repeat, when the button 3 is held.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short released (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_3_long_release:
name: Button 3 long released (upper right)
description: Action to run, when the button 3 is released after long press.
default: []
selector:
action: {}
button_4_press:
name: Button 4 Pressed (lower right)
description: Action to run, when button 4 is pressed.
default: []
selector:
action: {}
button_4_repeat:
name: Button 4 Repeted action (lower right)
description: Action to repeat, when the button 4 is held.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short released (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_4_long_release:
name: Button 4 long released (lower right)
description: Action to run, when the button 4 is released after long press.
default: []
selector:
action: {}
button_13_press:
name: Button 1+3 Pressed (upper)
description: Action to run, when upper buttons are pressed.
default: []
selector:
action: {}
button_13_repeat:
name: Button 1+3 Repeated action (upper)
description: Action to repeat, when the upper buttons are held.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1+3 are short released (upper)
description: Action to run, when the upper buttons are released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1+3 long released (upper)
description: Action to run, when the upper buttons are released after long press.
default: []
selector:
action: {}
button_24_press:
name: Button 1+3 Pressed (lower)
description: Action to run, when lower buttons are pressed.
default: []
selector:
action: {}
button_24_repeat:
name: Button 1+3 Repeated action (lower)
description: Action to repeat, when the lower buttons are held.
default: []
selector:
action: {}
button_24_short_release:
name: Button 1+3 are short released (lower)
description: Action to run, when the lower buttons are released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 1+3 long released (lower)
description: Action to run, when the lower buttons are released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
trigger:
- platform: state
entity_id: !input 'switch'
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
action:
- variables:
keypress: '{{ trigger.to_state.state }}'
holddelay: !input 'hold_delay'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
- choose:
- conditions: '{{ keypress == ''press_1'' }}'
sequence:
- sequence: !input button_1_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_1_repeat
- conditions: '{{ keypress == ''press_2'' }}'
sequence:
- sequence: !input button_2_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_2_repeat
- conditions: '{{ keypress == ''press_3'' }}'
sequence:
- sequence: !input button_3_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_3_repeat
- conditions: '{{ keypress == ''press_4'' }}'
sequence:
- sequence: !input button_4_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_4_repeat
- conditions: '{{ keypress == ''press_1_3'' }}'
sequence:
- sequence: !input button_13_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_13_repeat
- conditions: '{{ keypress == ''press_2_4'' }}'
sequence:
- sequence: !input button_24_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_24_repeat
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_1_long_release
default:
- sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_2_long_release
default:
- sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_3_long_release
default:
- sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_4_long_release
default:
- sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release
Here is the simple version
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Simpel, v2
description: |
This blueprint is focusing on easy setting scenes
Only includes short_release and long_release
domain: automation
input:
switch:
name: HA device name, action entity
description: The entity from HA
selector:
entity:
integration: mqtt
domain: sensor
multiple: true
button_1_short_release:
name: Button 1 short release (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_1_long_release:
name: Button 1 long release (upper left)
description: Action to run, when the button 1 is released after long press.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short release (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_2_long_release:
name: Button 2 long release (lower left)
description: Action to run, when the button 2 is released after long press.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short release (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_3_long_release:
name: Button 3 long release (upper right)
description: Action to run, when the button 3 is released after long press.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short release (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_4_long_release:
name: Button 4 long release (lower right)
description: Action to run, when the button 4 is released after long press.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1 and 3 short release (both upper)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1 and 3 long release (both upper)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
button_24_short_release:
name: Button 2 and 4 short release (both lower)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 2 and 4 long release (both lower)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
trigger:
- platform: state
entity_id: !input 'switch'
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
action:
- variables:
keypress: '{{ trigger.to_state.state }}'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
- choose:
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_1_long_release
default:
- sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_2_long_release
default:
- sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_3_long_release
default:
- sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_4_long_release
default:
- sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_and_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_and_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release
Great work, really appreciate it.
One quick question, could you post a working example?
I cannot get the +/- dimming part to work, only when I release the buttons and press again the dimming action repeats itself.
Remember, the dimming is only build into the version called dimming.
It uses MQTT to do the dimming, hence it might not work on all zigbee bulbs. You can test if your bulbs work with the MQTT dimming, please look in post #76. If you can not get the bulbs dimming manually, then the blueprint will not work. It uses the same MQTT call
Here is my version for our kitchen. My zigbee2mqtt topic is “zigbee2mqtt”, the standard for Z2M. If you have changed this, it needs to be defined.
alias: Køkken Kontakt
description: ""
use_blueprint:
path: Zigbee2mqtt-Enocean-Dimming-v2.yaml
input:
controller: Køkken Light Dimming
switch: sensor.kokkenkontakt_action
button_1_short_release:
- action: scene.turn_on
metadata: {}
target:
entity_id: scene.kokken_high
button_2_short_release:
- action: scene.turn_on
metadata: {}
target:
entity_id: scene.kokken_low
button_3_short_release:
- action: scene.turn_on
metadata: {}
target:
entity_id: scene.kokken_medium
button_4_short_release:
- action: light.turn_off
metadata: {}
data: {}
target:
area_id: kokken
Thanks for quick reply.
I’m using the version with dimming, and my Z2M topic is right, and the light supports dimming through MQTT.
Everything works if I just want to turn on/off the lights.
It’s just the dimming part I’m missing.
I tried using your Yaml, and changed to my entities, but it gives me an error:
Message malformed: Unable to determine action @ data[‘action’][2][‘choose’][0][‘sequence’][1]
Here is my Yaml:
alias: Bar Switch
description: ""
use_blueprint:
path: switches/khvej8/Zigbee2mqtt-Enocean-Dimming-v2.yaml
input:
controller: bar_foh_switch
switch: sensor.bar_foh_switch_action
button_1_short_release:
- service: scene.turn_on
metadata: {}
target:
entity_id: scene.zdralic_low
button_3_short_release:
- service: scene.turn_on
metadata: {}
target:
entity_id: scene.zdralic_high
The “controller” is the zigbee name of the bulb to be dimmed. It is the name in Z2M interface including spaces, and not the home assistant name of the bulb.
If you would like to control more than one bulb, then create a Z2M group. This is done in the Z2M interface.
I will update the blueprint description, to avoid misunderstandings.
Hi there, this blueprint is new to me and i can’t seem to get it to work.
I have set te BP as shown:
the automation yaml is:
Blockquote - id: ‘1730367547227’
alias: Niko switch 1
description: ‘’
use_blueprint:
path: vandalon/z2m EnOcean PTM 215Z (Friends of Hue) switch.yaml
input:
controller: Niko_Switch_1
button_1_pressed:
- action: light.toggle
metadata: {}
data: {}
target:
entity_id:
- light.0x0017880110265491
- light.0x00178801104a7741
base_topic: zigbee2mqtt
switch is in log:

but not available in Z2M devices:

What could i be doing wrong?
After some testing the enOcean Niko works. however, when i place it in my bedroom, no respons when clicking. could it be the distance between my hue-bridge?
I used this blueprint for my EnOcean sensors.
In January 25 a new Zigbee2MQTT 2.0.0 will be released. So I tested this blueprint - it does not work anymore with Z2M 2.0.0. Reason: The old legacy “sensor” is not supported anymore by Z2M.
Do you have ideas what we have to change for work with 2.0.0?
If you use the blueprint initially made by @vandalon and even after the migration to Z2M 2.x.x, you should not have any problems as it uses a trigger based on mqtt. You may also try this blueprint based on mqtt which does not used the elapsed function…
In Z2M 2.x.x, you have the option to use the event trigger which is still experimental. You may check this link. I have made a blueprint working based on the new event trigger. Feel free to test it and tell me if you find any issues.
Has anyone attempted to use the PTM 215Z with switch manager? How do you model the hold there?
3 new versions, now based on Zigbee2MQTT version 2.0 and newer. It used the event trigger.
If you already use the blueprints, then just replace the code, reload automations or restart. Then open the automation and choose the “event.xxxx” instead of the old “sensor.xxx”
Remember to enable Home Assistant experimental event entities in Z2M settings
Simpel Version:
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Simpel, v2
description: |
This blueprint is focusing on easy setting scenes
Only includes short_release and long_release
Works with Zigbee2MQTT 2.0 and up
domain: automation
input:
switch:
name: HA device name, action entity
description: The entity from HA
selector:
entity:
filter:
- integration: mqtt
domain: event
multiple: true
button_1_short_release:
name: Button 1 short release (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_1_long_release:
name: Button 1 long release (upper left)
description: Action to run, when the button 1 is released after long press.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short release (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_2_long_release:
name: Button 2 long release (lower left)
description: Action to run, when the button 2 is released after long press.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short release (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_3_long_release:
name: Button 3 long release (upper right)
description: Action to run, when the button 3 is released after long press.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short release (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_4_long_release:
name: Button 4 long release (lower right)
description: Action to run, when the button 4 is released after long press.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1 and 3 short release (both upper)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1 and 3 long release (both upper)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
button_24_short_release:
name: Button 2 and 4 short release (both lower)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 2 and 4 long release (both lower)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
triggers:
- trigger: state
entity_id: !input 'switch'
attribute: event_type
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
action:
- variables:
keypress: '{{ trigger.to_state.attributes.event_type }}'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
- choose:
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_1_long_release
default:
- sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_2_long_release
default:
- sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_3_long_release
default:
- sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_4_long_release
default:
- sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_and_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_and_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release
Dimming Version:
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Dimming, v2
description: |
This blueprint is focusing on easy setting scenes and easy dimming of lights
The button on the left will dim+/dim- on one light (or a Z2M light group) when hold
Works with Zigbee2MQTT 2.0 and up
domain: automation
input:
controller:
name: (Zigbee2MQTT) Device Name
description: The name of the device as defined in z2m (e.g. Livingroom lamp). Important, If more lights are to be controlled, make a group in Z2M
default: ''
base_topic:
name: (Zigbee2MQTT) Base mqtt topic
description: The base topic as configured in z2m. The standard is zigbee2mqtt
default: zigbee2mqtt
switch:
name: HA device name, action entity
description: The entity from HA
selector:
entity:
filter:
- integration: mqtt
domain: event
multiple: true
dim_speed:
name: Dimming Speed
description: The speed of the dimming effect.
default: 50
selector:
number:
min: 1
max: 500
step: 1
button_1_short_release:
name: Button 1 short release (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short release (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short release (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_3_long_release:
name: Button 3 long release (upper right)
description: Action to run, when the button 3 is released after long press.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short release (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_4_long_release:
name: Button 4 long release (lower right)
description: Action to run, when the button 4 is released after long press.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1 and 3 short release (both upper)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1 and 3 long release (both upper)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
button_24_short_release:
name: Button 2 and 4 short release (both lower)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 2 and 4 long release (both lower)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
triggers:
- trigger: state
entity_id: !input 'switch'
attribute: event_type
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
variables:
base_topic: !input base_topic
controller: !input controller
dimspeed_p: !input 'dim_speed'
keypress: '{{ trigger.to_state.attributes.event_type }}'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
action:
- variables:
dimspeed_n: '{{ dimspeed_p | int * -1 }}'
- choose:
- conditions: '{{ keypress == ''press_1'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move_onoff\": {{ dimspeed_p }} }"
- conditions: '{{ keypress == ''press_2'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move_onoff\": {{ dimspeed_n }} }"
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_3_long_release
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_4_long_release
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_and_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_and_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release
Advanced Version:
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Advanced, v2
description: Includes all button functions, Advanced use, Works with Zigbee2MQTT 2.0 and up
domain: automation
input:
switch:
name: HA device name, action entity
description: If more switches share the same functionality, you can choose 2 or more
selector:
entity:
filter:
- integration: mqtt
domain: event
multiple: true
hold_delay:
name: Hold delay
description: If the button has been held more than the configured Hold delay,
the corresponding repeat action will be triggered
default: 1000
selector:
number:
min: 300
max: 3000
unit_of_measurement: milliseconds
step: 100
button_1_press:
name: Button 1 Pressed (upper left)
description: Action to run, when button 1 is pressed.
default: []
selector:
action: {}
button_1_repeat:
name: Button 1 Repeted action (upper left)
description: Action to repeat, when the button 1 is held.
default: []
selector:
action: {}
button_1_short_release:
name: Button 1 short released (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_1_long_release:
name: Button 1 long released (upper left)
description: Action to run, when the button 1 is released after long press.
default: []
selector:
action: {}
button_2_press:
name: Button 2 Pressed (lower left)
description: Action to run, when button 2 is pressed.
default: []
selector:
action: {}
button_2_repeat:
name: Button 2 Repeted action (lower left)
description: Action to repeat, when the button 2 is held.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short released (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_2_long_release:
name: Button 2 long released (lower left)
description: Action to run, when the button 2 is released after long press.
default: []
selector:
action: {}
button_3_press:
name: Button 3 Pressed (upper right)
description: Action to run, when button 3 is pressed.
default: []
selector:
action: {}
button_3_repeat:
name: Button 3 Repeted action (upper right)
description: Action to repeat, when the button 3 is held.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short released (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_3_long_release:
name: Button 3 long released (upper right)
description: Action to run, when the button 3 is released after long press.
default: []
selector:
action: {}
button_4_press:
name: Button 4 Pressed (lower right)
description: Action to run, when button 4 is pressed.
default: []
selector:
action: {}
button_4_repeat:
name: Button 4 Repeted action (lower right)
description: Action to repeat, when the button 4 is held.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short released (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_4_long_release:
name: Button 4 long released (lower right)
description: Action to run, when the button 4 is released after long press.
default: []
selector:
action: {}
button_13_press:
name: Button 1+3 Pressed (upper)
description: Action to run, when upper buttons are pressed.
default: []
selector:
action: {}
button_13_repeat:
name: Button 1+3 Repeated action (upper)
description: Action to repeat, when the upper buttons are held.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1+3 are short released (upper)
description: Action to run, when the upper buttons are released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1+3 long released (upper)
description: Action to run, when the upper buttons are released after long press.
default: []
selector:
action: {}
button_24_press:
name: Button 2+4 Pressed (lower)
description: Action to run, when lower buttons are pressed.
default: []
selector:
action: {}
button_24_repeat:
name: Button 2+4 Repeated action (lower)
description: Action to repeat, when the lower buttons are held.
default: []
selector:
action: {}
button_24_short_release:
name: Button 2+4 are short released (lower)
description: Action to run, when the lower buttons are released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 2+4 long released (lower)
description: Action to run, when the lower buttons are released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
triggers:
- trigger: state
entity_id: !input 'switch'
attribute: event_type
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
action:
- variables:
keypress: '{{ trigger.to_state.attributes.event_type }}'
holddelay: !input 'hold_delay'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
- choose:
- conditions: '{{ keypress == ''press_1'' }}'
sequence:
- sequence: !input button_1_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_1_repeat
- conditions: '{{ keypress == ''press_2'' }}'
sequence:
- sequence: !input button_2_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_2_repeat
- conditions: '{{ keypress == ''press_3'' }}'
sequence:
- sequence: !input button_3_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_3_repeat
- conditions: '{{ keypress == ''press_4'' }}'
sequence:
- sequence: !input button_4_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_4_repeat
- conditions: '{{ keypress == ''press_1_and_3'' }}'
sequence:
- sequence: !input button_13_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_13_repeat
- conditions: '{{ keypress == ''press_2_and_4'' }}'
sequence:
- sequence: !input button_24_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_24_repeat
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_1_long_release
default:
- sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_2_long_release
default:
- sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_3_long_release
default:
- sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_4_long_release
default:
- sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_and_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_and_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release
Dimming and color-temperatur.
Dimming on left button
Color-temp on right button
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Dimming and Color-temp, v2
description: |
This blueprint is focusing on easy setting scenes and easy dimming and color-temp of lights
The button on the left will dim+/dim- on one light (or a Z2M light group) when hold
The button on the right will bright/warm the white color if the bulb ssupports this. Only on one light (or a Z2M light group) when hold
Works with Zigbee2MQTT 2.0 and up
domain: automation
input:
controller:
name: (Zigbee2MQTT) Device Name
description: The name of the device as defined in z2m (e.g. Livingroom lamp). Important, If more lights are to be controlled, make a group in Z2M
default: ''
base_topic:
name: (Zigbee2MQTT) Base mqtt topic
description: The base topic as configured in z2m. The standard is zigbee2mqtt
default: zigbee2mqtt
switch:
name: HA device name, action entity
description: The entity from HA
selector:
entity:
filter:
- integration: mqtt
domain: event
multiple: true
dim_speed:
name: Dimming Speed
description: The speed of the dimming/color-temp effect.
default: 50
selector:
number:
min: 1
max: 500
step: 1
button_1_short_release:
name: Button 1 short release (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short release (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short release (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short release (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1 and 3 short release (both upper)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1 and 3 long release (both upper)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
button_24_short_release:
name: Button 2 and 4 short release (both lower)
description: Action to run, when the button 1 and 3 is released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 2 and 4 long release (both lower)
description: Action to run, when the button 1 and 3 is released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
triggers:
- trigger: state
entity_id: !input 'switch'
attribute: event_type
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
variables:
base_topic: !input base_topic
controller: !input controller
dimspeed_p: !input 'dim_speed'
keypress: '{{ trigger.to_state.attributes.event_type }}'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
action:
- variables:
dimspeed_n: '{{ dimspeed_p | int * -1 }}'
- choose:
- conditions: '{{ keypress == ''press_1'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move_onoff\": {{ dimspeed_p }} }"
- conditions: '{{ keypress == ''press_2'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move_onoff\": {{ dimspeed_n }} }"
- conditions: '{{ keypress == ''press_3'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"color_temp_move\": {{ dimspeed_p }} }"
- conditions: '{{ keypress == ''press_4'' }}'
sequence:
- delay:
seconds: 1
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"color_temp_move\": {{ dimspeed_n }} }"
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"brightness_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"color_temp_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence:
- action: mqtt.publish
data:
topic: '{{ base_topic ~ ''/'' ~ controller ~ ''/set''}}'
payload: "{\"color_temp_move\": \"stop\"}"
default:
- choose:
- conditions: '{{ true }}'
sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_and_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_and_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > 1 }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release
I am new to this blueprint and I don’t understand, how to use the event trigger, or what is needed to have one. I never used this blueprint and just paired my enOcean switch. I downloaded your blueprint and I have no event triggers in my list, when I want to create an automation.
EDIT: As far as I can see it, I needed to enable Home Assistant experimental event entities.
A question in general. I want to create a switch, that works like this:
A similar functionality should be used for the right button. This could control the light color.
Any ideas, how I can do this. I tried the repeated action for the brightness, but if I press and hold the button, it will only change the brightness one time. Moreover I don’t have the feeling that it will only gets brighter with one button.
Thank you! Work’s like a charm and was not that much effort to update around 30 switches ![]()
Same for me. The “repeat” doesn’t work for me when trying to step up the brightness:

Not sure if you’ve done this already, but I figured I’d bring it up just in case. The elapsed option needs to be enabled within zigbee2mqtt in order for repeat actions to work. It’s under the “advanced” tab within settings.
The “Dimming” version should work and increase/dim the light mentioned. It will not support a easy way to control the “warm/cooler color”. Only way is to create a "repeat until in the automation.
If there is a MQTT command it will be fairly easy to create a new version for you. I will look at this during the weekend. If you know the MQTT command, please let me know. It is a command like this on,“{"brightness_move_onoff": -5 }} }”
Correct, elapsed needs to be enabled to the blueprint in post #1. The blueprints in post #92 do not need this, however needs Z2M version 2.0 and expermential event triggers
I’ve installed Switch Manger some minutes ago. Despite there is a PTM 215Z template, there is no recognition of “hold” events on the button as the have to be calculated like here in the blueprint… Dang, would have loved to use this!
Thank you for your blueprint.
I found a mistake in the Advanced version. The conditions for when you press two buttons at the same time have the wrong name for the keypress-event.
“press_2_and_4” and not “press_2_4” ![]()
Here it should be fixed:
blueprint:
name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Advanced, v2
description: Includes all button functions, Advanced use, Works with Zigbee2MQTT 2.0 and up
domain: automation
input:
switch:
name: HA device name, action entity
description: If more switches share the same functionality, you can choose 2 or more
selector:
entity:
filter:
- integration: mqtt
domain: event
multiple: true
hold_delay:
name: Hold delay
description: If the button has been held more than the configured Hold delay,
the corresponding repeat action will be triggered
default: 1000
selector:
number:
min: 300
max: 3000
unit_of_measurement: milliseconds
step: 100
button_1_press:
name: Button 1 Pressed (upper left)
description: Action to run, when button 1 is pressed.
default: []
selector:
action: {}
button_1_repeat:
name: Button 1 Repeted action (upper left)
description: Action to repeat, when the button 1 is held.
default: []
selector:
action: {}
button_1_short_release:
name: Button 1 short released (upper left)
description: Action to run, when the button 1 is released after short pres.
default: []
selector:
action: {}
button_1_long_release:
name: Button 1 long released (upper left)
description: Action to run, when the button 1 is released after long press.
default: []
selector:
action: {}
button_2_press:
name: Button 2 Pressed (lower left)
description: Action to run, when button 2 is pressed.
default: []
selector:
action: {}
button_2_repeat:
name: Button 2 Repeted action (lower left)
description: Action to repeat, when the button 2 is held.
default: []
selector:
action: {}
button_2_short_release:
name: Button 2 short released (lower left)
description: Action to run, when the button 2 is released after short press.
default: []
selector:
action: {}
button_2_long_release:
name: Button 2 long released (lower left)
description: Action to run, when the button 2 is released after long press.
default: []
selector:
action: {}
button_3_press:
name: Button 3 Pressed (upper right)
description: Action to run, when button 3 is pressed.
default: []
selector:
action: {}
button_3_repeat:
name: Button 3 Repeted action (upper right)
description: Action to repeat, when the button 3 is held.
default: []
selector:
action: {}
button_3_short_release:
name: Button 3 short released (upper right)
description: Action to run, when the button 3 is released after short press.
default: []
selector:
action: {}
button_3_long_release:
name: Button 3 long released (upper right)
description: Action to run, when the button 3 is released after long press.
default: []
selector:
action: {}
button_4_press:
name: Button 4 Pressed (lower right)
description: Action to run, when button 4 is pressed.
default: []
selector:
action: {}
button_4_repeat:
name: Button 4 Repeted action (lower right)
description: Action to repeat, when the button 4 is held.
default: []
selector:
action: {}
button_4_short_release:
name: Button 4 short released (lower right)
description: Action to run, when the button 4 is released after short press.
default: []
selector:
action: {}
button_4_long_release:
name: Button 4 long released (lower right)
description: Action to run, when the button 4 is released after long press.
default: []
selector:
action: {}
button_13_press:
name: Button 1+3 Pressed (upper)
description: Action to run, when upper buttons are pressed.
default: []
selector:
action: {}
button_13_repeat:
name: Button 1+3 Repeated action (upper)
description: Action to repeat, when the upper buttons are held.
default: []
selector:
action: {}
button_13_short_release:
name: Button 1+3 are short released (upper)
description: Action to run, when the upper buttons are released after short press.
default: []
selector:
action: {}
button_13_long_release:
name: Button 1+3 long released (upper)
description: Action to run, when the upper buttons are released after long press.
default: []
selector:
action: {}
button_24_press:
name: Button 2+4 Pressed (lower)
description: Action to run, when lower buttons are pressed.
default: []
selector:
action: {}
button_24_repeat:
name: Button 2+4 Repeated action (lower)
description: Action to repeat, when the lower buttons are held.
default: []
selector:
action: {}
button_24_short_release:
name: Button 2+4 are short released (lower)
description: Action to run, when the lower buttons are released after short press.
default: []
selector:
action: {}
button_24_long_release:
name: Button 2+4 long released (lower)
description: Action to run, when the lower buttons are released after long press.
default: []
selector:
action: {}
mode: restart
max_exceeded: silent
triggers:
- trigger: state
entity_id: !input 'switch'
attribute: event_type
to:
- release_1
- release_2
- release_3
- release_4
- release_1_and_3
- release_2_and_4
- press_1
- press_2
- press_3
- press_4
- press_1_and_3
- press_2_and_4
action:
- variables:
keypress: '{{ trigger.to_state.attributes.event_type }}'
holddelay: !input 'hold_delay'
timediff: >-
{{ (trigger.to_state.last_changed -
trigger.from_state.last_changed).total_seconds() }}
- choose:
- conditions: '{{ keypress == ''press_1'' }}'
sequence:
- sequence: !input button_1_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_1_repeat
- conditions: '{{ keypress == ''press_2'' }}'
sequence:
- sequence: !input button_2_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_2_repeat
- conditions: '{{ keypress == ''press_3'' }}'
sequence:
- sequence: !input button_3_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_3_repeat
- conditions: '{{ keypress == ''press_4'' }}'
sequence:
- sequence: !input button_4_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_4_repeat
- conditions: '{{ keypress == ''press_1_and_3'' }}'
sequence:
- sequence: !input button_13_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_13_repeat
- conditions: '{{ keypress == ''press_2_and_4'' }}'
sequence:
- sequence: !input button_24_press
- delay:
milliseconds: !input hold_delay
- sequence: !input button_24_repeat
- conditions: '{{ keypress == ''release_1'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_1_long_release
default:
- sequence: !input button_1_short_release
- conditions: '{{ keypress == ''release_2'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_2_long_release
default:
- sequence: !input button_2_short_release
- conditions: '{{ keypress == ''release_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_3_long_release
default:
- sequence: !input button_3_short_release
- conditions: '{{ keypress == ''release_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_4_long_release
default:
- sequence: !input button_4_short_release
- conditions: '{{ keypress == ''release_1_and_3'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_13_long_release
default:
- sequence: !input button_13_short_release
- conditions: '{{ keypress == ''release_2_and_4'' }}'
sequence:
- choose:
- conditions: '{{ timediff > (holddelay/1000) }}'
sequence: !input button_24_long_release
default:
- sequence: !input button_24_short_release