Firmware updates for battery-powered Zigbee devices are generally rather frustrating and can be a challenge. This doesn’t apply only to Sonoff devices. I have several SNZB-02P sensors, and so far I’ve always had to temporarily connect them to a coordinator linked to the eWeLink cloud to successfully perform the update in the app. Even then, the updates weren’t visible right away. Sometimes, it was necessary to wait a few or even several hours.
First of all, make sure to add the following entry to your configuration.yaml file:
yaml
zha:
zigpy_config:
ota:
extra_providers:
- type: sonoff # Auto update Sonoff devices
- type: ikea # Auto update IKEA devices
After saving the changes, restart Home Assistant to apply the configuration. This enables ZHA to use the official OTA source from Sonoff. However, this doesn’t guarantee that updates will be detected immediately.
Sometimes, triggering and detecting the firmware update can be achieved as follows:
-
In the card of the selected device, click the three vertical dots next to “RECONFIGURE” and choose Manage Zigbee Device.
-
Then proceed as shown in the screenshot. Adjust Query Jitter Slider In the debug window, locate the Query_jitter slider.
Make sure it is set to any value above 0 — this helps prevent timing issues.
-
Click ISSUE ZIGBEE COMMAND — even if it appears greyed out and seems inactive. After a moment, it will turn green with a check mark confirming the action was successful.
Close the card and return to the device screen. When you click the Firmware entity, you should see the indication of the installed and potentially available firmware version for the selected device.
You’ll also see a note that says: “If you are having issues updating a specific device, make sure that you’ve eliminated common environmental issues that could be affecting network reliability. OTA updates require a reliable network.”
As you can see in the attached screenshot, the installed firmware version is higher than the available one — an interesting quirk in itself 
Here are some tips for multiple update attempts:
-
Synchronize wake-up with update initiation Wake the device (using the button, or by removing and reinserting the battery) just a few seconds before starting the update, and don’t wait too long after “waking it up.”
-
Monitor Zigbee logs: Enable debugging for ZHA in Home Assistant (logger: section in configuration.yaml) and track the messages. Sometimes the update actually begins, but HA doesn’t confirm it due to misinterpreted timing.
-
Change the position of the device and coordinator Even small changes in positioning, like rotating the device 180°, can significantly affect signal quality.
-
Avoid updates during heavy Zigbee network load. Perform updates in the morning or at night, when other devices (like motion sensors or smart bulbs) aren’t transmitting data heavily.
Above all → Don’t get discouraged after several failures! Sometimes, after 5–6 failed attempts, the next one suddenly works flawlessly. Sounds ridiculous, but many users (including myself) confirm it. 
Just to be clear — using the method I described, I managed to kick off a firmware update on a Sonoff device… once. That’s not a success rate to brag about, unless you’re the kind of person who cheers when their toaster doesn’t catch fire.
IKEA devices, on the other hand? Oh boy. Buttons like the RODRET Dimmer are a whole different drama. Imagine trying to convince a moody teenager to clean their room. That’s how updating those things felt. I had to restart the update countless times, watching it stall at random stages like it was throwing a tantrum.
Eventually, it worked. Miraculously. Like the device finally got tired of being difficult and decided to play nice. I still don’t trust it, but hey - firmware updated.
Happy updating!