|

Smart Plug Firmware Update Failed Home Assistant Problems? What to Check First

If a smart plug firmware update fails inside Home Assistant, the root cause is rarely the plug itself. In most cases the problem is a network hiccup, a misconfigured coordinator, or a stale firmware file. Before you reset anything, check these three things: your Zigbee/Z-Wave coordinator’s stability, whether the update file actually matches your plug’s hardware revision, and if your Wi-Fi or Thread network has been dropping packets. The fix is often simpler than a factory reset.


The One Check Most People Skip: Your Coordinator’s Firmware Version

It’s natural to blame the smart plug when an OTA (over-the-air) update fails. But many Home Assistant users overlook the device that’s actually managing the update — the coordinator. A Zigbee coordinator running outdated or buggy firmware can corrupt the update process, especially for larger firmware files.

  • Zigbee2MQTT users: Open the coordinator’s page in the Zigbee2MQTT frontend. If the coordinator’s firmware is older than the manufacturer’s latest recommendation for OTA updates, update it first. A known example is the Sonoff ZBDongle-E firmware below v6.10.0, which had intermittent OTA failures with certain plugs.
  • ZHA + Silicon Labs coordinators: Use the Silabs Flash Tool to check the coordinator’s bootloader version. If it’s pre-2022, OTA updates may stall at 30–40%.
  • Z-Wave is less prone to OTA corruption, but some older Z-Wave dongles (e.g., Aeotec Gen5) require a separate serial firmware update tool outside Home Assistant. If your Z-Wave plug’s update fails, update the dongle firmware first.

Counter-intuitive point: Updating the coordinator before the plug often resolves the “failed” status without ever touching the plug’s settings.


Quick Checklist to Rule Out Common Culprits

Run through these five checks before diving into the full troubleshooting flow. Each item is a pass/fail test you can do in under 30 seconds.

1. Plug’s battery or power supply – Battery-operated plugs with low voltage will abort OTA updates. For mains-powered plugs, confirm the outlet is live and the plug isn’t on a switched power strip.

2. Network latency between coordinator and plug – In the Home Assistant logs, look for repeated “No route to device” or “Timeout” messages. If you see them, move the plug physically closer to the coordinator before retrying.

3. Firmware file matches exact model revision – A firmware .ota or .z3c file for a different hardware revision (e.g., v1 vs v2) will be rejected by the plug. Check the manufacturer’s support page for the exact model number printed on the plug.

4. Coordinator’s channel and PAN ID – If your Zigbee network recently changed channels (e.g., after a Wi-Fi migration), the plug may be on a different channel and unable to receive the OTA packet. Re-pair it to force a channel sync.

5. Home Assistant’s OTA timeout setting – Default timeout for Zigbee2MQTT is 120 seconds. Large firmware files (>256 KB) may need 300+ seconds. Adjust the `ota` timeout in `configuration.yaml` under `advanced:`.

If all five pass, move to the step-by-step triage.


Step-by-Step Triage for a Failed Update

This ordered flow assumes you’ve already confirmed the plug is still responsive and paired.

1. Verify the Network Is Stable

  • In Home Assistant, go to Settings → System → Logs. Filter for your plug’s IEEE address or friendly name.
  • Look for messages containing “OTA: failed to parse”, “Image not supported”, or “Timeout waiting for ‘querynextimage_request’”. The last one strongly points to network congestion.
  • Checkpoint: If you see repeated “No link key” or “Transport link key refused” errors, the plug has lost its encryption keys – you must re-pair it anyway.

2. Restart the Coordinator (Not the Plug)

  • In Zigbee2MQTT: click Coordinator → Restart. In ZHA: go to Configuration → Devices → RESTART coordinator.
  • Wait 30 seconds for the network to stabilize.
  • Likely cause: A warm restart of the coordinator flushes stale OTA sessions that were left in a hung state.

Branch — what you see next changes your action:

If the coordinator restarts cleanly and the plug’s status shows “Online” but the firmware button is still greyed out, yours is a file-matching issue, not a network issue. Proceed directly to Step 3 and verify the firmware file path. If instead the plug shows “Unavailable” after the restart, the coordinator lost the pairing — skip Step 3 and go straight to Step 4 (re-pair using the erase method). This one check saves you from wasting time on a manual update that will never reach the device.

3. Manually Trigger the OTA Update Inside Home Assistant

  • Zigbee2MQTT: Open the plug’s device page → click the green “Update firmware” button. If it fails instantly, the firmware file may not be loaded. Go to Settings → OTA and ensure the plug’s manufacturer is in the list. If missing, you’ll need to add a custom OTA override.
  • ZHA: Go to Devices → select plug → Firmware update. ZHA uses Silicon Labs’ internal OTA cluster; sometimes you must first download the .ota file into `/config/zigbee_ota/` manually.
  • Matter plugs (e.g., Linkind Matter Smart Plug) don’t use the Zigbee OTA cluster. Updates are pushed by the Matter controller (e.g., Apple Home, Alexa, or Google Home). If the controller fails, use the manufacturer’s native app (Linkind’s app) as a fallback.

Friction point: Many users click “Update” only once and give up. Try twice with a 5-minute gap – some plugs need a second attempt to accept the same image.

4. Re-Pair the Plug Using the “Erase” Method

  • Option A (Zigbee): Put the plug into pairing mode (typically press and hold the button for 10 seconds until the LED blinks rapidly). In Home Assistant, remove the plug first, then re-add it. The fresh pairing forces the plug to download the latest firmware if the coordinator offers it.
  • Option B (Z-Wave): Use the Secure Exclusion process first (in Home Assistant → Z-Wave JS UI → Advanced → Remove failed node). Then re-include with the S0 or S2 security class that the plug originally used.
  • Escalation signal: If after re-pairing the update still fails to start, the plug’s flash memory may be corrupted. That requires a factory reset (see next section).

5. Factory Reset the Plug and Confirm the Fix

  • Most smart plugs respond to a 10-second button hold followed by a release and another 5-second hold. Check the manufacturer’s manual for the exact sequence.
  • After reset, the plug will appear as a new device. Do NOT re-pair it immediately. First, verify that Home Assistant’s OTA server is running and that the firmware file is present.

Concrete verification step:

After re-pairing, open the device’s firmware page and note the current firmware version. Then trigger the update. Once it completes (or fails), go back to the same page. If the version number now matches the target version, the update succeeded. But don’t stop there — confirm the plug actually works: toggle it on and off three times from Home Assistant, then check the energy monitoring data (if supported) shows non-zero values. A version number change alone can be misleading if the update was only partially written. A fully successful update should also preserve your device name and room assignment; if those reset to defaults, the flash was corrupted despite the version change.

6. Recurrence Pattern to Watch For

Even after a successful update, some plugs silently revert to an older firmware hash on the next power cycle. This shows up as the same firmware version number but with a different cryptographic checksum. You won’t see this in the Home Assistant UI — you have to check the manufacturer’s OTA log or the plug’s diagnostic cluster. If the plug starts behaving differently (random disconnects, delayed state reports) within a week of the update, the firmware didn’t fully commit. The safest move is to factory reset the plug again, re-flash it, and immediately power-cycle it while observing the LED sequence. If the LED blinks a pattern not listed in the manual during boot, the flash chip is degrading and the plug should be replaced.


Coordinator Compatibility Reference

Not all coordinators handle OTA updates the same way. Use this table to quickly identify which platform your coordinator uses and what to expect.

Coordinator Type OTA Protocol Common Failure Point File Format
Zigbee2MQTT (CC2531, CC2652, ZBDongle-E) Zigbee OTA cluster Coordinator firmware too old .ota or .z3c
ZHA (Silicon Labs, Elelabs) Silicon Labs OTA Missing file in `/config/zigbee_ota/` .ota (Silabs format)
Z-Wave JS UI Z-Wave OTA Serial firmware update required for dongle first `.hex` or `.exe` (manufacturer tool)
Matter (Apple Home, Alexa, Google Home) Matter controller push Controller firmware version mismatch Manufacturer‑specific app

When to Call It a Hardware Issue

If you’ve completed all steps above and the update still fails with the same error, the plug likely has a hardware defect. Signs to look for:

  • The plug’s LED behaves erratically (flashes patterns not listed in the manual).
  • The plug is physically hot to the touch even when idle.
  • The update always fails at the exact same percentage (e.g., 12%) – that’s a corrupted flash sector, not a network issue.

What to do: Contact the manufacturer’s support. For most Zigbee/Matter plugs, they’ll replace the unit if it’s under warranty. Do not try to force-flash via serial if you’ve never done it – you risk bricking the device permanently.


A failed firmware update in Home Assistant is almost always a coordination problem, not a plug problem. Start with your coordinator’s firmware, run the checklist, and follow the step-by-step triage. In most cases you’ll have the plug updated within 15 minutes without touching a single setting inside Home Assistant.

Explore This Topic

Related guides in this cluster:

Similar Posts