Troubliq

Smart-home fixes, step by step.

Blog

  • Matter Network Map Missing or Unsupported in Home Assistant 2026.9: Safe Diagnosis

    Matter Network Map Missing or Unsupported in Home Assistant 2026.9: Safe Diagnosis

    Direct answer: If Home Assistant 2026.9 does not show the Matter network map—or the map says the server is unsupported—do not reset or recommission your Matter devices. First confirm that Home Assistant Core is updated, the Matter integration is loaded, and the Matter Server is new enough to provide topology data. The map is a diagnostic view, not the control path itself: a missing map does not prove that your fabric, Thread credentials, or paired devices are broken.

    Quick diagnostic

    Time: 10–15 minutes. Risk: Low if you stay in read-only checks. Have ready: Home Assistant Core version, Matter Server version, installation type, one working Matter device, and whether that device uses Wi-Fi or Thread.

    Fastest safe check: Open Settings → Devices & services → Matter. If the Matter integration and devices work but Show map is absent or reports an old server, update the supported Home Assistant components in the normal order, allow them to finish starting, and check again.

    Do not do yet: Do not delete the Matter integration, remove a fabric, reset a border router, erase Thread credentials, or factory-reset devices merely to make the map appear.

    What changed in Home Assistant 2026.9

    Home Assistant 2026.9 brought the Matter Server’s network topology into the Home Assistant interface. The Matter panel can now show how devices connect: Wi-Fi versus Thread, routers and border routers, end devices, recognizable access-point or host names, and links whose appearance represents transport and reported signal information. Before this release, similar topology data could exist in the Matter Server’s own interface while remaining out of sight for most Home Assistant users.

    The official release notes also state that when the Matter Server is too old to support the feature, the page should explain that instead of silently failing. That distinction matters. “Unsupported” is primarily a version or capability message. It is not evidence that the device must be recommissioned.

    The network map closes an observability gap, but it does not change the fundamentals of Matter. Operational traffic still relies on local IPv6, permitted routing, discovery, a functioning Matter Server, and—when the device uses Thread—at least one usable Thread border router connected to the Home Assistant LAN.

    Symptoms this guide covers

    You may see no Show map button in the Matter panel, a message saying the Matter Server does not support the map, an empty or incomplete map, devices appearing without expected routes, Thread devices absent while Wi-Fi Matter devices appear, or a map that loads while one device remains unavailable. These symptoms belong to different layers and should not be treated as the same failure.

    This guide does not assume that the map itself caused a device outage. If every Matter device became unavailable after an update, begin with service, network, IPv6, and border-router health. If the devices still respond and only the visualization is missing, preserve the working system and troubleshoot the map separately.

    Failure matrix

    No Show map control: confirm Home Assistant 2026.9 or later, the correct Matter panel, and that the frontend finished updating. Unsupported-server message: check the Matter Server version and update it through the supported installation path. Map loads but is empty: confirm devices are commissioned to this Matter fabric and allow topology data time to populate. Wi-Fi devices appear but Thread devices do not: inspect the Thread integration, border routers, preferred network, and local IPv6. One device is missing: check that device’s current availability and transport instead of rebuilding the entire fabric.

    1. Confirm the version boundary

    Record the Home Assistant Core version shown in Settings → System → Repairs or the system information page. The Matter network map is a Home Assistant 2026.9 feature. If the installation is older, the absence of the new control is expected. Update only through the supported process for your installation type, and make a current backup first.

    If Core is already on 2026.9, install the latest available patch release rather than remaining on the initial .0 release. As of September 27, 2026, the official release page lists Home Assistant 2026.9.4. Patch releases contain bug fixes, so the exact patch level belongs in every useful problem report.

    After an update, allow the frontend and integrations to load fully. Refresh the browser once. If another device or browser displays the new interface correctly, a stale client cache is more likely than a server-side Matter problem. Do not use cache clearing as the first explanation when server logs show an actual exception.

    2. Separate Home Assistant Core from Matter Server

    Home Assistant Core supplies the interface and integration, while the Matter Server handles Matter communication and topology data. Updating Core does not automatically prove that every supporting component is current in every installation type. Home Assistant OS and supervised installations typically manage the official Matter Server app through the normal app/update interface. Container and custom deployments require their own supported version management.

    Open the Matter integration and inspect the available version and diagnostic information without exposing fabric credentials. If Home Assistant explicitly says the server is too old for the map, update the Matter Server through the supported channel. Avoid replacing it with an arbitrary development image merely to gain a feature.

    After the Matter Server restarts, wait for the integration to reconnect. Verify an ordinary Matter command before evaluating the map. This establishes that the operational layer is healthy. If control fails after the server update, collect the Matter Server and Home Assistant logs before restarting additional components.

    3. Confirm you are looking at the correct Matter fabric

    A Matter device can participate in more than one ecosystem through multi-admin commissioning. The device shown in Apple Home, Google Home, or a manufacturer app is not automatically proof that it belongs to the Home Assistant Matter fabric. The Home Assistant map can only describe topology known to the connected Matter Server and its fabric.

    Check the device list inside Home Assistant’s Matter integration. If the device does not exist there, the missing map node is expected. Do not remove it from another ecosystem blindly. Use the manufacturer’s and Home Assistant’s supported multi-admin flow if you intend to share the device with Home Assistant.

    If the device exists and responds in Home Assistant but its map details are incomplete, allow time for data collection and compare again. Battery devices sleep to conserve power, and network information may not appear with the immediacy of a mains-powered router.

    4. Distinguish Wi-Fi Matter from Matter over Thread

    Matter is the application standard; Thread and Wi-Fi are network transports. A Wi-Fi Matter device communicates through the local IP network and access point. A Matter-over-Thread device depends on the Thread mesh plus a border router that forwards encrypted Matter traffic between Thread and the local IPv6 network.

    Home Assistant’s 2026.9 map uses different link information to help distinguish these paths. If Wi-Fi Matter devices appear but Thread devices do not, concentrate on the Thread layer. If both transports are missing, first check the Matter Server, integration, and map capability rather than assuming every radio path failed simultaneously.

    The official Matter documentation recommends keeping Matter devices, border routers, and Home Assistant on compatible local networks. Router or access-point options that claim to optimize multicast can interfere with discovery. A complex VLAN design can also violate the local-network assumptions Matter expects.

    5. Check the Thread integration without changing credentials

    Go to Settings → Connectivity → Thread. Confirm that the expected Thread networks and border routers appear. Home Assistant’s Thread documentation explains that the integration tracks Thread networks and credentials; it also notes that the preferred-network behavior is still not complete in every commissioning path because a mobile device’s preferred Thread network can influence onboarding.

    Document which network Home Assistant marks as preferred, which network the phone uses, and which border routers are visible. Do not delete unknown credentials simply because multiple networks appear. Apple, Google, and Home Assistant border routers can create distinct Thread networks with different credentials.

    If the OpenThread Border Router app is used, verify that it is running and inspect its logs. A serial or radio configuration problem can affect the Thread path even when the Matter Server itself is healthy. If the border router recently changed, preserve the prior configuration until the new path is verified.

    6. Verify local IPv6

    Thread is IPv6-only. Home Assistant’s Thread documentation specifically warns that a device can join the Thread mesh yet remain unreachable beyond it when IPv6 connectivity or forwarding is missing. Internet-provider IPv6 is not the same requirement; local IPv6 communication still matters even when the household has no globally routed IPv6 service.

    Confirm that the Home Assistant host has local IPv6, that the router permits the required local path, and that container or VLAN layers do not discard IPv6 or multicast discovery. Avoid broad firewall exceptions. Make narrow, documented tests, and restore any rule that does not change the result.

    If a device is controllable in Home Assistant, operational IPv6 for that path is already working at that moment. Do not redesign the network just because the visualization is incomplete. Use the map as supporting evidence, not as the only health test.

    7. Interpret an incomplete map

    An incomplete diagram can reflect sleeping devices, unavailable nodes, data that has not populated, a device on another fabric, or a server capability gap. It does not automatically identify weak signal. Compare the map with actual device availability, command success, event updates, and the Thread or Wi-Fi diagnostics available for that device.

    Look for patterns. If all Thread end devices disappear but border routers remain, inspect the Thread mesh and credentials. If one battery sensor is absent while everything else works, wake or operate it using the manufacturer’s normal method and check again later. If the map itself never loads, focus on frontend, integration, and Matter Server logs.

    8. Diagnose a map that loads while a device is unavailable

    A topology line is not proof that application communication succeeds. The map may show the last known route while a device is currently asleep, powered off, blocked, or failing subscriptions. Open the device page and compare its entity update times, diagnostics, and command behavior.

    For a Wi-Fi Matter device, confirm power, Wi-Fi association, local IPv6, VLAN rules, and mDNS behavior. For a Thread device, confirm border-router health, mesh coverage, and the network credentials used at commissioning. Avoid recommissioning until you have established that the current fabric relationship is actually lost.

    Use Troubliq’s Matter device pairs but shows unavailable guide when device control is the problem rather than the map itself.

    9. Safe restart order

    Collect evidence first. Then reload the Matter integration if that control is available. If the server remains disconnected, restart only the Matter Server through its supported interface and wait for it to become ready. Restart Home Assistant once only when logs or integration state justify it. Rebooting the host, router, border routers, access points, and devices together destroys the evidence needed to identify the responsible layer.

    After each change, verify one ordinary Matter command, one state update, and the map. Record what changed. If a server update fixes the map but not device availability, treat those as separate problems.

    10. What to include in a useful problem report

    Record Home Assistant Core version and patch, Matter Server version, installation type, whether the affected device uses Wi-Fi or Thread, device brand and model, border-router models, network layout, exact visible message, and the time of the last failure. Include sanitized logs from the Matter Server and Home Assistant.

    Never publish setup codes, QR codes, fabric credentials, Thread credentials, authentication tokens, public addresses, or unredacted diagnostics. Troubliq’s Home Assistant Log Sanitizer can remove common private values locally in the browser before a log is shared.

    Verification checklist

    The Matter integration loads normally. An ordinary Matter command succeeds. State changes return to Home Assistant. The Matter Server meets the version required for the 2026.9 topology feature. The Show map control opens without an unsupported-server message. Expected Wi-Fi and Thread paths appear over time. Missing devices are investigated individually rather than erased from the fabric.

    Rollback and recovery

    If a supported Matter Server update introduces a new operational problem, preserve logs and use the recovery path documented for that installation type. Do not restore an entire Home Assistant backup solely because a visualization is absent. A full restore can roll back unrelated configuration and credentials.

    If you changed a firewall or VLAN rule during diagnosis, restore the original rule when it did not help. If you restarted a border router, allow the mesh time to settle before drawing conclusions. If a device was accidentally removed, follow the manufacturer’s supported commissioning or multi-admin process; do not copy credentials from public examples.

    Prevention

    Keep Home Assistant Core and the official Matter Server on supported stable versions. Review release notes before monthly upgrades. Maintain a current backup. Record border-router ownership and Thread network names. Avoid unnecessary Thread channel changes and broad network changes. Keep Matter, Thread, and local IPv6 documentation with the household’s recovery notes.

    Treat the map as a diagnostic aid. The best health check remains successful control, timely state updates, stable subscriptions, and predictable recovery after an ordinary restart.

    Related Troubliq resources

    Use the Smart-Home Diagnostic Decision Tree when the failing layer is unclear. Use the Device Unavailable Diagnostic for a protocol-neutral first pass. Check Home Assistant Problems Right Now for current version-specific notes.

    Official sources and review record

    Home Assistant 2026.9 release notes; Home Assistant Matter documentation; and Home Assistant Thread documentation.

    Last reviewed: September 28, 2026. Testing disclosure: Troubliq synthesized current official documentation and documented platform behavior. We did not claim hands-on testing with every Matter device, Matter Server build, border router, router, VLAN, or Thread topology.

  • UniFi Protect unavailable in Home Assistant: authentication, API mode, streams, and NvrError fixes

    UniFi Protect unavailable in Home Assistant: authentication, API mode, streams, and NvrError fixes

    Direct answer: When UniFi Protect is unavailable in Home Assistant, start by confirming that Protect is running on a supported UniFi OS Console, that the console is reachable by its local IP address, and that Protect is on the Stable release channel at version 7.2.105 or later. Then verify the connection mode: full access requires both a local-only UniFi OS user and an API key, while API-key-only mode intentionally exposes fewer entity types and no media source, actions, or proxy views. Do not delete the integration, rotate every credential, or reset cameras until you have identified whether the failure is authentication, permissions, routing, stream availability, or an unsupported Protect installation.

    Symptoms and exact scope

    This guide covers the official Home Assistant UniFi Protect integration connected to Protect running on a UniFi OS Console. It does not cover self-hosted or containerized Protect installations, which Ubiquiti does not officially offer and Home Assistant does not support. Common symptoms include the entire integration showing unavailable, cameras appearing without live video, only camera and light entities being present, event or sensor entities disappearing, media browser folders missing, repeated authentication failures, delayed video, and log messages containing NvrError with 404 - Reason: Not Found or 502 - Reason: Bad Gateway.

    Record the Home Assistant version, UniFi OS version, Protect version, console model, camera models, connection mode, console IP address, and the time the problem began. If the failure followed an upgrade, record whether the console was on Stable, Release Candidate, or Early Access. This information separates an ordinary configuration problem from an unsupported release-channel regression.

    Before changing anything

    Confirm that recordings and live views work inside the local UniFi Protect application. If Protect itself cannot display cameras, Home Assistant is downstream of the real failure. Check storage warnings, console utilization, camera adoption status, and whether Protect is still starting. Avoid rebooting the console during an active firmware update or while storage repair is in progress.

    Safety and privacy: Camera feeds, event thumbnails, doorbell images, fingerprints, NFC identifiers, access logs, local IP addresses, API keys, and usernames are sensitive. Never paste an API key or an unredacted diagnostics archive into a public forum. Do not expose the UniFi console directly to the internet to make Home Assistant connect. Use local routing or a properly secured remote-access design instead.

    UniFi Protect failure matrix

    ObservationMost likely layerLeast-destructive next check
    All Protect entities unavailableConsole reachability, authentication, Protect service, or versionOpen the local console IP and confirm Protect is running
    Camera streams work but sensors and events are missingAPI-key-only mode or limited permissionsCheck the configured connection mode and user role
    Media source and notification proxy URLs are missingAPI-key-only modeReconfigure to full access if those features are required
    Live feed repeatedly refreshes snapshotsNo active RTSPS streamCheck the Home Assistant repair and Protect stream availability
    404 - Reason: Not FoundStale endpoint, Protect restart, proxy path, or API mismatchConfirm current stable versions and reload once after Protect is fully online
    502 - Reason: Bad GatewayProtect backend or proxy unavailableTest Protect locally and inspect console health before changing Home Assistant
    Alarm Manager entities disappearedProtect Alarm Manager switched to Global modeCheck whether sensors, relays, fobs, or an Alarm Hub were adopted
    Only some cameras or controls are missingUser permissions, device capability, or API-version supportCompare the local user role and camera capabilities

    1. Confirm supported hardware and software

    The official integration supports UniFi Protect only when it runs on a UniFi OS Console capable of running Protect. A container or third-party self-hosted installation may report an internal address in camera-stream URLs that Home Assistant cannot reach. That symptom cannot be repaired reliably by changing Home Assistant host fields because the unsupported Protect instance is advertising unusable endpoints.

    Home Assistant currently requires UniFi Protect 7.2.105 or later. Update an older installation through the supported UniFi OS interface, but do not move to Early Access or Release Candidate merely to obtain a newer number. Home Assistant explicitly does not support those prerelease channels, and they can change the API before the integration is ready.

    If a feature is absent rather than the whole integration failing, check whether the feature requires a newer Protect public API version. A camera can remain available while a recently added entity is missing. That is different from authentication failure and should not trigger credential resets.

    2. Test the console locally

    From the same trusted network as Home Assistant, open the console by its local IP address. Confirm that UniFi OS loads, Protect opens, cameras are adopted, and a live view plays. This tests the route without depending on the cloud portal. If only unifi.ui.com works, investigate local DNS, VLAN routing, firewall policy, or console networking.

    Compare the address stored in Home Assistant with the console’s current address. Reserve the console IP in the router rather than assigning an arbitrary static address inside the DHCP pool. If the address changed, use the integration’s Reconfigure flow instead of deleting the integration. Preserving the entry protects entity IDs used by automations and dashboards.

    If Home Assistant and the console are separated by VLANs, verify narrowly scoped local access. Do not open broad inbound internet rules. Record existing firewall rules before testing and restore them if a change does not help. A temporary same-subnet test can prove whether routing is the failing layer without permanently weakening segmentation.

    3. Understand full access versus API-key-only mode

    Full access is the recommended mode for most users. It requires a local-only UniFi OS user plus an API key. It provides the broad entity set, actions, media source, and proxy views used for notification thumbnails and video clips. API-key-only mode is intentionally limited: cameras provide streams and snapshots, lights are supported, and some NVR Alarm Manager functionality is available, but binary sensors, events, media players, many controls, actions, media source, and proxy views are not.

    If a reconfiguration from full access to API-key-only caused entities to become unavailable, that is expected behavior, not data corruption. Switch back through Settings → Devices & services → UniFi Protect → Reconfigure if those entities are needed. They should return when the required mode and permissions are restored.

    Do not create overlapping integration entries for each connection mode. Duplicate entries can create confusing device and entity sets without solving the underlying permission difference.

    4. Verify the local user correctly

    For full access, the account must be created in the console’s local portal, not as a Ubiquiti cloud SSO user. Open the console by IP, go to Admins & Users, add an administrator restricted to local access, and assign the Protect role appropriate to the functions Home Assistant needs. The official documentation recommends Full Management for the widest support, but a narrower role can be used if you accept fewer or read-only entities.

    A cloud account that works at unifi.ui.com does not satisfy this local-user requirement. Repeated login failures with a valid cloud password often point to the wrong account type rather than a bad password.

    After changing permissions, reconfigure or reload the existing integration. Verify that the expected entity domains return before changing anything else. If only one camera remains absent, inspect device-specific access and adoption rather than increasing the global role again.

    5. Validate the API key without exposing it

    Create the API key from Protect’s Integrations page while logged into the local portal as an administrator. Copy it once into the Home Assistant setup flow. Do not save it in screenshots, notes synchronized to public services, YAML examples, or support posts.

    If the key was revoked or rotated, reconfigure the existing integration with the replacement. Avoid deleting the entry because deletion can break dashboards, notification automations, and entity references. If compromise is suspected, revoke the old key after the replacement is confirmed, then review console access logs and Home Assistant diagnostics.

    An API key alone does not grant full-access features. If the entry was configured in full-access mode, both the local username/password and API key must be valid.

    6. Diagnose missing or delayed camera streams

    Home Assistant uses active RTSPS streams exposed by the Protect public API and selects the highest-quality active stream as the default feed. If no stream is active, Home Assistant may create a repair that can enable one. Until a stream exists, the camera feed can fall back to repeatedly refreshed snapshots, increasing console load and looking like a slow video connection.

    Open the camera in Protect and verify that it is online and streaming. Check Home Assistant Repairs for a stream-related item. Enable the required stream through the supported repair rather than copying obsolete RTSP URLs from old tutorials. Then reload the integration and test a single camera before changing all cameras.

    Video delay can also reflect transcoding, browser playback, network loss, or an overloaded console. Compare a local Protect live view with Home Assistant. If both are delayed, focus on the camera, console, storage, or network. If only Home Assistant is delayed, collect integration diagnostics and note the stream quality and client used.

    7. Interpret NvrError 404 and 502 safely

    A 404 - Reason: Not Found means a requested Protect resource or endpoint was not found. It can occur temporarily while Protect restarts, after an API path changes, or when a saved reference points to an event that no longer exists. A 502 - Reason: Bad Gateway indicates that the gateway could not obtain a valid response from the Protect backend. Neither message proves that the camera itself is defective.

    First verify that Protect is fully loaded locally. Wait for an intentional console or Protect restart to finish, then reload the integration once. Confirm Stable-channel versions and capture the exact log time, endpoint category, and affected camera. Do not loop reloads or console reboots; repeated reconnects can obscure the original failure and add load.

    If the error persists while Protect works locally, download Home Assistant diagnostics, redact secrets and local identifiers, and check the official integration issue tracker for the same Protect and Home Assistant versions. A concise report should include console model, Protect version, Home Assistant version, camera model, connection mode, exact error, reproduction steps, and whether local Protect playback works.

    8. Explain entities that disappear by design

    Some missing entities are expected consequences of settings. Smart-sensor functions that are disabled are marked unavailable. Alarm Manager and Alarm profile entities appear only when Protect Alarm Manager is in Local mode. Adopting sensors, relays, fobs, or an Alarm Hub can switch Alarm Manager to Global mode, where the public API does not expose arm profiles and Home Assistant cannot create those entities.

    Likewise, G3 cameras do not provide the smart detections documented for G4 and AI series cameras. Package detection is represented as an event entity rather than a sustained binary sensor. These capability differences should be checked before treating a missing entity as a regression.

    9. Verify recovery

    • The UniFi OS console opens through its local IP from the Home Assistant network.
    • Protect is on Stable version 7.2.105 or later and finishes loading normally.
    • The integration uses the intended full-access or API-key-only mode.
    • Full access uses a local-only user, not a cloud SSO account, plus a valid API key.
    • Expected cameras and supported sensors appear without duplicate integration entries.
    • An active RTSPS stream plays for one camera without snapshot-only fallback.
    • Media source, proxy views, actions, and events appear only when the selected mode supports them.
    • Logs remain free of recurring 404 or 502 NvrErrors after one normal reload.

    Rollback and recovery

    If a new API key fails, restore the previous working key if it has not been revoked. If changing to API-key-only removes needed entities, reconfigure to full access. If a VLAN test fails, restore the original firewall rules and network placement. If a Protect update caused the failure, do not attempt unsupported firmware downgrades without Ubiquiti guidance; preserve recordings and configuration, collect diagnostics, and wait for a supported stable fix.

    If the integration entry was deleted, recreate it with the same console and credentials, then repair automation references carefully. Restoring an entire Home Assistant backup is usually excessive for a credential or routing issue and may roll back unrelated changes.

    Prevention

    • Reserve the console’s local IP address.
    • Use a dedicated local-only account and a dedicated API key for Home Assistant.
    • Keep Protect and UniFi OS on Stable channels.
    • Record the console, Protect, Home Assistant, and camera versions before upgrades.
    • Export or verify backups before major console changes.
    • Review entity availability after changing connection mode, user role, Alarm Manager mode, or adopted security devices.
    • Keep API keys, event images, access logs, and diagnostics private.

    Related Troubliq guides

    Use the Device Unavailable Diagnostic when the failing network layer is unclear. The Smart-Home Diagnostic Decision Tree can separate authentication, routing, and device problems. For another camera integration workflow, compare the Reolink camera unavailable guide. If a reverse proxy produces an HTTP error before Home Assistant loads, use the Home Assistant 400 Bad Request reverse-proxy guide.

    Sources and review record

    Last reviewed: September 27, 2026. Testing disclosure: Troubliq synthesized current official documentation and documented integration behavior. We did not claim hands-on testing with every UniFi OS Console, camera model, firmware version, network design, or Protect release.

  • Home Assistant “Config flow could not be loaded: Invalid handler specified”: safe diagnosis

    Home Assistant “Config flow could not be loaded: Invalid handler specified”: safe diagnosis

    Direct answer: Do not delete the working integration first. Open the Home Assistant Core log immediately after reproducing the error and find the import exception that appears before “Invalid handler specified.” The popup is a wrapper: the actionable cause is usually an incompatible custom component, a missing Python dependency, a duplicate package, or a Core-version regression in the integration’s config flow.

    This guide covers the frontend message “Config flow could not be loaded” with “Invalid handler specified” when adding, reconfiguring, or authenticating an integration. It is not a guide for ordinary invalid credentials or a device that is merely offline.

    Symptoms and affected scope

    • Adding an integration opens a popup containing Invalid handler specified.
    • A previously working integration cannot reconfigure after a Core update.
    • The log reports an import error, missing module, incompatible constant, duplicate package, or exception in config_flow.py.
    • The official integration name matches a custom_components folder installed earlier.

    These symptoms can look similar even though their causes sit in different layers. The safest approach is to preserve the current working state, identify the first failing layer, and change one variable at a time. This prevents a recoverable Config flow could not be loaded Invalid handler specified problem from turning into lost pairings, lost entities, or an inaccessible installation.

    Ranked likely causes

    • 1. A HACS or manually installed custom integration shadows the built-in integration domain.
    • 2. The custom component is not compatible with the installed Home Assistant Core version.
    • 3. A dependency failed to install or two incompatible copies of a Python package are loaded.
    • 4. Home Assistant Core or the official integration has a confirmed regression.
    • 5. Browser cache is stale, but only after server-side logs show no import failure.
    • 6. The integration files are incomplete after a failed update or restore.

    Before changing anything

    Make a current backup, record versions and installation type, capture the exact first error, and remove secrets from any notes. Do not delete integrations, reset devices, erase databases, or reflash firmware as an opening move. If equipment is hot, swollen, wet, arcing, smoking, or connected to mains wiring that must be opened, stop and use qualified help.

    Least-destructive diagnostic order

    1. 1. Create a current backup before changing integration files. Do not remove the config entry, device registry records, or entities merely because the setup dialog failed. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    2. 2. Open Settings → System → Logs. Clear the view if needed, reproduce the error once, and return immediately to the log. Expand the first traceback associated with homeassistant.config_entries, homeassistant.loader, or the integration domain. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    3. 3. Record the exact integration domain and the first import or module error. The last line “Invalid handler specified” is less diagnostic than the earlier exception that prevented the config-flow handler from loading. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    4. 4. Check whether /config/custom_components contains a folder with that domain. A custom integration can shadow an official integration even when the UI label looks identical. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    5. 5. If a matching custom component exists, read its release notes and compatibility statement. Update it through its supported manager, or disable it reversibly by renaming the folder and restarting Home Assistant. Do not delete its files before a backup. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    6. 6. Restart Home Assistant once and retry the flow. If the built-in integration now loads, the shadowing custom component was the cause. Preserve its configuration until you decide whether migration is needed. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    7. 7. If no custom component matches, compare the installed Home Assistant Core version with the integration documentation and current upstream issues. A regression tied to one Core release should be handled with the official patch or a supported backup restore, not random package installation. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    8. 8. For dependency errors, do not use pip inside Home Assistant OS or a managed container. Managed installations rebuild dependencies and unsupported manual packages can make the environment less reproducible. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    9. 9. Check available Core updates and release notes. Install a stable patch only after a backup. If the error began immediately after an update and no fixed patch exists, restore the pre-update backup using the official recovery path. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    10. 10. Test in a private browser window only after server-side import errors are resolved. Browser cache cannot repair a Python import exception, but it can retain stale frontend flow state. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    11. 11. Reconfigure or reauthenticate through the integration’s flow instead of deleting it. Modern integrations may support a reconfigure flow that updates address or credentials without losing device/entity associations. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    12. 12. If the traceback identifies a genuine official-integration bug, collect sanitized diagnostics, Core version, installation type, and the minimal traceback. Remove tokens, API keys, hostnames, GPS data, and account identifiers before sharing an upstream report. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.

    Choose the correct branch

    • Matching custom_components domain: treat shadowing or incompatibility as the leading cause.
    • Error began with a Core patch: inspect official release notes and upstream issue status before altering files.
    • Missing third-party Python module: update or remove the component that declares it; do not modify managed Python manually.
    • Only one browser fails and logs are clean: clear site data or test a private window after confirming the backend flow works.

    How to interpret the results

    If the evidence points to a HACS or manually installed custom integration shadows the built-in integration domain. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the custom component is not compatible with the installed Home Assistant Core version. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to a dependency failed to install or two incompatible copies of a Python package are loaded. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to Home Assistant Core or the official integration has a confirmed regression. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to browser cache is stale, but only after server-side logs show no import failure. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the integration files are incomplete after a failed update or restore. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    Verified repair and final checks

    The integration dialog should open, complete without a server exception, and preserve or create the expected config entry. Confirm related entities load, no new import traceback appears after restart, and reauthentication or reconfiguration works without deleting the entry.

    A repair is not verified merely because an error banner disappears. Confirm the underlying connection or service, observe fresh state data, and test after a controlled restart where appropriate. Keep the previous configuration until the new state has remained stable.

    Rollback and recovery

    Keep the backup and the original custom component folder until the fixed integration is verified. If a patch worsens the site, restore the supported prior backup. Do not restore only selected database tables unless official recovery instructions require it.

    Write down each change before making it. Reversibility matters: a documented URL, service setting, serial path, integration state, or firmware version is much easier to restore than a configuration changed in several places at once.

    Prevention

    Review custom integrations before Core updates, avoid duplicate domains, keep HACS components current, retain pre-update backups, and test reconfiguration before an urgent credential change is needed.

    Review this setup after platform, firmware, router, certificate, or host changes. Backups should exist off the device and should be periodically checked for visibility and required encryption material.

    Privacy and safety

    Never publish access tokens, API keys, encryption keys, Wi-Fi credentials, public IP addresses, precise locations, camera URLs, door-lock states, alarm details, or complete unsanitized diagnostics. Do not weaken TLS, firewall rules, authentication, or network isolation simply to make an error disappear.

    Testing disclosure

    This guide is based on the current official documentation and linked upstream reports. Troubliq did not physically test every device, adapter, network, phone, host, or installation variant described. Device-specific behavior can differ; preserve backups and follow the manufacturer’s safety instructions.

    Sources

    Last reviewed: September 27, 2026.

    Next: use the Home Assistant Error Decoder to match the exact message, or return to the current Home Assistant problems hub.

    Detailed diagnostic reference

    Read the traceback in order

    The popup is produced after Home Assistant cannot obtain a valid config-flow handler. Find the first exception for the domain. Later wrapper messages repeat the consequence and can distract from the missing module, import name, dependency, or component error that caused it.

    Check domain shadowing

    Home Assistant resolves integrations by domain. A custom_components folder with the same domain can override the bundled integration. Record the folder and version, then disable it reversibly and restart once to test the official component.

    Identify stale custom code

    Search the traceback for removed constants, renamed helpers, or imports from old Home Assistant APIs. Those are compatibility failures in the custom component, not credential problems. Update the component or keep it disabled until its maintainer supports the installed Core release.

    Avoid managed-environment package edits

    Home Assistant OS and official containers manage Python dependencies. Installing packages manually with pip can create a temporary success that disappears on restart or conflicts with the next update. Repair the integration declaring the dependency.

    Separate backend and frontend faults

    If the log contains an import traceback, browser cache is not the cause. Use a private window only after the backend flow loads without errors. This prevents repeated cache clearing from hiding the actionable server evidence.

    Protect an existing config entry

    Do not delete a working or partially working entry before testing reconfigure or reauthenticate. Deletion can remove device/entity associations and automation references while leaving the broken flow code unchanged.

    Handle a confirmed regression

    Compare the exact Core version, installation type, and integration domain with the official issue. Prefer a fixed stable patch. If no fix exists and the failure is critical, restore the complete supported pre-update backup rather than mixing component files.

    Sanitize diagnostic evidence

    Share the integration domain, version, minimal traceback, and reproduction steps. Remove tokens, API keys, email addresses, hostnames, GPS coordinates, camera endpoints, and account identifiers. Do not upload a complete configuration archive publicly.

    Verify after the repair

    Open the flow, complete a harmless reconfiguration when possible, restart Home Assistant, and confirm the domain loads without import warnings. Check that entity identifiers and automations remain intact.

    Completion criteria

    The config flow opens reliably, the entry configures or reauthenticates, no related traceback returns after restart, and the fix does not depend on an unsupported manual package or deleted registry data.

  • Home Assistant Companion App cannot connect: internal URL, HTTPS, Wi-Fi, and certificate fixes

    Home Assistant Companion App cannot connect: internal URL, HTTPS, Wi-Fi, and certificate fixes

    Direct answer: First decide whether the app fails only at home, only away from home, or everywhere. A home-only failure points to the internal URL, Wi-Fi isolation, local-network permission, DNS, or router behavior. An away-only failure points to the external URL, remote-access service, firewall, DNS, or TLS certificate. Failure everywhere usually means the Home Assistant server is down, the saved URL is wrong, or authentication must be reset.

    Signal Path

    • Diagnostic time: 10–20 minutes
    • Difficulty: Moderate
    • Risk: Low if you avoid resets and preserve the working URL
    • Have ready: phone, Wi-Fi and cellular access, exact saved URL, browser and the first error message

    Safe First Check: Open the exact saved Home Assistant URL in the phone’s browser on Wi-Fi, then repeat on cellular. This separates app state from network-path failure without changing anything.

    Before You Reset: Do not delete the server connection, clear app data, expose port 8123, bypass certificate warnings or remove integrations yet.

    What this test proves

    Wi-Fi-only failure points toward local permission, guest-network isolation, split DNS or router behavior. Cellular-only failure points toward the external hostname, remote access, firewall, DNS or TLS. Failure on both paths moves the investigation toward server availability, the stored URL or authentication.

    This guide covers the official Android and iOS Home Assistant Companion Apps. It assumes the Home Assistant web interface can be tested from at least one browser. It does not recommend exposing port 8123 directly to the internet.

    Symptoms and affected scope

    • The app displays “Unable to connect to Home Assistant.”
    • The app works on mobile data but not home Wi-Fi, or works on Wi-Fi but not mobile data.
    • A certificate, hostname, timeout, or connection-refused message appears.
    • Notifications arrive but dashboards do not load.
    • The browser works while the app fails, or the reverse.

    These symptoms can look similar even though their causes sit in different layers. The safest approach is to preserve the current working state, identify the first failing layer, and change one variable at a time. This prevents a recoverable Home Assistant Companion App cannot connect problem from turning into lost pairings, lost entities, or an inaccessible installation.

    Ranked likely causes

    • 1. The saved internal or external URL is wrong, includes the wrong port, or points to an old hostname.
    • 2. iOS local-network access is denied, Android network restrictions are active, or the phone is on a guest VLAN.
    • 3. Hairpin NAT or split DNS is missing, so an external hostname cannot loop back from the home network.
    • 4. The HTTPS certificate is expired, incomplete, self-signed, or issued for a different hostname.
    • 5. A reverse proxy, firewall, VPN, Private DNS, content filter, or ad blocker interrupts the WebSocket connection.
    • 6. The server is unavailable, restarting, or reachable only from another subnet.

    Before changing anything

    Make a current backup, record versions and installation type, capture the exact first error, and remove secrets from any notes. Do not delete integrations, reset devices, erase databases, or reflash firmware as an opening move. If equipment is hot, swollen, wet, arcing, smoking, or connected to mains wiring that must be opened, stop and use qualified help.

    Least-destructive diagnostic order

    1. 1. From a browser on the same phone and network, open the exact URL saved in the app. Record whether DNS fails, the connection times out, the certificate is rejected, or the login page appears. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    2. 2. Test the same URL once on Wi-Fi and once on mobile data. This two-path test is more useful than reinstalling the app because it identifies which side of the route is failing. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    3. 3. Open the app’s server connection settings and inspect the Home Assistant URL. Use a complete URL with https:// when TLS is configured. If external port 443 forwards to the Home Assistant service through a proxy, do not append :8123 to the public hostname. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    4. 4. On iOS, verify Settings → Apps → Home Assistant → Local Network is enabled. On Android, remove battery or data restrictions only when they are actually blocking the app; do not grant unrelated permissions. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    5. 5. If local access fails, confirm the phone is not on a guest network and that client isolation is disabled for the trusted home SSID. Test the Home Assistant host’s local address from another trusted device. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    6. 6. If the public hostname works outside but not inside, configure supported split DNS or router NAT loopback. Do not weaken TLS verification or replace the hostname with a private address while away from home. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    7. 7. Inspect the certificate in a browser. Confirm it is current, covers the exact hostname, and provides a complete chain. A browser exception is not an acceptable permanent fix for an app that sends authentication tokens. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    8. 8. If a reverse proxy is used, verify WebSocket forwarding and the Home Assistant trusted-proxy configuration. A normal login page can load while the persistent app connection still fails. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    9. 9. Disable VPN, Private DNS, filtering, or security apps temporarily one at a time for diagnosis. Restore each control after the test. Do not leave protective controls disabled. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    10. 10. Before resetting app data, back up notification-related settings and verify the Home Assistant user credentials. Reset the connection only after URL, network, and TLS tests identify the app state as the remaining cause. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.

    Choose the correct branch

    • Works on cellular only: focus on local-network permission, guest Wi-Fi, split DNS, and NAT loopback.
    • Works on Wi-Fi only: focus on the external hostname, remote-access service, router forwarding, TLS, and carrier/VPN filtering.
    • Browser works, app fails: compare the exact saved URL, app permissions, certificate trust, and stale authentication state.
    • Neither browser nor app works: troubleshoot server availability and routing before changing the app.

    How to interpret the results

    If the evidence points to the saved internal or external URL is wrong, includes the wrong port, or points to an old hostname. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to iOS local-network access is denied, Android network restrictions are active, or the phone is on a guest VLAN. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to hairpin NAT or split DNS is missing, so an external hostname cannot loop back from the home network. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the HTTPS certificate is expired, incomplete, self-signed, or issued for a different hostname. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to a reverse proxy, firewall, VPN, Private DNS, content filter, or ad blocker interrupts the WebSocket connection. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the server is unavailable, restarting, or reachable only from another subnet. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    Verified repair and final checks

    Verify dashboard loading, entity updates, a fresh app launch, one Wi-Fi-to-cellular transition, and a notification round trip. Confirm that the connection uses the intended HTTPS hostname and that no certificate warning was bypassed.

    A repair is not verified merely because an error banner disappears. Confirm the underlying connection or service, observe fresh state data, and test after a controlled restart where appropriate. Keep the previous configuration until the new state has remained stable.

    Rollback and recovery

    If a URL edit makes the app worse, restore the recorded prior URL. If proxy changes fail, restore the last known configuration and restart only the proxy. Keep a browser session open during changes so you do not lock yourself out.

    Write down each change before making it. Reversibility matters: a documented URL, service setting, serial path, integration state, or firmware version is much easier to restore than a configuration changed in several places at once.

    Prevention

    Use one documented external hostname, valid automated TLS renewal, supported remote access, stable internal DNS, and a trusted non-guest Wi-Fi network. Record the internal and external paths before changing routers.

    Review this setup after platform, firmware, router, certificate, or host changes. Backups should exist off the device and should be periodically checked for visibility and required encryption material.

    Privacy and safety

    Never publish access tokens, API keys, encryption keys, Wi-Fi credentials, public IP addresses, precise locations, camera URLs, door-lock states, alarm details, or complete unsanitized diagnostics. Do not weaken TLS, firewall rules, authentication, or network isolation simply to make an error disappear.

    Testing disclosure

    This guide is based on the current official documentation and linked upstream reports. Troubliq did not physically test every device, adapter, network, phone, host, or installation variant described. Device-specific behavior can differ; preserve backups and follow the manufacturer’s safety instructions.

    Sources

    Last reviewed: September 24, 2026.

    Next: use the Home Assistant Error Decoder to match the exact message, or return to the current Home Assistant problems hub.

    Detailed diagnostic reference

    Build a four-path test

    Test the saved URL from the phone on home Wi-Fi, the same phone on cellular, another device on home Wi-Fi, and an external browser. This matrix separates app state from server state, and local routing from public routing, without reinstalling anything.

    Interpret DNS failures

    A hostname-not-found response means the device cannot resolve the name. Compare the phone’s DNS provider, VPN, Private DNS, router DNS, and split-DNS record. Do not replace a public HTTPS hostname with an insecure numeric address as a permanent workaround.

    Interpret timeouts and refusals

    A timeout usually indicates filtering, routing, or an unreachable host. Connection refused means the address answered but nothing accepted the requested port. These outcomes require different checks; neither is fixed by clearing the app cache.

    Check WebSocket behavior

    Home Assistant uses a persistent WebSocket after the initial page loads. A proxy may serve the login screen correctly while failing to upgrade the connection. Review the proxy’s WebSocket forwarding and timeout configuration using its official documentation.

    Validate TLS completely

    Confirm the certificate covers the exact hostname, is within its validity dates, and supplies the intermediate chain. Test renewal before expiration. Never install an unknown root certificate or turn off certificate validation merely to silence the app.

    Handle split DNS safely

    When the public hostname cannot loop back through the router, configure a local DNS record that returns the internal proxy address while preserving the same HTTPS hostname. This avoids maintaining different identities and keeps certificate verification meaningful.

    Review phone permissions narrowly

    Local Network permission on iOS is directly relevant. Location permission may affect SSID-based internal URL selection, but it should be granted only when that feature is used. Avoid granting contacts, microphone, or unrelated permissions to solve a network error.

    Reset only the affected layer

    If network and browser tests pass, remove and re-add only the saved server connection or reset the app according to official guidance. Record notification settings and device name first so duplicate mobile_app entities can be identified safely.

    Remote-access safety

    Prefer Home Assistant Cloud, a properly configured reverse proxy, or a secure VPN. Do not expose the default service directly without TLS and access controls. Rate limits and strong unique credentials protect the login but do not replace safe network design.

    Completion criteria

    The app should open from a cold start, update entities, switch between Wi-Fi and cellular, reconnect after screen lock, and receive a fresh notification. Verify that all paths use the intended hostname and no certificate exception remains.

  • Home Assistant says “Unsupported system”: diagnose Supervisor warnings safely

    Home Assistant says “Unsupported system”: diagnose Supervisor warnings safely

    Direct answer: An “Unsupported system” warning is not one single fault. It is Supervisor reporting that a specific host requirement—such as the operating system, OS-Agent, AppArmor, D-Bus, NetworkManager, systemd-resolved, CGroup v2, or the Home Assistant OS version—does not meet its supported baseline. Open Settings → System → Repairs, identify the exact unsupported check, and fix that check rather than suppressing the warning.

    This guide applies to Home Assistant OS and supervised installations that expose Supervisor and the Repairs dashboard. It does not apply to Home Assistant Container or Core installations, which do not use Supervisor’s supported-host evaluation in the same way.

    Symptoms and affected scope

    • A Repairs notification says the installation or system is unsupported.
    • Supervisor stops offering some updates or repeatedly logs an unsupported condition.
    • The warning appeared after a host OS change, a kernel change, installing extra host software, or restoring an older image.
    • The system still appears to work, which makes it tempting to ignore the warning.

    These symptoms can look similar even though their causes sit in different layers. The safest approach is to preserve the current working state, identify the first failing layer, and change one variable at a time. This prevents a recoverable Home Assistant unsupported system problem from turning into lost pairings, lost entities, or an inaccessible installation.

    Ranked likely causes

    • 1. Home Assistant OS is more than four major releases behind.
    • 2. A supervised installation is running on an unsupported operating system or an altered host.
    • 3. OS-Agent is missing, stopped, outdated, or unreachable.
    • 4. AppArmor, D-Bus, NetworkManager, systemd-resolved, or CGroup v2 is absent or misconfigured.
    • 5. Unsupported extra software or conflicting containers are installed on the supervised host.

    Before changing anything

    Make a current backup, record versions and installation type, capture the exact first error, and remove secrets from any notes. Do not delete integrations, reset devices, erase databases, or reflash firmware as an opening move. If equipment is hot, swollen, wet, arcing, smoking, or connected to mains wiring that must be opened, stop and use qualified help.

    Least-destructive diagnostic order

    1. 1. Create a current full backup and download a copy away from the Home Assistant host. Confirm that the backup appears in the backup list and retain the encryption emergency kit if encryption is enabled. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    2. 2. Open Settings → System → Repairs and expand the unsupported item. Record the exact check name and the suggested more-info link. Do not treat the umbrella phrase “unsupported system” as the diagnosis. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    3. 3. Check Settings → System → Updates. If Home Assistant OS is old, update one offered OS release at a time and allow the host to finish rebooting. Do not remove power during an operating-system update. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    4. 4. For an OS-Agent warning, confirm the service exists and is running using the official OS-Agent instructions for the supervised host. Home Assistant OS already includes OS-Agent; an OS installation showing this warning should normally be rebooted and updated before deeper host changes. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    5. 5. For an AppArmor warning, verify the kernel boot parameters and AppArmor service rather than disabling the check. AppArmor is part of the supported security boundary. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    6. 6. For D-Bus, NetworkManager, systemd-resolved, or CGroup warnings, compare the host with the official supported supervised-installation requirements. Correct the named service only; do not replace several networking components at once. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    7. 7. If the warning names unsupported software, inventory containers and packages added outside Home Assistant. Stop only the conflicting component after documenting its configuration. Avoid deleting volumes or configuration while diagnosing. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    8. 8. If the operating system itself is unsupported, plan a backup-and-restore migration to Home Assistant OS or another officially supported installation type. A clean migration is safer than forcing Supervisor to accept an incompatible host. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.

    Choose the correct branch

    • Home Assistant OS: prioritize OS updates, a controlled reboot, storage health, and official recovery procedures.
    • Supervised: verify the exact supported Debian release and every required host service before changing Supervisor.
    • Container or Core: the message likely comes from a different component or an old supervised configuration; confirm the actual installation type before following supervised-host commands.

    How to interpret the results

    If the evidence points to Home Assistant OS is more than four major releases behind. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to a supervised installation is running on an unsupported operating system or an altered host. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to oS-Agent is missing, stopped, outdated, or unreachable. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to appArmor, D-Bus, NetworkManager, systemd-resolved, or CGroup v2 is absent or misconfigured. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to unsupported extra software or conflicting containers are installed on the supervised host. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    Verified repair and final checks

    Return to Repairs after the repair and select recheck when offered. Confirm that the exact unsupported condition disappears, Supervisor can refresh update information, backups remain visible, add-ons start, and the host survives one controlled reboot. A working dashboard alone is not proof that the host is supported.

    A repair is not verified merely because an error banner disappears. Confirm the underlying connection or service, observe fresh state data, and test after a controlled restart where appropriate. Keep the previous configuration until the new state has remained stable.

    Rollback and recovery

    If a service change breaks networking, use local console access and reverse only the last documented change. If migration fails, reinstall the prior supported image and restore the downloaded backup. Never test recovery by deleting the only working installation.

    Write down each change before making it. Reversibility matters: a documented URL, service setting, serial path, integration state, or firmware version is much easier to restore than a configuration changed in several places at once.

    Prevention

    Keep Home Assistant OS and Supervisor current, avoid placing unrelated workloads on a supervised host, document host-level modifications, retain off-device backups, and review Repairs after every host or kernel update.

    Review this setup after platform, firmware, router, certificate, or host changes. Backups should exist off the device and should be periodically checked for visibility and required encryption material.

    Privacy and safety

    Never publish access tokens, API keys, encryption keys, Wi-Fi credentials, public IP addresses, precise locations, camera URLs, door-lock states, alarm details, or complete unsanitized diagnostics. Do not weaken TLS, firewall rules, authentication, or network isolation simply to make an error disappear.

    Testing disclosure

    This guide is based on the current official documentation and linked upstream reports. Troubliq did not physically test every device, adapter, network, phone, host, or installation variant described. Device-specific behavior can differ; preserve backups and follow the manufacturer’s safety instructions.

    Sources

    Last reviewed: September 24, 2026.

    Next: use the Home Assistant Error Decoder to match the exact message, or return to the current Home Assistant problems hub.

    Detailed diagnostic reference

    Read the exact Repairs identifier

    Supervisor groups several host checks under an unsupported-system banner. Preserve the identifier shown in Repairs and the linked more-info page. An operating-system check, OS-Agent check, AppArmor check, D-Bus check, NetworkManager check, systemd-resolved check, and CGroup check require different remedies; treating them as one warning causes unnecessary host changes.

    Separate unsupported from unhealthy

    Unsupported describes a configuration outside the maintained baseline. Unhealthy can block Supervisor operations because a required service or condition is currently failing. Record both states independently. Clearing an unsupported notice does not prove the host is healthy, and a healthy-looking dashboard does not prove the installation is supported.

    Check update visibility

    An outdated Home Assistant OS can stop Supervisor from refreshing component update information. Compare the installed OS release with the releases offered in Settings. If updates are absent while the OS is far behind, use the official OS recovery path rather than installing random packages on the host.

    Plan a supervised-host migration

    Before migrating, inventory add-ons, storage mounts, USB devices, static addresses, certificates, and external databases. Download a full backup and its emergency kit. Install the supported target, restore the backup, then verify each hardware path and network dependency before decommissioning the old host.

    Document host services

    For supervised installations, record the status of OS-Agent, AppArmor, D-Bus, NetworkManager, systemd-resolved, Docker, and CGroup v2. Change only the service named by the repair. A broad package upgrade or networking replacement can create a second failure while hiding the first.

    Avoid suppressing the symptom

    Ignoring or hiding a Repairs notification does not restore support. Do not patch Supervisor files, disable evaluation code, or spoof the operating-system identity. Those changes make future updates less predictable and remove useful evidence from support requests.

    Verify storage before upgrades

    Low free space, filesystem errors, and failing media can make an ordinary update look like a Supervisor compatibility problem. Check storage health and available space before a major OS update. Keep the backup off the same storage device.

    Prepare local recovery access

    Host-level networking repairs can remove remote access. Confirm local console access, the device location, and a rollback path before changing NetworkManager, DNS, or firewall configuration. For remote installations, schedule an onsite fallback rather than gambling on an untested network restart.

    Escalation package

    A useful support package includes installation type, Core/Supervisor/OS versions, the exact Repairs identifier, relevant sanitized Supervisor lines, recent host changes, and the result of the official recheck. Exclude tokens, public addresses, serial numbers when unnecessary, and complete backups.

    Completion criteria

    The repair is complete only when the named Repairs item clears, Supervisor refreshes update data, add-ons and backups remain available, networking survives a controlled reboot, and no replacement unhealthy condition appears. Record the final versions and change that resolved it.

    When the warning returns after a reboot

    If the same repair returns after every restart, look for a persistent host configuration rather than repeatedly selecting recheck. Confirm that required services are enabled at boot, the correct kernel parameters remain active, the supported operating-system release is actually running, and no startup automation recreates a conflicting container or network configuration. Compare the first Supervisor evaluation after boot with the later state. A condition that appears only during startup may indicate service ordering; a condition that remains indicates the requirement is still unmet. Record boot logs before restarting again, because later logs may omit the first failure.

  • Home Assistant DNS Failure: Zigbee2MQTT and Add-ons Offline

    Home Assistant DNS Failure: Zigbee2MQTT and Add-ons Offline

    Direct answer: When Zigbee2MQTT and several Home Assistant add-ons go offline together, first determine whether the failure is DNS, MQTT, or the Zigbee adapter—do not reset the coordinator or re-pair devices. A message such as getaddrinfo ENOTFOUND, EAI_AGAIN, Name does not resolve, or Temporary failure in name resolution points toward DNS. ECONNREFUSED, an authentication failure, or a TLS error means the hostname resolved but the broker connection failed. Serial-port and adapter initialization errors belong to a different branch.

    Symptoms this guide covers

    This workflow is for Home Assistant installations where Zigbee2MQTT, Mosquitto, or another app stopped communicating after an update, restart, network change, or host-name change. Typical symptoms include all Zigbee entities becoming unavailable at once, Zigbee2MQTT restarting repeatedly, the Zigbee2MQTT frontend loading while MQTT never connects, several apps failing to resolve internal names, or logs naming a broker host that cannot be found.

    It does not assume that Home Assistant 2026.9 has one universal DNS defect. The 2026.9 release is useful version context because settings and connectivity surfaces changed, but a temporal association is not proof of a Core regression. Match the exact log layer before changing anything. The same diagnostic order also applies to later releases unless their release notes identify a more specific breaking change.

    Preserve evidence before restarting anything

    • Download or confirm a recent Home Assistant backup before changing app configuration.
    • Copy the first meaningful Zigbee2MQTT error after startup, not hundreds of repeated reconnect lines.
    • Record the configured MQTT server value without copying its password.
    • Note whether Mosquitto, Zigbee2MQTT, and other affected apps are running, stopped, or restarting.
    • Record whether the failure began after a Core, Operating System, Supervisor, app, router, VLAN, or DNS change.

    Remove usernames, passwords, access tokens, public IP addresses, device identifiers, Wi-Fi names, and coordinates before sharing logs. A broker URL may embed credentials, so redact it carefully.

    Read the error by diagnostic layer

    Log patternLikely layerLeast-destructive next check
    ENOTFOUND, EAI_AGAIN, “name does not resolve”DNS/name resolutionVerify the configured hostname and whether other apps can resolve internal names.
    ECONNREFUSED or connection refusedBroker service/portConfirm Mosquitto is running and listening at the configured port.
    Not authorized, bad username/passwordMQTT authenticationConfirm the dedicated broker account and secret reference without exposing credentials.
    Certificate, TLS, or hostname mismatchMQTT transport securityCheck scheme, certificate name, time, and CA configuration.
    Adapter not found, cannot open port, failed to connect to adapterZigbee coordinatorCheck the stable device path, exclusivity, power, and adapter type.
    Only one or a few devices unavailableZigbee mesh/deviceInspect routers, battery, signal, and the individual device before touching MQTT.

    Step 1: decide whether the outage is broad or isolated

    A broad simultaneous outage is the strongest clue. If every Zigbee entity becomes unavailable while Zigbee2MQTT reports an MQTT connection problem, the coordinator may still be operating normally. Zigbee2MQTT translates Zigbee events into MQTT messages; when the broker path breaks, Home Assistant stops receiving those messages and can make a healthy mesh look dead.

    If only one device fails while Zigbee2MQTT remains connected to MQTT and other devices update normally, DNS is unlikely. Start with the individual device, its battery, nearby routers, interference, or last-seen history. If Zigbee2MQTT cannot initialize its adapter before it attempts MQTT, use the serial-port and coordinator diagnostic guide as the closer route.

    Step 2: verify the MQTT server value

    Zigbee2MQTT requires an MQTT server connection. Its official configuration documentation shows server values such as mqtt://localhost:1883 and notes that the Home Assistant Mosquitto app commonly uses the internal host core-mosquitto. The correct value depends on how Zigbee2MQTT is installed. A Home Assistant app, a separate Docker container, and a remote host do not share the same meaning of localhost.

    • For the Home Assistant app arrangement, compare the value with the current app documentation and your broker configuration.
    • For separate Docker containers, confirm both containers share the intended network and that the broker service name still exists.
    • For a remote broker, confirm the hostname or fixed address still identifies the same machine.
    • Check for spelling mistakes, an obsolete domain suffix, an accidental space, the wrong URI scheme, or an incorrect port.

    Do not publish the complete configuration when asking for help. Zigbee2MQTT supports placing the server, username, password, and network key in a separate secrets file; preserve those boundaries.

    Step 3: separate DNS from reachability

    DNS answers the question “what address belongs to this name?” Reachability answers “can the client connect to that address and port?” These are different failures. A resolution error occurs before authentication. A connection-refused error normally means resolution succeeded and a host actively rejected the requested port. A timeout can indicate routing, firewall, a stopped service, or a host that never replied.

    When an authorized diagnostic environment shows that the broker is reachable by numeric address but not by its configured name, that is useful evidence for DNS. Use the comparison only as a temporary test. Permanently hard-coding an internal app address may create a fragile setup because managed addresses can change. Restore the documented hostname-based configuration after correcting name resolution.

    If multiple unrelated apps fail to resolve internal or external names at the same time, widen the investigation to the Home Assistant host, Supervisor/app network, upstream DNS server, router, VLAN rules, and recent network changes. If only Zigbee2MQTT fails and every other app resolves names normally, first scrutinize its exact server value and execution environment.

    Step 4: verify Mosquitto without changing Zigbee

    Confirm that the broker is installed, started, and not trapped in its own restart loop. Read its log at the same timestamp as the Zigbee2MQTT attempt. If Mosquitto records no incoming attempt while Zigbee2MQTT reports a DNS error, the connection likely never reached the broker. If Mosquitto records the attempt and rejects it, focus on credentials, permissions, client identity, or TLS instead of DNS.

    Use a dedicated non-administrator MQTT account with only the access required by the deployment. Do not disable authentication as a diagnostic shortcut on a network you do not fully trust. If credentials recently changed, update the secret in one controlled step, restart only the affected client, and inspect the first new log sequence.

    Step 5: interpret authentication and TLS errors correctly

    An authentication error proves more than it appears to: the client reached something capable of speaking MQTT. Rechecking DNS repeatedly will not repair a rejected username or password. Verify the account, password source, ACL, and whether the broker expects anonymous or authenticated connections.

    TLS errors also need their own branch. Confirm whether the configured URL begins with mqtt:// or mqtts://, whether the port matches that choice, whether Home Assistant’s clock is correct, whether the certificate covers the broker hostname, and whether the issuing CA is trusted. Do not bypass certificate verification permanently simply to silence an error; that can hide interception or a wrong destination.

    Step 6: check the coordinator only after MQTT is healthy

    Once Zigbee2MQTT reaches and authenticates to MQTT, any remaining startup error can be evaluated separately. Official Zigbee2MQTT troubleshooting notes that many startup crashes come from inability to communicate with the adapter. Look for USB discovery failures, an incorrect adapter type, a changed device path, another process holding the port, insufficient power, or a remote adapter that changed address.

    Prefer stable device identifiers over transient names such as /dev/ttyUSB0 when the platform exposes them. For network coordinators, use a reserved address when the vendor recommends one and validate the correct TCP mode. Never flash firmware, erase coordinator storage, or create a new Zigbee network merely because the MQTT broker was unavailable.

    Safe repair paths and what each result means

    The hostname is wrong or obsolete

    Correct only the MQTT server value, save, and restart Zigbee2MQTT once. A successful broker connection without adapter errors confirms the name was the blocking layer. If the new hostname resolves but authentication fails, the DNS problem is fixed and the next layer now needs attention.

    The broker is stopped

    Start or repair Mosquitto, then observe its log before restarting other services. If it stops again, investigate that failure rather than creating a restart loop. Storage exhaustion, invalid configuration, port conflicts, and permission problems require different repairs.

    Only internal names fail

    Review recent router, DNS, VLAN, Supervisor, and host changes. Restore the documented resolver path rather than scattering numeric addresses across configurations. After the correction, verify at least two affected names and then restart only the clients that did not reconnect automatically.

    The broker rejects credentials

    Update the dedicated client’s secret or broker account as appropriate. Do not paste passwords directly into logs or support posts. A clean successful CONNACK or a normal Zigbee2MQTT “connected to MQTT server” message is the expected validation result.

    MQTT works but the adapter fails

    Preserve the Zigbee network data, then check the configured adapter path and type, USB extension and power, device exclusivity, and firmware compatibility. This branch is independent of DNS; changing resolver settings further is unlikely to help.

    Verification checklist

    • Mosquitto remains running and its log shows the expected client connection.
    • Zigbee2MQTT completes startup without DNS, authentication, TLS, or adapter errors.
    • The Zigbee2MQTT frontend shows the existing network rather than an empty newly formed network.
    • Home Assistant receives fresh state updates from multiple mains-powered and battery devices.
    • A controlled command reaches one non-safety-critical test device and its resulting state returns.
    • No unrelated app continues reporting the same resolution failure.

    Do not validate using door locks, alarms, garage doors, heaters, medical equipment, or other safety-critical devices first. Choose a lamp or sensor where a delayed or duplicated command cannot create harm.

    Rollback and recovery

    If a single configuration change makes the condition worse, restore the previous value from your notes and restart only the affected service. If several settings were changed together, stop and restore the known-good app configuration or backup rather than guessing. A Home Assistant backup can restore configuration, but confirm its date and encryption key availability before depending on it.

    If Zigbee2MQTT unexpectedly presents onboarding or no longer recognizes the network, stop before creating a new network. Verify that the correct data directory, configuration file, coordinator, and network key are mounted. Preserve the current directory before any reinstall. Re-pairing should be a last resort after confirming that the coordinator backup and network data cannot be recovered.

    When to escalate

    Escalate to the relevant project only after isolating the layer. For a Home Assistant host or Supervisor DNS failure affecting several apps, include installation type, Core/Operating System/Supervisor versions, sanitized resolver symptoms, the time the issue began, and whether a rollback changes it. For Zigbee2MQTT, include its version, installation method, sanitized first error, broker type, and coordinator model. For Mosquitto, include the broker-side rejection or startup error without credentials.

    Open upstream issues are reports, not proof that every similar installation has the same defect. Search for your exact error and version, read maintainer responses, and avoid claiming a universal regression until it is confirmed or documented in release notes.

    Prevention

    • Keep a current encrypted backup and separately store the recovery key.
    • Record the broker hostname, port, TLS mode, and installation topology without recording its password.
    • Use stable hostnames and reserved addresses where the relevant documentation recommends them.
    • Read breaking-change notes before major Home Assistant, Zigbee2MQTT, broker, or operating-system updates.
    • Update one layer at a time when practical and verify MQTT plus several devices afterward.
    • Retain a short sanitized baseline log showing a normal startup sequence.

    Evidence and testing disclosure

    Applies to: Home Assistant 2026.9-era installations using Zigbee2MQTT with Mosquitto or another MQTT broker; the layered method also applies to later versions. Expected result: the configured broker name resolves, Zigbee2MQTT authenticates, the adapter initializes, and existing devices resume state updates without rebuilding the network. Verification method: compare the first startup error with broker logs and validate one layer at a time. Testing status: this guide synthesizes documented behavior and diagnostic logic; Troubliq did not reproduce every installation topology or claim a universal 2026.9 regression. Last reviewed September 29, 2026.

    Related Troubliq diagnostics

    Use the Home Assistant Error Decoder to classify a sanitized log message. If the broker connects but the coordinator does not, follow the serial-port and radio checklist. For current version-specific reports, check Home Assistant Problems Right Now. Remove all private data before sharing logs in the Troubliq community.

  • ESPHome OTA encryption error: device did not offer encryption

    ESPHome OTA encryption error: device did not offer encryption

    Direct answer: An ESPHome invalid-encryption-key error means the device and Home Assistant do not share the same 32-byte base64 native API key. Copy the key from the device’s current ESPHome YAML or Device Builder configuration into the Home Assistant integration’s reconfiguration flow. If the device was flashed with a different key, update Home Assistant to that key; do not disable API encryption as a shortcut.

    This article concerns ESPHome native API encryption, not Wi-Fi passwords, OTA passwords, dashboard login credentials, or MQTT authentication. ESPHome 2026.1 removed deprecated API password authentication and requires API encryption for secure native API use.

    Symptoms and affected scope

    • The device is online and answers ping, but Home Assistant cannot connect.
    • Logs mention an invalid encryption key, Noise handshake failure, or authentication failure.
    • The problem began after adopting a device, restoring YAML, rotating secrets, or reflashing.
    • ESPHome logs work from one installation but Home Assistant shows the device unavailable.

    These symptoms can look similar even though their causes sit in different layers. The safest approach is to preserve the current working state, identify the first failing layer, and change one variable at a time. This prevents a recoverable ESPHome invalid encryption key problem from turning into lost pairings, lost entities, or an inaccessible installation.

    Ranked likely causes

    • 1. Home Assistant stores an old key while the device firmware contains a new one.
    • 2. The YAML references the wrong secret, or two devices unintentionally share or swap secret names.
    • 3. A copied key includes spaces, quotes, truncation, or invalid base64.
    • 4. The device was adopted or recompiled from a different ESPHome installation.
    • 5. YAML indentation or a merge placed the encryption key outside the api.encryption block.
    • 6. The user is changing the OTA password or Wi-Fi key instead of the native API key.

    Before changing anything

    Make a current backup, record versions and installation type, capture the exact first error, and remove secrets from any notes. Do not delete integrations, reset devices, erase databases, or reflash firmware as an opening move. If equipment is hot, swollen, wet, arcing, smoking, or connected to mains wiring that must be opened, stop and use qualified help.

    Least-destructive diagnostic order

    1. 1. Confirm the device is powered, on the expected network, and reachable at its current address. An unreachable device cannot prove an encryption mismatch; solve power, Wi-Fi, DHCP, and VLAN routing first. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    2. 2. Open the device’s current ESPHome configuration. Locate api, then encryption, then key. If the key uses !secret, open the matching secrets file locally. Never paste the key into public logs, forums, screenshots, or diagnostic exports. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    3. 3. Verify the key belongs to this exact device. A valid ESPHome API key is a 32-byte value represented as base64; visual similarity is not enough when several devices use generated keys. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    4. 4. In Home Assistant, open Settings → Devices & services → ESPHome and choose Reconfigure for the affected entry when available. Enter the device’s current key and submit the flow. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    5. 5. If reconfigure is unavailable, record the device name, entities, automations, and current address before removing anything. Prefer reauthentication or reconfiguration over deleting the integration. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    6. 6. Validate the YAML structure. The encryption block must be nested under api. Check recent ESPHome validation output for warnings about misplaced keys or YAML merges. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    7. 7. If the source configuration is lost but OTA access still works from the ESPHome installation that built the device, restore the project or compile a controlled update with a new unique key. Keep the device powered and close to reliable Wi-Fi during the update. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    8. 8. If neither the source key nor OTA access exists, physical serial recovery may be required. Back up any available configuration first and follow the board-specific flashing procedure. Disconnect mains-powered hardware and use a qualified person where enclosure access exposes hazardous voltage. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    9. 9. After rotating a key, update Home Assistant immediately and store the new secret in the appropriate local secrets file. Do not reuse one key across every ESPHome device. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    10. 10. Restart only the ESPHome integration or device entry after the key is corrected. Rebooting all of Home Assistant is rarely needed and can hide the sequence that fixed the problem. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.

    Choose the correct branch

    • Online device with known YAML: update the Home Assistant config entry; no reflash is needed.
    • Known key but wrong YAML nesting: correct YAML, validate, and flash only if the device firmware must change.
    • Lost key with working OTA builder: generate a new unique key and perform a controlled OTA update.
    • Lost key and no OTA access: use documented physical recovery; do not guess keys or disable network security.

    How to interpret the results

    If the evidence points to Home Assistant stores an old key while the device firmware contains a new one. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the YAML references the wrong secret, or two devices unintentionally share or swap secret names. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to a copied key includes spaces, quotes, truncation, or invalid base64. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the device was adopted or recompiled from a different ESPHome installation. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to YAML indentation or a merge placed the encryption key outside the api.encryption block. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the user is changing the OTA password or Wi-Fi key instead of the native API key. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    Verified repair and final checks

    Confirm the device entry becomes available, native API logs show a successful connection, entity states update, one harmless command round-trips, and the connection remains stable after a device restart. Verify the corrected key is stored only in private configuration.

    A repair is not verified merely because an error banner disappears. Confirm the underlying connection or service, observe fresh state data, and test after a controlled restart where appropriate. Keep the previous configuration until the new state has remained stable.

    Rollback and recovery

    Before a firmware update, retain the last working YAML and binary when possible. If a new build fails to connect, restore the prior known-good build by the safest available method. Never interrupt power during flashing.

    Write down each change before making it. Reversibility matters: a documented URL, service setting, serial path, integration state, or firmware version is much easier to restore than a configuration changed in several places at once.

    Prevention

    Generate a unique API encryption key for every device, store it in secrets.yaml, back up ESPHome projects securely, label adopted devices, and review validation warnings before flashing.

    Review this setup after platform, firmware, router, certificate, or host changes. Backups should exist off the device and should be periodically checked for visibility and required encryption material.

    Privacy and safety

    Never publish access tokens, API keys, encryption keys, Wi-Fi credentials, public IP addresses, precise locations, camera URLs, door-lock states, alarm details, or complete unsanitized diagnostics. Do not weaken TLS, firewall rules, authentication, or network isolation simply to make an error disappear.

    Testing disclosure

    This guide is based on the current official documentation and linked upstream reports. Troubliq did not physically test every device, adapter, network, phone, host, or installation variant described. Device-specific behavior can differ; preserve backups and follow the manufacturer’s safety instructions.

    2026.9 OTA error: “device did not offer encryption”

    This OTA message is different from a Home Assistant native-API key mismatch. In ESPHome 2026.9, the esphome OTA platform can encrypt firmware transfers with the native API encryption key. Older firmware cannot offer that encrypted OTA handshake. If the new YAML requires ota: encryption: before the device has received a 2026.9-or-newer transition build, ESPHome correctly refuses to send the firmware image in plaintext.

    Use this least-destructive migration order

    1. Do not generate a replacement API key. If Home Assistant provisioned the existing key, copy that same value into api: encryption: key:. A new key can lock Home Assistant out of the device.
    2. Keep the existing OTA password for the transition build. Build with ESPHome 2026.9.0 or newer, include the existing API encryption key, but do not require OTA encryption yet. The old firmware still expects its password.
    3. Install once and inspect the device log. The expected transition result is Encryption: offered, plaintext accepted. This confirms that the running firmware can negotiate encrypted OTA.
    4. Only then require encryption. Replace the OTA password with the encryption: block, install again, and confirm Encryption: required.

    If the device has no native API, the official procedure uses a temporary API block with a unique generated key and reboot_timeout: 0s for the transition. If neither OTA route is available, serial flashing or the deliberately configured web-server OTA platform is the recovery path. Do not weaken firewall rules, reuse keys between devices, or paste keys into forums.

    How to interpret the result

    A refusal before the transition build normally means the running firmware cannot offer encrypted OTA; it does not prove that Wi-Fi, DNS, or the board is broken. A password error means the old firmware still expects the former OTA password. An API connection failure after installing a newly generated key points to a key mismatch between the device and Home Assistant. Roll back by restoring the previous YAML and original secret values; never publish the compiled firmware because it can contain Wi-Fi credentials and encryption material.

    Evidence and testing disclosure: This branch follows the official ESPHome 2026.9 release notes, OTA documentation, native API documentation, and security guidance. Troubliq has not physically tested every board, bootloader, network, or historical configuration. Last reviewed October 1, 2026.

    Sources

    Last reviewed: September 24, 2026.

    Next: use the Home Assistant Error Decoder to match the exact message, or return to the current Home Assistant problems hub.

    Detailed diagnostic reference

    Distinguish the four secrets

    Wi-Fi credentials join the network, the native API encryption key protects Home Assistant communication, the OTA credential protects firmware updates, and an MQTT password authenticates a broker. Changing one does not repair another; identify which subsystem produced the log message.

    Validate base64 without exposing it

    The API key represents 32 bytes in base64. Use ESPHome validation locally rather than pasting the secret into an online decoder. Quotation marks, whitespace, a truncated copy, or the wrong secret reference can make a visually plausible key invalid.

    Trace secret resolution

    When YAML uses !secret, confirm which secrets.yaml file the active Device Builder instance reads. A restored project or second ESPHome installation may resolve the same secret name to a different value. Record the builder that last compiled the device.

    Check YAML hierarchy

    The encryption block belongs beneath api. Mis-indentation can move it outside the component or cause a merge to replace the intended block. Treat validation warnings as build failures until the resulting configuration is understood.

    Use reconfiguration before deletion

    Home Assistant can often update the key through the ESPHome entry’s reconfigure flow. Deleting the entry may break entity identifiers and automations while leaving the actual key mismatch untouched. Preserve the registry relationship whenever possible.

    Rotate deliberately

    If the key may have leaked, generate a new unique key, update the device through the trusted builder, then update Home Assistant. Perform the steps in a controlled window so the old key is not lost before the new firmware is reachable.

    Recover an adopted device

    Identify the original YAML, substitutions, packages, board type, and pin assignments before compiling. A generic replacement file can connect while silently changing relays, sensors, restore modes, or safety interlocks.

    Protect mains-powered devices

    Do not open an energized relay, plug, light controller, or appliance to reach serial pins. Disconnect power and follow the manufacturer’s isolation procedure. If hazardous voltage may be exposed, use a qualified technician.

    Check after reconnection

    Inspect API logs for successful encrypted handshake, confirm entity availability and timestamps, test one harmless command, and restart the device once. A single online state immediately after flashing is not enough to prove stable recovery.

    Completion criteria

    The correct device connects using its unique key, no Noise or authentication warning returns, secrets remain private, OTA access is documented, and the saved project can reproduce the running firmware without hidden credentials.

  • Zigbee2MQTT ASH_NCP_FATAL_ERROR or HOST_FATAL_ERROR: Ember adapter recovery

    Zigbee2MQTT ASH_NCP_FATAL_ERROR or HOST_FATAL_ERROR: Ember adapter recovery

    Direct answer: Stop Zigbee2MQTT, confirm no other service is using the coordinator, and verify the serial path and Ember adapter configuration before power-cycling or flashing anything. ASH_NCP_FATAL_ERROR and HOST_FATAL_ERROR mean communication between zigbee-herdsman and a Silicon Labs Ember coordinator failed; they do not automatically mean the Zigbee network database is lost.

    This guide targets Silicon Labs EmberZNet coordinators used by Zigbee2MQTT, including USB and network-connected adapters. It does not apply to Texas Instruments zStack or deCONZ adapters, and it is separate from an individual device interview failure.

    Symptoms and affected scope

    • Zigbee2MQTT fails during startup with ASH_NCP_FATAL_ERROR or HOST_FATAL_ERROR.
    • Logs show exceeded ACK timeouts, CRC errors, ASH disconnected, adapter reset, or inability to open the serial port.
    • The error began after a reboot, USB renumbering, firmware update, migration, or enabling another Zigbee integration.
    • A network coordinator works intermittently and disconnects under load.

    These symptoms can look similar even though their causes sit in different layers. The safest approach is to preserve the current working state, identify the first failing layer, and change one variable at a time. This prevents a recoverable Zigbee2MQTT ASH_NCP_FATAL_ERROR problem from turning into lost pairings, lost entities, or an inaccessible installation.

    Ranked likely causes

    • 1. The configured serial path changed or points to a transient /dev/ttyUSB number.
    • 2. ZHA, another Zigbee2MQTT instance, firmware tools, or host software already owns the adapter.
    • 3. The adapter type or flow-control setting is wrong for the coordinator.
    • 4. USB power, cabling, interference, pass-through, or virtualization is unstable.
    • 5. Coordinator firmware is incompatible, corrupted, or not recommended for the adapter.
    • 6. A TCP coordinator has packet loss, an unstable address, wrong port, or competing client.

    Before changing anything

    Make a current backup, record versions and installation type, capture the exact first error, and remove secrets from any notes. Do not delete integrations, reset devices, erase databases, or reflash firmware as an opening move. If equipment is hot, swollen, wet, arcing, smoking, or connected to mains wiring that must be opened, stop and use qualified help.

    Least-destructive diagnostic order

    1. 1. Preserve the Zigbee2MQTT data directory, configuration.yaml, coordinator backup, and network key before changing firmware or creating a new network. Do not press a coordinator reset button. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    2. 2. Stop Zigbee2MQTT cleanly. Also stop ZHA or any second Zigbee service that may open the same coordinator. One coordinator must have one active owner. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    3. 3. Check the configured serial port. Prefer a stable /dev/serial/by-id path for local USB hardware rather than /dev/ttyUSB0 or /dev/ttyACM0, which can change after reboot. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    4. 4. Confirm the configured adapter family matches the hardware. For current Silicon Labs coordinators, follow Zigbee2MQTT’s EmberZNet adapter guidance. Do not copy an adapter value from a guide for different silicon. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    5. 5. Review flow-control settings for the exact model. For hardware that expects software flow control, enabling RTS/CTS can produce startup failures. Use the manufacturer and Zigbee2MQTT documentation rather than guessing. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    6. 6. Inspect the host log for USB disconnects, resets, or pass-through errors. On a virtual machine, confirm the coordinator is attached to the guest after every host reboot. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    7. 7. Move a USB coordinator away from USB 3 ports, SSDs, and Wi-Fi radios using a quality shielded extension cable. Replace a suspect cable or underpowered hub before reflashing firmware. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    8. 8. For a network coordinator, reserve its address, test packet loss, verify the documented TCP port, and ensure only one client connects. Do not expose an unencrypted coordinator socket to untrusted networks. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    9. 9. Perform one controlled power cycle: stop the service, remove coordinator power for a short interval, reconnect it, confirm the stable path, then start Zigbee2MQTT. Repeated rapid cycling can obscure a power or ownership fault. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    10. 10. Compare coordinator firmware with the adapter vendor’s recommended Ember firmware and Zigbee2MQTT’s compatibility guidance. Flash only after backups exist and simpler causes are excluded. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    11. 11. Start Zigbee2MQTT and read the first complete startup sequence. Record the first error, not only the final fatal line; the first serial, permission, firmware, or socket error usually identifies the layer. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
    12. 12. If the error persists on known-good power, cabling, configuration, and firmware, test the coordinator on a supported host without forming a new network. Hardware failure becomes more likely only after those controls pass. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.

    Choose the correct branch

    • Local USB: prioritize stable device path, exclusive ownership, permissions, extension cable, power, and VM pass-through.
    • Ethernet/PoE coordinator: prioritize address reservation, TCP port, latency, packet loss, firmware, and single-client ownership.
    • Error after migration: restore the original Zigbee2MQTT data directory and coordinator settings; do not create a fresh network unless recovery has failed and you accept re-pairing.
    • CRC or ACK errors under load: investigate cable quality, USB interference, power, flow control, and firmware before blaming end devices.

    How to interpret the results

    If the evidence points to the configured serial path changed or points to a transient /dev/ttyUSB number. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to ZHA, another Zigbee2MQTT instance, firmware tools, or host software already owns the adapter. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to the adapter type or flow-control setting is wrong for the coordinator. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to USB power, cabling, interference, pass-through, or virtualization is unstable. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to coordinator firmware is incompatible, corrupted, or not recommended for the adapter. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    If the evidence points to a TCP coordinator has packet loss, an unstable address, wrong port, or competing client. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.

    Verified repair and final checks

    A successful recovery produces a clean adapter startup, loads the existing network, preserves the PAN and devices, allows one harmless device read or command, and remains connected through a Zigbee2MQTT restart. Verify several routers and sleepy devices over time.

    A repair is not verified merely because an error banner disappears. Confirm the underlying connection or service, observe fresh state data, and test after a controlled restart where appropriate. Keep the previous configuration until the new state has remained stable.

    Rollback and recovery

    If a configuration change fails, restore the recorded serial block. If firmware flashing fails, use the adapter vendor’s recovery method and the backed-up coordinator/network data. Never erase the data directory as an initial fix.

    Write down each change before making it. Reversibility matters: a documented URL, service setting, serial path, integration state, or firmware version is much easier to restore than a configuration changed in several places at once.

    Prevention

    Use stable serial paths, one coordinator owner, off-device backups, documented firmware versions, reliable power, USB extension cables, reserved network addresses, and change logs for coordinator updates.

    Review this setup after platform, firmware, router, certificate, or host changes. Backups should exist off the device and should be periodically checked for visibility and required encryption material.

    Privacy and safety

    Never publish access tokens, API keys, encryption keys, Wi-Fi credentials, public IP addresses, precise locations, camera URLs, door-lock states, alarm details, or complete unsanitized diagnostics. Do not weaken TLS, firewall rules, authentication, or network isolation simply to make an error disappear.

    Testing disclosure

    This guide is based on the current official documentation and linked upstream reports. Troubliq did not physically test every device, adapter, network, phone, host, or installation variant described. Device-specific behavior can differ; preserve backups and follow the manufacturer’s safety instructions.

    Sources

    Last reviewed: September 24, 2026.

    Next: use the Home Assistant Error Decoder to match the exact message, or return to the current Home Assistant problems hub.

    Detailed diagnostic reference

    Preserve coordinator identity

    The Zigbee network depends on its PAN identifiers, network key, coordinator state, and Zigbee2MQTT database. Back up the entire data directory and coordinator backup before firmware work. A newly starting coordinator is not useful if it forms a different network.

    Find the first error

    HOST_FATAL_ERROR is often the terminal message after a more specific serial, CRC, ACK, permission, or socket failure. Read the startup log from the first adapter line and troubleshoot the earliest failure, not the last summary.

    Prove exclusive ownership

    Stop ZHA, other Zigbee2MQTT instances, firmware flashers, serial monitors, and host discovery services that may open the adapter. Restart only one owner. Simultaneous access can mimic firmware or hardware failure.

    Use stable device paths

    Map a USB coordinator through /dev/serial/by-id where supported. In virtual machines and containers, confirm that the stable host device is passed through, not only a transient tty number. Recheck the mapping after host reboots.

    Measure the physical layer

    Inspect host logs for disconnects and resets, test a short known-good extension cable, remove an unpowered hub, and separate the coordinator from USB 3 storage and radios. Change one physical variable at a time.

    Respect model-specific flow control

    RTS/CTS requirements differ by coordinator and firmware. A copied serial configuration can open the port yet fail the ASH exchange. Confirm adapter type, baud rate, and flow control against the exact vendor model.

    Diagnose network coordinators

    Reserve the coordinator address, verify the TCP scheme and port, measure packet loss, and prevent multiple clients. For PoE units, inspect switch power events. Keep the coordinator interface on a trusted network.

    Treat firmware as a controlled change

    Record the current firmware build and hardware revision. Use only vendor- or project-recommended firmware for that adapter. Do not flash merely because a fatal error appears once; eliminate ownership, path, power, and transport causes first.

    Verify the old network

    After recovery, confirm the coordinator reports the expected network, devices remain listed, routers respond, and battery devices check in naturally. Do not start mass re-pairing until network identity and backup restoration are confirmed.

    Completion criteria

    Zigbee2MQTT completes startup without ASH errors, retains the existing devices and network identifiers, survives a service restart, and stays stable during normal traffic. Preserve the final configuration and firmware record.

  • Home Assistant 2026.9 “Could Not Load Home Assistant”: Safe Recovery Checklist

    Home Assistant 2026.9 “Could Not Load Home Assistant”: Safe Recovery Checklist

    Quick answer: If Home Assistant shows “Could not load Home Assistant” after a 2026.9 update, do not immediately reinstall or delete the database. First determine whether the failure is limited to the browser, the frontend, the network path, or Home Assistant Core itself. Test the local IP address, check Core and Supervisor logs, preserve a backup, and only then consider a rollback or restore.

    This guide is designed as a safe diagnostic sequence. The same message can be caused by several different failures, so there is no single universal fix. A recent public issue report describes the message after upgrading to Home Assistant 2026.9.0, but that report alone does not prove that every occurrence has the same cause.

    Two-minute triage

    1. Open Home Assistant through its local IP address, for example http://192.168.1.50:8123, instead of a bookmark, reverse proxy, or cloud URL.
    2. Try a private or incognito browser window. If that works, clear only the stored site data for the Home Assistant address rather than clearing the entire browser.
    3. Try a second device on the same local network.
    4. If the Companion App fails but a browser works, reset the app’s frontend cache and confirm its internal URL.
    5. If no local device can connect, inspect Core, Supervisor, host, and network status before changing configuration.

    Step 1: Separate a frontend problem from a Core problem

    A browser error does not necessarily mean Home Assistant Core is down. The frontend can fail to load because of stale cached JavaScript, a custom dashboard resource, a reverse-proxy error, an invalid certificate path, or an address that no longer points to the correct host.

    Use three tests:

    • Local IP works, external address fails: investigate the reverse proxy, DNS, certificate, Cloudflare tunnel, or router forwarding.
    • One browser fails, another works: investigate browser storage, cached frontend files, extensions, or an old pinned shortcut.
    • Every local client fails: move to Core, Supervisor, and host diagnostics.

    Step 2: Confirm the machine is reachable

    Check the router’s client list and confirm that the Home Assistant machine still has the expected IP address. A DHCP change can make an old bookmark fail even when Home Assistant is healthy. Reserve the address in the router after access is restored.

    If you use Home Assistant OS and can reach the local console, check that the host has an address and that the Core container is running. Useful read-only commands include:

    ha network info
    ha core info
    ha supervisor info
    ha core logs

    Do not publish logs without removing tokens, public IP addresses, email addresses, device identifiers, and location information.

    Step 3: Read the first meaningful error, not the last repeated error

    Repeated reconnect messages are often symptoms. Look earlier in the log for the first exception after startup. Record:

    • Home Assistant Core version
    • Home Assistant OS or Container installation type
    • Supervisor version
    • Whether the failure began immediately after an update
    • The first integration or component named in the traceback
    • Database, disk-space, memory, or port-binding errors

    Common branches include a custom integration failing during startup, a database migration taking longer than expected, insufficient storage, a reverse-proxy configuration error, and a frontend resource that is incompatible with the new release.

    Step 4: Check storage and database health

    A nearly full disk can prevent updates, database writes, log rotation, and container startup. If the host reports critically low free space, remove obsolete backups or unused add-on data through supported interfaces. Do not delete database files simply to regain access.

    If the log mentions a malformed SQLite database, follow a database-specific recovery process and preserve copies before making changes. A slow database migration can also make the frontend appear unavailable; repeatedly cutting power during that work increases risk.

    Step 5: Isolate custom integrations and frontend resources

    If the problem began immediately after an update and the log names a custom component, check that component’s release notes and issue tracker. Disable only the named component when you have a backup and a reversible method. Do not remove the entire custom_components directory as a first response.

    For dashboard failures, test the default Overview dashboard. A broken custom card can stop a particular dashboard from rendering while the rest of Home Assistant remains functional.

    Step 6: Check reverse-proxy and URL settings

    If local access works, the Home Assistant update may be unrelated to the external failure. Verify that the proxy still sends WebSocket traffic, preserves the correct host, and points to the current local address and port. Compare the browser’s error with the Home Assistant HTTP logs.

    Do not add broad trusted_proxies ranges just to make an error disappear. Trust only the actual proxy address or narrowly required subnet. An overly broad trusted range weakens the protection against spoofed forwarding headers.

    Step 7: Restart once, then stop repeating restarts

    A single controlled Core restart is reasonable after logs have been collected. Repeated restarts can hide the first error, interrupt migrations, and make troubleshooting harder. If Core repeatedly becomes unavailable, preserve the logs from one complete startup cycle.

    When a rollback is appropriate

    Consider rollback only when all of the following are true:

    • The failure started directly after the update.
    • Local access and logs indicate a Core regression rather than a network or browser problem.
    • You have a recent backup from before the update.
    • You understand that restoring a backup also restores its older configuration and database state.

    Prefer Home Assistant’s supported backup restore workflow. If the current patch release contains a confirmed fix, updating forward may be safer than returning to an older release. Review the release notes and the relevant issue before deciding.

    Do not do these things first

    • Do not reinstall Home Assistant before preserving backups and logs.
    • Do not delete home-assistant_v2.db unless the logs identify database corruption and you have a recovery copy.
    • Do not expose port 8123 directly to the internet to test connectivity.
    • Do not paste access tokens or complete diagnostics into public forums.
    • Do not assume every “Could not load” screen is the same 2026.9 bug.

    Decision tree

    1. Does the local IP work? If yes, troubleshoot the external URL, proxy, DNS, or certificate.
    2. Does another browser work? If yes, clear site-specific browser data and inspect extensions.
    3. Is Core running? If no, inspect Core and Supervisor logs.
    4. Is the disk nearly full? If yes, free space safely before another update attempt.
    5. Does the first traceback name a custom component? If yes, check that component’s compatibility and disable only that component.
    6. Did the failure begin exactly with 2026.9 and survive local/browser checks? Preserve a backup and compare the active issue reports before rolling back or updating forward.

    Information to collect before asking for help

    • Exact Core, Supervisor, and OS versions
    • Installation type
    • Local versus external access results
    • First relevant traceback with private information removed
    • Available disk space
    • Whether custom integrations are installed
    • Whether the problem persists on a default dashboard

    Sources and status

    This guide uses a current public issue report as an incident signal, not as proof of a universal defect: Home Assistant Core issue #181212. For backup and recovery procedures, use the current Home Assistant backup documentation. Check the issue and release notes for changes before applying version-specific advice.

    Last reviewed: September 23, 2026. Troubleshooting guidance may change as Home Assistant publishes patch releases.

    Additional evidence-based diagnostics

    Check the HTTP path without changing it

    Use a browser developer network panel only to observe the first failed request. A 401 or 403 points toward authentication or proxy policy; a 404 toward an incorrect path or stale frontend asset; a 502 or 504 toward the proxy-to-Core path; and a browser certificate error toward TLS. Record the status and URL, but do not publish tokens or query strings.

    Distinguish startup delay from a crash loop

    After an update, database migrations and integration setup can extend startup. Watch Core status and logs instead of repeatedly restarting. A single long startup that completes differs from a process that exits and restarts. For a crash loop, capture the first exception in each cycle and the exit reason.

    Use Safe mode only as evidence

    If Home Assistant offers Safe mode and it loads, the frontend and core platform are capable of starting with custom integrations and custom frontend resources restricted. That result makes custom code a stronger suspect; it does not identify which component failed. Re-enable components selectively after reviewing logs and backups.

    Check custom dashboard resources

    A custom card or JavaScript module can break one dashboard after a frontend update. Open the default Overview dashboard directly and inspect browser console errors. Update or disable only the named resource. Avoid deleting dashboard storage or all HACS content as a broad test.

    Inspect authentication state

    If the login page loads but the interface fails after authentication, compare a private window, another user, and the same local URL. Repeated failed logins, an incorrect system clock, or proxy header problems can affect sessions. Do not disable authentication or widen trusted networks.

    Evaluate storage pressure

    Check free space, database size, backup accumulation, and host I/O errors. Free space through supported backup and add-on interfaces. Preserve recent backups externally before removing old local copies. Filesystem errors or recurring read-only remounts require storage replacement or host repair, not repeated Core restarts.

    Expected-result matrix

    Local IP success with external failure confirms Core is reachable and shifts attention to DNS, proxy, TLS, or tunnel. Safe mode success shifts attention to custom code. Core running with frontend asset errors points to browser or resource delivery. Core repeatedly stopping points to the first backend exception or host resource failure.

    Recovery verification

    After a fix, load the login page and dashboard from a clean browser session, confirm live entity updates, open Settings and Logs, restart Core once, and retest the intended external path. Verify that the canonical configuration remains secure and that no emergency bypass is left enabled.

    Escalation evidence

    Provide Core, Supervisor and OS versions, installation type, the exact time and first exception, local-versus-external results, disk availability, and whether Safe mode loads. Redact tokens, public addresses, coordinates, camera endpoints, device identifiers and personal account data.

    Testing disclosure

    Troubliq has not reproduced every 2026.9 failure environment. The workflow combines official recovery practices with the cited public incident report and treats that report as evidence of one occurrence, not proof of a universal release defect.

    Related Troubliq resources

    Use the Home Assistant Error Decoder to match the exact message, then review the current Home Assistant problems hub for related verified guides.

    Advanced interpretation and recovery

    Browser console interpretation

    A failed JavaScript chunk with an old hashed filename often indicates cached frontend assets. A blocked WebSocket after successful HTML delivery points toward proxy upgrade handling, authentication or network policy. Repeated 401 responses point to session state; 404 responses for custom-card resources point to dashboard dependencies. Capture only the error type and resource name, not authentication headers.

    Installation-type branches

    On Home Assistant OS, use the local console, Supervisor and supported backup tools. In Container, inspect the container state, logs, volume mounts and image version without using Supervisor commands. In Core environments, inspect the Python service and virtual environment. Applying commands for the wrong installation type can create a second failure.

    Update-forward decision

    Before restoring, read the current patch release notes and the cited issue status. A fixed patch preserves newer database state and is often safer than rollback. Update forward only after a backup and only when the fix matches the observed component or symptom; a generic newer version is not proof of relevance.

    Rollback decision

    Rollback is justified when the previous version was stable, the failure begins immediately after updating, logs support a regression, and a compatible pre-update backup exists. Record configuration changes made since that backup. Restoring also rolls back database history and configuration, so preserve the current backup separately.

    External-path verification

    When local access works, test DNS resolution, certificate hostname and expiry, proxy health, upstream address, WebSocket upgrade and firewall rules. Change one layer at a time. Do not expose port 8123 publicly, disable TLS verification, or trust a broad network range to make a diagnostic test pass.

  • Zigbee or Z-Wave Broken After Home Assistant 2026.9.2: Safe Recovery Guide

    Zigbee or Z-Wave Broken After Home Assistant 2026.9.2: Safe Recovery Guide

    Quick answer: When Zigbee or Z-Wave devices become unavailable immediately after a Home Assistant 2026.9.2 update, preserve a backup and collect logs before repairing, re-pairing, or resetting anything. First determine whether the radio, integration, add-on, serial path, or individual device is failing. Re-pairing every device is rarely the correct first step.

    Current public reports describe Zigbee and, for some users, Z-Wave failures around the 2026.9.2 update. That does not mean every unavailable device is caused by the same regression. This checklist separates update-related failures from power, USB, network, coordinator, and mesh problems.

    Five-minute safety check

    1. Do not factory-reset the coordinator.
    2. Do not delete the ZHA, Zigbee2MQTT, or Z-Wave JS integration.
    3. Confirm you have a recent Home Assistant backup.
    4. Record the coordinator model, firmware, serial path, and integration version.
    5. Download the relevant logs before restarting repeatedly.

    Determine the scope

    • Every device failed: suspect the coordinator, serial path, add-on, driver, or integration startup.
    • One area failed: suspect a powered router device or mesh route.
    • Battery devices only: allow normal wake-up intervals and check battery state.
    • Only one device failed: troubleshoot that device before changing the network.
    • Zigbee and Z-Wave both failed: look for a broader USB, host, resource, or Core startup problem.

    Check what Home Assistant can still see

    Open Settings → Devices & services. Look at the integration status and the coordinator device. If the integration failed to initialize, open its error details and then inspect the full log. The first error after startup is usually more useful than repeated “entity unavailable” messages.

    For ZHA

    Confirm that the coordinator still exists at the configured serial path. USB device names such as /dev/ttyUSB0 can change after a reboot. A stable /dev/serial/by-id/... path is safer when available. Do not change the path blindly: compare the current hardware list with the integration configuration.

    Look for permission errors, port-in-use errors, radio initialization failures, and firmware mismatch messages. If another add-on opened the same port, stop only the conflicting service after verifying it.

    For Zigbee2MQTT

    Check the Zigbee2MQTT add-on status separately from Home Assistant Core. Confirm that MQTT is connected and that Zigbee2MQTT can open the coordinator. A healthy MQTT connection does not prove that the radio opened successfully.

    Inspect the add-on log for adapter detection, serial-port, firmware, and database errors. Preserve the Zigbee2MQTT data directory and coordinator backup before changing adapter configuration.

    For Z-Wave JS

    Check whether the Z-Wave JS server or add-on is running and whether Home Assistant remains connected to it. Confirm the controller path and inspect both the add-on log and the Home Assistant integration log. Avoid excluding and re-including devices until the controller connection is healthy.

    If the controller is visible but nodes remain asleep or unavailable, allow battery devices time to wake. Powered nodes failing together may indicate a controller, security-key, or network initialization problem.

    USB and hardware checks

    • Confirm the coordinator has power and appears in the host hardware list.
    • If it is connected through a USB extension cable, check both ends without moving the radio close to USB 3 interference.
    • Do not attach the same radio to two integrations.
    • On virtual machines, confirm USB passthrough still targets the correct physical device.
    • Record the original configuration before changing a serial path.

    Safe restart order

    1. Save the logs.
    2. Restart only the affected add-on or integration once.
    3. If the radio remains unavailable, perform one controlled host restart.
    4. Recheck the hardware path and the first startup error.
    5. Stop restarting if the same error repeats; use that error to choose the next branch.

    When to update forward or roll back

    Check whether a newer 2026.9 patch addresses the exact integration and hardware combination. Updating forward is preferable when a confirmed fix exists. Consider rollback only when the failure started with the update, the coordinator worked immediately beforehand, logs support a regression, and a pre-update backup is available.

    Restoring a backup changes configuration and database state. Read the backup date carefully and preserve a copy of the current state before restoring.

    Do not do these things first

    • Do not reset the coordinator.
    • Do not remove the integration.
    • Do not re-pair the entire mesh.
    • Do not generate new Z-Wave security keys.
    • Do not overwrite the Zigbee database.
    • Do not assume “unavailable” means every device lost its pairing.

    Decision tree

    1. Is the integration loaded? If no, inspect its first startup error.
    2. Is the radio visible to the host? If no, inspect USB, passthrough, power, and device paths.
    3. Can the add-on open the radio? If no, check path, permissions, conflicting processes, and firmware.
    4. Are all devices affected? If no, troubleshoot the failing branch or device rather than the coordinator.
    5. Did failure begin exactly after 2026.9.2? Compare the current issue report and later patch notes before rollback.

    What to collect for support

    • Core, OS, Supervisor, and add-on versions
    • Coordinator make, model, and firmware
    • Integration: ZHA, Zigbee2MQTT, or Z-Wave JS
    • Installation type and hardware platform
    • Stable serial path with unique identifiers partially redacted
    • First relevant error, not hundreds of repeated unavailable messages

    Current incident reference

    See Home Assistant Core issue #182076 for the current report concerning Zigbee and possible Z-Wave failures after 2026.9.2. Treat it as an incident report, not proof that every mesh failure has the same cause. Use the latest Home Assistant release notes and integration documentation before applying version-specific changes.

    Last reviewed: September 23, 2026.

    Additional evidence-based diagnostics

    Identify which protocol actually failed

    Zigbee and Z-Wave are separate networks with different coordinators, add-ons and security data. If both appear broken at the same time, first test whether Home Assistant Core, USB passthrough, MQTT, the host, or power failed more broadly. Do not apply a Zigbee repair to a Z-Wave controller.

    Read the first adapter message

    For ZHA, start with the radio initialization line. For Zigbee2MQTT, read the adapter startup before device availability messages. For Z-Wave JS, inspect the server and driver connection before node errors. A missing port, port-in-use result, permission error and firmware error require different fixes.

    Protect Zigbee network data

    Preserve the Zigbee2MQTT data directory, coordinator backup and configuration, or the supported ZHA backup where available. Do not form a new network, change the PAN ID, overwrite the database, or reset the coordinator during initial diagnosis.

    Protect Z-Wave security material

    Back up the Z-Wave controller using supported tools and preserve the S0 and S2 keys. Generating replacement keys can make securely included nodes unusable. Exclusion and re-inclusion are last-resort device operations, not fixes for a disconnected server.

    Check virtualization and containers

    After a host or Core update, verify that the physical radio is still attached to the intended virtual machine or container and that the device mapping uses a stable identifier. A coordinator can appear healthy on the host while being absent from the guest.

    Interpret partial recovery

    If mains-powered routers return but sleepy devices remain unavailable, allow normal wake intervals and manually wake devices according to their instructions. If only one area remains unavailable, investigate routing and powered repeaters. If every device remains unavailable, continue at the coordinator or service layer.

    Evaluate interference without rebuilding

    USB 3 devices, unshielded cables and 2.4 GHz congestion can affect Zigbee. Move a USB coordinator using a suitable extension and compare stability. Do not change Zigbee channels casually: channel changes can require devices to rediscover the network and may disrupt sleepy nodes.

    Verify add-on dependencies

    Zigbee2MQTT may require both a working coordinator and MQTT broker. A connected broker does not prove the serial adapter opened; an open adapter does not prove MQTT discovery reaches Home Assistant. Test each boundary and record the first failure.

    Post-repair validation

    Confirm the integration loads, the original coordinator and network identity remain present, several powered devices respond, battery devices report after waking, and the service survives one controlled restart. Check automations that depend on both protocols without triggering unsafe equipment.

    Escalation and privacy

    Share versions, coordinator models, firmware, installation type and the first sanitized error. Redact network keys, Z-Wave security keys, full serial identifiers, IP addresses and device location names. State whether the incident affects Zigbee, Z-Wave or both.

    Related Troubliq resources

    Use the Home Assistant Error Decoder to match the exact message, then review the current Home Assistant problems hub for related verified guides.

    Advanced interpretation and recovery

    ZHA-specific interpretation

    A ZHA integration entry that cannot initialize and names the radio library points to coordinator communication rather than individual devices. A loaded coordinator with one unavailable device points downstream. Compare radio firmware guidance for the exact chipset; do not flash firmware intended for a different coordinator.

    Zigbee2MQTT-specific interpretation

    Separate broker connection, adapter startup, database load and device interview phases. If MQTT fails, Home Assistant discovery can disappear while the Zigbee mesh still operates. If the adapter fails, Zigbee2MQTT cannot manage the network even with a healthy broker. If only an interview fails, use the existing device-interview guide rather than rebuilding the network.

    Z-Wave JS-specific interpretation

    Confirm the Z-Wave JS server is running, Home Assistant connects to its WebSocket, and the controller initializes with the preserved security keys. A node marked asleep is not dead. Use failed-node procedures only when the driver identifies the node as failed and the physical device is truly unreachable.

    Serial permission branch

    A permission-denied error is not corrected by changing the serial path or reflashing. Confirm the device ownership and supported container/add-on mapping. Avoid broad chmod changes that disappear after reboot or expose the serial device to unrelated processes.

    Port-in-use branch

    A busy port means another process owns the coordinator. Stop competing integrations or serial tools after identifying them. Do not kill arbitrary host processes or attach the coordinator to two services; exclusive ownership is a core requirement.

    Firmware branch

    Firmware becomes a leading suspect only after the correct radio, stable path, permissions, ownership, power and transport have been confirmed. Record the current build and coordinator backup before flashing. Follow the adapter maker’s recovery instructions and never interrupt power during an update.

    Mesh-routing branch

    When only a room or group of devices fails, inspect powered routers and recent removals in that area. Battery devices do not usually route. Restore power to known routers and allow the mesh to settle before re-pairing endpoints.

    Security-key branch

    Z-Wave S0/S2 keys and Zigbee network keys are not ordinary passwords to regenerate during troubleshooting. If keys differ after a restore or migration, securely included devices may fail even though the controller is visible. Compare backups and migration records before any inclusion changes.

    Result table

    Radio absent from host means hardware, passthrough or power. Radio present but cannot open means path, permission or ownership. Service opens radio but Home Assistant lacks entities means broker, integration or discovery. One device unavailable means device power, wake state, routing or compatibility. Both protocols failing points to a shared host or Core layer.

    Rollback and recovery

    If a serial-path edit fails, restore the recorded path. If an add-on update fails, restore its supported backup. If a host update broke passthrough, restore the known mapping. Keep the current radio and network databases intact until successful recovery is verified.

    Prevention

    Use stable by-id paths, label radios, keep off-host backups of coordinator and security data, document firmware, separate radios from USB 3 interference, reserve network-coordinator addresses, and review passthrough after hypervisor updates.

    Battery-device wake-up verification

    Battery Zigbee and Z-Wave devices may remain unavailable until their normal wake interval or a documented manual wake action. Verify powered routers and controller health first, then wake one representative battery device according to its manual. Do not factory-reset it simply because it did not report immediately after the controller recovered.

    Automation and entity verification

    After the mesh returns, compare entity identifiers and device associations before editing automations. Run only harmless tests on lights, sensors or test plugs. Avoid remotely testing locks, alarms, heaters, pumps or gates without a person present. Confirm that availability, commands and state feedback all work; a command accepted without updated state is only partial recovery.

    When replacement hardware is justified

    Replace a coordinator only after stable power, cable, port mapping, exclusive ownership, firmware and a second supported host test still show hardware communication failure. Preserve the old coordinator and backups until migration is complete. Choosing replacement hardware prematurely can turn a host configuration fault into a network migration.