Troubliq

Smart-home fixes, step by step.

Blog

  • Home Assistant Says the Configuration Is Not Valid: Fix the First Error Safely

    Home Assistant Says the Configuration Is Not Valid: Fix the First Error Safely

    Short answer: if Home Assistant says it cannot restart because the configuration is not valid, do not keep restarting and do not delete large sections of YAML. First run the built-in configuration check, read the first concrete error, fix only that section, and validate again before reloading or restarting.

    What the message means

    Home Assistant checks configuration before a reload or restart. The failure may be a YAML syntax problem, an invalid option, a missing integration platform, an incorrect indentation level, or a file saved in the wrong encoding. The first error is usually the most useful one.

    Safest diagnostic sequence

    1. Stop changing multiple files and note the last edit.
    2. Open Settings → Developer tools → YAML and run the configuration check. On Home Assistant OS or a supported CLI setup, use ha core check.
    3. Read the first specific file path, line number, integration name, or error message.
    4. Undo only the last risky change or restore the smallest known-good block.
    5. Run the check again before reloading or restarting.

    Common causes

    Indentation or punctuation

    Check tabs, mismatched quotes, missing colons, duplicate keys, and list items that are not aligned. Compare the affected block with the current integration documentation.

    Removed or renamed platforms

    An old platform: entry can fail after an integration changes or a custom component is removed. Confirm whether the configuration should be migrated or removed.

    Invalid options

    Treat “extra keys not allowed” as a documentation mismatch, not a reason to guess. Check the current integration page and release notes.

    Encoding or included files

    Home Assistant documentation notes that configuration files must be UTF-8 encoded. If you use !include or packages, follow the path and inspect the child file too.

    How to interpret the result

    Validation passes: the configuration is acceptable to the check, but devices can still be offline. The same error remains: you may have edited the wrong file or missed an included file. A new error appears: fix one concrete error at a time and validate after each change.

    Recovery if the UI will not restart

    Use the last known-good backup or snapshot before making broad edits. Restore the smallest affected file first. Avoid deleting the whole configuration directory.

    Prevention

    • Run a configuration check before every restart after YAML edits.
    • Make one focused change at a time.
    • Keep dated backups before upgrades.
    • Prefer UI-configured integrations when supported.

    FAQ

    Can I restart anyway?

    Not safely. The warning exists to prevent a restart with a known-invalid configuration.

    Will a configuration check find offline devices?

    No. It checks configuration syntax and supported structure.

    Should I delete the line named in the error?

    Only if current documentation confirms it is obsolete or invalid.

    Sources: Home Assistant troubleshooting; Home Assistant configuration and validation; Home Assistant OS configuration check.

    Testing disclosure: Documentation-based guide; no hands-on testing on a specific installation is claimed.

  • Home Assistant “Stopped Because Only a Single Execution Is Allowed”: Choose the Right Automation Mode

    Home Assistant “Stopped Because Only a Single Execution Is Allowed”: Choose the Right Automation Mode

    Direct answer: “Stopped because only a single execution is allowed” means the automation was triggered again while an earlier run was still active and its mode was single. The second run was rejected. Do not switch blindly to parallel: first find what kept the original run open, then choose the mode that matches the job.

    Quick diagnostic

    1. Open the failed run in Settings → Automations & scenes → Traces.
    2. Confirm the rejected run says runtime: 0.00 seconds.
    3. Open the previous trace and find the active delay, wait, slow action, or loop.
    4. Decide whether a new trigger should be ignored, replace the old run, wait its turn, or run independently.
    5. Change the mode only after that decision, then reproduce the overlap safely.

    What the message proves—and what it does not

    The message proves that a second trigger arrived before the first run finished. It does not prove that Home Assistant is broken, that the trigger is duplicated, or that single is the wrong mode. Single mode is often the safest choice when overlapping commands could fight each other.

    Home Assistant provides four modes: single refuses a new run; restart stops the active run and starts over; queued runs triggers in order; and parallel allows simultaneous runs. The correct choice depends on what the automation controls.

    Ranked causes

    1. A delay or wait keeps the first run active

    This is the most common cause. A ten-minute delay, wait_for_trigger, or template wait means the automation remains active during that time. Another trigger is rejected in single mode even if no visible action is happening.

    2. The automation triggers itself

    An action may change the same entity used by its trigger. The new state change starts another run immediately, but single mode blocks it. Check the trace timeline and compare the trigger entity with every action target.

    3. Multiple triggers occur close together

    Two motion events, several device events, or two trigger definitions can arrive within seconds. This may be expected sensor behavior rather than a duplicate configuration. Use trace timestamps instead of guessing.

    4. An action is slow or never completes

    A service call, script, notification, or integration can take longer than expected. Inspect where the earlier trace is paused. Check the related integration before changing concurrency.

    5. The first run is looping

    A repeat block can keep running because its exit condition never becomes true. Inspect the live variables and set a bounded, safe stopping rule where appropriate.

    Choose the mode by intended behavior

    Desired behavior Mode Main risk
    Ignore new triggers until the job finishes single A meaningful trigger may be skipped
    Newest trigger should replace the old run restart Cleanup steps in the old run may not execute
    Every trigger should run in order queued A backlog may build
    Runs are independent and may overlap parallel Conflicting device commands or duplicate messages

    For a light that should remain on for ten minutes after the latest motion, restart may fit because each new event resets the timer. For sequential announcements or jobs that must preserve order, queued may fit. For unrelated per-device notifications, parallel can be appropriate. Locks, doors, alarms, valves, heaters, and other consequential equipment deserve extra caution.

    Safest fix sequence

    1. Preserve evidence. Screenshot or export the two relevant traces and record their timestamps.
    2. Find the open step. In the earlier trace, identify the exact delay, wait, loop, or service call still active.
    3. Check for self-triggering. Compare trigger entities and events with action targets.
    4. Define the intended overlap rule. Write one sentence: ignore, replace, queue, or overlap.
    5. Change one setting. In the automation editor, open the menu and choose Change mode. Do not combine this with unrelated edits.
    6. Test harmlessly. Trigger twice under controlled conditions and inspect both traces.

    Example: a long delay in single mode

    alias: Hall light timer
    triggers:
      - trigger: state
        entity_id: binary_sensor.hall_motion
        to: "on"
    actions:
      - action: light.turn_on
        target:
          entity_id: light.hall
      - delay: "00:10:00"
      - action: light.turn_off
        target:
          entity_id: light.hall
    mode: single

    Motion during the ten-minute delay is rejected. If the requirement is “turn off ten minutes after the latest motion,” restart may express that intent better. Confirm that stopping the earlier run cannot leave unsafe or incomplete work before changing it.

    How to verify the repair

    Reproduce the original timing. Confirm a new trace appears, the selected mode behaves as intended, and the controlled device reaches the correct final state. Test once after a Home Assistant restart during a safe maintenance window. Review the log for new maximum-run warnings or a queue that grows unexpectedly.

    Prevention

    • Keep delays and waits visible and documented.
    • Use trigger IDs when several triggers have different meanings.
    • Avoid actions that change their own trigger unless the feedback is intentional.
    • Set reasonable limits for queued or parallel runs.
    • Review traces after replacing devices or changing entity IDs.

    Frequently asked questions

    Can I hide the warning?

    Home Assistant can change the log level with max_exceeded, but silencing a warning does not restore a skipped run. Diagnose the overlap first.

    Does “single execution” mean only one trigger is allowed?

    No. An automation can have multiple triggers. The rule applies to simultaneous runs, not the number of trigger definitions.

    Should I always use queued mode?

    No. Queued mode preserves every run, which may be wrong for a timer or rapid sensor events. Match the mode to the required outcome.

    Related Troubliq diagnostics

    Sources and review record

    Last reviewed: October 1, 2026. Examples are illustrative and should be adapted to the devices and safety consequences in your own installation.

  • Home Assistant Says “This Entity Is No Longer Being Provided”: Diagnose Before Deleting

    Home Assistant Says “This Entity Is No Longer Being Provided”: Diagnose Before Deleting

    Direct answer: The warning “This entity is no longer being provided by the integration” means Home Assistant still has an entity-registry record, but the integration that created it did not create a matching live entity during the current startup or reload. Do not delete it immediately. First determine whether it is a truly retired entity, a renamed or duplicated replacement, an integration that failed to load, or—especially with MQTT—a discovery message that was not republished.

    Quick diagnostic box

    • One old entity, replacement works: update dashboards and automations, then remove the orphan only after verification.
    • Many entities from one integration: troubleshoot that integration before deleting anything.
    • MQTT or Zigbee2MQTT entities after a restart: verify broker connection and discovery/config messages.
    • New entity ends in _2: compare unique IDs and entity history before renaming or deleting.

    Safest first move: make a backup, record the old and new entity IDs, and check whether the integration is loaded. Deletion is cleanup—not a repair.

    What the warning actually tells you

    Home Assistant separates an entity’s saved registry record from the live entity object supplied by an integration. The registry keeps details such as the entity ID, unique ID, device association, name, and whether the entity was disabled. If the saved record exists but no current entity backs it, Home Assistant can show the record as no longer provided.

    This is different from an ordinary unavailable state. An unavailable entity may still be actively supplied by its integration even though the device or service cannot currently report a state. “No longer being provided” points to the relationship between the registry and the integration’s present setup.

    Ranked causes

    1. The integration renamed, replaced, or stopped creating the entity

    An update, device firmware change, configuration change, or integration migration can alter which entities are created. The old registry record remains because deleting it automatically could break dashboards, history references, scripts, scenes, and automations. A replacement may appear under a new entity ID or device entry.

    2. The integration failed to finish setup

    If several entities from the same integration show the warning at once, the problem is unlikely to be dozens of independent entity failures. Check Settings → Devices & services for setup, authentication, dependency, or communication errors. Then inspect logs from the time Home Assistant started or the integration was reloaded.

    3. MQTT discovery was not replayed

    MQTT-discovered entities require valid discovery configuration. Home Assistant’s MQTT documentation explains that after a restart, discovered items with a unique ID can remain unavailable until discovery messages are received again. Publishers commonly solve this with retained discovery configuration or by republishing configuration after Home Assistant’s birth message. An empty discovery payload can also remove a previously discovered device.

    Do not purge retained topics blindly. Retained messages can restore entities, but stale retained discovery can also recreate ghost entities. Identify the exact discovery topic and current payload first.

    4. The device or integration created a duplicate unique identity

    A replacement entity ending in _2 is a clue, not proof. Compare the integration, device, unique ID, state updates, and history. The working replacement may have been created because a device identifier, discovery topic, MAC address format, or integration entry changed. Renaming it prematurely can hide the evidence.

    5. The entity is disabled, deprecated, or intentionally removed

    Some integrations disable less-used entities by default, and integrations can retire entities when capabilities change. A disabled entity is not loaded into Home Assistant. Confirm whether the entity is marked disabled, deprecated, diagnostic-only, or no longer supported before treating it as broken.

    Safest diagnostic sequence

    Step 1: Preserve references

    Create a current Home Assistant backup. Record the warning, entity ID, integration, device, unique ID if visible, last-updated time, and any apparent replacement entity. Search dashboards, automations, scripts, scenes, templates, and helpers for the old entity ID. Do not expose tokens, passwords, broker credentials, network keys, or unredacted backups.

    Step 2: Decide whether the integration is healthy

    Open the integration page and check whether other entities from the same integration still update. If many fail together, stay at the integration layer: authentication, connectivity, configuration entry, dependency, or startup error. If only one registry record is affected while its siblings work, compare that entity with the device’s current capabilities and replacement entities.

    Step 3: Check the first meaningful log entry

    Restarting repeatedly can bury the useful evidence. Reproduce the problem once, note the time, and read the first related warning or error—not only later consequences. Separate setup failures, authentication failures, timeouts, invalid configuration, missing dependencies, and device-discovery changes.

    Step 4: For MQTT, prove the discovery path

    Confirm that the MQTT integration is connected to the intended broker. Verify that the publisher—such as Zigbee2MQTT or another bridge—is online and publishing current discovery configuration after Home Assistant starts. Compare the affected entity’s discovery topic and unique ID with a working entity. Do not publish test payloads to production topics unless you have a broker backup and understand the publisher’s discovery format.

    If your symptom began after a restart, also use the MQTT entities unavailable after restart guide. If the entity repeatedly changes between available and unavailable rather than showing “not provided,” use the MQTT availability flapping diagnostic.

    Step 5: Compare old and replacement entities

    Place the old and new entity IDs side by side. Confirm which one receives fresh states and controls the physical device. Compare device association, integration entry, unit, device class, and unique ID. Update one low-risk dashboard card first and verify it through a normal state change. Then update automations and templates carefully.

    If many duplicates appeared after an update, follow the duplicate-device repair guide before merging or deleting records.

    Step 6: Reload only when evidence supports it

    If the integration is otherwise healthy and supports reload, one controlled reload can show whether the entity is recreated. For an authentication problem, use Reauthenticate or Reconfigure where offered. Restart Home Assistant only when the logs or integration instructions justify it. Do not remove and re-add an entire integration to repair one orphaned record unless you have documented the downstream impact.

    When it is safe to delete the old entity

    Delete the registry record only when all of these are true:

    • the integration and device are healthy;
    • the old entity has a confirmed working replacement or is intentionally retired;
    • dashboards, automations, scripts, scenes, templates, and helpers no longer reference it;
    • you have preserved any history or identifier information you still need; and
    • a current backup exists.

    After deletion, restart only if the integration’s documentation calls for it. If the entity returns, the source is still advertising or creating it. That is evidence to inspect discovery or integration configuration—not a reason to delete it repeatedly.

    Verification checklist

    1. The integration loads without a repeating setup error.
    2. The intended entity receives a fresh state after a real device change.
    3. A harmless command works, when the entity is controllable.
    4. No automation or dashboard still points to the orphaned ID.
    5. The result survives an ordinary integration reload or planned Home Assistant restart.
    6. No duplicate device or _2 entity reappears.

    Prevention

    • Back up before Home Assistant, integration, broker, or bridge migrations.
    • Document entity IDs used by critical automations.
    • For MQTT publishers, follow Home Assistant’s discovery, birth-message, and retained-message guidance.
    • Change one identity-related setting at a time and verify after each change.
    • Review release notes before updates that migrate device or entity registries.

    FAQ

    Is “not provided” the same as “unavailable”?

    No. Unavailable can mean a live entity cannot currently obtain a state. “No longer being provided” means the saved registry entry is not backed by a live entity from its integration.

    Will deleting the entity fix the integration?

    No. Deletion removes the orphaned registry record. It does not repair authentication, MQTT discovery, a failed setup, or device connectivity.

    Why did a second entity appear with _2?

    Home Assistant encountered an entity-ID collision or a new unique identity. Compare old and new records before renaming either one.

    Should I remove and re-add the integration?

    Usually not as a first step. Re-adding can change identifiers and break references. Diagnose setup, authentication, discovery, and replacement entities first.

    Primary sources

    Reviewed against official documentation on September 30, 2026.

  • Local Bluetooth adapter does not support passive scanning in Home Assistant

    Local Bluetooth adapter does not support passive scanning in Home Assistant

    Direct answer: The message “Local Bluetooth adapters that do not support passive scanning cannot be configured” usually means Passive mode was requested but the local adapter and software stack cannot expose it. Use Auto or Active, then verify BlueZ 5.63 or later, experimental features, D-Bus access, and VM or container passthrough before replacing hardware.

    This guide applies to local Bluetooth controllers on Home Assistant OS, Supervised, Container, VM, and Core installations. It does not diagnose an ESPHome Bluetooth proxy that is offline because of Wi-Fi, encryption, or proxy firmware.

    Passive scanning only listens to advertisements; active scanning can request additional advertising data. Some devices need active scan responses. Therefore, passive mode is not inherently superior, and fixing this configuration error does not guarantee that every missing Bluetooth device will appear.

    Exact symptoms and what they tell you

    The exact error often appears after selecting Passive explicitly. Home Assistant may still list the controller and may work in Active mode, which is strong evidence that the adapter is functional but the requested capability is unavailable.

    On custom Linux deployments, the hardware may support passive scanning while the host BlueZ version, experimental-feature setting, D-Bus exposure, or container permissions prevent Home Assistant from using it.

    A completely missing adapter is a lower-level problem. A present adapter with only one undiscovered device is usually an integration, encryption, active-scan, pairing, or radio-coverage problem rather than this exact capability error.

    Before making changes

    Record the selected scan mode, adapter chipset, installation type, Home Assistant and OS versions, kernel, BlueZ version, VM or container mappings, whether Active works, and whether an ESPHome proxy sees the device.

    Do not remove every Bluetooth integration, factory-reset devices, grant unlimited container privileges, or buy a dongle before locating the failed layer. A new adapter cannot repair missing D-Bus or passthrough.

    Diagnostics may contain adapter addresses, nearby-device identifiers, device names, network details, bind keys, and account information. Review and redact them before sharing.

    Ranked diagnostic workflow

    1. Return the scanner to Auto

    Why this branch ranks here: Official documentation states that Auto can fall back to Active when passive scanning is unsupported.

    Least-destructive diagnostic: Open Settings → Devices & services → Bluetooth, select the affected local adapter, and replace forced Passive with Auto. Reload once if requested.

    How to interpret the result: If the setting saves and the error disappears, the adapter is usable and the failure was specifically forced passive mode.

    Verified repair: Keep Auto unless a documented device or integration requirement justifies another mode.

    Rollback: Return to the recorded mode if normal discovery becomes worse.

    2. Test Active mode

    Why this branch ranks here: Some devices need scan-response data that passive listening cannot obtain.

    Least-destructive diagnostic: Select Active temporarily, restart Home Assistant once if required, and observe the adapter plus one known device near it.

    How to interpret the result: Active working confirms that the controller and basic host path function. Failure in both modes moves attention to hardware, drivers, passthrough, or host services.

    Verified repair: Use Active for integrations that require scan responses, or Auto for general compatibility.

    Rollback: Return to Auto if permanent Active is unnecessary or less stable.

    3. Confirm the controller exists

    Why this branch ranks here: Scan-mode diagnosis is premature when the local adapter is absent.

    Least-destructive diagnostic: Inspect the Bluetooth integration and system hardware for the expected controller. Confirm that it remains present after one normal restart.

    How to interpret the result: No adapter indicates USB, host-driver, Bluetooth-service, power, or passthrough trouble. A stable adapter narrows the problem to capabilities and configuration.

    Verified repair: Correct physical detection or passthrough before changing scanner modes.

    Rollback: Undo only the last mapping or USB change if the controller disappears.

    4. Verify BlueZ support

    Why this branch ranks here: Linux passive scanning depends on the Bluetooth stack as well as the chipset.

    Least-destructive diagnostic: Confirm BlueZ 5.63 or later and experimental features when passive scanning is required. Home Assistant OS 9.4 and later includes the documented support path.

    How to interpret the result: An old or incomplete BlueZ environment explains why Passive is unavailable even when a chipset specification suggests support.

    Verified repair: Use the supported host upgrade and BlueZ configuration method for the installation.

    Rollback: Restore the prior Bluetooth-service configuration if the service no longer starts.

    5. Check D-Bus visibility

    Why this branch ranks here: Home Assistant controls BlueZ and reads scanner capabilities through D-Bus.

    Least-destructive diagnostic: Confirm the required host D-Bus socket and Bluetooth interfaces are visible to Home Assistant or its container.

    How to interpret the result: Missing interfaces identify a host/container boundary, not a reason to factory-reset devices or assume the dongle is dead.

    Verified repair: Expose only the documented D-Bus access required by the supported deployment.

    Rollback: Remove overly broad mappings and restore the secure configuration if they were unnecessary.

    6. Audit container mappings

    Why this branch ranks here: A container can display partial Bluetooth information while lacking required device or bus capabilities.

    Least-destructive diagnostic: Compare the deployment with current Home Assistant Container Bluetooth requirements and verify the controller plus D-Bus mappings.

    How to interpret the result: Capabilities appearing after the corrected mapping confirm deployment configuration as the cause.

    Verified repair: Keep narrow explicit mappings; do not leave privileged mode enabled as a blind workaround.

    Rollback: Restore the last known-good compose or container definition if the change fails.

    7. Verify VM USB ownership

    Why this branch ranks here: The host or hypervisor may retain the controller or detach it after reboot.

    Least-destructive diagnostic: Attach the Bluetooth controller exclusively to the Home Assistant guest and configure persistent reconnection.

    How to interpret the result: If the host still owns the adapter, the guest cannot expose reliable scanner capabilities. Intermittent attachment explains changing behavior.

    Verified repair: Create stable passthrough for a dedicated adapter.

    Rollback: Return ownership to the original system if Home Assistant is not intended to control it.

    8. Distinguish local adapters from proxies

    Why this branch ranks here: Local BlueZ scanner modes and ESPHome Bluetooth proxy settings use different paths.

    Least-destructive diagnostic: Use Bluetooth diagnostics to identify which scanner hears the target device and whether the failing scanner is local or remote.

    How to interpret the result: A working proxy with a failing local controller isolates the local host. A failing proxy requires Wi-Fi, firmware, encryption, and coverage checks.

    Verified repair: Configure each scanner through its own documented integration.

    Rollback: Do not delete a working scanner while testing another.

    9. Check active-scan requirements

    Why this branch ranks here: Many devices advertise limited data until a scanner sends an active request.

    Least-destructive diagnostic: Review the target integration documentation and test the device near the scanner in Active mode.

    How to interpret the result: Discovery only in Active mode is consistent with a scan-response requirement, not a passive-scanning defect.

    Verified repair: Use Auto or Active and maintain adequate coverage.

    Rollback: Return to Auto after testing when the integration does not require permanent Active.

    10. Investigate kernel or firmware instability

    Why this branch ranks here: Repeated timeouts, failed active scans, or an all-zero controller address can indicate a deeper host problem.

    Least-destructive diagnostic: Capture the earliest concise logs, note kernel and firmware versions, then perform one clean host power cycle after a safe shutdown.

    How to interpret the result: Temporary recovery followed by recurrence supports firmware, kernel, power, or controller instability rather than a UI selection.

    Verified repair: Apply supported stable OS, kernel, and firmware updates after backups.

    Rollback: Use the platform’s supported rollback if the update introduced the fault.

    11. Improve radio placement

    Why this branch ranks here: Interference rarely creates this exact settings error, but it can hide devices after mode configuration is repaired.

    Least-destructive diagnostic: Move USB radios away from USB 3 equipment and metal enclosures; compare discovery and signal close to the target device.

    How to interpret the result: Improvement after relocation proves RF conditions were a second issue. No change sends the investigation back to integration and host support.

    Verified repair: Use a shielded extension or a properly configured Bluetooth proxy for coverage.

    Rollback: Return equipment to the former location if other areas lose coverage.

    12. Replace hardware only with evidence

    Why this branch ranks here: Buying a new controller cannot fix BlueZ, D-Bus, container, or VM problems.

    Least-destructive diagnostic: Confirm the host stack and mappings are correct and that diagnostics still show the needed capability is unsupported.

    How to interpret the result: Persistent lack of support on a healthy stack justifies checking Home Assistant’s current supported-adapter guidance.

    Verified repair: Install supported hardware or a proxy appropriate for the environment, then test across a restart.

    Rollback: Keep the original adapter until the replacement passes sustained device-update checks.

    Verification

    The exact passive-scanning configuration error must disappear, and the adapter must remain available after one controlled restart.

    Verify both ordinary advertisement updates and, when applicable, a device known to need active scan responses. One discovery event is not enough; observe normal updates over time.

    Confirm that no security boundary was broadened unnecessarily and that critical Bluetooth automations still have a manual fallback.

    Recovery and escalation

    If discovery worsens, return to the recorded scan mode and reverse only the last host, container, VM, or hardware change. Do not factory-reset target devices merely because the scanner rejected Passive.

    Escalate with installation type, Home Assistant and OS versions, kernel, BlueZ version, adapter chipset and firmware, selected mode, whether Active and Auto work, whether a proxy works, and short redacted logs.

    Safety and privacy

    Remove Bluetooth addresses, account tokens, bind keys, device names that reveal identity or location, and unrelated diagnostics before posting.

    Shut down cleanly before removing hardware. If Bluetooth controls locks, alarms, heating, medical, or safety-related equipment, maintain independent manual control.

    Prevention

    Leave scanner mode on Auto unless a specific documented need exists. Keep the host Bluetooth stack supported and maintain stable VM or container mappings.

    Place radios away from interference, document the working configuration, and test important Bluetooth automations after Core, OS, kernel, BlueZ, or hypervisor updates.

    Frequently asked diagnostic questions

    Does “return the scanner to auto” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. If the setting saves and the error disappears, the adapter is usable and the failure was specifically forced passive mode. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “test active mode” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Active working confirms that the controller and basic host path function. Failure in both modes moves attention to hardware, drivers, passthrough, or host services. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “confirm the controller exists” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. No adapter indicates USB, host-driver, Bluetooth-service, power, or passthrough trouble. A stable adapter narrows the problem to capabilities and configuration. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “verify bluez support” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. An old or incomplete BlueZ environment explains why Passive is unavailable even when a chipset specification suggests support. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “check d-bus visibility” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Missing interfaces identify a host/container boundary, not a reason to factory-reset devices or assume the dongle is dead. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “audit container mappings” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Capabilities appearing after the corrected mapping confirm deployment configuration as the cause. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “verify vm usb ownership” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. If the host still owns the adapter, the guest cannot expose reliable scanner capabilities. Intermittent attachment explains changing behavior. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “distinguish local adapters from proxies” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. A working proxy with a failing local controller isolates the local host. A failing proxy requires Wi-Fi, firmware, encryption, and coverage checks. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “check active-scan requirements” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Discovery only in Active mode is consistent with a scan-response requirement, not a passive-scanning defect. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “investigate kernel or firmware instability” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Temporary recovery followed by recurrence supports firmware, kernel, power, or controller instability rather than a UI selection. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “improve radio placement” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Improvement after relocation proves RF conditions were a second issue. No change sends the investigation back to integration and host support. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “replace hardware only with evidence” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Persistent lack of support on a healthy stack justifies checking Home Assistant’s current supported-adapter guidance. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Related Troubliq resources

    Use Bluetooth Proxy unavailable for proxy transport problems, BTHome device not discovered for BTHome discovery, and the Error Decoder for exact messages.

    Evidence and testing status

    Last reviewed: September 28, 2026. Testing disclosure: Scanner-mode behavior and Linux support requirements were checked against current Home Assistant Bluetooth documentation. Troubliq did not reproduce every adapter, BlueZ build, kernel, container, hypervisor, or Bluetooth device.

  • ZHA could not detect serial port settings: firmware, permissions, and radio fixes

    ZHA could not detect serial port settings: firmware, permissions, and radio fixes

    Direct answer: The error “ZHA was not able to automatically detect serial port settings for your adapter” means Home Assistant cannot prove the coordinator’s complete transport profile. Confirm the stable device path or network socket, radio family, port ownership, permissions, firmware, baud rate, and flow control before deleting ZHA or resetting Zigbee devices.

    This guide applies to Home Assistant OS, Supervised, Container, virtual-machine, and Core installations using ZHA with USB, internal, or network-attached Zigbee coordinators. The exact interface varies, but the safest order is hardware visibility, transport access, radio protocol, firmware validation, and only then Zigbee-network recovery.

    This is a coordinator-layer failure, not an end-device pairing failure. Factory-resetting bulbs, sensors, switches, locks, or plugs cannot make Home Assistant open a coordinator port. It may instead erase useful pairing state and make recovery harder.

    Exact symptoms and what they tell you

    The message may appear during first-time ZHA setup, reconfiguration, or a radio migration. Home Assistant may show a possible serial device but ask for manual port settings, or it may fail before listing a usable coordinator.

    If ZHA worked before a reboot, USB move, host update, container change, or firmware flash, that change is a strong clue. Record the sequence instead of changing several variables at once.

    If ZHA connects but individual devices remain unavailable, the serial problem is already past. Continue with mesh routing, channel interference, sleeping-device check-in, and device-level diagnosis rather than repeating coordinator setup.

    Before making changes

    Record the coordinator’s exact model and hardware revision, installed firmware family and version, device path or redacted network endpoint, selected radio type, baud rate, flow-control mode, and recent changes. Save a current full Home Assistant backup and a ZHA coordinator backup when available.

    Do not remove ZHA, erase the coordinator, flash firmware, or create a fresh Zigbee network as an opening move. ZHA’s migration and reconfiguration paths exist to preserve the existing network. Keep the old coordinator available until any migration is fully verified.

    Never expose a network coordinator’s serial socket to the public internet. Keep it on a trusted LAN and redact network keys, tokens, MAC addresses, public IPs, precise locations, and unrelated device identifiers before sharing diagnostics.

    Ranked diagnostic workflow

    1. Confirm host-level hardware visibility

    Why this branch ranks here: ZHA cannot probe a coordinator that the operating system or hypervisor does not expose.

    Least-destructive diagnostic: In Home Assistant OS inspect Settings → System → Hardware. In a VM or container confirm the physical adapter is attached consistently to the Home Assistant guest and appears after reboot.

    How to interpret the result: No device points to USB, power, cable, driver, or passthrough trouble. A device that appears and disappears suggests instability. A stable device lets you proceed to permissions and protocol selection.

    Verified repair: Reconnect through a known-good data cable, correct the narrow documented passthrough, and use stable power. Avoid an unpowered hub.

    Rollback: Restore the previous physical port and mapping if the adapter disappears after the change.

    2. Use a persistent serial-by-id path

    Why this branch ranks here: Short names such as /dev/ttyUSB0 or /dev/ttyACM0 may change when Linux enumerates devices differently.

    Least-destructive diagnostic: Compare ZHA’s configured path with the current /dev/serial/by-id entry shown in hardware information. Verify the identifier belongs to the coordinator, not another USB serial device.

    How to interpret the result: A changed short path explains a formerly working setup. A matching serial-by-id path makes renumbering less likely and moves attention to port ownership, permissions, parameters, or firmware.

    Verified repair: Reconfigure the current radio to the stable serial-by-id path without deleting ZHA.

    Rollback: Return to the recorded path if the identifier was chosen for the wrong hardware.

    3. Identify the installed radio protocol

    Why this branch ranks here: Similar product names and identical USB connectors can hide different chip families or firmware modes.

    Least-destructive diagnostic: Use the coordinator manufacturer’s current documentation and the firmware actually installed. Match it to ZHA’s supported radio family instead of guessing from appearance.

    How to interpret the result: A mismatched radio library can fail probing even while the serial port exists. Correct identification should produce a more specific connection result.

    Verified repair: Select the documented Silicon Labs, Texas Instruments, deCONZ, XBee, ZiGate, or other supported radio type.

    Rollback: Restore the prior selection if logs prove the new choice addresses a different protocol.

    4. Release the coordinator port

    Why this branch ranks here: A serial coordinator normally has one controlling application at a time.

    Least-destructive diagnostic: Stop Zigbee2MQTT, terminal sessions, flashing tools, or any second integration aimed at the same path. Retry ZHA once and inspect the earliest log entry.

    How to interpret the result: Success after releasing the port proves contention. Continued failure moves the investigation to permissions, serial parameters, firmware, or hardware reliability.

    Verified repair: Assign each Zigbee stack its own coordinator and stable path. Never configure ZHA and Zigbee2MQTT to share one radio.

    Rollback: Restart the former owner only when it is the intended Zigbee stack and ZHA should not use that adapter.

    5. Verify permissions and passthrough

    Why this branch ranks here: The host may list a serial device while Home Assistant lacks authority to open it.

    Least-destructive diagnostic: Confirm the service, container, or guest has the documented device access. Avoid using broad privileged mode merely to see whether it helps.

    How to interpret the result: Permission-denied or device-busy logs identify the transport boundary and do not prove coordinator failure. Correct access should let probing advance.

    Verified repair: Correct only the necessary device mapping, group access, or VM attachment, then restart the affected service once.

    Rollback: Restore the former security settings if the change is unrelated or grants excessive access.

    6. Stabilize USB power and radio placement

    Why this branch ranks here: Marginal power, faulty cables, hubs, and USB 3 interference can make identification intermittent.

    Least-destructive diagnostic: Use a short shielded extension, avoid unpowered hubs, separate the coordinator from USB 3 equipment, and watch hardware logs for disconnects.

    How to interpret the result: A stable path after relocation implicates the physical layer. A consistently stable adapter that still cannot probe points elsewhere.

    Verified repair: Keep the reliable port, cable, power source, and spacing arrangement. Replace only a confirmed faulty component.

    Rollback: Return to the prior arrangement if stability worsens, without erasing the Zigbee network.

    7. Enter documented baud and flow-control values

    Why this branch ranks here: Automatic probing cannot infer every nonstandard firmware profile.

    Least-destructive diagnostic: Compare the manual serial settings with current instructions for the exact coordinator and installed firmware. Record existing values first.

    How to interpret the result: A connection that succeeds with documented manual settings confirms an auto-detection mismatch, not a need to rebuild the network.

    Verified repair: Save the supported baud rate and hardware, software, or no-flow-control setting.

    Rollback: Restore the recorded values if communication becomes less reliable.

    8. Validate firmware before flashing

    Why this branch ranks here: Firmware may be incompatible, corrupt, or built for router mode rather than coordinator mode, but flashing has real recovery risk.

    Least-destructive diagnostic: Compare the reported firmware family and version with the vendor’s ZHA-compatible coordinator release for the exact hardware revision.

    How to interpret the result: A confirmed match argues against flashing. A confirmed mismatch justifies the vendor’s procedure after backups and stable power are in place.

    Verified repair: Flash only the exact supported image using the manufacturer’s process and recovery instructions.

    Rollback: Use the vendor’s recovery image and restore the coordinator backup only when the documented procedure calls for it.

    9. Check network-coordinator transport

    Why this branch ranks here: Ethernet and Wi-Fi radios add IP, DNS, TCP port, socket mode, client limits, and firewall variables.

    Least-destructive diagnostic: Confirm the reserved local address, correct Zigbee socket port, socket service, and absence of another connected client. Test locally without public port forwarding.

    How to interpret the result: Ping proves only IP reachability. Connection refused suggests a wrong port or disabled service; timeout suggests routing or firewall trouble.

    Verified repair: Enable the documented local socket, reserve the address, and restrict access to the trusted LAN.

    Rollback: Restore the former address and port when the device documentation contradicts the change.

    10. Use ZHA migration rather than deletion

    Why this branch ranks here: Replacing hardware safely requires preserving the coordinator network and its security material.

    Least-destructive diagnostic: Use ZHA Configure → Migrate radio, select the new serial port, and choose the automatic migration backup or an appropriate known-good backup.

    How to interpret the result: Successful migration should restore the network without mass re-pairing. Failure should be diagnosed before either radio is erased.

    Verified repair: Complete the official migration workflow and retain the original coordinator until restart verification passes.

    Rollback: Reconnect the original coordinator and restore its recorded settings if migration is incomplete.

    11. Separate mesh recovery from transport recovery

    Why this branch ranks here: Sleeping devices and routers may not all report immediately after the coordinator returns.

    Least-destructive diagnostic: Confirm ZHA loads, the coordinator survives one controlled restart, and mains-powered routers begin updating before touching battery devices.

    How to interpret the result: A healthy coordinator with isolated unavailable devices means the original serial error is repaired; remaining work is mesh or device specific.

    Verified repair: Allow battery devices to check in and diagnose remaining nodes individually.

    Rollback: Do not recreate the network just because one sleeping sensor has not reported yet.

    Verification

    Verification passes when ZHA loads without the exact serial-detection error, uses the intended stable path or local endpoint, and the selected radio library matches the installed firmware.

    Restart Home Assistant once. The coordinator must reconnect automatically and remain stable. Existing devices should resume reporting without mass re-pairing; sleeping battery devices may require their normal check-in interval.

    If the coordinator fails only after reboot, revisit persistent paths, VM or container passthrough, port ownership, reserved network addresses, and power. A one-time successful setup screen is not sufficient evidence.

    Recovery and escalation

    If a change makes the result worse, restore the recorded path, radio type, baud rate, flow control, mapping, or endpoint. Reverse only the last change so the evidence remains interpretable.

    Escalate with installation type, Home Assistant version, coordinator model and revision, firmware family and version, stable path or redacted endpoint, radio type, serial parameters, and the earliest concise log lines. State what changed immediately before failure.

    Safety and privacy

    Do not share Zigbee network keys, backup archives, tokens, credentials, full diagnostics, public IPs, or precise locations. Review and redact every attachment before posting.

    If Zigbee controls locks, alarms, heating, water valves, or safety equipment, provide manual control during maintenance. Do not flash firmware during unstable power or USB connectivity.

    Prevention

    Use a persistent serial-by-id path, stable power, a shielded extension away from USB 3 interference, separate coordinators for separate Zigbee stacks, and reserved addresses for network radios.

    Keep both Home Assistant and coordinator backups current. Record the working radio type and serial profile before upgrades so recovery does not depend on memory.

    Frequently asked diagnostic questions

    Does “confirm host-level hardware visibility” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. No device points to USB, power, cable, driver, or passthrough trouble. A device that appears and disappears suggests instability. A stable device lets you proceed to permissions and protocol selection. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “use a persistent serial-by-id path” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. A changed short path explains a formerly working setup. A matching serial-by-id path makes renumbering less likely and moves attention to port ownership, permissions, parameters, or firmware. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “identify the installed radio protocol” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. A mismatched radio library can fail probing even while the serial port exists. Correct identification should produce a more specific connection result. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “release the coordinator port” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Success after releasing the port proves contention. Continued failure moves the investigation to permissions, serial parameters, firmware, or hardware reliability. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “verify permissions and passthrough” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Permission-denied or device-busy logs identify the transport boundary and do not prove coordinator failure. Correct access should let probing advance. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “stabilize usb power and radio placement” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. A stable path after relocation implicates the physical layer. A consistently stable adapter that still cannot probe points elsewhere. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “enter documented baud and flow-control values” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. A connection that succeeds with documented manual settings confirms an auto-detection mismatch, not a need to rebuild the network. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “validate firmware before flashing” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. A confirmed match argues against flashing. A confirmed mismatch justifies the vendor’s procedure after backups and stable power are in place. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “check network-coordinator transport” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Ping proves only IP reachability. Connection refused suggests a wrong port or disabled service; timeout suggests routing or firewall trouble. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “use zha migration rather than deletion” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. Successful migration should restore the network without mass re-pairing. Failure should be diagnosed before either radio is erased. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Does “separate mesh recovery from transport recovery” mean the hardware is broken?

    Not by itself. This check isolates one layer of the failure. A healthy coordinator with isolated unavailable devices means the original serial error is repaired; remaining work is mesh or device specific. Do not replace hardware until the relevant transport, permission, configuration, and software checks agree.

    Related Troubliq resources

    After transport recovery, use the ZHA pairing checklist, the post-update Zigbee recovery guide, and the Home Assistant Error Decoder.

    Evidence and testing status

    Last reviewed: September 28, 2026. Testing disclosure: The exact error wording, radio migration workflow, and coordinator concepts were checked against current Home Assistant documentation and Home Assistant Core source text. Troubliq did not reproduce every coordinator, firmware, hypervisor, container, or network-radio combination.

  • Home Assistant Automation Runs Twice: Trace Duplicate Triggers Without Guessing

    Home Assistant Automation Runs Twice: Trace Duplicate Triggers Without Guessing

    Direct answer: When a Home Assistant automation runs twice, do not add a delay or change its run mode first. Open two traces and compare the trigger description, trigger ID, timestamp and action path. Most duplicate-looking runs come from two valid triggers, a state trigger that matches more transitions than intended, the same automation loaded twice, an event emitted twice by the source integration, or two different automations calling the same action. The trace evidence tells you which branch to fix.

    Quick diagnostic box

    • Time: about 15 minutes if traces exist.
    • Risk: low when you inspect first and change one automation at a time.
    • Start here: open Settings → Automations & scenes, select the automation, open Traces, and compare the two runs.
    • Preserve evidence: record both timestamps, trigger descriptions, trigger IDs, run IDs and the action that appeared twice.
    • Do not delete the automation, add a random delay, or switch to mode: single before you identify whether there were actually two triggers.

    First decide what “twice” means

    Two notifications, two light commands or two logbook entries do not necessarily prove that one automation ran twice. A single run can call the same action from two branches, a script can repeat an action, a device can report the same change twice, and two separate automations can target the same service. Conversely, one automation can legitimately start two runs milliseconds apart.

    Use traces as the source of truth. If there are two trace entries with different run IDs, Home Assistant started the automation twice. If there is one trace with two action calls, the duplication is inside the action sequence, script or downstream integration. If there is only one action call but the device responds twice, investigate the target integration or device rather than the automation trigger.

    Preserve the evidence before reloading

    Home Assistant stores a limited number of traces by default. A reload or edit can make the original state harder to reconstruct. Open both traces and note the exact time, trigger, changed entity, from/to values and path through conditions and choose blocks. Export or copy only the minimum sanitized details required. Remove tokens, webhook IDs, personal locations, device serials, public URLs and notification contents.

    For YAML automations, Home Assistant documentation allows the number of stored traces to be increased with the trace stored_traces option. Do this only when the problem is intermittent and existing traces are being overwritten; it does not repair duplicate execution.

    Ranked cause 1: two triggers are both valid

    Multiple triggers in one automation are evaluated independently. If a motion sensor changes state and a related helper or template changes moments later, both may start the automation. Time, sun, state and event triggers can also overlap at a boundary. Give each trigger a unique ID and compare trigger.id in the trace. The IDs turn an ambiguous duplicate into a measurable pattern.

    triggers:
      - trigger: state
        entity_id: binary_sensor.kitchen_motion
        to: "on"
        id: motion_started
      - trigger: state
        entity_id: input_boolean.kitchen_override
        to: "on"
        id: override_started

    If either trigger is sufficient, two runs may be correct. Prevent the duplicate at the logic level: choose one source of truth, add a condition that excludes the overlapping case, or branch by trigger ID so both triggers do not execute the same action. Do not use a blanket delay as a substitute for understanding the overlap.

    Ranked cause 2: a state trigger matches more transitions than intended

    A state trigger without a to or from filter can fire when the entity changes state and, depending on the entity and configuration, attribute changes may also matter. A template trigger can become true again after briefly returning false. Numeric thresholds trigger when crossing the boundary, not continuously, but noisy measurements can cross back and forth.

    In each trace, inspect from_state and to_state. If the meaningful state is identical but an attribute changed, narrow the trigger. If the state bounced off and on, fix the noisy source if possible or use a documented duration only when the desired behavior truly requires the state to remain stable. Remember that Home Assistant’s for option does not survive an automation reload or Home Assistant restart.

    Ranked cause 3: the same automation is loaded twice

    This occurs when equivalent logic exists in the UI and YAML, when an automation was copied and renamed, or when an include causes the same file to be referenced unexpectedly. Search the automation list for the target entity, notification text or distinctive alias. In YAML, confirm that each automation has a unique ID and that automations.yaml remains a list.

    Do not remove files blindly. Disable one suspected duplicate, trigger the original condition once, then review traces. If the second run disappears, document which definition remains authoritative before deleting or consolidating anything.

    Ranked cause 4: two automations call the same script or service

    A duplicated outcome may come from different parents. Search for the service call, script entity, scene, notification message or target entity across automations and scripts. A script trace can show two callers even when each parent automation ran only once. The clean repair is usually to consolidate the shared decision into one automation or make the script idempotent where practical.

    Idempotent means a repeated request leaves the system in the same safe state. Turning a light on is often naturally idempotent; sending a notification, incrementing a counter, unlocking a door or making an API request may not be. High-impact actions deserve explicit guards and verification.

    Ranked cause 5: the source integration emits two events

    Some devices expose both a state change and an event. A button integration may create a device trigger plus an event trigger for the same press. MQTT can deliver retained or repeated messages depending on publisher behavior and quality-of-service configuration. Mobile apps, webhooks and cloud integrations can retry requests.

    Compare event data and timestamps in the traces. If the automation received two genuinely separate source events, the trigger is behaving as configured. Correct the publisher when possible. If correction is impossible, use a narrow guard based on a stable event identifier or a short helper-based deduplication window that matches the source behavior. Document the tradeoff: any deduplication rule can suppress legitimate rapid actions.

    Ranked cause 6: actions repeat inside one run

    Open the trace timeline and count action nodes. Check repeat blocks, parallel sequences, choose branches, scripts and wait/restart paths. A common mistake is to place the same service call before and after a choose block, or to call a script directly and again through a scene or another script.

    Fix the duplicated branch rather than changing trigger behavior. Retest the automation manually only after confirming that manual execution is safe; the Run actions control skips normal trigger timing and can make destructive or noisy actions happen immediately.

    Why automation mode is not the first fix

    Home Assistant modes control what happens when a new run starts while another is active. Single rejects a new overlapping run; restart stops the old run and starts the new one; queued waits; parallel allows independent runs. A mode can change the visible symptom, but it does not explain why two triggers occurred.

    If an automation finishes in 100 milliseconds and the second trigger arrives later, mode single will not block it. If you switch to restart, the first run may be interrupted halfway. If you use queued, both unwanted runs may still execute. Select mode based on the intended concurrency after fixing trigger logic.

    A privacy-safe trace comparison

    Run A
    time: 2026-09-29 18:42:10.218
    trigger_id: motion_started
    entity: binary_sensor.room_motion
    from: "off"
    to: "on"
    action_path: choose/0/sequence/0
    
    Run B
    time: 2026-09-29 18:42:10.463
    trigger_id: occupancy_started
    entity: binary_sensor.room_occupancy
    from: "off"
    to: "on"
    action_path: choose/0/sequence/0

    This sanitized example shows two independent triggers reaching the same action 245 milliseconds apart. The evidence points to overlapping motion and occupancy logic, not a Home Assistant scheduler that randomly duplicated one run. Replace real entity names and timestamps when sharing logs publicly.

    Common duplicate-run patterns

    At Home Assistant startup: An automation may have a Home Assistant start trigger while the same entities also restore or update their state. Compare trigger IDs. If both paths are intentional, decide whether startup should initialize state silently or perform the normal outward action. Avoid sending duplicate alerts simply because several entities become available together.

    At sunrise, sunset or a scheduled minute: A time trigger can overlap with a sun, schedule or template trigger that becomes true at nearly the same moment. Use one clock source for the action or branch explicitly so the fallback does not duplicate the primary trigger.

    After an automation reload: Reloading attaches the current trigger definitions. It should not be treated as a routine cure for duplicates. If behavior changes only after reload, inspect whether YAML and UI definitions differ, whether a custom integration registers listeners correctly, and whether the issue returns after the next edit or restart.

    After reconnecting MQTT or another event source: A retained message, restored entity state or publisher retry can reproduce an apparently old condition. Compare message payloads and source timestamps rather than assuming the automation engine replayed a run. Do not delete retained messages globally; identify the topic and publisher first.

    Only when actions take a long time: This pattern makes concurrency mode relevant. If a second trigger arrives while the first sequence is waiting, mode parallel may create two active paths, queued may preserve both, restart may abandon the first, and single may reject the second. Choose the mode that matches the intended physical behavior and include timeouts for waits that could otherwise remain open.

    Do not create a fragile cooldown

    A cooldown helper can be appropriate for a genuinely noisy source, but it must have a defined duration and consequence. A five-second lockout that hides a duplicate door event could also suppress a real reopen. Before adding one, measure the duplicate interval from traces, decide the fastest legitimate repeat, and choose a guard narrower than that legitimate behavior.

    For notifications, consider whether the message can be keyed to an event ID or state transition. For counters and paid API calls, verify that a repeated request cannot create financial or operational harm. For locks, covers, garage doors and alarms, prefer fixing the source and adding explicit safety conditions over relying on a timer.

    Safest repair sequence

    • Create a current backup before editing important automations.
    • Capture the two traces and identify whether there are two runs or one run with two actions.
    • Assign trigger IDs if the automation has multiple triggers.
    • Narrow state triggers with explicit to/from values where that matches the intent.
    • Search for duplicate automations and other parents calling the same script or service.
    • Change one cause only. Reload automations if you edited YAML; do not restart the whole host unless required.
    • Trigger one controlled test and inspect the new trace.
    • Test again after the source has been idle long enough to reproduce the original condition.
    • Verify the physical outcome, notification count and Logbook entry.
    • Record the final change and keep the evidence until the behavior remains stable.

    Verification matrix

    • Two traces, different trigger IDs: overlapping triggers; fix conditions or choose a source of truth.
    • Two traces, same trigger ID: inspect bouncing state, repeated events, duplicate definitions or publisher retries.
    • One trace, two action nodes: repair the action sequence, choose/repeat block or child script.
    • One trace, one action call, device acts twice: investigate the integration, transport or device.
    • No trace for one outcome: another automation, integration or external platform probably caused it.

    Prevention

    Name automations and scripts for the outcome they own. Use unique IDs, assign trigger IDs, avoid duplicating the same decision across UI and YAML, and keep high-impact actions centralized. Store enough traces to cover the diagnostic window without retaining unnecessary sensitive details. After Home Assistant or integration updates, test automations that send messages, unlock doors, operate covers, change climate settings or call paid APIs.

    Use the automation-not-triggering guide when the opposite failure occurs. Sanitize evidence with the Troubliq Log Sanitizer, and use the Error Decoder for an exact message or warning.

    When to escalate

    Escalate when two traces show one integration producing reproducible duplicate events, when the trace data contradicts the documented mode behavior, or when duplication began immediately after a known update and persists in a minimal test. Include Home Assistant Core version, installation type, sanitized automation YAML, two traces, relevant integration version and the smallest reproduction. Do not publish secrets or an entire configuration archive.

    Official sources and review record

    Last reviewed September 29, 2026. Photo credit: Luke Chesser via Unsplash.

  • HomeKit Bridge Accessories Disappear After Adding More Devices in Home Assistant

    HomeKit Bridge Accessories Disappear After Adding More Devices in Home Assistant

    When older accessories disappear after new Home Assistant entities are exposed to Apple Home, the bridge may be overloaded, filtered differently, or represented by a changed configuration. The safest repair is to reduce and stabilize the bridge rather than repeatedly deleting it from both systems.

    What this failure pattern tells you

    This guide uses a narrow diagnostic sequence: confirm the pattern, protect the current configuration, test the smallest likely cause, and verify the result before moving deeper. That approach avoids turning one failed device or automation into a site-wide recovery job.

    • Some accessories vanish while the HomeKit Bridge integration remains loaded.
    • The issue appears after exposing a large room, domain, or group of entities.
    • Home shows ‘No Response’ for a subset of accessories.
    • Re-pairing temporarily restores devices but the problem returns.

    Most likely causes

    • Too many accessories or services are exposed through one bridge.
    • Include/exclude filters changed after an entity rename.
    • Unsupported or unusually complex entities create excessive services.
    • The bridge’s pairing state and Apple Home cache no longer agree.
    • Network isolation blocks mDNS between Home Assistant and Apple hubs.

    Before changing anything

    Make a current Home Assistant backup and download it somewhere outside the system. Take screenshots of the affected integration, device, entity IDs, and any relevant automation. Record the exact time of the next failure so the log window stays small. If the issue involves radio hardware, do not unplug it while Home Assistant is writing data.

    Step-by-step diagnosis and repair

    1. Create a Home Assistant backup and capture the current HomeKit Bridge include/exclude configuration.
    2. Count exposed entities and identify high-service devices such as multi-sensors, media players, or complex climate entities.
    3. Temporarily narrow one bridge to a small, essential set using explicit includes.
    4. Reload the integration and wait before making another change; Apple Home synchronization is not always immediate.
    5. Confirm Home Assistant, the iPhone, and the active Apple home hub can exchange local mDNS traffic across VLANs.
    6. If the smaller bridge is stable, divide devices logically across multiple bridges rather than placing everything on one.
    7. Only as a final step, remove one confirmed broken bridge pairing and re-pair it using the new stable scope. Expect room assignments and automations to require review.

    How to verify the repair

    Do not declare success immediately after a reload. Repeat the original action several times, then observe the system through at least one normal restart or reconnect cycle. Review the log at the exact test time and confirm that the affected entities update normally. If the problem was intermittent, keep a short note of the previous failure interval and monitor beyond it.

    Common mistakes to avoid

    • Do not delete every bridge simultaneously.
    • Do not expose entire domains when only a few entities are useful.
    • Do not keep changing filters during Apple Home synchronization.

    A practical decision rule

    If several unrelated devices fail at the same moment, investigate shared infrastructure: power, network, broker, radio, host load, or a recent update. If only one model or entity fails while everything around it remains stable, focus on that device’s identity, firmware, configuration, and signal path. Rebuilding a healthy shared integration should be the final option, not the first.

    When to restore a backup

    Restore only when you can identify a known-good backup from before a harmful configuration change and you understand what newer changes will be lost. A backup is not a substitute for diagnosing failing hardware, interference, duplicate identifiers, or unstable power; those problems will return after restoration.

    Frequently asked questions

    Should I use one bridge or several?

    Several smaller, logically grouped bridges are often easier to diagnose and keep within practical accessory and service limits.

    Will re-pairing preserve Apple Home rooms?

    Not reliably. Treat re-pairing as a last resort and document room and automation assignments first.

    Why do VLANs matter?

    HomeKit discovery relies heavily on local multicast discovery, which routed or isolated networks may block.

    Bottom line

    Start with evidence from the affected device, integration, trace, or topic. Protect the working system, change one variable, and verify through the original failure condition. That is slower than random resets for five minutes and much faster than rebuilding an entire smart home unnecessarily.

    Deep diagnostic worksheet

    Use this worksheet when the quick repair does not hold. The objective is to build a timestamped explanation of the HomeKit Bridge accessory loss problem rather than accumulate unrelated changes. Keep credentials and private addresses out of screenshots or public reports.

    1. Count accessories exposed through each bridge and record the filter configuration. Home Assistant’s official documentation notes a maximum of 150 unique accessories per bridge.
    2. Identify whether missing items share a domain, room, integration, or recent rename. A filter mismatch often removes a group predictably rather than at random.
    3. Record bridge names, pairing state, Apple home hub status, and the last configuration change. Avoid deleting pairings while collecting evidence because re-pairing can disturb room assignments.
    4. Confirm Home Assistant, the phone, and the active Apple home hub can exchange local multicast discovery traffic. Guest Wi-Fi, VLAN isolation, or multicast filtering can break discovery.
    5. Reduce one test bridge to a small explicit include list. This separates bridge-size and entity-complexity problems from general network failure.
    6. Review unsupported or unusually complex entities. One physical Home Assistant device can expose multiple HomeKit services, so entity count alone may not describe bridge complexity.
    7. Wait after reloading a bridge and make one change at a time. Apple Home synchronization and hub caching can make rapid edits appear inconsistent.
    8. Document Apple Home automations and room assignments before any final re-pair, because removing and adding a bridge may require rebuilding organization.

    Failure-pattern examples

    • Accessory count approaches 150: split devices into logical bridges before adding more and keep explicit filters.
    • Only renamed entities disappear: update include/exclude filters and reload the affected bridge, then allow synchronization time.
    • Everything shows No Response after a network change: investigate mDNS routing, VLAN rules, Wi-Fi isolation, and active home-hub connectivity.
    • A small test bridge works but the large bridge fails: reduce scope and separate complex domains rather than repeatedly re-pairing the same oversized bridge.
    • One bridge is healthy and another is not: isolate configuration and pairing work to the failing bridge; do not delete every HomeKit integration.

    Advanced notes that prevent false fixes

    • The 150-accessory limit applies per bridge, and service complexity can create practical issues before the numeric limit.
    • Explicit include lists are easier to audit than exposing entire domains by default.
    • Cameras and other complex accessories may deserve separate planning because their requirements differ from simple switches.
    • Network changes can mimic configuration failures; prove local discovery works before rebuilding pairings.
    • Re-pairing is destructive to organization even when it fixes connectivity, so it belongs late in the decision tree.
    • Maintain a bridge inventory containing purpose, included entities, approximate accessory count, pairing date, and responsible Apple home.

    Final verification checklist

    Verification must reproduce the original condition. A page reload or one successful command is insufficient for an intermittent problem.

    • Every intended accessory appears once.
    • The bridge remains responsive through a home-hub change or normal restart.
    • Accessory count stays below the documented limit.
    • Room assignments and automations remain intact.
    • No unintended entity domain is exposed.
    • The result remains stable after synchronization time.

    Official reference

    Technical behavior and terminology were checked against Home Assistant HomeKit Bridge documentation. Interface labels and capabilities can change, so use the current official page when your installed version differs.

    Related Troubliq guides

  • MQTT Device Flaps Between Available and Unavailable in Home Assistant

    MQTT Device Flaps Between Available and Unavailable in Home Assistant

    An MQTT entity that changes from available to unavailable every few minutes may still publish sensor values correctly. The useful clue is the availability topic: Home Assistant is reporting what it receives, not guessing whether the physical device is healthy.

    What this failure pattern tells you

    This guide uses a narrow diagnostic sequence: confirm the pattern, protect the current configuration, test the smallest likely cause, and verify the result before moving deeper. That approach avoids turning one failed device or automation into a site-wide recovery job.

    • State values update, but the device badge repeatedly becomes unavailable.
    • The problem begins after broker, router, or Home Assistant restarts.
    • Several devices fail together, or only one firmware family is affected.
    • The log shows reconnects, socket errors, or duplicate client identifiers.

    Most likely causes

    • A retained offline payload remains on the availability topic.
    • The device uses a short keepalive and unstable Wi-Fi.
    • Two clients share the same MQTT client ID and disconnect each other.
    • Birth and Last Will payloads do not match Home Assistant’s expected values.
    • The broker, add-on, or device clock restarts on a repeating schedule.

    Before changing anything

    Make a current Home Assistant backup and download it somewhere outside the system. Take screenshots of the affected integration, device, entity IDs, and any relevant automation. Record the exact time of the next failure so the log window stays small. If the issue involves radio hardware, do not unplug it while Home Assistant is writing data.

    Step-by-step diagnosis and repair

    1. Open the MQTT integration and listen to the exact availability topic; record payloads and timestamps without publishing anything.
    2. Compare the entity’s configured payload_available and payload_not_available values, including capitalization and whitespace.
    3. Check whether the offline message is retained. A stale retained Last Will can survive restarts.
    4. Inspect the broker log for repeated connections using the same client ID.
    5. Give every physical device a unique client ID, then restart only the affected client.
    6. Check Wi-Fi signal, DHCP stability, power supply, and keepalive settings on the device.
    7. If multiple devices fail simultaneously, investigate broker or network infrastructure before editing every device.
    8. After correcting the publisher, clear or replace only the known stale retained availability message using the device’s documented procedure.

    How to verify the repair

    Do not declare success immediately after a reload. Repeat the original action several times, then observe the system through at least one normal restart or reconnect cycle. Review the log at the exact test time and confirm that the affected entities update normally. If the problem was intermittent, keep a short note of the previous failure interval and monitor beyond it.

    Common mistakes to avoid

    • Do not publish a blank retained payload to broad wildcard topics.
    • Do not disable availability reporting just to hide a real disconnect.
    • Do not expose the broker to the public internet while troubleshooting.

    A practical decision rule

    If several unrelated devices fail at the same moment, investigate shared infrastructure: power, network, broker, radio, host load, or a recent update. If only one model or entity fails while everything around it remains stable, focus on that device’s identity, firmware, configuration, and signal path. Rebuilding a healthy shared integration should be the final option, not the first.

    When to restore a backup

    Restore only when you can identify a known-good backup from before a harmful configuration change and you understand what newer changes will be lost. A backup is not a substitute for diagnosing failing hardware, interference, duplicate identifiers, or unstable power; those problems will return after restoration.

    Frequently asked questions

    Can sensor values update while availability is wrong?

    Yes. State and availability often use different topics and retained-message behavior.

    What does a duplicate client ID do?

    Most brokers disconnect the older session when another client connects with the same identifier, creating a repeating online/offline cycle.

    Should I delete the MQTT integration?

    Usually not. First isolate the exact topic, payload, client ID, and timestamp pattern.

    Bottom line

    Start with evidence from the affected device, integration, trace, or topic. Protect the working system, change one variable, and verify through the original failure condition. That is slower than random resets for five minutes and much faster than rebuilding an entire smart home unnecessarily.

    Deep diagnostic worksheet

    Use this worksheet when the quick repair does not hold. The objective is to build a timestamped explanation of the MQTT availability problem rather than accumulate unrelated changes. Keep credentials and private addresses out of screenshots or public reports.

    1. Capture the exact availability topic and every payload over a complete online-offline cycle. Include timestamps, retain flags when available, and client connection events from the broker log.
    2. Compare the observed strings byte-for-byte with payload_available and payload_not_available. Capitalization, whitespace, encoding, and JSON structure matter; visually similar payloads may not match.
    3. Determine whether the entity uses one availability topic or a list. Home Assistant supports availability modes such as all, any, and latest, and the selected mode changes how multiple topics are evaluated.
    4. Inspect broker logs for duplicate client identifiers. MQTT brokers commonly replace an existing connection when a second client connects with the same ID, producing a repeating disconnect pattern.
    5. Check the device’s Last Will, birth message, retain setting, keepalive, and clean-session behavior. Availability faults often survive restarts because a retained offline payload remains valid at the broker.
    6. Correlate failures across devices. Simultaneous changes point toward broker, network, power, DNS, or host problems; one device family points toward its firmware or configuration.
    7. Measure Wi-Fi signal and power stability at the device, but do not stop there. A strong signal does not rule out DHCP conflicts, access-point roaming, brownouts, or duplicate credentials.
    8. Before clearing a retained message, verify the exact topic and understand the publishing tool. A wildcard or wrong topic can disturb many devices.

    Failure-pattern examples

    • State updates continue while availability is offline: troubleshoot the availability topic and payload separately from the state topic.
    • All MQTT devices go unavailable after a broker restart: inspect retained birth/Last Will behavior and reconnection logs before editing every entity.
    • One device flips at a fixed interval: compare keepalive, watchdog, DHCP lease, power-save, and scheduled restart timing.
    • Two identical devices knock each other offline: assign unique MQTT client IDs and confirm both remain connected simultaneously.
    • Multiple availability topics use mode all: one silent auxiliary topic can hold the entity offline even though the primary device is publishing normally.

    Advanced notes that prevent false fixes

    • Retained messages describe the last retained value, not necessarily the present physical state; publishers must update them correctly.
    • QoS affects delivery guarantees but does not repair a semantically wrong availability payload.
    • Disabling availability hides the diagnostic signal and should not substitute for fixing reconnections.
    • Do not expose an MQTT broker publicly or weaken authentication during troubleshooting.
    • Use a narrow topic listener and redact usernames, passwords, tokens, and personally identifying topic components.
    • After repair, document topic names, expected payloads, client ID, retain behavior, and broker location.

    Final verification checklist

    Verification must reproduce the original condition. A page reload or one successful command is insufficient for an intermittent problem.

    • The client remains connected longer than the previous failure interval.
    • Availability and state topics show expected payloads.
    • No duplicate-client disconnect appears in broker logs.
    • The entity recovers correctly after one controlled broker restart.
    • Other MQTT devices remain unaffected.
    • No stale retained offline value reappears.

    Official reference

    Technical behavior and terminology were checked against Home Assistant MQTT documentation. Interface labels and capabilities can change, so use the current official page when your installed version differs.

    Related Troubliq guides

  • ESPHome Device Shows Two Entries in Home Assistant: Remove the Duplicate Safely

    ESPHome Device Shows Two Entries in Home Assistant: Remove the Duplicate Safely

    Duplicate ESPHome entries commonly appear after a device name change, board replacement, restored backup, or re-adoption. One entry may use the native API while another is a stale registry record. Deleting both entries can turn a cosmetic problem into an outage, so identify which connection is live first.

    What this failure pattern tells you

    This guide uses a narrow diagnostic sequence: confirm the pattern, protect the current configuration, test the smallest likely cause, and verify the result before moving deeper. That approach avoids turning one failed device or automation into a site-wide recovery job.

    • Two devices have similar names but different entity counts.
    • One copy is unavailable while the other updates normally.
    • Automations reference entities from both entries.
    • A renamed node keeps its old device or entities.

    Most likely causes

    • The ESPHome node name or friendly name changed.
    • A replacement board reused some identifiers but not the original API identity.
    • An old integration entry survived a reinstall or restore.
    • Entities were disabled or renamed, making the working copy difficult to recognize.
    • mDNS discovery found a node that had also been added manually.

    Before changing anything

    Make a current Home Assistant backup and download it somewhere outside the system. Take screenshots of the affected integration, device, entity IDs, and any relevant automation. Record the exact time of the next failure so the log window stays small. If the issue involves radio hardware, do not unplug it while Home Assistant is writing data.

    Step-by-step diagnosis and repair

    1. Open both device pages and record the integration entry, IP address, last-updated behavior, and entity IDs.
    2. Trigger a harmless physical change such as toggling an onboard LED or watching a sensor update; identify the entry receiving fresh state.
    3. Open automations, scripts, dashboards, and scenes that use the stale entity IDs and move them to the live entities before removal.
    4. Create a backup and export or copy the working ESPHome YAML.
    5. Remove only the unavailable integration entry from Settings → Devices & services. Do not delete the working node from the ESPHome dashboard.
    6. Restart Home Assistant once and allow discovery to settle.
    7. If the duplicate returns, compare the node name, API encryption key, static IP, and manual integration host. Keep one consistent discovery method.
    8. Rename entities for clarity only after the device registry is stable.

    How to verify the repair

    Do not declare success immediately after a reload. Repeat the original action several times, then observe the system through at least one normal restart or reconnect cycle. Review the log at the exact test time and confirm that the affected entities update normally. If the problem was intermittent, keep a short note of the previous failure interval and monitor beyond it.

    Common mistakes to avoid

    • Do not wipe the board merely to clean the registry.
    • Do not delete both integrations at once.
    • Do not reuse the same node name for two powered devices on the same network.

    A practical decision rule

    If several unrelated devices fail at the same moment, investigate shared infrastructure: power, network, broker, radio, host load, or a recent update. If only one model or entity fails while everything around it remains stable, focus on that device’s identity, firmware, configuration, and signal path. Rebuilding a healthy shared integration should be the final option, not the first.

    When to restore a backup

    Restore only when you can identify a known-good backup from before a harmful configuration change and you understand what newer changes will be lost. A backup is not a substitute for diagnosing failing hardware, interference, duplicate identifiers, or unstable power; those problems will return after restoration.

    Frequently asked questions

    Will removing the stale entry erase the ESPHome firmware?

    No. Removing an integration entry from Home Assistant does not normally erase firmware from the microcontroller.

    Why did the duplicate return?

    The device may still advertise a different identity, or a manual host entry may coexist with automatic discovery.

    What should I back up?

    The ESPHome YAML, secrets references, API encryption key, and any automation entity mappings.

    Bottom line

    Start with evidence from the affected device, integration, trace, or topic. Protect the working system, change one variable, and verify through the original failure condition. That is slower than random resets for five minutes and much faster than rebuilding an entire smart home unnecessarily.

    Deep diagnostic worksheet

    Use this worksheet when the quick repair does not hold. The objective is to build a timestamped explanation of the duplicate ESPHome entry problem rather than accumulate unrelated changes. Keep credentials and private addresses out of screenshots or public reports.

    1. Write down both device IDs, integration-entry names, host addresses, entity counts, and last-updated times before deleting anything. Similar display names do not prove that two records represent the same API identity.
    2. Trigger a harmless live change and watch which entity updates. The responding entry is the operational record; an unavailable copy may be stale, but automation references must still be migrated before removal.
    3. Open the ESPHome YAML and record the node name, friendly name, API encryption configuration, Wi-Fi addressing, and any name_add_mac_suffix behavior. Identity changes can produce new discovery records.
    4. Search Home Assistant automations, scripts, scenes, dashboards, and helpers for entity IDs belonging to both copies. A clean device list is not useful if hidden references break afterward.
    5. Compare manual integration configuration with automatic mDNS discovery. A manually added IP plus a separately discovered identity can look like duplication even when only one board exists.
    6. Confirm that two physical boards are not using the same node name or static IP. Power one board at a time if necessary and observe which record changes availability.
    7. If the board was replaced, decide deliberately whether the new device should inherit the old logical role. Rename and remap entities after connectivity is stable, not during discovery troubleshooting.
    8. Back up the YAML, secrets reference, encryption key, and automation mappings. Removing a Home Assistant integration entry normally does not erase firmware, but losing configuration still creates recovery work.

    Failure-pattern examples

    • Old entry unavailable, new entry healthy after a rename: migrate every reference to the new entities, verify automations, then remove only the stale integration entry.
    • Two entries alternate availability: check duplicate IP addresses, duplicate node names, cloned firmware, and whether two boards share credentials or network identity.
    • Duplicate returns after deletion: identify the discovery advertisement and any manual host entry. Do not keep deleting the symptom while the device continues advertising a second identity.
    • Replacement board should assume the old role: preserve a clear mapping of entity IDs and update consumers methodically; do not expect identical registry identity automatically.
    • mDNS is disabled or blocked: follow ESPHome guidance by using stable addressing and a deliberate manual integration rather than relying on discovery that cannot traverse the network.

    Advanced notes that prevent false fixes

    • The node name affects hostname and discovery, while the friendly name mainly affects presentation; changing them has different consequences.
    • API encryption keys must match between firmware and Home Assistant. A mismatch is a connection problem, not evidence that the registry should be erased.
    • Disabled entities can make two entries look different, so compare full entity lists rather than only dashboard cards.
    • Entity IDs are user-facing references; device and config-entry identifiers are separate registry layers.
    • Restoring an old Home Assistant backup while devices run newer identities can reintroduce stale registry records.
    • Document the final node name, IP strategy, encryption-key storage, and entity mapping after cleanup.

    Final verification checklist

    Verification must reproduce the original condition. A page reload or one successful command is insufficient for an intermittent problem.

    • Only one intended integration entry remains.
    • The live device reconnects after a normal restart.
    • Every automation and dashboard uses current entity IDs.
    • No duplicate IP or hostname exists on the LAN.
    • Encryption works without repeated authentication errors.
    • The duplicate does not return after the next discovery cycle.

    Official reference

    Technical behavior and terminology were checked against ESPHome Native API documentation. Interface labels and capabilities can change, so use the current official page when your installed version differs.

    Related Troubliq guides

  • ZHA Device Interview Fails Near the End: A Safe Home Assistant Recovery Guide

    ZHA Device Interview Fails Near the End: A Safe Home Assistant Recovery Guide

    A Zigbee device that appears in ZHA, reaches most of the interview, and then fails is not the same problem as a device that never enters pairing mode. The radio has usually heard the device; the failure happens while Home Assistant requests endpoints, clusters, or basic attributes. That distinction prevents unnecessary coordinator resets.

    What this failure pattern tells you

    This guide uses a narrow diagnostic sequence: confirm the pattern, protect the current configuration, test the smallest likely cause, and verify the result before moving deeper. That approach avoids turning one failed device or automation into a site-wide recovery job.

    • The device is discovered but remains partially configured or marked unavailable.
    • The interview repeatedly stalls near completion.
    • A battery device pairs only when held beside the coordinator.
    • The same device worked before a battery change, migration, or factory reset.

    Most likely causes

    • The sleepy device stopped responding before the interview finished.
    • The device still remembers an earlier Zigbee network.
    • Weak signal or 2.4 GHz interference interrupted cluster discovery.
    • The coordinator or router is busy after a restart.
    • A manufacturer-specific quirk needs a fresh interview or newer device support.

    Before changing anything

    Make a current Home Assistant backup and download it somewhere outside the system. Take screenshots of the affected integration, device, entity IDs, and any relevant automation. Record the exact time of the next failure so the log window stays small. If the issue involves radio hardware, do not unplug it while Home Assistant is writing data.

    Step-by-step diagnosis and repair

    1. Create a Home Assistant backup before changing the Zigbee network.
    2. Replace or fully charge the device battery; low voltage can allow pairing but fail sustained communication.
    3. Factory-reset the device using its manufacturer procedure, then keep it awake throughout the interview by tapping its pairing button every few seconds.
    4. Pair within a few feet of a powered Zigbee router or the coordinator, but keep USB coordinators away from USB 3 cables, hubs, Wi-Fi access points, and metal enclosures.
    5. In ZHA, remove only the failed device entry—not the coordinator—then start Add Device and retry once.
    6. If it still fails, restart Home Assistant once, wait for the Zigbee network to settle, and review Settings → System → Logs for ZHA, zigpy, endpoint, timeout, or unsupported-cluster messages.
    7. Test another known-good device. If only one model fails, treat it as device-specific rather than rebuilding the network.

    How to verify the repair

    Do not declare success immediately after a reload. Repeat the original action several times, then observe the system through at least one normal restart or reconnect cycle. Review the log at the exact test time and confirm that the affected entities update normally. If the problem was intermittent, keep a short note of the previous failure interval and monitor beyond it.

    Common mistakes to avoid

    • Do not delete the ZHA integration or erase the coordinator as a first step.
    • Do not repeatedly power-cycle the coordinator during an interview.
    • Do not assume a high percentage means the device is almost healthy; one missing endpoint can prevent usable configuration.

    A practical decision rule

    If several unrelated devices fail at the same moment, investigate shared infrastructure: power, network, broker, radio, host load, or a recent update. If only one model or entity fails while everything around it remains stable, focus on that device’s identity, firmware, configuration, and signal path. Rebuilding a healthy shared integration should be the final option, not the first.

    When to restore a backup

    Restore only when you can identify a known-good backup from before a harmful configuration change and you understand what newer changes will be lost. A backup is not a substitute for diagnosing failing hardware, interference, duplicate identifiers, or unstable power; those problems will return after restoration.

    Frequently asked questions

    Should I re-pair every Zigbee device?

    No. A single interview failure rarely justifies rebuilding a working mesh.

    Can Wi-Fi cause this?

    Yes. Zigbee and 2.4 GHz Wi-Fi share spectrum, and proximity to access points or USB 3 equipment can make an intermittent failure look like a software bug.

    When should I check device support?

    After a clean reset, strong-signal pairing, and a second controlled attempt still fail for the same model.

    Bottom line

    Start with evidence from the affected device, integration, trace, or topic. Protect the working system, change one variable, and verify through the original failure condition. That is slower than random resets for five minutes and much faster than rebuilding an entire smart home unnecessarily.

    Deep diagnostic worksheet

    Use this worksheet when the quick repair does not hold. The objective is to build a timestamped explanation of the ZHA interview problem rather than accumulate unrelated changes. Keep credentials and private addresses out of screenshots or public reports.

    1. Record the device manufacturer, model, mains-or-battery status, pairing distance, and the exact stage where the interview stops. These details distinguish a sleepy end-device problem from a coordinator-wide problem.
    2. Open the device page and note which entities, endpoints, and diagnostic values were created. A partially created device proves that discovery occurred even if cluster interrogation did not finish.
    3. Compare the failure with a known-good Zigbee device paired from the same location. If the second device also struggles, investigate radio placement, interference, and coordinator health before blaming one product.
    4. For battery devices, keep the unit awake throughout pairing according to its manual. Many devices sleep quickly after joining, which can interrupt the exchange of endpoint and attribute information.
    5. Check the Home Assistant log at the exact pairing time. Preserve the manufacturer, model, IEEE address suffix, exception name, and retry sequence while removing credentials before sharing a report.
    6. Inspect whether the device was previously joined to another coordinator. A proper factory reset is model-specific; merely removing a battery often does not erase the former network.
    7. Move a USB coordinator away from USB 3 equipment and metal using a quality extension cable. Change only placement first; channel changes can require wider planning and should not be casual experiments.
    8. After a failed attempt, remove only the incomplete device, restart nothing unless logs indicate a stuck integration, and allow the mesh to settle before one controlled retry.

    Failure-pattern examples

    • Fails only with one battery sensor: replace the battery, perform the documented factory reset, pair close to a stable router or coordinator, and keep the sensor awake. Do not rebuild ZHA.
    • Several new devices fail from every room: test radio placement, host load, coordinator connectivity, and interference. Preserve the network database and investigate shared infrastructure.
    • Device joins and controls work but some entities are missing: allow time for initialization, check disabled entities, confirm model support, and collect signatures before considering a device handler issue.
    • Pairing works beside the coordinator but not at installation location: the join succeeded; the mesh path is the likely weakness. Add or reposition appropriate powered routers rather than repeatedly pairing.
    • Failure began after a host migration: confirm the correct serial device path, coordinator type, extension cable, and restored Zigbee data before changing device firmware.

    Advanced notes that prevent false fixes

    • Treat a high interview percentage as a progress indicator, not proof that the remaining step is unimportant.
    • Avoid channel changes unless interference evidence supports them and you understand how every device will be affected.
    • A custom quirk should be considered only after obtaining the complete device signature and checking existing support.
    • Battery voltage reported by a device can lag; a fresh known-good battery is a stronger test than one stale percentage reading.
    • Powered Zigbee routers must be compatible and placed where they provide a useful route, not clustered beside the coordinator.
    • When reporting a bug, include reproducible steps, ZHA diagnostics, logs, coordinator model and firmware, Home Assistant version, and device signature.

    Final verification checklist

    Verification must reproduce the original condition. A page reload or one successful command is insufficient for an intermittent problem.

    • Device remains available after the normal sleep interval.
    • All expected endpoints and entities appear or unsupported ones are documented.
    • A control or sensor update succeeds from the final installation location.
    • The log contains no repeating interview retries.
    • The test survives one normal Home Assistant restart.
    • No unrelated Zigbee devices became unstable.

    Official reference

    Technical behavior and terminology were checked against Home Assistant ZHA documentation. Interface labels and capabilities can change, so use the current official page when your installed version differs.

    Related Troubliq guides