{"record":{"id":"8907e34aff4bc7df","repo":"home-assistant/core","slug":"error-8907e3","errorCode":null,"errorMessage":"{error}","messagePattern":"\\{error\\}","errorType":"exception","errorClass":"UpdateFailed","httpStatus":null,"severity":"error","filePath":"homeassistant/components/airzone/coordinator.py","lineNumber":53,"sourceCode":"        \"\"\"Initialize.\"\"\"\n        self.airzone = airzone\n\n        super().__init__(\n            hass,\n            _LOGGER,\n            config_entry=config_entry,\n            name=DOMAIN,\n            update_interval=SCAN_INTERVAL,\n        )\n\n    @override\n    async def _async_update_data(self) -> dict[str, Any]:\n        \"\"\"Update data via library.\"\"\"\n        async with timeout(AIOAIRZONE_DEVICE_TIMEOUT_SEC):\n            try:\n                await self.airzone.update()\n            except AirzoneError as error:\n                raise UpdateFailed(error) from error\n            return self.airzone.data()\n","sourceCodeStart":35,"sourceCodeEnd":55,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/airzone/coordinator.py#L35-L55","documentation":"UpdateFailed raised by the Airzone local DataUpdateCoordinator when self.airzone.update() raises AirzoneError. The coordinator wraps every library exception into UpdateFailed so Home Assistant marks the config entry as needing retry with the library's message embedded. The whole poll runs under an asyncio timeout of AIOAIRZONE_DEVICE_TIMEOUT_SEC.","triggerScenarios":"Periodic coordinator refresh where the local WebServer returns an HTTP error, malformed JSON, or raises an aioairzone AirzoneError; also triggered indirectly when the timeout() context cancels a slow request (the library surfaces it as AirzoneError).","commonSituations":"WebServer briefly offline or rebooting; network flakiness (Wi-Fi HVAC bridges); firmware that closes connections; the update interval colliding with a slow device under load.","solutions":["Check device/network reachability from the HA host (ping / HTTP GET to the WebServer).","If failures are intermittent, rely on the coordinator's automatic retry with backoff — single UpdateFailed events are usually transient.","Reload the integration after the device is back; persistent failure means the local API is broken (check firmware).","For custom coordinators, keep the timeout wrapper and map library errors to UpdateFailed exactly as this code does."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"from homeassistant.exceptions import ConfigEntryNotReady\n\ntry:\n    await coordinator.async_config_entry_first_refresh()\nexcept (ConfigEntryNotReady, UpdateFailed) as err:\n    _LOGGER.warning(\"Airzone initial refresh failed: %s\", err)","preventionTips":["Keep device timeouts (AIOAIRZONE_DEVICE_TIMEOUT_SEC) larger than the WebServer's worst-case response time.","Monitor coordinator last_update_status instead of crashing on single failures.","Fix network instability to the bridge rather than disabling the coordinator."],"tags":["airzone","coordinator","update-failed","network","timeout"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}