home-assistant/core · warning · ConfigEntryNotReady

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

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.

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)

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.