home-assistant/core · error · UpdateFailed

Station '{config_entry.title}' did not report any data

Error message

Station '{config_entry.title}' did not report any data

What it means

Raised as UpdateFailed when get_device_details succeeds but the response dict contains no 'lastData' key (API_LAST_DATA is None). The Ambient API returned a station record with no measurements, so the coordinator has no sensor data to publish. This is a data-shape problem, not a transport problem: the station exists but reported nothing.

Source

Thrown at homeassistant/components/ambient_network/coordinator.py:57

            update_interval=SCAN_INTERVAL,
        )
        self.api = api

    @override
    async def _async_update_data(self) -> dict[str, Any]:
        """Fetch the latest data from the Ambient Network."""

        try:
            response = await self.api.get_device_details(
                self.config_entry.data[CONF_MAC]
            )
        except RequestError as ex:
            raise UpdateFailed("Cannot connect to Ambient Network") from ex

        self.station_name = get_station_name(response)

        if (last_data := response.get(API_LAST_DATA)) is None:
            raise UpdateFailed(
                f"Station '{self.config_entry.title}' did not report any data"
            )

        # Some stations do not report a "created_at" or "dateutc".
        # See https://github.com/home-assistant/core/issues/116917
        if (ts := last_data.get("created_at")) is not None or (
            ts := last_data.get("dateutc")
        ) is not None:
            self.last_measured = datetime.fromtimestamp(
                ts / 1000, tz=dt_util.DEFAULT_TIME_ZONE
            )

        return cast(dict[str, Any], last_data)

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Confirm the station shows live data in the Ambient Weather app/portal for the same account.
  2. Verify the MAC address in the config entry matches the physical station.
  3. If the station is new, wait for it to post its first readings; the coordinator retries automatically.
  4. If persistent, re-create the config entry via the discovery/config flow.
Defensive patterns

Strategy: validation

Validate before calling

response = await api.get_device_details(mac)
if not isinstance(response, dict) or response.get('lastData') is None:
    # station has no data yet; skip refresh instead of raising
    return self.data

Type guard

def has_last_data(response: dict[str, Any]) -> bool:
    return isinstance(response, dict) and response.get('lastData') is not None

Try / catch

Catch UpdateFailed and inspect whether prior refreshes succeeded; a first-run failure on a new station is expected until the station posts data.

Prevention

When it happens

Trigger: The Ambient API response for the configured MAC lacks the lastData field entirely, or it is null. Happens for newly registered stations that have not yet pushed their first reading, or stations that went offline and were purged from the cloud.

Common situations: Station not yet provisioned/synced on the Ambient cloud, a typo'd or stale MAC address in the config entry pointing at a phantom device, or a temporary API glitch returning a partial record.

Related errors


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