I’m using Z2M and I have a few Sonoff motion sensors and several of these cheap contact sensors. CR24540s are not only not cheap, but it’s a total pain in the ass to replace batteries this often. Even worse, ZigBee rarely tells me a device is dead.
Tentatively marking the below as the solution, as I only had one single router device that wasn’t the controller itself. In response, I moved all my Hue bulbs off the Hue Bridge and into my ZB network, so now I have a bunch of extra router devices. We’ll see how my devices act for the next few months.
Crap devices (some do just chew through batteries)
Weak signal
The last can be caused by the distance between the end device and the router it connects to (or the coordinator), by not using a USB extension cable for the coordinator, or overlapping WiFi (or other 2.4 GHz signals).
Zigbee depends heavily on mesh networking and only most but not all main-powered products act as Zigbee Router devices, while no battery-powered act as Zigbee Router devices.