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”
- Simple version for setting scenes etc.
- Dimming version, with smooth dimming
- Advanced with all functions
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