Zigbee group control for Inovelli LED bars

Goal: place switches in a common group then send a zigbee "multicast" (group broadcast) to that group to change LED bar colors using Inovelli's private cluster "set zigbee attribute" method.

So, develop a driver then apply to a virtual device so the color bars can be controlled easily from rule manager at the switch group level. This greatly reduces traffic and would enable simultaneous LED bar updates across the entire group.

However, it looks like group orchestration methods in the hubitat zigbee object are limited only to common cluster functions like on/off etc. Is there a more generic library that I could import that might implement more generic group based orchestration?

4 Likes

Could you use the "Groups & Scenes" Hubitat app to accomplish this?

That one is hardcoded for common capabilities in switch/dimmer zigbee clusters sadly. The capabilities it uses are also in the zigbee object. I wish there was a method there that would let me specify other zigbee clusters. Then I could use the Inovelli private cluster ID and leverage it's set zigbee attribute method. It looks like I'm going to be using he-raw probably with jvm33's sendAdvancedZigbeeCommands library available here: Hubitat-Zigbee/zigbeeTools.sendZigbeeAdvancedCommands.groovy at main · jvmahon/Hubitat-Zigbee · GitHub

Update on this. I've successfully enabled color bar control for all Inovelli zigbee devices via the zigbee broadcast dni and the write attribute capability of the inovelli cluster.

I'm using the raw "he wattr" method to accomplish this currently. Next up I need to get a zigbee sniffer up and running and have a look at adding a group id into either the above method or use some other method that would work. It has been proven that Inovelli zigbee switches respond to group messages with the write attribute method specified.

The driver code is going on github soon and I'll post the link here when its up.

4 Likes

Starting to zero in on the low level "he grp cmd" to accomplish this. Essential syntax is this:
"he grp cmd 0x${groupAddress} 0x01 0x${cluster} 0x${command} { ${hexData} }"

So assuming cluster = 0xFC31, command = 0x02 (write attributes), and hexData is the payload which would be for example: {0x005F (set LED on color) 0x20 (Uint8), 00 (Red color)}.

However the switches need the manufacturer code to process this and I'm not sure that "he grp cmd" exposes this. Maybe something you would know @kkossev ?

I don't think that "he grp cmd" exists, but it is not needed, you can always use

zigbee.command(zigbee.GROUPS_CLUSTER, ....

This is the Zigbee groups library that I used in some of my drivers :

Thanks! Might be a good idea to tack away from this technique....

"he grp cmd" is returned by the zigbee object methods that begin with "group" btw and also referenced by Mike Maxwell here. I've successfully used it to send on/off commands to the on/off cluster in an existing group.

I sure wish the hubitat folks would release documentation around these low level commands....

edit: looks like your library is useful for working with the groups cluster itself and the final version of my driver will for sure need this. Right now, I'm actually only trying to send a message to an existing group using a group broadcast.

1 Like

I just played around a bit with Zigbee Groups level control, but didn’t take it any further.

@mike.maxwell working with "he grp cmd" to send an inovelli private cluster command to a group but the switches will need manufacturer ID in order to process it. Syntax of the command as I understand it is this:

"he grp cmd 0x${groupAddress} 0x01 0x${cluster} 0x${command} { ${hexData} }"

Does this command accept a manufacturer code? Maybe along the lines of
"he grp cmd 0x${groupAddress} 0x01 0x${cluster} 0x${command} { ${hexData} } {mfg code}"?

Sure, maybe, give that a try.

Thanks. Haven't found a combo that works yet. Probably byte reversal related. Working to get a zigbee sniffer up and running which should give me the answers.

1 Like