--- blueprint: name: Z2M - EnOcean PTM215Z (Friends of Hue) switch, Advanced, v2 author: runejuhl homeassistant: min_version: 2024.6.0 description: > ## Z2M - EnOcean PTM215Z (Friends of Hue) switch, Advanced, v2, 2025-02-20 Includes all button functions, Advanced use, Works with Zigbee2MQTT 2.0 and up. This is a copy of https://community.home-assistant.io/t/zigbee2mqtt-enocean-ptm-215z-friends-of-hue-switch/429770/95 from 2025-02-20. source_url: https://git.petardo.dk/runejuhl/hass-blueprints/raw/branch/dev/blueprints/enocean_ptm_215z_switch_advanced.yaml 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