ZHA as of 0.86.4 (with some comparisons to zigbee2mqtt)

TL:DR; If you want range, ease of use, and Tier 1 Home Assistant integration, use ZHA. However, if you’re wanting to use less common devices (and I highly recommend the Xiaomi devices) then ZHA is unusable but zigbee2mqtt handles the task quite well.

Note: I started with zigbee2mqtt. Seeing the new ZHA work in Home Assistant and wanting to explore other options, I picked up the Nortek HUSBZB-1.

ZHA works for many things, works partially for some things, and doesn’t work at all for some things.

For the better known bulb brands, it mostly works. I tested Sengled Whites, Sylvania Whites, and Sylvania Tuneable Whites. The bulbs pair easily and show up in the ZHA panel right away. The only issue I had was that each of these bulbs, at one point or another, after a restart of Home Assistant, would show as “on” when they were actually off. I would turn them “off” in Home Assistant and then restart, and they would still show as “on”. To fix it, I had to turn them “off” and then “on” and then “off” again in Home Assistant. Then, after a restart, the state was correct. It seems that turning them “off” when they are already actually off does not generate the state report that ZHA expects, so, while the UI moves to “off” and stays there, the internal state database doesn’t get updated. On a restart, the state database is polled, and the light is shown as “on”.

For Xiaomi devices (I tested the Mija Button, the Aqara Motion, and the Aqara Cube) they basically don’t work. All three of these devices were very difficult to pair. Once paired, they presented sensors that don’t actually exist. “Reconfiguring” the node would cause the non-existent sensors to show as “unavailable”.

The Mija button reports as “on” when it’s not pressed and “off” when it is pressed. There is no detection of double, triple, quadruple, or long click. I wrote code to handle this device properly and submitted it to the developer, however, I don’t advise using it. After a restart of Home Assistant, this device doesn’t report at all.

The cube’s rotate readings are slow to report and odd in general. After a restart of Home Assistant, this device doesn’t report at all.

The motion sensor creates a presence binary sensor (along with a handful of other sensors that report nothing). After a reconfigure of the node and a restart of Home Assistant, the motion sensor creates a motion binary sensor and stops updating the previously created presence binary sensor. Additionally, the lux sensor stops reporting.

I also tested the newest version of the SmartThings Multi Purpose sensor (the IM6001-MPP01). It would occasionally stop reporting it’s data and a reconfigure was needed to get it to report again. It also created several sensors that did not have descriptions and were never updated. It, however, did continue to work after a reconfigure and a Home Assistant restart.

Comparing ZHA to zigbee2mqtt there are a few notes.

First of all, the range with the HUSBZB-1 is FAR better than with the CC2531. With zigbee2mqtt, I need to be aware of this and add routing devices (like the Sylvania bulbs) near the CC2531 first. One the routing devices have been added, the end devices can be added without issue.

The Sengled bulbs are difficult to pair with zigbee2mqtt. On top of that, the frequently become unroutable which means requests to turn off and on the bulb fail. The Sylvania bulbs had no issue at all.

The Xiaomi devices worked perfectly. They report as expected and even provide more data than what is available when using the native Xiaomi hub.

The Smart Thing Multi Purpose Sensor paired with zigbee2mqtt, however, no reports were ever received. Also, the pairing process took quite some time.

In regard to speed, ZHA seems to be much faster than zigbee2mqtt. This isn’t something you’d usually notice since, relatively speaking, it’s all pretty fast. However, when putting 4 bulbs into a light group and then turning the group on or off and watching the bulbs, there is a noticeable delay between the change in each bulb with both platforms. However, with ZHA, that delay is quite a bit shorter. On the plus side, zigbee2mqtt supports device groups. Once these bulbs are places in a group with each other, they all turn on and off at exactly the same time.

8 Likes

Thank you for the comparison

Given it’s been a while since you ran these test. Have you noticed any improvements in zigbee2mqtt recently after the updates?

I’ll chime in. Excuse the slight rambling…

I can generally agree with almost everything stated here. My setup is mostly Zwave (critical sensors/devices), but a handful of Zigbee things from the SmartThings days and a few bulbs. This includes a few SmartThings open/close sensors, a bunch of Visonic open/close sensors, 4 Lightify color bulbs, a Smart Things motion sensor, and a few Sylvania outets that I really only used as routers/repeaters. I also have a Xiaomi Aqara gateway with a button and vibration sensor.

I have used ZHA for awhile and stability is a lot better than it used to be. In general, it just works for most of my devices. The biggest hassle I had was pairing my Visonic sensors since they aren’t easy to get off and move close to the hub. Some of the functions, like battery, don’t always report either, but open/close seems pretty stable. As stated, Xiaomi stuff doesn’t work well though. I kept these paired to my Aqara gateways which would fall off the network sometimes for whatever reason and not be reachable by Home Assistant without a power cycle and Hass restart.

I also tried Zigbee2MQTT for a few weeks. I initially liked it a lot better, but then noticed that my Lightify bulbs would just stop talking after a day or so. My Xiaomi button always seemed to work, but I couldn’t keep the vibration sensor paired at all. I had a number of times where I kept having to restart Zigbee2MQTT just to pair devices and sometime they never came back after a reboot. Visonic devices mostly worked, but then a few random ones, which were in better locations signal-wise than others, just stopped talking. I finally gave up.

Over this last week, out of curiosity, I tried re-pairing everything to my old SmartThings V2 hub and used the SmartThings integration. Pairing was exceptionally easy and response time seems OK. Biggest downside is that half of my devices say they are controlled in the cloud (plus the Hass integration uses the cloud completely), which is why I got migrated in the first place. The biggest reason I wanted to do this though was to let SmartThings update firmware on as many devices as possible hoping that maybe this would fix a lot of issues. Unfortunately, my Lightify bulbs (which are the biggest issue with Zigbee2MQTT) were already up to date, so no improvements expected here.

I will likely migrate back to ZHA this week. It was the best mix of stable and support for me. I know that a lot of people will disagree, especially those with a lot of Xiaomi, Hue, and other brands of devices.

As a side note, I did try Deconz as well. I couldn’t get my Visonic sensors to pair at all, except for one. And that one wouldn’t work more than an hour or so. Xiaomi devices did pair after an hour of attempts, but then stopped talking after a few hours. My Conbee stick is on eBay right now. I hear a lot of great things about Deconz. I think my devices just don’t fit the use case for it.

1 Like

The best thing you can do for any zigbee network is (especially with Z2M) is to ensure that you use a CLEAR channel, no WiFi overlap anywhere near it! Once I did this, my 25+ (most Xiaomi) zigbee devices have been rock solid for months!