home-assistant/core · warning · ConfigEntryNotReady

Could not find Airthings device with address

Error message

Could not find Airthings device with address {address}: {reason}

What it means

ConfigEntryNotReady raised during airthings_ble coordinator setup when no Bluetooth device matching the config entry's unique_id (the BLE address) is currently known to the Bluetooth integration. The message is fully translated with the address and a reachability diagnostic reason explaining why the address is unknown or unreachable. Home Assistant will retry setup as Bluetooth discovery continues.

Solutions

  1. Bring the Airthings device close to the Home Assistant host or a Bluetooth proxy and wake it (press its button).
  2. Confirm the Bluetooth integration is active and an adapter or proxy is available (Settings > Devices & Services > Bluetooth).
  3. Check the 'reason' text — it states whether the address was never seen vs previously known, which distinguishes discovery issues from range issues.
  4. Verify the device's battery.
  5. Wait — ConfigEntryNotReady means setup retries automatically as discovery proceeds.
Defensive patterns

Strategy: validation

Validate before calling

from homeassistant.components import bluetooth

def ble_device_known(hass, address: str) -> bool:
    return bluetooth.async_ble_device_from_address(hass, address) is not None

Type guard

def is_airthings_ble_not_ready(err: Exception) -> bool:
    return isinstance(err, ConfigEntryNotReady) and getattr(err, "translation_domain", None) == "airthings_ble"

Try / catch

try:
    await coordinator.async_config_entry_first_refresh()
except ConfigEntryNotReady:
    # normal during BLE discovery: no action needed, HA retries as advertisements arrive
    pass

Prevention

When it happens

Trigger: async_ble_device_from_address returns None at setup time: device not yet discovered, out of range, powered off, battery dead, or no Bluetooth adapter/interface scanning. The placeholder 'reason' comes from async_address_reachability_diagnostics describing whether the address was ever seen and its last known state.

Common situations: Device battery empty, device too far from the Bluetooth proxy/adapter, Bluetooth adapter missing or HCI down, device MAC changed (some devices randomize), or setup raced ahead of first BLE advertisement.

Related errors


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/026b6f151d0a5fc8. Report an issue: GitHub.

Appendix: source

Thrown at homeassistant/components/airthings_ble/coordinator.py:65

            _LOGGER,
            config_entry=entry,
            name=DOMAIN,
            update_interval=timedelta(seconds=interval),
        )

    @override
    async def _async_setup(self) -> None:
        """Set up the coordinator."""
        address = self.config_entry.unique_id

        assert address is not None

        await close_stale_connections_by_address(address)

        ble_device = bluetooth.async_ble_device_from_address(self.hass, address)

        if not ble_device:
            raise ConfigEntryNotReady(
                translation_domain=DOMAIN,
                translation_key="device_not_found",
                translation_placeholders={
                    "address": address,
                    "reason": bluetooth.async_address_reachability_diagnostics(
                        self.hass,
                        address.upper(),
                        BluetoothReachabilityIntent.CONNECTION,
                    ),
                },
            )
        self.ble_device = ble_device

        if DEVICE_MODEL not in self.config_entry.data:
            _LOGGER.debug("Fetching device info for migration")
            try:
                data = await self.airthings.update_device(self.ble_device)
            except Exception as err:

View on GitHub (pinned to 58a3fdb3ea)