The problem
The iaqualink integration polls the iAquaLink cloud API every 30 seconds. The cloud API regularly returns HTTP 500 Internal Server Error responses during normal operation — not as a rate-limit response, not as an authentication problem, but as transient backend failures.
Each failed polling cycle (after retries are exhausted) marks every entity under the iAquaLink system as unavailable for the ~15-30 second retry window, then restores them when the next polling cycle succeeds. The result is constant entity flapping: dashboards repeatedly show "unavailable" and re-populate, automations fire on the phantom state changes, and history/statistics get corrupted.
Over the last 7 days, my logs contain 761 occurrences of:
2026-05-31 14:39:49.047 ERROR (MainThread) [homeassistant.components.iaqualink.coordinator] Error fetching iaqualink_[REDACTED] data: Unable to update iAquaLink system [REDACTED]: Unexpected response: 500 Internal Server Error
2026-05-31 14:35:09.045 ERROR (MainThread) [homeassistant.components.iaqualink.coordinator] Error fetching iaqualink_[REDACTED] data: Unable to update iAquaLink system [REDACTED]: Unexpected response: 500 Internal Server Error
(continues, total ~761 errors over 7 days)
That averages ~108 errors per day, or roughly one every 13 minutes, with cluster periods of one every 1-3 minutes. Every error event flips all my iAquaLink-backed entities (pool climate, pool/spa switches, heater states, etc.) to unavailable.
What's happening (best understanding)
The iAquaLink cloud API is the underlying source of the 500 errors. This is server-side and outside the integration's control.
The integration's DataUpdateCoordinator correctly retries, fails, and marks entities unavailable — which is the standard DataUpdateCoordinator behavior.
However, when the API is this unreliable, the standard behavior produces enough false unavailable windows that the integration is effectively unusable for automations or stable dashboards.
Suggested improvements
Stale-data mode — When the API returns a transient 5xx error, retain the last successful state values rather than going unavailable. The Nest integration and several others handle transient cloud errors this way. An available attribute or a separate "stale" diagnostic could indicate the data is from the last successful poll.
Exponential backoff on repeated failures — If the integration sees N consecutive 500s, back off the polling interval (e.g., 30s → 60s → 120s) rather than re-trying at the standard cadence. Reduces log noise and pressure on Jandy's servers. Resume normal cadence after a successful poll.
Configurable polling interval — The 30-second poll is hardcoded in the coordinator. A configurable interval (default 30s, range 30s-5m) would let users with stable pool setups reduce poll pressure.
Home Assistant Core version: 2026.5.4
Integration: iaqualink (core)
iAquaLink controller:Aqualink
Approximate entity count affected: ~20
Log search pattern: grep "iaqualink.coordinator" home-assistant.log | wc -l
The problem
The iaqualink integration polls the iAquaLink cloud API every 30 seconds. The cloud API regularly returns HTTP 500 Internal Server Error responses during normal operation — not as a rate-limit response, not as an authentication problem, but as transient backend failures.
Each failed polling cycle (after retries are exhausted) marks every entity under the iAquaLink system as unavailable for the ~15-30 second retry window, then restores them when the next polling cycle succeeds. The result is constant entity flapping: dashboards repeatedly show "unavailable" and re-populate, automations fire on the phantom state changes, and history/statistics get corrupted.
Over the last 7 days, my logs contain 761 occurrences of:
2026-05-31 14:39:49.047 ERROR (MainThread) [homeassistant.components.iaqualink.coordinator] Error fetching iaqualink_[REDACTED] data: Unable to update iAquaLink system [REDACTED]: Unexpected response: 500 Internal Server Error
2026-05-31 14:35:09.045 ERROR (MainThread) [homeassistant.components.iaqualink.coordinator] Error fetching iaqualink_[REDACTED] data: Unable to update iAquaLink system [REDACTED]: Unexpected response: 500 Internal Server Error
(continues, total ~761 errors over 7 days)
That averages ~108 errors per day, or roughly one every 13 minutes, with cluster periods of one every 1-3 minutes. Every error event flips all my iAquaLink-backed entities (pool climate, pool/spa switches, heater states, etc.) to unavailable.
What's happening (best understanding)
The iAquaLink cloud API is the underlying source of the 500 errors. This is server-side and outside the integration's control.
The integration's DataUpdateCoordinator correctly retries, fails, and marks entities unavailable — which is the standard DataUpdateCoordinator behavior.
However, when the API is this unreliable, the standard behavior produces enough false unavailable windows that the integration is effectively unusable for automations or stable dashboards.
Suggested improvements
Stale-data mode — When the API returns a transient 5xx error, retain the last successful state values rather than going unavailable. The Nest integration and several others handle transient cloud errors this way. An available attribute or a separate "stale" diagnostic could indicate the data is from the last successful poll.
Exponential backoff on repeated failures — If the integration sees N consecutive 500s, back off the polling interval (e.g., 30s → 60s → 120s) rather than re-trying at the standard cadence. Reduces log noise and pressure on Jandy's servers. Resume normal cadence after a successful poll.
Configurable polling interval — The 30-second poll is hardcoded in the coordinator. A configurable interval (default 30s, range 30s-5m) would let users with stable pool setups reduce poll pressure.
Home Assistant Core version: 2026.5.4
Integration: iaqualink (core)
iAquaLink controller:Aqualink
Approximate entity count affected: ~20
Log search pattern: grep "iaqualink.coordinator" home-assistant.log | wc -l