[Release] Logitech Harmony Hub Driver v0.1.20230311

Hi folks, first of all I love this integration :smiley:

Benn using it for a long time I just have one concern, in my Google Home app and in Home Assistant my parent device shows up as a light device. Is there a way to change it so it just shows up as a switch or even better a media device? Se we can adjust volume and whatnot.

Thanks!

Why not simply use the direct Logitech to Google integration? It is sure to provide the best possible integration with Google Home.

To answer your question... I am not sure if there is anyway to achieve your goals. Remember that a Logitech Harmony Hub does not really control the absolute volume level of a device. It simply can increase and decrease the volume of a device.

It will work with this integration.

I don't typically use the Harmony activities, the only one i have is for my basement receiver. I expose the harmony hub as a switch to google home and then add switch, volume, and brightness traits. From the home app I can turn the receiver on/off and adjust volume up/down with the brightness adjuster. With Voice control and google smart displays you can turn on/off, adjust volume up/down, and mute/unmute.

You could also expose it to google as a media device but then you can't use the brightness trait to adjust the volume.

Do you have to use a SmartThings device for the home control buttons? I was able to configure the buttons to send a random command just to see if I could get traffic in the logs. I'm seeing a message when I do a short press and a long press, but I don't see a Device ID.

Unhandled data from Harmony Hub. json = {"type":"control.button?pressType","data":{"type":"short"}} debug[type:control.button?pressType, data:[type:short]] debugparsed: {"type":"control.button?pressType","data":{"type":"short"}} infoUnhandled data from Harmony Hub. json = {"type":"control.button?pressType","data":{"type":"long"}} [type:control.button?pressType, data:[type:long]]

Not sure... You may be able to use the official Lutron integration or Philips Hue integration as well...however these don't allow the use of virtual devices like ST does.

What did you configure these buttons to do?

If you cannot discern each button somehow uniquely (i.e. without a unique device ID in the data), then I don't think it'll work.

Does anyone have issues with the connection breaking sometimes?

I don't use the home buttons on my harmony remote often but once every week or 2, they won't work.
I go into the harmony app, hub setup, and refresh the smartthing devices (which is just 4 virtual buttons)
after i do the refresh, everything works again.

No issue here. I am using the exact same setup. 4 ST Virtual Buttons mapped to the home control buttons. It has been working very reliably for me.

I gave that a shot. I get things like
"data":{"hueScene-GQtceXXS83SszmW":{"status":0,"on":true}
In the logs. I tried putting "hueScene-GQtceXXS83SszmW" as the DeviceID, but I'm not getting any action in the logs when I now press the buttons.

I could try SmartThings. Can I use that without a SmartThings Hub?

Yes, no hub required any longer to have a ST account.

Wow! This is super awesome. Haven't checked the page in a while and just saw the notifications so decided to check. It works beautifully and is soooo much faster than having to go through HubConnect and ST to use these buttons. You guys @ogiewon and @abuttino are awesome! Thanks so much fo this!

Time to finally retire my ST hub and HubConnect

1 Like

If I assign the home control button to a Hue device (direct Logitech + Philips Hue integration), can I still capture the button in HE? In the logs, I see the below. However, putting "hue-00:17:88:01:02:4d:00:cc-0b" in "Home Control Light 1" doesn't seem to capture the button:

Unhandled data from Harmony Hub. json = {"type":"automation.state?notify","data":{"hue-00:17:88:01:02:4d:00:cc-0b":{"color":{"mode":"ct","xy":{"y":0.41,"x":0.4573},"temp":366,"hueSat":{"hue":8418,"sat":140}},"brightness":2,"on":false,"status":0}}}

Thanks!

Try modifying the line 196

From

else if ((json?.type == "automation.state?notify")  && (description.contains('"status":1'))) {

To

else if ((json?.type == "automation.state?notify")) {

And see if if works. Let me know what you find.

That worked! Thank you sir!

1 Like

Thanks for verifying that change resolves the issue. I will update my GitHub repo.

@yototogblo, I noticed an issue with removing the && portion of the above IF statement. Removing it results in double events being generated. Instead of 1 pushed or held event, I get 2 events. Thus, I am trying to change the criteria so that it will work with both SmartThings and Philips Hue. Can you please try replacing the IF statement with the following code and run another test?

    else if (((json?.type == "automation.state?notify")  && (description.contains('"status":1'))) ||
             ((json?.type == "automation.state?notify")  && (description.contains('"hue-')))) {

Please check and see if you're receiving multiple 'pushed' and 'held' events for each press/hold of the button on the remote. Thanks.

Ah, you're right... I actually get ton of events (not just 2). So I hold button 3 and button 1 and 2 also report getting held. It's weird but I did see that when looking in the logs previously also.

Testing the code change although I suspect it'd result in pseudo events for buttons that have hue tied to them.

Okay, so I think I understand what's happening...

I have button 1 and 2 assigned to hue directly in Logitech. Button 3 and 4 are assigned to the ST virtual switches.

In HE, Button 3 turns on the same hue bulbs that button 1 and 2 control in addition to some extra switches in the room. Now when I push button 3, it turns on all the hue bulbs and switches. However, the Harmony Elite also sends an event for the hue bulbs getting turned on which send HE events for button 1 and 2. Oh, and button 3 is still getting duplicated.

So by pushing button 3, I get 2 button 3 pushed events, a button 1 pushed event and a button 2 pushed event. Same story with holding button 3.

The logs are below... I'd also look into the logs to see if I can figure out a way to fix it. Thanks!

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:49.146 pm [debug](http://192.168.1.222/device/edit/52)Socket Button 1 was 'pushed'

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:49.144 pm [debug](http://192.168.1.222/device/edit/52)[type:automation.state?notify, data:[0a667f1a-11f7-4ed8-8134-2afc150ba4b2:[status:0, brightness:256.56565656566, on:true]]]

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:49.141 pm [debug](http://192.168.1.222/device/edit/52)parsed: {"type":"automation.state?notify","data":{"0a667f1a-11f7-4ed8-8134-2afc150ba4b2":{"status":0,"brightness":256.56565656566,"on":true}}}

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:46.194 pm [debug](http://192.168.1.222/device/edit/52)Bulb Button 1 was 'pushed'

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:46.188 pm [debug](http://192.168.1.222/device/edit/52)[type:automation.state?notify, data:[hue-00:17:88:01:02:4c:d6:80-0b:[color:[mode:hs, xy:[y:0.4109, x:0.4562], temp:362, hueSat:[hue:8520, sat:140]], brightness:254, on:true, status:0]]]

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:46.185 pm [debug](http://192.168.1.222/device/edit/52)parsed: {"type":"automation.state?notify","data":{"hue-00:17:88:01:02:4c:d6:80-0b":{"color":{"mode":"hs","xy":{"y":0.4109,"x":0.4562},"temp":362,"hueSat":{"hue":8520,"sat":140}},"brightness":254,"on":true,"status":0}}}

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:46.162 pm [debug](http://192.168.1.222/device/edit/52)Bulb Button 2 was 'pushed'

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:46.159 pm [debug](http://192.168.1.222/device/edit/52)[type:automation.state?notify, data:[hue-00:17:88:01:02:4d:00:cc-0b:[color:[mode:ct, xy:[y:0.41, x:0.4573], temp:366, hueSat:[hue:8418, sat:140]], brightness:152, on:true, status:0]]]

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:46.156 pm [debug](http://192.168.1.222/device/edit/52)parsed: {"type":"automation.state?notify","data":{"hue-00:17:88:01:02:4d:00:cc-0b":{"color":{"mode":"ct","xy":{"y":0.41,"x":0.4573},"temp":366,"hueSat":{"hue":8418,"sat":140}},"brightness":152,"on":true,"status":0}}}

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:38.768 pm [debug](http://192.168.1.222/device/edit/52)Socket Button 1 was 'pushed'

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:38.765 pm [debug](http://192.168.1.222/device/edit/52)[type:automation.state?notify, data:[0a667f1a-11f7-4ed8-8134-2afc150ba4b2:[status:1, brightness:256.56565656566, on:true]]]

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:38.762 pm [debug](http://192.168.1.222/device/edit/52)parsed: {"type":"automation.state?notify","data":{"0a667f1a-11f7-4ed8-8134-2afc150ba4b2":{"status":1,"brightness":256.56565656566,"on":true}}}

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:38.099 pm [info](http://192.168.1.222/device/edit/52)Unhandled data from Harmony Hub. json = {"type":"control.button?pressType","data":{"type":"short"}}

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:38.097 pm [debug](http://192.168.1.222/device/edit/52)[type:control.button?pressType, data:[type:short]]

[dev:52](http://192.168.1.222/logs#dev52)2020-11-06 11:58:38.094 pm [debug](http://192.168.1.222/device/edit/52)parsed: {"type":"control.button?pressType","data":{"type":"short"}}

Ah sorry, the duplicates are fixed but the hue button events getting triggered aren't. Thought I had updated the code with your change but hadn't.

Seems using [type:control.button?pressType, data:[type:long]] would be the ideal way to capture the button presses but unfortunately, that doesn't include the data.

I looked into the [automation.state?notify] event triggered from pressing button 1 and compared it to the one generated after the hue bulb turns on from pressing button 3 and there's no difference. It's so weird that button 1 events are generated from pressing button 3. Button 1 events aren't generated from turning the hue bulbs on using the hue dimmer switch. Anyways, with that happening, I'm not sure there's a way to fix this.

Thanks for looking into it. I'd just not assign button 1 and button 2 to do anything.

so... what would you recommend for the final code change? Does the following at least work?

    else if (((json?.type == "automation.state?notify")  && (description.contains('"status":1'))) ||
             ((json?.type == "automation.state?notify")  && (description.contains('"hue-')))) {

Or are there any changes that you'd recommend? This at least de-duped the events for my ST mapped buttons.

I think you should leave it the way it is in Production (with "status":1 included and contains(' "hue-') excluded). Otherwise, it could lead to confusion where events seem to be randomly generated causing unexpected behavior.