Philips Hue Dimmer Switch v2 (Zigbee2MQTT)

That is weird that your devices do not expose the _action entity.

All my dimmers have those, for example:

sensor.bedroom_hue_dimmer_action

@thotha - Looks like your dimmer switch is not exactly the “Philips Hue Dimmer Switch v2” as indicated in the subject of this thread. Your’s dimmer got a dial, so that’s a different model.

As you can see, it‘s the model of this conversation.

Ok, so where should I search fir a solution?
In/for Zigbee2MQTT, MQTT, Mosqitto Brocker, Home Assistant Core, Hassio, Sonoff Stick?

After search the internet with this search one of the first results is this one and close to the bottom I did find the solution to this problem.
I do not know with which update within the last few days this happened but suddenly the mentioned setting legacy triggers was disabled.
Maybe you could mention somewhere that if a user as problems with your blueprint, he should check that setting within Zigbee2MQTT.

Sorry for this trouble.

1 Like

Bit confused, does this reprogram the buttons just like Switch Manager, and can it also support RWL021?

It’s a blueprint so that you can create an automation and specify different actions for different buttons and press types.

It may work with RWL021 as the action names look compatible, but I didn’t test it.

This blueprint is perfect for my needs! :grinning:

Recently, I added a new automation to the blueprint and selected my light group. However, I have noticed a slight delay of around 1 second when I toggle the light and it turns on. But when I toggle it again and the light turns off, there is no delay. I wonder if anyone knows how I can change the delay only when the light turns off, so it matches the same delay as when the light goes on.

Thank you.

Thanks for this blueprint - works perfectly within areas or specific lights.
But I don’t understand why the dimming is not supported.
I tried to use “UP Button hold” to let the lights go up in 10% steps.
Tried to change the brightness_pct which didn’t work.

But changing it via yaml editor did not work:

service: light.toggle
metadata: {}
data:
  brightness_step_pct: 10
  transition: 1
target:
  area_id: kuche

Why is that not supported and how can I achieve this?

THX!

You probably need to use light.turn_on service instead of the toggle.

I’m trying to hunt down a hue dimmer switch v1 blueprint, if anyone has one?

Thanks @JetSerge, this is great! I’m new to HA and this is just what I was looking for. I have a few binary sensors for the times of day (e.g. morning, afternoon, evening, night) so I can change automations based on the time of day. I’m trying to figure out a way to add a control to the press release button where if the ‘night’ sensor is on, then it will trigger a dimmed light, but I can’t work out a way to do this as the blueprint throws up an error if I try if-then-else in the yaml. May I ask if you are able to provide any guidance? Thanks again!

You should be able to if-then-else via the UI editor in the automation, no need to use YAML. Sorry, it doesn’t seem to be specific to my automation, maybe post your code in another thread and ask the community for help?

1 Like

Thanks @JetSerge , I love this blueprint. If double press could be implemented it would be perfect. I have tried some other ones for RWL022 and Zigbee2MQTT but double pressing does not work. somebody could help me? I need the double press please.

@JetSerge love your blueprint!
Just figured that something in z2m or HA must have changed with the recent updates.

My actions for up_hold_once and down_hold_once didn’t work anymore.
Everything else kept working like a charm.
Figured out that the helper field becomes “unknown” in between the real states.

So the following code needed to be changed to don’t let the helper field take status “unknown”:

condition:
- condition: template
  value_template: '{{ trigger.event.data.new_state.state not in ("", "None", "unknown") }}'

After adding “unknown” to the exclusion list the up_hold_once und down_hold_once actions are working again :slight_smile:

Maybe you want to add that to your great blueprint to keep it working?

If you’re already at it, this

- service: input_text.set_value
  data:
    entity_id: !input helper_last_controller_event
    value: '{{ command }}'

should better become something like this

- action: input_text.set_value
  metadata: {}
  data:
    value: '{{ command }}'
  target:
    entity_id: !input helper_last_controller_event

according to the new best practice I guess.

2 Likes

Thanks for the fix. I didn’t test it myself yet, but I updated the blueprint gist.

As for the new syntax keywords, I’ll wait for some time before updating it to maintain compatibility with the older HA versions.

1 Like

Thanks for the template! It didn’t work until I replaced underscores with hypens in the dimmer actions.
e.g. {{ command == “on_press” }} becomes {{ command == “on-press” }}

I recently moved from ZHA to Zigbee2QTT so it may be a config issue on my side?

Edit: I realise that I’m using a V1 dimmer (324131137411), not V2 which might be the reason.

Hey @JetSerge,
with zigbee2mqtt 2.0 the support for Home Assistant legacy triggers will be removed.
Just tried to disable Home Assistant legacy triggers in z2m and all switches based on this blueprint stopped working.
Instead MQTT device trigger should be used.
Any chance, you will update your great blueprint to keep it working with z2m 2.0?
Regarding this post z2m 2.0 is expected to be released the 3rd January 2025.

I’ve updated the blueprint to listen on a MQTT topic. Now you have to insert the topic as a parameter:

blueprint:
  name: Philips Hue Dimmer switch v2 (Zigbee2MQTT)
  description:
    "Tested with Philips Hue Smart Wireless Dimmer Switch V2 (929002398602).
    \n\n To have different actions on short press and on hold (long press), use 'button
    release' (`*_press_release`) and 'button hold once' (`*_hold_once`) commands,
    as 'press' (`*_press`) will always trigger before 'button hold' (`*_hold`). \n\n
    When you hold a button, 'button hold' (`*_hold`) command is repeated roughly once
    per second. This may not work as desired with actions like toggling light/switch.
    If you want an action to run only once when the button hold action is registered,
    use 'button hold once' (`*_hold_once`). It's better than using 'button hold release'
    as the result can be observed before releasing the button after holding. \n\n
    As 'button hold' action is repeated by the device while you keep holding the button,
    it's a good way to run actions which increment / decrement some value (such as
    light dimming). To make it react as soon as the button is pressed, copy the same
    action to 'button press' (press action occurs immediately, while hold action occurs
    after a delay). \n\n Make sure to manually create a separate Text Helper per dimmer
    device and define its entity in the automation. It's used to store the last controller
    event to filter possible empty events and handle 'button hold once' actions. "
  domain: automation
  input:
    mqtt_topic:
      name: MQTT Topic
      description: Topic of the Philips Hue Motion
      default: zigbee2mqtt/<device name>
    helper_last_controller_event:
      name: (Required) Helper - Last Controller Event
      description:
        Input Text used to store the last event fired by the controller.
        You will need to manually create a text input Helper entity for this.
      default: ""
      selector:
        entity:
          domain:
            - input_text
          multiple: false
    on_press:
      name: ON button press
      description: Action to run
      default: []
      selector:
        action: {}
    on_press_release:
      name: ON button release
      description: Action to run
      default: []
      selector:
        action: {}
    on_hold:
      name: ON button hold
      description: Action to run (repeat while holding)
      default: []
      selector:
        action: {}
    on_hold_once:
      name: ON button hold once
      description: Action to run only once (no repeat)
      default: []
      selector:
        action: {}
    on_hold_release:
      name: ON button hold release
      description: Action to run
      default: []
      selector:
        action: {}
    up_press:
      name: UP button press
      description: Action to run
      default: []
      selector:
        action: {}
    up_press_release:
      name: UP button release
      description: Action to run
      default: []
      selector:
        action: {}
    up_hold:
      name: UP button hold
      description: Action to run (repeat while holding)
      default: []
      selector:
        action: {}
    up_hold_once:
      name: UP button hold once
      description: Action to run only once (no repeat)
      default: []
      selector:
        action: {}
    up_hold_release:
      name: UP button hold release
      description: Action to run
      default: []
      selector:
        action: {}
    down_press:
      name: DOWN button press
      description: Action to run
      default: []
      selector:
        action: {}
    down_press_release:
      name: DOWN button release
      description: Action to run
      default: []
      selector:
        action: {}
    down_hold:
      name: DOWN button hold
      description: Action to run (repeat while holding)
      default: []
      selector:
        action: {}
    down_hold_once:
      name: DOWN button hold once
      description: Action to run only once (no repeat)
      default: []
      selector:
        action: {}
    down_hold_release:
      name: DOWN button hold release
      description: Action to run
      default: []
      selector:
        action: {}
    off_press:
      name: OFF/HUE button press
      description: Action to run
      default: []
      selector:
        action: {}
    off_press_release:
      name: OFF/HUE button release
      description: Action to run
      default: []
      selector:
        action: {}
    off_hold:
      name: OFF/HUE button hold
      description: Action to run (repeat while holding)
      default: []
      selector:
        action: {}
    off_hold_once:
      name: OFF/HUE button hold once
      description: Action to run only once (no repeat)
      default: []
      selector:
        action: {}
    off_hold_release:
      name: OFF/HUE button hold release
      description: Action to run
      default: []
      selector:
        action: {}
  source_url: https://gist.github.com/CrazyCoder/28d660d9e2e8464458e591ad79b3698e
mode: restart
max_exceeded: silent
trigger:
  - platform: mqtt
    topic: !input mqtt_topic
condition:
  - condition: template
    value_template: "{{ trigger.payload_json.action != '' }}"
action:
  - variables:
      helper_last_controller_event: !input helper_last_controller_event
      command: "{{ trigger.payload_json.action }}"
      prev_command: "{{ states(helper_last_controller_event) }}"
  - service: input_text.set_value
    data:
      entity_id: !input helper_last_controller_event
      value: "{{ command }}"
  - choose:
      - conditions:
          - '{{ command == "on_press" }}'
        sequence: !input on_press
      - conditions:
          - '{{ command == "on_press_release" }}'
        sequence: !input on_press_release
      - conditions:
          - '{{ command == "on_hold" }}'
        sequence: !input on_hold
      - conditions:
          - '{{ command == "on_hold_release" }}'
        sequence: !input on_hold_release
      - conditions:
          - '{{ command == "up_press" }}'
        sequence: !input up_press
      - conditions:
          - '{{ command == "up_press_release" }}'
        sequence: !input up_press_release
      - conditions:
          - '{{ command == "up_hold" }}'
        sequence: !input up_hold
      - conditions:
          - '{{ command == "up_hold_release" }}'
        sequence: !input up_hold_release
      - conditions:
          - '{{ command == "down_press" }}'
        sequence: !input down_press
      - conditions:
          - '{{ command == "down_press_release" }}'
        sequence: !input down_press_release
      - conditions:
          - '{{ command == "down_hold" }}'
        sequence: !input down_hold
      - conditions:
          - '{{ command == "down_hold_release" }}'
        sequence: !input down_hold_release
      - conditions:
          - '{{ command == "off_press" }}'
        sequence: !input off_press
      - conditions:
          - '{{ command == "off_press_release" }}'
        sequence: !input off_press_release
      - conditions:
          - '{{ command == "off_hold" }}'
        sequence: !input off_hold
      - conditions:
          - '{{ command == "off_hold_release" }}'
        sequence: !input off_hold_release
  - choose:
      - conditions:
          - '{{ command == "on_hold" and prev_command == "on_press" }}'
        sequence: !input on_hold_once
      - conditions:
          - '{{ command == "up_hold" and prev_command == "up_press" }}'
        sequence: !input up_hold_once
      - conditions:
          - '{{ command == "down_hold" and prev_command == "down_press" }}'
        sequence: !input down_hold_once
      - conditions:
          - '{{ command == "off_hold" and prev_command == "off_press" }}'
        sequence: !input off_hold_once
2 Likes

if you enable the Z2M experimental features before 2.0.0 gets rolled out, it will be very simple to modify the blueprint:

  • Change the trigger to listen, to event of the dimmer. Z2M will expose event.dimmer_name_action entity that we can assign to.
  • Rework the command variable to allow keeping original blueprint figures. Use the <button_name>_<event_type> from the attributes.
description: ""
triggers:
  - trigger: state
    entity_id:
      - event.hue_dimmer_action
    attribute: event_type
conditions: []
actions:
  - variables:
      command: >-
        {{ trigger.to_state.attributes.button }}_{{
        trigger.to_state.attributes.event_type }}
mode: single
1 Like