home-assistant/core · warning · UpdateFailed

No data was returned from AirNow

Error message

No data was returned from AirNow

What it means

Raised by the AirNow coordinator when the API call succeeds but returns an empty observation list for the requested lat/long. UpdateFailed with a literal message; the entry retries on its interval but will keep failing until the location has reporting stations.

Source

Thrown at homeassistant/components/airnow/coordinator.py:84

            name=DOMAIN,
            update_interval=update_interval,
        )

    @override
    async def _async_update_data(self) -> dict[str, Any]:
        """Update data via library."""
        data: dict[str, Any] = {}
        try:
            obs = await self.airnow.observations.latLong(
                self.latitude,
                self.longitude,
            )

        except (AirNowError, ClientConnectorError, InvalidJsonError) as error:
            raise UpdateFailed(error) from error

        if not obs:
            raise UpdateFailed("No data was returned from AirNow")

        max_aqi = 0
        max_aqi_level = 0
        max_aqi_desc = ""
        max_aqi_poll = ""
        for obv in obs:
            # Convert AQIs to Concentration
            pollutant = obv[ATTR_API_AQI_PARAM]
            concentration = aqi_to_concentration(obv[ATTR_API_AQI], pollutant)
            data[obv[ATTR_API_AQI_PARAM]] = concentration

            # Overall AQI is the max of all pollutant AQIs
            if obv[ATTR_API_AQI] > max_aqi:
                max_aqi = obv[ATTR_API_AQI]
                max_aqi_level = obv[ATTR_API_CATEGORY][ATTR_API_CAT_LEVEL]
                max_aqi_desc = obv[ATTR_API_CATEGORY][ATTR_API_CAT_DESCRIPTION]
                max_aqi_poll = pollutant

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Double-check the coordinates in the config entry are correct
  2. Move the query point closer to a known monitoring station (see fire.airnow.gov monitor map)
  3. If the nearest station is simply offline, wait — the coordinator retries automatically
  4. If the area has permanent coverage gaps, use a different air-quality integration
Defensive patterns

Strategy: validation

Validate before calling

# Before relying on the entity, check station coverage at fire.airnow.gov
# for the configured lat/long; empty observations mean no nearby reporting monitors.

Prevention

When it happens

Trigger: observations.latLong() returns [] — the point has no AirNow reporting stations nearby (rural/remote US areas, or coordinates just outside coverage), or stations are temporarily not reporting.

Common situations: US location far from any monitoring station, coordinates slightly off (e.g. in water/wilderness), or nighttime/maintenance gaps in station reporting.

Related errors


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