Unreliable devices

I have a bunch of Sonoff sensors (thermo, door opening), some no-name motion sensors, a couple of lights, and some TRVs, all Zigbee using ZHA. My HA installation is completely vanilla, on a dedicated RPi 4 with a CC2538+CC2592 dongle.

All sensors are within 8m of the dongle, in a 1-floor apartment with mostly thin partition walls. I don’t think any of my neighbours have any zigbee devices, and I have no wifi issues.

So far all I’m doing is passive monitoring, though what I’d really like is to gain proper control over my heating, but that’s a long way off. The big obstacle is unreliability. None of the sensors stay connected for more than a few weeks. Re-pairing mostly works, but can often take 10 mins and multiple retries for each sensor. Sometimes they connect as new devices, so I have to rename them, reassign icons and areas, then deal with removing the old duplicates and rebuilding dashboards. This is clearly unworkable, and building more sophisticated things on top of it is pointless if the low level stuff is always dropping off and breaking configs.

Battery life is a problem, however, it seems that most of the devices report 100% battery level until they die, so that’s pretty useless. A re-paired device normally works for a while, and nearly always shows good battery level, but then falls off again later. Changing batteries doesn’t seem to change this behaviour (except if they really are dead). I don’t have any explanation for why they do this.

Out of my 20 or so devices, the only one that has remained working is a Paulmann light, and that stays working even though its power goes on and off frequently (it’s on a conventional light switch).

Am I using the wrong sensors? Are zigbee devices just unreliable? Is there no automatic reconnect mechanism?