{"record":{"id":"cd50d227f7bf9a41","repo":"home-assistant/core","slug":"airtouch-connection-issue","errorCode":null,"errorMessage":"Airtouch connection issue","messagePattern":"Airtouch connection issue","errorType":"exception","errorClass":"UpdateFailed","httpStatus":null,"severity":"warning","filePath":"homeassistant/components/airtouch4/coordinator.py","lineNumber":43,"sourceCode":"        self, hass: HomeAssistant, entry: AirTouch4ConfigEntry, airtouch: AirTouch\n    ) -> None:\n        \"\"\"Initialize global Airtouch data updater.\"\"\"\n        self.airtouch = airtouch\n\n        super().__init__(\n            hass,\n            _LOGGER,\n            config_entry=entry,\n            name=DOMAIN,\n            update_interval=SCAN_INTERVAL,\n        )\n\n    @override\n    async def _async_update_data(self):\n        \"\"\"Fetch data from Airtouch.\"\"\"\n        await self.airtouch.UpdateInfo()\n        if self.airtouch.Status != AirTouchStatus.OK:\n            raise UpdateFailed(\"Airtouch connection issue\")\n        return {\n            \"acs\": [\n                {\"ac_number\": ac.AcNumber, \"is_on\": ac.IsOn}\n                for ac in self.airtouch.GetAcs()\n            ],\n            \"groups\": [\n                {\n                    \"group_number\": group.GroupNumber,\n                    \"group_name\": group.GroupName,\n                    \"is_on\": group.IsOn,\n                }\n                for group in self.airtouch.GetGroups()\n            ],\n        }\n","sourceCodeStart":25,"sourceCodeEnd":58,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/airtouch4/coordinator.py#L25-L58","documentation":"UpdateFailed raised by the AirTouch 4 coordinator when UpdateInfo() completes without throwing but the client's Status flag is not AirTouchStatus.OK — the library signals a soft failure (bad frame, checksum, or partial response) rather than an exception. All Airtouch entities go unavailable until a poll succeeds with OK status.","triggerScenarios":"self.airtouch.UpdateInfo() returns with Status != OK: the AirTouch A4 controller responded with corrupted/unexpected data, the UDP/TCP session state desynced, or the unit is briefly unreachable and the library reflects it in status rather than raising.","commonSituations":"Network congestion or WiFi dropouts to the AirTouch unit, the controller rebooting or its app connected simultaneously causing session conflicts, or firmware quirks after power events.","solutions":["Check the AirTouch unit is powered and its local app connects fine.","Verify the IP configured for the integration still points at the controller (DHCP changes).","Reduce network interference or move the HA host closer to the unit.","Reload the integration to re-establish the session if status stays non-OK.","If persistent, capture whether Status cycles between OK and error to spot a polling-rate issue."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"from airtouch4pyapi import AirTouchStatus\n\nasync def airtouch_healthy(airtouch) -> bool:\n    await airtouch.UpdateInfo()\n    return airtouch.Status == AirTouchStatus.OK","typeGuard":"def is_airtouch_connection_issue(err: Exception) -> bool:\n    return isinstance(err, UpdateFailed) and str(err) == \"Airtouch connection issue\"","tryCatchPattern":"try:\n    await airtouch.UpdateInfo()\n    if airtouch.Status != AirTouchStatus.OK:\n        # soft failure: status flag instead of exception; reload integration to reset session\n        raise UpdateFailed(\"Airtouch connection issue\")\nexcept UpdateFailed:\n    await hass.config_entries.async_reload(entry.entry_id)","preventionTips":["Reserve the AirTouch controller's IP address.","Avoid running the vendor app and Home Assistant in conflicting simultaneous sessions if the unit misbehaves.","Reload the integration after controller power events to reset the client session."],"tags":["home-assistant","airtouch","hvac","network","coordinator"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}