home-assistant/core · error · ConfigEntryNotReady

device_not_found

device_not_found

Error message

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

What it means

Raised as ConfigEntryNotReady (with translation_key device_not_found) by the Avea integration when async_ble_device_from_address() returns None — no connectable Bluetooth advertisement seen for the configured MAC address. The placeholders include address and a human-readable reachability diagnostic (from async_address_reachability_diagnostics). Setup retries automatically while the bulb remains undiscovered.

Source

Thrown at homeassistant/components/avea/__init__.py:27

)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ADDRESS, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady

from .const import DOMAIN

type AveaConfigEntry = ConfigEntry[avea.Bulb]

PLATFORMS: list[Platform] = [Platform.LIGHT]


async def async_setup_entry(hass: HomeAssistant, entry: AveaConfigEntry) -> bool:
    """Set up Avea from a config entry."""
    address = entry.data[CONF_ADDRESS]
    ble_device = async_ble_device_from_address(hass, address, connectable=True)
    if not ble_device:
        raise ConfigEntryNotReady(
            translation_domain=DOMAIN,
            translation_key="device_not_found",
            translation_placeholders={
                "address": address,
                "reason": async_address_reachability_diagnostics(
                    hass,
                    address.upper(),
                    BluetoothReachabilityIntent.CONNECTION,
                ),
            },
        )

    entry.runtime_data = avea.Bulb(ble_device)
    await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
    return True


async def async_unload_entry(hass: HomeAssistant, entry: AveaConfigEntry) -> bool:

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Power on the Avea bulb and bring it within range of the Home Assistant Bluetooth adapter, then let setup retry.
  2. Verify the configured CONF_ADDRESS matches the bulb's current BLE MAC (check via the Bluetooth integration's discovered devices).
  3. Ensure the Bluetooth integration and adapter are healthy (Settings > Devices > Bluetooth shows adapters).
  4. If the bulb rotates its MAC, re-pair it so a fresh config entry with the current address is created.
Defensive patterns

Strategy: validation

Validate before calling

from homeassistant.components.bluetooth import async_ble_device_from_address

def bulb_discovered(hass, address: str) -> bool:
    return async_ble_device_from_address(hass, address.upper(), connectable=True) is not None

Try / catch

from homeassistant.exceptions import ConfigEntryNotReady

try:
    await async_setup_entry(hass, entry)
except ConfigEntryNotReady as err:
    # read translation placeholders: 'reason' explains why the address is unreachable
    handle_bluetooth_retry(err)

Prevention

When it happens

Trigger: async_setup_entry runs before the BLE scanner has ever seen the bulb: bulb powered off, out of range, using a random resolvable address, or Bluetooth adapter not ready. async_ble_device_from_address(hass, address, connectable=True) needs a recent advertisement cache entry.

Common situations: Bulb unplugged or dead; HA started before the BLE adapter was up; MAC address typo in config entry; bulb uses rotating MAC addresses so the stored address never matches; adapter on USB hub with poor reception.

Related errors


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