Philips Hue Tap Dial button - potential music (Sonos) controller?

Just started looking at the dial on my devices linked to Zigbee2MQTT and Node Red. Appears there are a few different commands that can be sent when rotating the dial, so there may be equivalent messages in the event stream from the bridge. I'm wondering if @bertabcd1234 may only be receiving and/or parsing the step message.

@andywebs I'm getting an error with your driver when turning the dial, any suggestions?

This is not what it looks like via the Hue API, and I don't see a way to get the events that Z2M is apparently able to get from the "raw" Zigbee (that communication, of course, being entirely different) based on the Hue eventstream. I haven't looked at this lately but recall doing about the best I could with it last time given the oddities involved...


Has this happened to anyone?
I installed @andywebs driver, but any button I press the log says its button 4.
@rhodesda you seem to have had the same issue - how did you resolve yours?

(new to this whole experience XD)
What am i doing wrong?

At the time I used the CoCoHue driver but even then the volume control was poor. I use the IKEA sound remote V2 now instead

oh wonderful!
hows your experience using that?
Do I need to buy a hub for that or will it work out of the box with hubitat?

I'm looking to be able to sync my hue box to physical buttons (control volume, start/stop sync, lights etc....)

I recently got one of these, and wanted to follow up on this thread @andywebs , I am also getting this: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'null' with class 'null' to class 'int'. Try 'java.lang.Integer' instead on line 163 (method parse)

when turning the dial - directly paired

firmwareMT: 100B-0121-02003B13


UPDATE, decided to ask ChatGPT :slight_smile:

anyway, it suggested this dirty fix in the device code:

void dial(number){
def dimmer = device.currentValue("level")

 if (dimmer == null) {
    dimmer = 0
  if (level == null) {
    level = 0
   log.debug "${level} ${number} ${dimmer}"
if (dimmer != null) {
    if (logEnable) log.debug "Dial Value from:  ${dimmer}  by ${number}"
    // Assuming setLevel expects an Integer, you might need to convert dimmer to Integer explicitly
    setLevel((dimmer as Integer) + number)
} else {
    if (logEnable) log.warn "Current value of 'level' is null"
    // You might want to handle this case according to your requirements

the end result is the "level" does seem to work where ROUGHLY a 90 degree clockwise turn takes it from 0 to 100 and 100 to 0 counterclockwise, I've looked here and not sure exactly how to implement this in rule machine beyond dimmer increase/decrease for my Sonos, but that does seem to work if I don't twist it in either direction past 90 degrees (since now the level doesn't "change")

Update: Using Button Controller I set one of the buttons to "Mute" by setting the dimmer level to 0 which works pretty well, it's def a bit sensitive twisting 1-100 but beyond that seems to work!

and using rule machine:

EDIT so obviously the 1-100 corresponds to 1-100 degree turn, playing around with it to more closely match a 360 degree turn

Another EDIT: so it seems it's def sensitive to how fast the dial is twisted, a very slow twist almost gets 0-100 while turning - fast gets 1-100 at 45 degrees tops.... WIP

I don't think that driver ever worked properly or is actively maintained, the only driver I know of that works is the CocoHue driver