Notes on switching from deCONZ in docker to "native" ZHA integration

I recently made the switch from HA Core in docker, with almost all additional services managed manually in docker containers, to HassOS in a VM (guide here).

When doing this, I also switched from my long (several years) running deCONZ in docker to the “native” ZHA, and wanted to share some thoughts about the pros and cons, as I see them after having used it for a while. I’ll try too update this post if there more relevant info.

I’m using a ConBeeII stick with an extension USB. This was the same for both ZigBee setups. (Not sure if this is more for “community guide”, it just didn’t seem quite right either).

TL;DR version

  • If you don’t have too many devices, unpair, setup ZHA, change ZigBee channel, then pair devices to avoid WiFi interference

  • If you have so many you don’t want to re-pair everything, change your WiFi channels to avoid ZigBee channel 15, then just move your stick without unpairing/re-pairing. You will need to power cycle devices that you do not re-pair (but that is a lot faster for e.g. light bulbs)

  • Make sure you WiFi access points are not near your ZigBee stick, for me, ZHA was a lot more sensitive than deCONZ with the same radio (though this could also in part be due to ZHA using a bad ZigBee channel as default).

  • Make sure you don’t routinely cut power to any repeaters, even if you have plenty. ZHA, in my hands at least, is extremely bad at re-routing traffic when a repeater node goes offline. If you do, then consider not using ZHA for now.

  • Upgrade firmware (if you’re making changes anyway, especially if you, like me, haven’t really gotten around to doing that for the ZigBee stick lately)

  • Note the “Things that just don’t work”, and see if there are any deal-breakers for you before proceeding.

  • I’d probably do it again, especially knowing now these points listed above (which should save some headache).

Main reason for switch

I wanted too streamline a bit, and avoid some of the overhead (time-wise) in managing everything manually. It is fun, but after having a kid, I wanted to focus my time a bit, and switching from maintaining docker containers to using add-ons and native integrations seemed like an obvious thing in that regard.

The switch

First thoughts

This was pretty painless. Going from a lot of reading, I decided to try just plugging the USB stick it in, without changing anything about the network or devices.

And it worked. Mostly. Most devices needed a power cycle (light bulbs, smart plugs), or a “reconnect” (sensors, e.g. motion, temperature, etc.)

ZigBee channel

One thing I do regret not knowing before is that ZHA by default uses what (for my home) is a pretty stupid choice of ZigBee channel. I had set up the network with deCONZ to be on ZigBee channel 25, way outside of any WiFi networks around the house. ZHA changed that to channel 15, which saw major interference from both my, and neighbors’ access points (AP).

The only WiFi channels you can use without ZigBee channel 15 being caught in at least the “shoulder” of WiFi channels (if using 20 MHz wide channels) is if you go high, and you’d only be able to use one WiFi channel without either interfering with other WiFi channels or with the ZigBee network.

So I’d argue that channel 15 is probably one of the worst choices of default ZigBee channel (probably chosen for only interfering “a bit” with WiFi channels 1 and 7, being kind of in between, but it seems like “a bit” is too much to be able to use them in anywhere near the ZigBee coordinator in my case).

Unfortunately, you can’t (at the time of writing) change this without having to re-pair every device. Further, you can’t do it from any UI option.

Suggestion: Change the channel if possible for you (see how), or re-configure your WiFi to not interfere too much with ZigBee channel 15.

Suggestion: Take this opportunity to upgrade your firmware on your ZigBee controller

After switching

Problems with WiFi (Not due to channel overlap)

At first, I had a lot of issues I couldn’t figure out the cause of.

Long story short, there was interference from my AP, even when I changed the WiFi channel to 11. I hadn’t moved anything physically since the deCONZ setup, but apparently this just didn’t work for ZHA. In the end, I had to run a lot of new Cat6a cable through the house to be able to move the one AP to a different location before the ZHA setup started working.

Network not dynamically re-routing

Further, I have noticed something else that’s a bit weird. If any lights are switched off at the wall socket, the ZigBee network will often not reroute traffic. So now, if the kids turn off a light upstairs, some of the kitchen lights just won’t be available until the light bulbs upstairs are powered on again.

While I occasionally saw this with deCONZ, it was nowhere near as pronounced, and typically power cycling the non-responding lights would restore connectivity. Worst case, I could restart the docker container, which almost always worked.

This is not the case with ZHA. Once lights are offline (due to other nodes/repeaters of the network being down), there’s really nothing I can do, other than finding which repeaters are off, and power them on.

Weird groups showing up

Under the ZHA integration, and “Groups”, there were a few that I am pretty sure I never set up. They caused some confusion, since they showed up in the front end, and would sometimes control lights that did not respond individually.

In the end, You can delete them via the integration settings (it didn’t work the first few times I tried, but eventually I at least could delete devices from the groups).

Adding new devices

This is a mixed bag. I have may different types of devices (e.g. Philips Hue, IKEA TRÅDFRI, Xioami Aqara). Pairing did seem a bit easier with deCONZ. with ZHA, I quite often needed to move the device closer to the ZigBee stick (I know that’s not recommended, but it just didn’t work without for a few devices, where it worked quite easily with deCONZ for the same devices in the same locations).

However, the ones I moved close to the coordinator to pair work perfectly well after moving them far, far away to their end location.

Things that just don’t work

ZigBee Green Power not supported

There are a few things that still don’t work. One of them cannot with ZHA, namely anything using ZigBee Green Power, i.e. devices that generate its own power (e.g. Philips Hue Tap remotes).

Weird toggling

Another thing that might work, but I haven’t figured out yet is that sometimes, when using Philips Hue Dimmer remotes to control lights, clicking the button turns the light on and off again within about 0.5 second.

This is specific to the light bulbs using ZHA, since it does so regardless of whether the button on the Hue remote button is set to toggle light, or can only turn on (with another button used to turn off). It also only happens to ZigBee bulbs, I have a WiFi light in the same group, and that one just turns on as expected.

To circumvent, you have to press really slow. Not slow enough to be a “long press”, but much slower than most people find natural.

Low brightness via service calls.

This one is really weird (and extremely annoying in my setup), but I can no longer set the brightness to something very low (typically 1) via service call or AppDaemon turn_on. Instead it turns on at something more like 50-100 (in the 0-255 scale).

If I make another service call, it then goes to brightness=1. I think there needs too be a bit of a delay though, since two subsequent AppDaemon attempts does not work. So currently, none of the motion controlled lights can automatically turn on at brightness=1 during the night.

It works fine if I try to use the slider in the UI though, but then we’re back to manual control instead automations.

Summary

I might sound negative about ZHA, but it’s not like deCONZ was perfect, and it’s not like there aren’t advantages of ZHA.

After identifying the initial WiFi-related issues, it has worked quite well.

The inability to reroute traffic around dead repeaters (which it should be able to! I have 60+ ZigBee devices, of which ~40 are repeaters; I doubt there’s more than 2.5 meters between any two repeaters anywhere inside the house) is a nuisance, sure, but I bet I’ll eventually be able to teach the kids not to use the switches. It’s just annoying coming from something that worked better (in that regard).

Aside from those points, my experience is that ZHA does seem more reliable than the deCONZ setup did. Those are just a few annoying points.

Management is easier, but not by much.

I just wish I could change the ZigBee channel without having to re-pair everything.

But all in all, I’m happy I made the switch. It just took a few months of frustration, to some degree because I didn’t know a few of the things I’m listing here. So hopefully it can help someone else decide what’s right for their setup.

3 Likes