home-assistant/core · error · UpdateFailed
Got invalid status from device
Error message
Got invalid status from device
What it means
Raised as UpdateFailed by AdaxLocalCoordinator._async_update_data when AdaxLocal.get_status() returns a falsy value (None or empty dict). The local (LAN) Adax device is expected to answer with a JSON status object; a falsy result means the HTTP request failed or the response could not be parsed, so the coordinator treats the poll as failed.
Source
Thrown at homeassistant/components/adax/coordinator.py:96
hass,
config_entry=entry,
logger=_LOGGER,
name="AdaxLocal",
update_interval=SCAN_INTERVAL,
)
self.adax_data_handler = AdaxLocal(
entry.data[CONF_IP_ADDRESS],
entry.data[CONF_TOKEN],
websession=async_get_clientsession(hass, verify_ssl=False),
)
@override
async def _async_update_data(self) -> dict[str, Any]:
"""Fetch data from the Adax."""
if result := await self.adax_data_handler.get_status():
return cast(dict[str, Any], result)
raise UpdateFailed("Got invalid status from device")
View on GitHub (pinned to 58a3fdb3ea)
Solutions
- Verify the heater is powered on and on the same network as Home Assistant.
- Confirm the configured IP address still routes to the device (ping it); assign a static IP or DHCP reservation.
- Regenerate the local API token from the Adax device's web interface and update the config entry.
- Test the raw endpoint manually (curl http://<ip>/<endpoint> with the token header) to see what the device actually returns.
- If the response is valid but empty, update the adax library — older versions returned None for unexpected JSON shapes.
Defensive patterns
Strategy: retry
Validate before calling
import asyncio, socket
async def device_reachable(ip: str) -> bool:
"""TCP-probe the Adax local API port before relying on it."""
try:
_, writer = await asyncio.open_connection(ip, 80, timeout=3)
writer.close()
return True
except OSError:
return False Try / catch
from homeassistant.exceptions import UpdateFailed
try:
await coordinator.async_refresh()
except UpdateFailed as err:
# falsy status == unreachable/misconfigured local device
_LOGGER.warning("Adax local poll failed: %s", err) Prevention
- Reserve a DHCP address for each Adax heater so the configured IP never drifts.
- Health-check the local endpoint after router or device reboots before expecting entities to update.
- Regenerate and re-enter the local token promptly after device factory resets.
When it happens
Trigger: Calling the local Adax API at entry.data[CONF_IP_ADDRESS] with entry.data[CONF_TOKEN] when the device is unreachable, the IP changed (DHCP), the token is wrong, or the device returns an empty/non-JSON body — get_status() then returns None and this UpdateFailed fires.
Common situations: Device powered off or rebooting, DHCP reassigned the heater's IP after router restart, wrong or expired local token generated from the device's web UI, or the device firmware no longer serving the local API endpoint.
Related errors
- Error communicating with API: {e}
- update_failed
- {error}
- The Altruist {device_id} is unavailable: {ex}
- Missing price data, skipping update
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/86261eee03ef13aa.
Report an issue: GitHub.