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

  1. Verify the heater is powered on and on the same network as Home Assistant.
  2. Confirm the configured IP address still routes to the device (ping it); assign a static IP or DHCP reservation.
  3. Regenerate the local API token from the Adax device's web interface and update the config entry.
  4. Test the raw endpoint manually (curl http://<ip>/<endpoint> with the token header) to see what the device actually returns.
  5. 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

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


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/86261eee03ef13aa. Report an issue: GitHub.