RGB+CCT light strip controller recommendations

Need a recommendation for a zigbee RGB+CCT light strip controller that has proper scene support. I’m using a pair of Gledopto GL-C-008-1ID controllers, and have discovered that they will only actually store 16 scenes (IDs 0-15 in z2m). Those scenes recall just fine, but I want/need more. z2m will happily tell you that higher scene IDs are stored, but if you try to recall them nothing happens to the state of the light strips. Clearly the scene address space is only 4 bits, and it’s a bummer. Absolute crickets on all my other posts requesting clarification/confirmation of this “feature” of the controllers… I tried the Geldopto Reddit channel (their official support pathway), posting on the z2m github issues, and even asking a question on Amazon. Apparently this just isn’t an issue for other folks (or they don’t care). I have Signify/Hue devices that store many dozens of scenes (up to 82 on some), so it’s disappointing to find that Gledopto devices are so restrictive. Can anyone recommend a pin-compatible replacement for my GL-C-008-1ID controllers that can offer more scene storage? I’m not keen on replacing the strips themselves, since they were a pain to put up. I could also fake it and send color commands from Node-Red whenever my wife and kids request a scene, but I’d rather have controllers that can do what I want.

Ok, message received! Posted this problem in 4 different locations on the internet, with exactly zero replies. Everyone must be using Hue to control their Gledopto light strip controllers - the Hue hub was able to fake its way to > 16 scenes. Guess I’ll do the same… store 16 on the controllers and issue color set commands for all other scene recall requests. It’ll be slower and won’t have that seamless look that scene recall by ID # has, but whatever…

1 Like

No Hue here. But the scenes, I think. I can’t say that anyone would really know which controllers do scenes. Maybe something with Zooz or Shelly? Couldn’t you just generally do what you want with any controller? A good rules engine and an imagination. But, I’ve never truly understood why people want the complexity they offer, much like Innovelli. Why? Added complication? Could you explain to me the need for scenes? I’m truly interested in why users feel that this is necessary.

I enter a room, the lights do soemthing based on something else. Why is a scene necessary?

One possible reason would be reusability I guess. For example I have a scene (and it’s the only scene I have), called “lights off” that triggers when there’s no one at home. I could’ve set each light off as part of the automation but this way I can just reuse the same scene. Also if anything changes with the lights in the scene I can just update the scene and that’s it.

Another possible reason to have scenes (and this is just theoretical as I could be completely wrong and maybe such a thing doesn’t even exist) is to have dynamic scenes such as lights changing in a loop (eg. police lights simulation when an alarm triggers). I imagine you could have a “scene” and then just loop through it until something else happens.

My scenes are all for mood lightning. The advantage of scenes is in the simplicity and speed. Zigbee scenes are stored on the end devices, so all the coordinator does is issue a recall scene #x command. When issued to a group this command is done via zigbee group messaging, so all end points receive it simultaneously and act in coordination. Makes it seem buttery smooth and instantaneous. In the absence of a better light strip controller, I’ll have to do scenes 16+ using indivodual set xy color commands from Node-Red. It’ll work just fine, but I can see the difference in response… sometimes one strip controller starts changing half a second before the other, and it irritates me. Just being picky…

2 Likes

If you want simultaneous changes with multiple controllers, that works great with esphome-based wifi controllers, they exist in versions where you can connect your existing strips, but it’s very much a DIY solution. For more details @april.brandt may be able to help if this would be of interest.

1 Like

Maybe at some point I’ll investigate, although I’ve never played with esphome stuff and don’t feel like I have the bandwidth to start tinkering at that level. In the meantime, I went ahead and coded up the extra scenes in Node-Red. My wife and kids have dashboards in HA that have all the scenes they could want as picture buttons. Under the hood those buttons make MQTT calls to a custom topic monitored by Node-Red, which then passes the requested scene ID to a function to create the commands for the two strip controllers:

Summary

var msg1 = {};
var msg2 = {};
switch (msg.payload){
case 16:
msg1 = {payload: {“brightness”:102,“color”:{“x”:0.4903,“y”:0.2839}}};
msg2 = {payload: {“brightness”:102,“color”:{“x”:0.5321,“y”:0.2758}}};
break;
case 17:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.4548,“y”:0.2433}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.154,“y”:0.0799}}};
break;
case 18:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.5473,“y”:0.3735}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.5353,“y”:0.2909}}};
break;
case 19:
msg1 = {payload: {“brightness”:124,“color”:{“x”:0.4787,“y”:0.4495}}};
msg2 = {payload: {“brightness”:124,“color”:{“x”:0.5286,“y”:0.4068}}};
break;
case 20:
msg1 = {payload: {“brightness”:119,“color”:{“x”:0.2676,“y”:0.103}}};
msg2 = {payload: {“brightness”:119,“color”:{“x”:0.1753,“y”:0.0585}}};
break;
case 21:
msg1 = {payload: {“brightness”:157,“color”:{“x”:0.4818,“y”:0.321}}};
msg2 = {payload: {“brightness”:157,“color”:{“x”:0.1935,“y”:0.2353}}};
break;
case 22:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.6153,“y”:0.3655}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.6156,“y”:0.2808}}};
break;
case 23:
msg1 = {payload: {“brightness”:152,“color”:{“x”:0.6362,“y”:0.2999}}};
msg2 = {payload: {“brightness”:152,“color”:{“x”:0.6752,“y”:0.3004}}};
break;
case 24:
msg1 = {payload: {“brightness”:91,“color”:{“x”:0.4519,“y”:0.2677}}};
msg2 = {payload: {“brightness”:91,“color”:{“x”:0.5532,“y”:0.2547}}};
break;
case 25:
msg1 = {payload: {“brightness”:135,“color”:{“x”:0.1561,“y”:0.1586}}};
msg2 = {payload: {“brightness”:135,“color”:{“x”:0.1545,“y”:0.0715}}};
break;
case 26:
msg1 = {payload: {“brightness”:64,“color”:{“x”:0.5351,“y”:0.3287}}};
msg2 = {payload: {“brightness”:64,“color”:{“x”:0.4845,“y”:0.2799}}};
break;
case 27:
msg1 = {payload: {“brightness”:51,“color”:{“x”:0.4651,“y”:0.3463}}};
msg2 = {payload: {“brightness”:51,“color”:{“x”:0.1596,“y”:0.0684}}};
break;
case 28:
msg1 = {payload: {“brightness”:51,“color”:{“x”:0.1547,“y”:0.1074}}};
msg2 = {payload: {“brightness”:51,“color”:{“x”:0.1532,“y”:0.0476}}};
break;
case 29:
msg1 = {payload: {“brightness”:61,“color”:{“x”:0.4228,“y”:0.3349}}};
msg2 = {payload: {“brightness”:61,“color”:{“x”:0.3133,“y”:0.2061}}};
break;
case 30:
msg1 = {payload: {“brightness”:66,“color”:{“x”:0.2359,“y”:0.3855}}};
msg2 = {payload: {“brightness”:66,“color”:{“x”:0.1581,“y”:0.1508}}};
break;
case 31:
msg1 = {payload: {“brightness”:61,“color”:{“x”:0.3743,“y”:0.2727}}};
msg2 = {payload: {“brightness”:61,“color”:{“x”:0.2712,“y”:0.1723}}};
break;
case 32:
msg1 = {payload: {“brightness”:102,“color”:{“x”:0.5787,“y”:0.393}}};
msg2 = {payload: {“brightness”:102,“color”:{“x”:0.5014,“y”:0.4153}}};
break;
case 33:
msg1 = {payload: {“brightness”:127,“color”:{“x”:0.5565,“y”:0.3924}}};
msg2 = {payload: {“brightness”:127,“color”:{“x”:0.4007,“y”:0.2296}}};
break;
case 34:
msg1 = {payload: {“brightness”:114,“color”:{“x”:0.5822,“y”:0.3393}}};
msg2 = {payload: {“brightness”:114,“color”:{“x”:0.6488,“y”:0.2876}}};
break;
case 35:
msg1 = {payload: {“brightness”:152,“color”:{“x”:0.5285,“y”:0.3165}}};
msg2 = {payload: {“brightness”:152,“color”:{“x”:0.5353,“y”:0.3501}}};
break;
case 36:
msg1 = {payload: {“brightness”:127,“color”:{“x”:0.512,“y”:0.318}}};
msg2 = {payload: {“brightness”:127,“color”:{“x”:0.2829,“y”:0.1872}}};
break;
case 37:
msg1 = {payload: {“brightness”:114,“color”:{“x”:0.5311,“y”:0.4235}}};
msg2 = {payload: {“brightness”:114,“color”:{“x”:0.1543,“y”:0.0922}}};
break;
case 38:
msg1 = {payload: {“brightness”:127,“color”:{“x”:0.4848,“y”:0.3887}}};
msg2 = {payload: {“brightness”:127,“color”:{“x”:0.555,“y”:0.3606}}};
break;
case 39:
msg1 = {payload: {“brightness”:127,“color”:{“x”:0.3962,“y”:0.4341}}};
msg2 = {payload: {“brightness”:127,“color”:{“x”:0.464,“y”:0.3618}}};
break;
case 40:
msg1 = {payload: {“brightness”:97,“color”:{“x”:0.2007,“y”:0.3418}}};
msg2 = {payload: {“brightness”:97,“color”:{“x”:0.4824,“y”:0.3325}}};
break;
case 41:
msg1 = {payload: {“brightness”:76,“color”:{“x”:0.194,“y”:0.1927}}};
msg2 = {payload: {“brightness”:76,“color”:{“x”:0.5135,“y”:0.348}}};
break;
case 42:
msg1 = {payload: {“brightness”:152,“color”:{“x”:0.3836,“y”:0.3413}}};
msg2 = {payload: {“brightness”:152,“color”:{“x”:0.2557,“y”:0.2325}}};
break;
case 43:
msg1 = {payload: {“brightness”:213,“color”:{“x”:0.4416,“y”:0.3743}}};
msg2 = {payload: {“brightness”:213,“color”:{“x”:0.3688,“y”:0.3106}}};
break;
case 44:
msg1 = {payload: {“brightness”:173,“color”:{“x”:0.403,“y”:0.382}}};
msg2 = {payload: {“brightness”:173,“color”:{“x”:0.4258,“y”:0.4104}}};
break;
case 45:
msg1 = {payload: {“brightness”:152,“color”:{“x”:0.4435,“y”:0.2537}}};
msg2 = {payload: {“brightness”:152,“color”:{“x”:0.3744,“y”:0.2692}}};
break;
case 46:
msg1 = {payload: {“brightness”:165,“color”:{“x”:0.2263,“y”:0.2095}}};
msg2 = {payload: {“brightness”:165,“color”:{“x”:0.3835,“y”:0.3261}}};
break;
case 47:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.4013,“y”:0.4172}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.439,“y”:0.3782}}};
break;
case 48:
msg1 = {payload: {“brightness”:191,“color”:{“x”:0.3134,“y”:0.4131}}};
msg2 = {payload: {“brightness”:191,“color”:{“x”:0.3924,“y”:0.4132}}};
break;
case 49:
msg1 = {payload: {“brightness”:51,“color”:{“x”:0.2726,“y”:0.2045}}};
msg2 = {payload: {“brightness”:51,“color”:{“x”:0.3537,“y”:0.2546}}};
break;
case 50:
msg1 = {payload: {“brightness”:127,“color”:{“x”:0.5247,“y”:0.3877}}};
msg2 = {payload: {“brightness”:127,“color”:{“x”:0.5182,“y”:0.4136}}};
break;
case 51:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.4967,“y”:0.414}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.481,“y”:0.4134}}};
break;
case 52:
msg1 = {payload: {“brightness”:76,“color”:{“x”:0.4134,“y”:0.2962}}};
msg2 = {payload: {“brightness”:76,“color”:{“x”:0.5373,“y”:0.4003}}};
break;
case 53:
msg1 = {payload: {“brightness”:178,“color”:{“x”:0.4996,“y”:0.4026}}};
msg2 = {payload: {“brightness”:178,“color”:{“x”:0.494,“y”:0.4139}}};
break;
case 54:
msg1 = {payload: {“brightness”:102,“color”:{“x”:0.1569,“y”:0.1897}}};
msg2 = {payload: {“brightness”:102,“color”:{“x”:0.1695,“y”:0.3125}}};
break;
case 55:
msg1 = {payload: {“brightness”:102,“color”:{“x”:0.1671,“y”:0.0853}}};
msg2 = {payload: {“brightness”:102,“color”:{“x”:0.1729,“y”:0.146}}};
break;
case 56:
msg1 = {payload: {“brightness”:76,“color”:{“x”:0.3223,“y”:0.1916}}};
msg2 = {payload: {“brightness”:76,“color”:{“x”:0.5124,“y”:0.3609}}};
break;
case 57:
msg1 = {payload: {“brightness”:76,“color”:{“x”:0.4585,“y”:0.2636}}};
msg2 = {payload: {“brightness”:76,“color”:{“x”:0.5652,“y”:0.3006}}};
break;
case 58:
msg1 = {payload: {“brightness”:251,“color”:{“x”:0.4849,“y”:0.4339}}};
msg2 = {payload: {“brightness”:251,“color”:{“x”:0.4351,“y”:0.4367}}};
break;
case 59:
msg1 = {payload: {“brightness”:241,“color”:{“x”:0.3414,“y”:0.3868}}};
msg2 = {payload: {“brightness”:241,“color”:{“x”:0.3351,“y”:0.425}}};
break;
case 60:
msg1 = {payload: {“brightness”:226,“color”:{“x”:0.2091,“y”:0.1898}}};
msg2 = {payload: {“brightness”:226,“color”:{“x”:0.2221,“y”:0.2196}}};
break;
case 61:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.4427,“y”:0.4017}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.4636,“y”:0.4073}}};
break;
case 62:
msg1 = {payload: {“brightness”:224,“color”:{“x”:0.2376,“y”:0.3042}}};
msg2 = {payload: {“brightness”:224,“color”:{“x”:0.2484,“y”:0.3089}}};
break;
case 63:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.5946,“y”:0.3811}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.5717,“y”:0.3983}}};
break;
case 64:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.3106,“y”:0.1839}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.2214,“y”:0.1211}}};
break;
case 65:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.5013,“y”:0.4511}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.5701,“y”:0.3995}}};
break;
case 66:
msg1 = {payload: {“brightness”:137,“color”:{“x”:0.3314,“y”:0.5391}}};
msg2 = {payload: {“brightness”:137,“color”:{“x”:0.1915,“y”:0.3638}}};
break;
case 67:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.5407,“y”:0.4008}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.5099,“y”:0.2918}}};
break;
case 68:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.5353,“y”:0.4074}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.3281,“y”:0.4921}}};
break;
case 69:
msg1 = {payload: {“brightness”:203,“color”:{“x”:0.3095,“y”:0.5913}}};
msg2 = {payload: {“brightness”:203,“color”:{“x”:0.1586,“y”:0.2169}}};
break;
case 70:
msg1 = {payload: {“brightness”:157,“color”:{“x”:0.2219,“y”:0.0825}}};
msg2 = {payload: {“brightness”:157,“color”:{“x”:0.5865,“y”:0.2575}}};
break;
case 71:
msg1 = {payload: {“brightness”:224,“color”:{“x”:0.171,“y”:0.3389}}};
msg2 = {payload: {“brightness”:224,“color”:{“x”:0.1593,“y”:0.1341}}};
break;
case 72:
msg1 = {payload: {“brightness”:160,“color”:{“x”:0.1616,“y”:0.3754}}};
msg2 = {payload: {“brightness”:160,“color”:{“x”:0.5305,“y”:0.261}}};
break;
case 73:
msg1 = {payload: {“brightness”:198,“color”:{“x”:0.5403,“y”:0.4219}}};
msg2 = {payload: {“brightness”:198,“color”:{“x”:0.2299,“y”:0.0862}}};
break;
case 74:
msg1 = {payload: {“brightness”:127,“color”:{“x”:0.257,“y”:0.1754}}};
msg2 = {payload: {“brightness”:127,“color”:{“x”:0.37,“y”:0.2328}}};
break;
case 75:
msg1 = {payload: {“brightness”:193,“color”:{“x”:0.5641,“y”:0.3328}}};
msg2 = {payload: {“brightness”:193,“color”:{“x”:0.1589,“y”:0.2701}}};
break;
case 76:
msg1 = {payload: {“brightness”:117,“color”:{“x”:0.6813,“y”:0.3034}}};
msg2 = {payload: {“brightness”:117,“color”:{“x”:0.5717,“y”:0.3975}}};
break;
case 77:
msg1 = {payload: {“brightness”:97,“color”:{“x”:0.4777,“y”:0.3856}}};
msg2 = {payload: {“brightness”:97,“color”:{“x”:0.5068,“y”:0.3702}}};
break;
case 78:
msg1 = {payload: {“brightness”:89,“color”:{“x”:0.1541,“y”:0.081}}};
msg2 = {payload: {“brightness”:89,“color”:{“x”:0.6206,“y”:0.3214}}};
break;
case 79:
msg1 = {payload: {“brightness”:84,“color”:{“x”:0.3938,“y”:0.3119}}};
msg2 = {payload: {“brightness”:84,“color”:{“x”:0.1882,“y”:0.202}}};
break;
case 80:
msg1 = {payload: {“brightness”:102,“color”:{“x”:0.6777,“y”:0.3085}}};
msg2 = {payload: {“brightness”:102,“color”:{“x”:0.1711,“y”:0.6741}}};
break;
case 81:
msg1 = {payload: {“brightness”:97,“color”:{“x”:0.4949,“y”:0.3565}}};
msg2 = {payload: {“brightness”:97,“color”:{“x”:0.4914,“y”:0.3119}}};
break;
case 82:
msg1 = {payload: {“brightness”:76,“color”:{“x”:0.3188,“y”:0.1278}}};
msg2 = {payload: {“brightness”:76,“color”:{“x”:0.5702,“y”:0.3307}}};
break;
default:
msg1 = null;
msg2 = null;
break;
}
return [msg1,msg2];

Pretty simple workaround, and it’s actually faster than Hue ever was… still a bit of lag compared to native scene recall commands, but not as bad as it was when my Hue hub was in charge of these strips. Go figure…

2 Likes

And sometimes things are pleasantly pleasing when they work out better than you expected. I’m happy to hear that you’re not disappointed.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.