|

How to Diagnose Smart Plug Firmware Update Stuck Home Assistant: A Practical Guide

If you see a firmware update stuck at 0%, 50%, or simply “updating” for hours in Home Assistant, the most common cause is not a hardware failure. Often the update is still in progress but hasn’t sent a completion signal, or the plug is waiting for a specific trigger like a power cycle or a direct command from its manufacturer app. Start with a quick observation: did the update percentage change at all in the last 30 minutes? If yes, it’s still moving — let it run. If it’s truly frozen, the fix usually involves one or two deliberate steps, not a full rebuild of your Zigbee or Wi-Fi mesh.

Why Smart Plug Firmware Updates Stall in Home Assistant

Before you jump into resets, understand the three main reasons an update can appear stuck:

  • Protocol limitations: Zigbee firmware updates are pushed in small chunks (often just 64 or 128 bytes per message). A full update can take 20–45 minutes, and the progress bar in Home Assistant may lag or jump. ZHA sometimes doesn’t report progress updates at all — you can watch the coordinator’s log in Settings → System → Logs to see actual packet traffic.
  • Wi-Fi/Matter plugs: Wi-Fi smart plugs (e.g., TP-Link Kasa, Wemo) receive firmware via the cloud or a dedicated app. Home Assistant can only trigger the update, not manage the download. The plug may need to be removed from power briefly after the command is sent to begin applying the new firmware. With Matter plugs, the update often completes silently on the controller side (Apple Home, Alexa, Google Home) without updating the Home Assistant status.
  • Coordinator or hub overload: If your Zigbee coordinator is handling many devices or is on a slow USB port (USB 2.0 vs. 3.0), it may drop packets or time out, leaving the update stuck mid-way. A coordinator on a USB 2.0 port shared with a high-bandwidth SSD is a frequent hidden culprit.

Quick Diagnosis: 5-Point Checklist Before Trying Anything Else

Use this checklist to rule out common false “stuck” scenarios. Tick each item before moving to deeper fixes.

  • [ ] Check the last activity timestamp – In the Home Assistant Devices page, look at the “Last seen” time for that plug. If it was active within the last hour, the update is probably still running (or waiting for a confirmation). Wait another 30 minutes.
  • [ ] Verify the correct update method – Is this a Wi-Fi plug (requires manufacturer app for firmware) or a Zigbee/Matter plug (updated via Home Assistant or its paired controller)? If it’s Wi-Fi, go directly to the manufacturer app to check update status.
  • [ ] Check for sleeping devices – Some smart plugs enter a low-power state after 5 minutes of inactivity. The update may be paused until you physically press the button on the plug or toggle power to wake it.
  • [ ] Inspect the Zigbee coordinator radio – If you’re using a USB dongle (e.g., Sonoff ZBDongle-P, Conbee II), check that it’s not overheating or using a USB extension cable longer than 3 feet. Move it away from metallic objects.
  • [ ] Look for duplicate device interference – A ghost device with the same IEEE address or network ID can confuse the coordinator. Run a network scan in ZHA or Zigbee2MQTT to see if the plug appears twice. Remove any duplicate entry before retrying the update.

Step-by-Step: How to Unstick a Smart Plug Firmware Update

The following steps are ordered from least disruptive to most. After each step, confirm whether the update is progressing before moving on.

1. Force a Power Cycle of the Plug

Unplug the smart plug from the wall socket (or flip the switch if it’s a hardwired version) and wait 30 seconds. Plug it back in. This often pushes the device to restart its update process.

  • If it’s a Matter plug like the Linkind Matter Smart Plug: after power cycling, check the “Matter” pane in Home Assistant or your Matter controller (e.g., Apple Home, Alexa) — the update may complete silently.
  • If the update was triggered via ZHA or Zigbee2MQTT, after the power cycle, go to the device page and click “Retry” or “Refresh” (not all interfaces have this button; you may need to remove and re-add the device).

How to confirm it worked: The update percentage should change within 2 minutes. If it stays the same, proceed to step 2.

2. Restart the Home Assistant Core or Coordinator Integration

A software restart can clear a stuck request:

  • For ZHA: Go to Settings → Devices & Services → Integrations → ZHA → Configure → click the three-dot menu and select “Reload: ZHA”.
  • For Zigbee2MQTT: In the Add-on pane, restart the Zigbee2MQTT add-on. This resets the serial connection to the coordinator.
  • For Matter: Restart the Matter bridge add-on or the Matter server (depending on your setup). Then wait 2 minutes and re-check the plug.

Verification: The plug’s “Last seen” timestamp should update. If you’re using Zigbee2MQTT, open the frontend and watch the log for “Update started” or “Update completed” messages. If the log still shows “Update in progress” after 5 minutes, move to step 3.

3. Remove and Re-Pair the Plug

This is the most effective action when steps 1 and 2 fail:

1. In Home Assistant, go to the device page and click “Remove” (or the trash icon).

2. Factory-reset the plug: usually holding the physical button for 10 seconds until the LED blinks rapidly. (Check your plug’s manual; for Linkind Matter Smart Plug, press and hold for 5 seconds until the LED turns solid white, then release.)

3. Re-pair the plug via Home Assistant (Zigbee: enable pairing in ZHA/Zigbee2MQTT; Matter: scan the QR code again).

4. After successful pairing, trigger the firmware update again immediately — it often picks up from where it left off or downloads the latest version.

How to confirm: After re-pairing, the plug should show the current firmware version (check the device attributes). If the version matches the latest release (you can look up the manufacturer’s release notes), the update succeeded. If the version is still old and the update immediately gets stuck again, the problem is deeper.

4. Use the Manufacturer App as a Fallback (Wi-Fi/Matter Plugs)

For plugs that originally came with their own app (e.g., Kasa, Wemo, Meross), install that app on your phone, log in, and check the firmware update status there. The app may show a more accurate progress bar or let you force the update directly. Once the app shows “up to date,” return to Home Assistant and the stuck status should clear.

When the Update Won’t Budge – Deeper Troubleshooting

If the checklist and steps above haven’t resolved it, the problem is likely hardware- or network-specific.

Check the Zigbee Coordinator’s USB Port

A common hidden cause: using a USB 2.0 hub or a port on the same controller as a high-bandwidth device (e.g., an SSD). The CRC errors during firmware transmission can silently fail. Switch the coordinator to a USB 2.0 port directly on the motherboard or to a dedicated hub without other devices. On a Raspberry Pi, avoid USB ports that share a controller with the Ethernet or storage.

Look for Signal Interference

Zigbee operates at 2.4 GHz, same as Wi-Fi. An overcrowded channel can cause constant retransmits. Run a Zigbee channel scan (in ZHA or Zigbee2MQTT) and choose the least congested channel. Change the Wi-Fi AP’s channel as well if needed. A channel change requires re-pairing all Zigbee devices — but it’s worth it if interference is severe.

Update the Coordinator’s Own Firmware

Your Zigbee dongle’s own firmware may be outdated and incompatible with certain OTA updates. For example, a Sonoff ZBDongle-P with firmware 6.7.8 may fail to push updates to some IKEA plugs. Flash the latest coordinator firmware (follow the manufacturer’s guide) and retry the update on the stuck plug after re-pairing.

Inspect the OTA Provider in ZHA

If you’re using ZHA and the update is stuck at 0%, the OTA firmware file may be missing or corrupted. Go to Settings → ZHA → OTA and verify that the firmware image is present and matches your plug’s manufacturer. If not, manually download the image (from the official repo) and upload it via the ZHA OTA panel. In Zigbee2MQTT, you can enable external OTA providers in the configuration (YAML) by adding “`ota: {}`” to your device config.

When to Stop and Consider Replacement

Some smart plugs genuinely cannot be recovered after a failed halfway update. Here’s when to stop DIY troubleshooting and escalate:

  • The plug stops responding to any command after the stuck update, even after factory reset and re-pairing three times.
  • The LED blinks erratically or stays off when powered.
  • The update gets stuck at the exact same percentage every time (e.g., always stops at 37% on the same coordinator).

If the plug is still under warranty, contact the manufacturer for a replacement. If it’s out of warranty, a modern Linkind Matter Smart Plug is a reliable upgrade that integrates directly with Home Assistant via Matter — and its firmware updates can be fully managed from within Apple Home, Alexa, or Google Home without needing a separate manufacturer app.

In most cases, though, the “stuck” update is just a communication hiccup. A power cycle and a coordinator restart will get it moving again.

Explore This Topic

Related guides in this cluster:

Similar Posts