[DRIVER] Zooz ZEN31 RGBW Dimmer Advanced

Yea so Toggle seems completely broken:

With Zen31 advanced driver

With native driver:

Working fine here, this is with the pre-staging option turned off.

Just manually running from RM, same option though, toggle dimmer.

With debug logging on main device

Even if Pre-staging is on, I still get some logs showing the level was set but device does not turn on. I actually found there is a separate capability for prestaging, so I need to implement that instead of the setting anyway.

Ran it a second time with the exact driver posted on Github currently, same result, working fine.


Made some good progress. My favorite new thing is the transition fades. Set a Channel Fade Duration and then while it is already on try adjusting the colors, it will fade from one to the other. To get a clean fade from color <-> white you will need the Allow White and RGB setting turned off. I will try and get a video of it to post.

The Set RGBW command does bypass that option and should allow white and RGB together. Please note the Set RGBW command takes a precise value 0-255, and it bypasses most other features except the fade. I do plan to add an option to this command to set the duration similar to set Level.

I also wanted a command on the parent similar to Set Color but for the white, so that is Set White which takes a value from 0-100 and will set the brightness of just the white channel. This is the same as setting the level on the white child device and obeys the other settings.

Highly recommend turning on the Force Full Brightness option. I may make this on by default, have not decided yet. This will correct the device main level back to 100% when turned on and does not impact the channel brightness at all. There is really no reason to use the main device level that I can think of. Although currently if you are using the parent device for control setLevel will adjust the overall device level, not the channel brightness.

The Quick Refresh option I have noticed has some quirks because values might come back while the device is in transition still. If you use this and notice any bugs let me know I will try to work around as much as I can.

v0.2.0 - 2023-03-23

  • Added full control to parent driver, color commands and white
  • Added setRGBW command to set individual channels to a precise value
  • Added option to hide parameter settings
  • Added setting for channel/transition fade
  • Changed the On command to use last brightness from level attribute
  • Removed Pre-Stage option, was not implemented correctly, may come back later
1 Like

So I'm using your driver. Lots of great stuff, the channel-fade is awesome!

However I still get the issue were toggle doesnt work. If the light is on, it will toggle off, but it will never toggle back on. Here it is if I try to toggle level on the Parent

Do you think maybe there's leftover settings from the old driver or something? Like maybe if i re-pair and use this driver from the start?

1 Like

Found it. If "Quickly Refresh Status" is turned off the toggle doesnt work right. If it's on, toggle works fine.

Started looking at the code but it's late. I suspect that when a normal toggle is called, the device doesnt report back that it has completed for some reason.

1 Like

It will, but it takes a while (around 4 seconds I think), it is very slow to report which is why I have been working on that quick refresh option. It needs some work still especially when doing fades.

I may need to do an option for quick refresh only for on/off and then another choice for full quick refresh including all color channels. The color channels is what causes a bunch of extra traffic.

Even more curious, even with quick refresh on, mine seems to work like this:

  • Light is on
  • Toggle turns it off
  • Wait for any amount of time (1 second or 30 seconds)
  • Toggle button does nothing
  • Toggle button again then turns it on

The first press turned it off, but it was probably fading out so the quick refresh got back a status of ON, and the device did not send another update which is odd, because mine is. It looks like when the quick refresh is on your device is not sending the second update at all like mine typically does.

So then the second press sent off command again, the driver thought the device was on still.

Can you check the data section at the bottom and see what firmware yours is? Mine is 5.0 and Zooz has basically no info on firmwares for this device. But I understand it has been around for a while so I imagine there are a few different versions.

I made just need to take the fade into account and send a second refresh request, or just delay the initial one a little more.

Firmware 5.0
Devicetype 2306

This unit is a few years old though, let me see if one of my newer ones behaves the same

Yea same behavior on my new Zen31 that I bought a couple months ago. Firmware also 5.0

What is your z-wave ramp rate set to?
I will play around with it and get the timing figured out better.

One of them was 2 seconds the other was 3 seconds. I just tried several Ramp Rate settings up to 10 seconds, and it behaves the same in every config.

If I set ramp rate to instant on/off,...it works properly, no need for a 3rd button press to turn it back on.

1 Like

Side note, I did just notice that if I use the "Start Level Change", either up or down....it instantly turns on or off. I dont USUALLY use this function but I know some people do so I thought i'd mention it.

1 Like

Ok thanks, I thought I tested that but possibly have broken it since then. I don't use it either but some people setup button controllers to adjust level and it comes in handy for that.

I have the total device on/off sorted out by looking at some extra values returned when I query for status info. Basically I can tell if the device is in transition, and what the target level is, so I am just pre-emptively setting it to the target. This will result in the switch going to "off" while it is still fading out, which will allow a toggle back on to still work while it is in transition. If it never makes it to the target for some reason another status update is sent for the new values. Also when turning off, it checks if only one channel is one and it is being turned off, it just turns off the device, giving a quicker response for the off state.

The startLevelChange was a flat out copy/paste error from another driver and I did not fix one of the variable names so it was always sending a duration of 0, which makes it instant.

Now I just need to fix up the quick refresh for the color changes, to see if I can updates there during transition as well. This will impact the speed of the on/off state of the channel if you are turning a channel on/off when the other one is already on.

1 Like

omg that's actually PERFECT. I thought about mentioning you at one point "it sort of sucks that i have to wait for it to fade out before i can turn it back on again". But I thought that might be a pain in the ■■■, and didnt want to pile that on while other issues were still present.

Look forward to the new version!

UPDATE: ZEN31 v0.3.0

I have the quick refresh working really well now I think. I would recommend for everyone to turn on BOTH options, and also turn on the Force Full Brightness option.

Now added to HPM, use matchup if you already have it installed

Version [0.3.0] - 2023-03-25

  • Changed Quick Refresh to be enabled by default
  • Changed Force Full Brightness to enabled by default
  • Fixed issues with Start Level Change defaulting to duration of 0
  • Fixed color/white event sending to skip when no changes
  • Reworked Quick Refresh to work better in various situations
1 Like

Now that it's the weekend, I should have some time to install your driver and play around with it some. Thanks for the work you put into the zooz drivers.

1 Like

Toggle now working properly for me. Everything seems great right now!

Have you tried to reproduce the issue where the brightness degrades? I think the Force Full Brightness should take care of that when turning on/off.