ZHA - Philips Hue Tap Dial Switch (RDM002) Custom, Light and Media mode

Introducing the Ultimate Hue Tap Dial Switch Blueprint: Unleash Your Home’s Potential!

Hey Home Assistant Enthusiasts,

I’m thrilled to share with you my first Blueprint, designed to take full advantage of the Hue Tap Dial Switch (RDM002) when paired with ZHA to create an unparalleled home automation experience. Imagine controlling your lights, media player, and custom actions—all from a single, sleek device. Let’s dive into the exciting features this Blueprint has to offer!

Links:

:page_with_curl: My GitHub Repo
:blue_book: This blueprint

Version:

  • 2025.04.0: Change variables to be unique per button
  • 2025.02.0: Big v2 update with a lot of changes, see below
  • 2025.01.1: Implemented a way to use the Lights mode without setting up schedules and cleanup of old syntax
  • 2025.01.0: Initial Version

Highlights:

  • Custom Mode: Actions at Your Fingertips:
    Program the buttons to execute your personalized home automation routines, from controlling your shades to activating security modes.

  • Lights Mode: Seamless Control of Lights:
    Effortlessly dim, brighten, and change the color of your Hue lights depending on day and time of day with the intuitive dial, buttons and a schedule.

  • Media Mode: Media Player Magic:
    Turn on, turn off, skip tracks, and adjust volume with ease, making your entertainment experience smoother than ever.

Requirements:

  • Home Assistant 2024.10.0 or later: earlier versions don’t support the different button presses.
  • Text Helper: to be able to use the dial with each button. See below

Getting Started:

  1. Download & Install the Blueprint:
    Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

  2. Create a Text Helper:


    Also possible through YAML, see below.

  3. Select your Button and Text Helper

  4. Set settings per button:

  5. Customize Your Actions per button:

Use Home Assistant’s automation editor to fine-tune each button’s function to match your needs. Certain Custom Actions can still be used when Lights or Media mode is selected, see options.

  1. Customize Your Light per button:

Select the lights you want to control and change the default brightness, color_temp_kelvin and transition for the lights. If the light is already on and you press the button it will reset to the default.

You can also select a Schedule Helper you want to use for the On events. If your schedule doesn’t contain certain data it will revert to the defaults you set in the Blueprint. See below for an example in YAML for my Lights Bright and Lights Dimmed schedule, as you can see I have not set the transition in there as I don’t need to change it across the day.

  1. Customize Your Media Player per button:


A Personal Touch:

I started out with the Blueprint from this post, thanks for the hard work! And made some significant changes and added lots of functionality to make it even more versatile and powerful.

Helper setup:

I find it easy to split my config into packages, so I can easily find different yaml entities related to specific device type. You can include the following in your Home Assistant config:

homeassistant:
  packages: !include_dir_named packages

Make sure to create packages folder in your /config/ directory.

For the Text helper you can make a file called buttons.yaml for example and put the following inside: badkamer_knop and eettafel_knop are the names of my buttons in this example, but you can set whatever you like.

input_text:
  badkamer_knop_last_pressed:
    name: Badkamer Knop Last Pressed
    icon: mdi:knob
    min: 0
    max: 1
    mode: text
    pattern: "[1-4]"
  eettafel_knop_last_pressed:
    name: Eettafel Knop Last Pressed
    icon: mdi:knob
    min: 0
    max: 1
    mode: text
    pattern: "[1-4]"

For the Schedule helper you can make a file called lights.yaml for example and put the following inside:

schedule:
  lights_bright:
    name: "Lights Bright"
    icon: mdi:lightbulb-auto
    monday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 90
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 60
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
    tuesday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 90
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 60
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
    wednesday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 90
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 60
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
    thursday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 90
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 60
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
    friday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 90
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 60
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
    saturday:
      - from: "00:00:00"
        to: "10:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
      - from: "10:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 90
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 60
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
    sunday:
      - from: "00:00:00"
        to: "10:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
      - from: "10:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 90
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 60
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 30
          color_temp_kelvin: 3333
  lights_dimmed:
    name: "Lights Dimmed"
    icon: mdi:lightbulb-auto-outline
    monday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 40
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 20
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
    tuesday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 40
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 20
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
    wednesday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 40
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 20
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
    thursday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 40
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 20
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
    friday:
      - from: "00:00:00"
        to: "09:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
      - from: "09:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 40
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 20
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
    saturday:
      - from: "00:00:00"
        to: "10:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
      - from: "10:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 40
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 20
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
    sunday:
      - from: "00:00:00"
        to: "10:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333
      - from: "10:00:00"
        to: "19:00:00"
        data:
          brightness_pct: 40
          color_temp_kelvin: 3333
      - from: "19:00:00"
        to: "23:00:00"
        data:
          brightness_pct: 20
          color_temp_kelvin: 3333
      - from: "23:00:00"
        to: "24:00:00"
        data:
          brightness_pct: 10
          color_temp_kelvin: 3333

You can of course make more schedules if needed and change the time slots, brightness_pct, color_temp_kelvin and transition to your liking.

Join the Community:

I can’t wait to see how you all use this Blueprint to enhance your smart homes. Please share your experiences, tips, and any creative uses you come up with. Together, we can make our homes smarter and more connected than ever!

Happy automating! :blush:

4 Likes

First big update. You can now use the Lights mode without setting up a schedule.

So only the Text Helper for the button presses is still needed to use this Blueprint. I am trying to figure out a way to be able to do this without the Text Helper so it is easier to use for new users.

Brilliant thanks, I was wondering why I couldn’t get this working and had missed that a schedule was essential for lights mode.

Would it be possible to have some very light customisation in the “Lights” mode? Ideally to have a single short press toggle the light on / off.

With the newer version of the blueprint the Schedule is not necessary anymore, you can now set the default start brightness, color_temp and transition directly in the blueprint, these will be used if the schedule is not set. If you don’t see those options reimport the blueprint.

I tried the short button press with Toggle first, but if you want to change between lights and the light is already on it will then turn the light off that is already on if you press that button. The way it is implemented currently, it will reset the light to the ‘default’ state set by the schedule or what you set manually.

I am planning to change the Blueprint to have ‘preset actions’ or ‘custom action’ per button press type instead of a full Custom/Light/Media mode, so it is more flexible to use. But this is quite a complete overhaul of the logic behind it, so will take some time.

That sounds fantastic, I look forward to the update! This is already by far the nicest integration for this device I’ve used and the only one I’ve been able to make fit my use case.

Figured that may be the case on short press = toggle having just scanned through the logic.

Well it took some days of work. But I have released basically a v2 of my Blueprint. You can reimport it over the old version but you will need to setup certain parts again.

The code has been optimised and more is now fully customisable.

Due to some changes it will not be fully compatible with the previous versions. Some entities have changed names to prevent the old stored settings causing issues. They will be ignored in the new blueprint.

There is no more Custom/Light/Media mode per button, but you can select different presets for the Light and Media mode per button. The presets are ignored if you don’t select a Light for the Light options or Media for the Media options. The Custom Actions are always run together with the other options you select. But can be empty if you don’t need Custom Actions.

I will update the instructions tonight.

Hi! I just installed one of a few Hue Tap Dials I purchased for my home renovation and found your blueprint after trying a few others which I found to be a little too simple. :slight_smile:

First off, my text helper window had some fields missing compared to your screenshot, however it SEEMS to work anyway:

Second, I have only used Ikea’s switches before with buttons to dim. With the wheel on the Dial Switch I found it very easy, by mistake, to dim to low, so the lights turn off. Would it be possible to add a feature to the blueprint with an option to toggle the wheel not turn off the lights when dimming?

You can only set those filters during creation of the Text Helper.

The extra options are mainly aimed at limiting which values can be stored in the input_text value. As the Blueprint handles the writes and reads to the value, the filtering is optional so it should work fine without those filters in it.

The dimming response is how ZHA handles dimming of a light. I am using the ‘Step’ command to provide a smooth dimming command. So when you dim it below 1% it will turn the light off. That’s just how ZHA handles the dimming when using the Step command.

New update today, to comply with the changes in HA 2025.4.0 .

n/m … I was able to import manually :slight_smile:

Hi, I have just started using your Blueprint and was wondering if there is anywhay to capture which lights are used in a button press?

I have four lights in my hallway and I have programmed different button presses for Button 1 to bring on a different number of the lights but under the dimming setting there is only an option to “hard select” certain lights.

As an example, Button 1, Double Press turns on Lights 2 and 3, it would then be great to be able to use the dimmer on those two lights. Button 1, Triple Press turns on Lights 2, 3 and 4. Any ideas on how to set up the dimming function?

This is currently not supported by the Blueprint itself. It only stores and checks which button was last pressed, independent of what type of press was used.

Extending it with this functionality would need extra helpers and rewrite of the whole logic.

So you can only set one dial setting per button press. Which is still more than the original 1 dial setting for the whole device. You could set lights abc to button 1 and lights abcd to button 3 for example. And use the multiple presses for other actions.

I am using the multiple presses for other actions on the same lights or to control other devices. So don’t have this problem for my usecase.

1 Like

Understood, thanks for taking the time to reply.

I’ll look at using more of the buttons. My plan was to use a single Tap Dial Switch for multiple rooms but I might need another or to simplify the level of control.

Great blueprint, worked for me straight out of the box. One question, is it possible to set a minimum brightness setting on the dimmer?

As mentioned above:

The dimming response is how ZHA handles dimming of a light. I am using the ‘Step’ command to provide a smooth dimming command. So when you dim it below 1% it will turn the light off. That’s just how ZHA handles the dimming when using the Step command.

Not sure if I could make some logic to fix this, as the step command takes care of the fluid dimming, by adding logic you’d need to check the state of the light which will not be updated as fast.

Is it possible to set a minimum so it doesn’t fire a dim event if below a threshold?

No, this is not possible currently.

As mentioned before, the state of the light is not tracked by the blueprint. As that would not be viable for how ZHA handles the Dimming and the Light control.

This looks very cool! Any chance to make this work for Z2M (Zigbee2mqtt)? I’m a noob when it comes to creating blueprints, would love a Z2M version just like this.

There is no quick way to convert between the two systems.

Not all actions that are implemented in ZHA are present in Z2M. The multiple presses for instance are not there, so you’d need logic for that inside the blueprint.

Not sure when I would have time to convert the Blueprint and it won’t have the same features at first.

As I am using the buttons in ZHA myself, I cannot test it properly to see if it responds correctly with each update of Z2M.