Skip to content

Instantly share code, notes, and snippets.

@benperiton
Last active November 28, 2025 11:28
Show Gist options
  • Select an option

  • Save benperiton/e58995752b3500e6726ca40472905137 to your computer and use it in GitHub Desktop.

Select an option

Save benperiton/e58995752b3500e6726ca40472905137 to your computer and use it in GitHub Desktop.
Hue Dimmer blueprint that supports multi-press
blueprint:
name: Easy Customizable Controller (Multi-Press) for Hue Dimmer Switch in Zigbee2MQTT
description: 'Controller automation for easy customizable buttons with Philips Hue
Dimmer Switch (Zigbee2MQTT).
Based on: https://gist.github.com/patpac9/2a378fa410d393501da6e35efb4277f7
IMPORTANT:
- Prefer using the "released" actions where possible.
- A "pressed" action will also trigger when the button is held.
'
domain: automation
input:
# Pinched from https://github.com/yarafie/awesome-ha-blueprints/blob/5b3710fc4a982a83e5e6754a2b3966b422c9462c/blueprints/controllers/philips_324131092621/philips_324131092621.yaml#L36
controller:
name: (Zigbee2MQTT) Controller Name
description: The name of the controller/Dimmer-Switch in Zigbee2MQTT.
default: ''
selector:
device:
filter:
# source: https://www.zigbee2mqtt.io/devices/324131092621.html#philips-324131092621
- integration: mqtt
manufacturer: Philips
model: Hue dimmer switch
# For backwards compatability with z2m 1.x. model_id is added to end of model rather than a seperate attribute in z2m 2.x
- integration: mqtt
manufacturer: Philips
model: Hue dimmer switch (324131092621)
multiple: false
base_topic:
name: Root/Base MQTT Topic from Zigbee2MQTT
description: The Root/Base topic as configured in Zigbee2MQTT (leave as "zigbee2mqtt"
if you haven't changed it).
default: zigbee2mqtt
on_press:
name: Button On Pressed
description: Action to run when the On button is pressed (also fires on hold).
default: []
selector:
action: {}
on_held:
name: Button On Held
description: Action to run when the On button is held.
default: []
selector:
action: {}
on_released:
name: Button On Released
description: Action to run when the On button is released.
default: []
selector:
action: {}
on_hold_released:
name: Button On Hold Released
description: Action to run when the On button is released after a long press.
default: []
selector:
action: {}
on_double_press_release:
name: Button On Double Press Released
description: Action to run when the On button is double-pressed and then released.
default: []
selector:
action: {}
on_triple_press_release:
name: Button On Triple Press Released
description: Action to run when the On button is triple-pressed and then released.
default: []
selector:
action: {}
on_quadruple_press_release:
name: Button On Quadruple Press Released
description: Action to run when the On button is quadruple-pressed and then
released.
default: []
selector:
action: {}
on_quintuple_press_release:
name: Button On Quintuple Press Released
description: Action to run when the On button is quintuple-pressed and then
released.
default: []
selector:
action: {}
up_pressed:
name: Up Pressed
description: Action to run when the Up button is pressed (also fires on hold).
default: []
selector:
action: {}
up_held:
name: Up Held
description: Action to run when the Up button is held.
default: []
selector:
action: {}
up_released:
name: Up Released
description: Action to run when the Up button is released.
default: []
selector:
action: {}
up_hold_released:
name: Button Up Hold Released
description: Action to run when the Up button is released after a long press.
default: []
selector:
action: {}
down_pressed:
name: Down Pressed
description: Action to run when the Down button is pressed (also fires on hold).
default: []
selector:
action: {}
down_held:
name: Down Held
description: Action to run when the Down button is held.
default: []
selector:
action: {}
down_released:
name: Down Released
description: Action to run when the Down button is released.
default: []
selector:
action: {}
down_hold_released:
name: Button Down Hold Released
description: Action to run when the Down button is released after a long press.
default: []
selector:
action: {}
off_pressed:
name: Off Pressed
description: Action to run when the Off button is pressed (also fires on hold).
(Off is also the "Hue" button.)
default: []
selector:
action: {}
off_held:
name: Off Held
description: Action to run when the Off button is held. (Off is also the "Hue"
button.)
default: []
selector:
action: {}
off_released:
name: Off Released
description: Action to run when the Off button is released. (Off is also the
"Hue" button.)
default: []
selector:
action: {}
off_hold_released:
name: Button Off Hold Released
description: Action to run when the Off button is released after a long press.
(Off is also the "Hue" button.)
default: []
selector:
action: {}
off_double_press_release:
name: Button Off Double Press Released
description: Action to run when the Off button is double-pressed and then released.
default: []
selector:
action: {}
off_triple_press_release:
name: Button Off Triple Press Released
description: Action to run when the Off button is triple-pressed and then released.
default: []
selector:
action: {}
off_quadruple_press_release:
name: Button Off Quadruple Press Released
description: Action to run when the Off button is quadruple-pressed and then
released.
default: []
selector:
action: {}
off_quintuple_press_release:
name: Button Off Quintuple Press Released
description: Action to run when the Off button is quintuple-pressed and then
released.
default: []
selector:
action: {}
source_url: https://gist.github.com/benperiton/e58995752b3500e6726ca40472905137
mode: parallel
max: 6
trigger_variables:
base_topic: !input base_topic
controller_device: !input controller
controller: "{{ device_name(controller_device) }}"
trigger:
- platform: mqtt
topic: '{{ base_topic ~ ''/'' ~ controller }}'
action:
- choose:
- conditions: "{{ ('hold' in trigger.payload_json.action)\n or ('release' in trigger.payload_json.action)\n
\ or ('press' in trigger.payload_json.action) }}\n"
sequence:
- choose:
- conditions: '{{ trigger.payload_json.action == "on_press" or trigger.payload_json.action
== "on-press" }}'
sequence: !input on_press
- conditions: '{{ trigger.payload_json.action == "on_hold" or trigger.payload_json.action
== "on-hold" }}'
sequence: !input on_held
- conditions: '{{ trigger.payload_json.action == "on_press_release" or trigger.payload_json.action
== "on-press-release" }}'
sequence: !input on_released
- conditions: '{{ trigger.payload_json.action == "on_hold_release" or trigger.payload_json.action
== "on-hold-release" }}'
sequence: !input on_hold_released
- conditions: '{{ trigger.payload_json.action == "on_double_press_release" or
trigger.payload_json.action == "on-double-press-release" }}'
sequence: !input on_double_press_release
- conditions: '{{ trigger.payload_json.action == "on_triple_press_release" or
trigger.payload_json.action == "on-triple-press-release" }}'
sequence: !input on_triple_press_release
- conditions: '{{ trigger.payload_json.action == "on_quadruple_press_release"
or trigger.payload_json.action == "on-quadruple-press-release" }}'
sequence: !input on_quadruple_press_release
- conditions: '{{ trigger.payload_json.action == "on_quintuple_press_release"
or trigger.payload_json.action == "on-quintuple-press-release" }}'
sequence: !input on_quintuple_press_release
- conditions: '{{ trigger.payload_json.action == "up_press" or trigger.payload_json.action
== "up-press" }}'
sequence: !input up_pressed
- conditions: '{{ trigger.payload_json.action == "up_hold" or trigger.payload_json.action
== "up-hold" }}'
sequence: !input up_held
- conditions: '{{ trigger.payload_json.action == "up_press_release" or trigger.payload_json.action
== "up-press-release" }}'
sequence: !input up_released
- conditions: '{{ trigger.payload_json.action == "up_hold_release" or trigger.payload_json.action
== "up-hold-release" }}'
sequence: !input up_hold_released
- conditions: '{{ trigger.payload_json.action == "down_press" or trigger.payload_json.action
== "down-press" }}'
sequence: !input down_pressed
- conditions: '{{ trigger.payload_json.action == "down_hold" or trigger.payload_json.action
== "down-hold" }}'
sequence: !input down_held
- conditions: '{{ trigger.payload_json.action == "down_press_release" or trigger.payload_json.action
== "down-press-release" }}'
sequence: !input down_released
- conditions: '{{ trigger.payload_json.action == "down_hold_release" or trigger.payload_json.action
== "down-hold-release" }}'
sequence: !input down_hold_released
- conditions: '{{ trigger.payload_json.action == "off_press" or trigger.payload_json.action
== "off-press" }}'
sequence: !input off_pressed
- conditions: '{{ trigger.payload_json.action == "off_hold" or trigger.payload_json.action
== "off-hold" }}'
sequence: !input off_held
- conditions: '{{ trigger.payload_json.action == "off_press_release" or trigger.payload_json.action
== "off-press-release" }}'
sequence: !input off_released
- conditions: '{{ trigger.payload_json.action == "off_hold_release" or trigger.payload_json.action
== "off-hold-release" }}'
sequence: !input off_hold_released
- conditions: '{{ trigger.payload_json.action == "off_double_press_release"
or trigger.payload_json.action == "off-double-press-release" }}'
sequence: !input off_double_press_release
- conditions: '{{ trigger.payload_json.action == "off_triple_press_release"
or trigger.payload_json.action == "off-triple-press-release" }}'
sequence: !input off_triple_press_release
- conditions: '{{ trigger.payload_json.action == "off_quadruple_press_release"
or trigger.payload_json.action == "off-quadruple-press-release" }}'
sequence: !input off_quadruple_press_release
- conditions: '{{ trigger.payload_json.action == "off_quintuple_press_release"
or trigger.payload_json.action == "off-quintuple-press-release" }}'
sequence: !input off_quintuple_press_release
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment