Skip to content

Instantly share code, notes, and snippets.

@pcastelo
Last active December 12, 2025 14:33
Show Gist options
  • Select an option

  • Save pcastelo/a10816bbb074d73dcdbb5868ea7c44be to your computer and use it in GitHub Desktop.

Select an option

Save pcastelo/a10816bbb074d73dcdbb5868ea7c44be to your computer and use it in GitHub Desktop.
Full control for Hue Dimmer V2. Optimized for Z2M
blueprint:
name: Philips Hue Dimmer V2 (MQTT Native)
description: |
Full control for Hue Dimmer V2. Optimized for Z2M.
Includes 'Release' events necessary for smooth dimming.
**Based on the work of patpac9.**
***
# ⬇️⚠️⬇️ FRUSTRATION WARNING ⬇️⚠️⬇️
**__--------> READ CAREFULLY !! <--------__**
* Only use the **'Press'** action if strictly necessary!
* **Use the 'Release' action instead!!!**
> *Remember: The 'Press' action ALSO triggers before 'Hold'.*
domain: automation
input:
controller:
name: Controller Name (Zigbee2MQTT)
description: "Example: Dimmer_Pieza (Exact name from MQTT)"
base_topic:
name: MQTT Base Topic
default: zigbee2mqtt
# --- ON ---
on_press:
name: ON - Press (Caution)
default: []
selector: { action: {} }
on_hold:
name: ON - Hold
default: []
selector: { action: {} }
on_released:
name: ON - Release (Short)
default: []
selector: { action: {} }
on_hold_released:
name: ON - Release (After Hold)
default: []
selector: { action: {} }
# --- UP ---
up_press:
name: UP - Press (Caution)
default: []
selector: { action: {} }
up_hold:
name: UP - Hold
default: []
selector: { action: {} }
up_released:
name: UP - Release (Short)
default: []
selector: { action: {} }
up_hold_released:
name: UP - Release (After Hold)
default: []
selector: { action: {} }
# --- DOWN ---
down_press:
name: DOWN - Press (Caution)
default: []
selector: { action: {} }
down_hold:
name: DOWN - Hold
default: []
selector: { action: {} }
down_released:
name: DOWN - Release (Short)
default: []
selector: { action: {} }
down_hold_released:
name: DOWN - Release (After Hold)
default: []
selector: { action: {} }
# --- OFF ---
off_press:
name: OFF - Press (Caution)
default: []
selector: { action: {} }
off_hold:
name: OFF - Hold
default: []
selector: { action: {} }
off_released:
name: OFF - Release (Short)
default: []
selector: { action: {} }
off_hold_released:
name: OFF - Release (After Hold)
default: []
selector: { action: {} }
mode: restart
max_exceeded: silent
trigger_variables:
base_topic: !input base_topic
controller: !input controller
trigger:
- platform: mqtt
topic: "{{ base_topic ~ '/' ~ controller }}"
condition:
- condition: template
value_template: "{{ trigger.payload_json.action is defined and trigger.payload_json.action != '' }}"
action:
- variables:
cmd: "{{ trigger.payload_json.action }}"
- choose:
# --- ON ---
- conditions: '{{ cmd == "on_press" }}'
sequence: !input on_press
- conditions: '{{ cmd == "on_hold" }}'
sequence: !input on_hold
- conditions: '{{ cmd in ["on_press_release", "on-press-release"] }}'
sequence: !input on_released
- conditions: '{{ cmd in ["on_hold_release", "on-hold-release"] }}'
sequence: !input on_hold_released
# --- UP ---
- conditions: '{{ cmd == "up_press" }}'
sequence: !input up_press
- conditions: '{{ cmd == "up_hold" }}'
sequence: !input up_hold
- conditions: '{{ cmd in ["up_press_release", "up-press-release"] }}'
sequence: !input up_released
- conditions: '{{ cmd in ["up_hold_release", "up-hold-release"] }}'
sequence: !input up_hold_released
# --- DOWN ---
- conditions: '{{ cmd == "down_press" }}'
sequence: !input down_press
- conditions: '{{ cmd == "down_hold" }}'
sequence: !input down_hold
- conditions: '{{ cmd in ["down_press_release", "down-press-release"] }}'
sequence: !input down_released
- conditions: '{{ cmd in ["down_hold_release", "down-hold-release"] }}'
sequence: !input down_hold_released
# --- OFF ---
- conditions: '{{ cmd == "off_press" }}'
sequence: !input off_press
- conditions: '{{ cmd == "off_hold" }}'
sequence: !input off_hold
- conditions: '{{ cmd in ["off_press_release", "off-press-release"] }}'
sequence: !input off_released
- conditions: '{{ cmd in ["off_hold_release", "off-hold-release"] }}'
sequence: !input off_hold_released
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment