{"record":{"id":"e0c42f714e650072","repo":"home-assistant/core","slug":"brunt-not-ready-to-connect","errorCode":null,"errorMessage":"Brunt not ready to connect.","messagePattern":"Brunt not ready to connect\\.","errorType":"exception","errorClass":"ConfigEntryNotReady","httpStatus":null,"severity":"error","filePath":"homeassistant/components/brunt/coordinator.py","lineNumber":56,"sourceCode":"            _LOGGER,\n            config_entry=config_entry,\n            name=\"brunt\",\n            update_interval=REGULAR_INTERVAL,\n        )\n\n    @override\n    async def _async_setup(self) -> None:\n        session = async_get_clientsession(self.hass)\n\n        self.bapi = BruntClientAsync(\n            username=self.config_entry.data[CONF_USERNAME],\n            password=self.config_entry.data[CONF_PASSWORD],\n            session=session,\n        )\n        try:\n            await self.bapi.async_login()\n        except ServerDisconnectedError as exc:\n            raise ConfigEntryNotReady(\"Brunt not ready to connect.\") from exc\n        except ClientResponseError as exc:\n            raise ConfigEntryAuthFailed(\n                \"Brunt could not connect with username:\"\n                f\" {self.config_entry.data[CONF_USERNAME]}.\"\n            ) from exc\n\n    @override\n    async def _async_update_data(self) -> dict[str | None, Thing]:\n        \"\"\"Fetch data from the Brunt endpoint for all Things.\n\n        Error 403 is the API response for any kind of\n        authentication error (failed password or email)\n        Error 401 is the API response for things that are not\n        part of the account, could happen when a device is\n        deleted from the account.\n        \"\"\"\n        try:\n            async with timeout(10):","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/brunt/coordinator.py#L38-L74","documentation":"ConfigEntryNotReady raised during the Brunt coordinator's _async_setup when bapi.async_login() fails with ServerDisconnectedError — the Brunt cloud server closed the connection before responding. HA retries setup later; not an auth failure.","triggerScenarios":"Brunt API server restarting or dropping TLS connections; transient outage of the Brunt cloud service; proxy/middlebox terminating the connection during login POST.","commonSituations":"Brunt cloud downtime windows; local network interruptions at the exact login moment; retry loop observed after HA restarts during an upstream outage.","solutions":["Wait — ConfigEntryNotReady retries automatically; most ServerDisconnectedError cases clear on retry","Check Brunt service status / their app to confirm the cloud API is up","If persistent, verify general internet connectivity from the HA host","Reload the integration manually after the outage passes"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"# ConfigEntryNotReady is raised by the framework during setup; HA retries it.\n# Nothing to catch at call sites — check entry state instead:\nif entry.state is ConfigEntryState.SETUP_RETRY:\n    # Brunt cloud unreachable at login; wait for retry","preventionTips":["Treat first-time Brunt setup failures during cloud outages as transient — wait and let HA retry","Confirm internet egress from the HA host before investigating credentials"],"tags":["brunt","config-entry-not-ready","server-disconnected","cloud-api","home-assistant"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}