{"record":{"id":"59de6a36c63a72b0","repo":"home-assistant/core","slug":"unable-to-fetch-data-err-59de6a","errorCode":null,"errorMessage":"Unable to fetch data: {err}","messagePattern":"Unable to fetch data: (.+?)","errorType":"exception","errorClass":"UpdateFailed","httpStatus":null,"severity":"warning","filePath":"homeassistant/components/airthings_ble/coordinator.py","lineNumber":104,"sourceCode":"                ) from err\n\n            self.hass.config_entries.async_update_entry(\n                self.config_entry,\n                data={**self.config_entry.data, DEVICE_MODEL: data.model.value},\n            )\n            self.update_interval = timedelta(\n                seconds=DEVICE_SPECIFIC_SCAN_INTERVAL.get(\n                    data.model.value, DEFAULT_SCAN_INTERVAL\n                )\n            )\n\n    @override\n    async def _async_update_data(self) -> AirthingsDevice:\n        \"\"\"Get data from Airthings BLE.\"\"\"\n        try:\n            data = await self.airthings.update_device(self.ble_device)\n        except Exception as err:\n            raise UpdateFailed(f\"Unable to fetch data: {err}\") from err\n        return data\n","sourceCodeStart":86,"sourceCodeEnd":106,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/airthings_ble/coordinator.py#L86-L106","documentation":"UpdateFailed raised on every airthings_ble coordinator refresh when the BLE update_device() call raises any exception — the generic catch-all for periodic BLE polling failures. Entities become unavailable until a poll succeeds.","triggerScenarios":"airthings.update_device(self.ble_device) raises during the scheduled poll: GATT connect timeout, device out of range, stale BLEDevice handle after adapter restart, encryption error, or the device sleeping and not responding within the timeout.","commonSituations":"Intermittent BLE range (device at the edge of reception), Bluetooth adapter instability (USB power management), too many BLE devices saturating the adapter, or a dead battery.","solutions":["Improve signal path: move the device or add a Bluetooth proxy near it.","Disable USB autosuspend / power management on the Bluetooth adapter if it disappears periodically.","Replace the device battery.","Verify the BLE address is stable (device does not use a rotating MAC).","Accept occasional failures — single missed polls self-heal on the next interval; only persistent failures need action."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":"def is_airthings_ble_poll_failed(err: Exception) -> bool:\n    return isinstance(err, UpdateFailed) and str(err).startswith(\"Unable to fetch data\")","tryCatchPattern":"try:\n    await coordinator.async_refresh()\nexcept UpdateFailed:\n    # BLE polls are inherently lossy: single failures self-heal on the next interval\n    pass","preventionTips":["Position a Bluetooth proxy within a few meters of BLE devices.","Disable USB power management (autosuspend) on the Bluetooth adapter.","Treat isolated update failures as noise; act only on consecutive failures."],"tags":["home-assistant","bluetooth","polling","airthings"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}