{"record":{"id":"10aa8371e58ba3b6","repo":"home-assistant/core","slug":"configentrynotready-10aa83","errorCode":null,"errorMessage":"ConfigEntryNotReady","messagePattern":"ConfigEntryNotReady","errorType":"exception","errorClass":"ConfigEntryNotReady","httpStatus":null,"severity":"error","filePath":"homeassistant/components/bond/__init__.py","lineNumber":70,"sourceCode":"    host = entry.data[CONF_HOST]\n    token = entry.data[CONF_ACCESS_TOKEN]\n    config_entry_id = entry.entry_id\n\n    bond = Bond(\n        host=host,\n        token=token,\n        timeout=ClientTimeout(total=_API_TIMEOUT),\n        session=async_get_clientsession(hass),\n        requestor_uuid=RequestorUUID.HOME_ASSISTANT,\n    )\n    hub = BondHub(bond, host)\n    try:\n        await hub.setup()\n    except ClientResponseError as ex:\n        if ex.status == HTTPStatus.UNAUTHORIZED:\n            _LOGGER.error(\"Bond token no longer valid: %s\", ex)\n            return False\n        raise ConfigEntryNotReady from ex\n    except (ClientError, TimeoutError, OSError) as error:\n        raise ConfigEntryNotReady from error\n\n    bpup_subs = BPUPSubscriptions()\n    stop_bpup = await start_bpup(host, bpup_subs)\n\n    @callback\n    def _async_stop_event(*_: Any) -> None:\n        stop_bpup()\n\n    entry.async_on_unload(_async_stop_event)\n    entry.async_on_unload(\n        hass.bus.async_listen(EVENT_HOMEASSISTANT_STOP, _async_stop_event)\n    )\n    entry.runtime_data = BondData(hub, bpup_subs)\n\n    if not entry.unique_id:\n        hass.config_entries.async_update_entry(entry, unique_id=hub.bond_id)","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/bond/__init__.py#L52-L88","documentation":"ConfigEntryNotReady is raised by the bond integration when hub.setup() fails with aiohttp ClientResponseError carrying any HTTP status other than 401 (401 is handled separately by logging an invalid-token error and returning False). The entry enters HA's retry-with-backoff state; the underlying HTTP status is preserved as __cause__.","triggerScenarios":"hub.setup() calls the Bond Cloud/local Bond hub REST API (e.g. /v2/sys/version) and gets a 4xx/5xx other than 401: 403 (token valid but forbidden), 404 (wrong endpoint for hub firmware), 500/503 (hub overload or cloud outage).","commonSituations":"Bond hub firmware too old/new for the API version used, Bond Cloud transient outage, hub briefly returning 5xx while rebooting, token with insufficient scope producing 403.","solutions":["Check the Bond Home app / hub LED to confirm the hub is healthy and firmware is current; update hub firmware.","Inspect the chained ClientResponseError status in HA debug logs to identify 403/404/5xx and act accordingly.","For 403, re-add the entry to regenerate the token (401-like handling does not cover 403).","Reload the entry after hub/cloud recovery; ConfigEntryNotReady retries are automatic with backoff."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    await hub.setup()\nexcept ClientResponseError as ex:\n    if ex.status == HTTPStatus.UNAUTHORIZED:\n        _LOGGER.error(\"Bond token no longer valid: %s\", ex)\n        return False\n    raise ConfigEntryNotReady from ex","preventionTips":["Keep Bond hub firmware current so REST endpoints match the integration's expectations.","Inspect the chained ClientResponseError.status to distinguish 403/404/5xx from connectivity.","Use the Bond app to confirm the hub is online before debugging HA."],"tags":["home-assistant","bond","http","config-entry","retry"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}