1 """DataUpdateCoordinator for the AirNow integration."""
3 from datetime
import timedelta
7 from aiohttp
import ClientSession
8 from aiohttp.client_exceptions
import ClientConnectorError
9 from pyairnow
import WebServiceAPI
10 from pyairnow.conv
import aqi_to_concentration
11 from pyairnow.errors
import AirNowError
18 ATTR_API_AQI_DESCRIPTION,
21 ATTR_API_CAT_DESCRIPTION,
31 ATTR_API_STATION_LATITUDE,
32 ATTR_API_STATION_LONGITUDE,
36 _LOGGER = logging.getLogger(__name__)
40 """The AirNow update coordinator."""
45 session: ClientSession,
50 update_interval: timedelta,
57 self.
airnowairnow = WebServiceAPI(api_key, session=session)
59 super().
__init__(hass, _LOGGER, name=DOMAIN, update_interval=update_interval)
62 """Update data via library."""
65 obs = await self.
airnowairnow.observations.latLong(
71 except (AirNowError, ClientConnectorError)
as error:
83 pollutant = obv[ATTR_API_AQI_PARAM]
84 concentration = aqi_to_concentration(obv[ATTR_API_AQI], pollutant)
85 data[obv[ATTR_API_AQI_PARAM]] = concentration
88 if obv[ATTR_API_AQI] > max_aqi:
89 max_aqi = obv[ATTR_API_AQI]
90 max_aqi_level = obv[ATTR_API_CATEGORY][ATTR_API_CAT_LEVEL]
91 max_aqi_desc = obv[ATTR_API_CATEGORY][ATTR_API_CAT_DESCRIPTION]
92 max_aqi_poll = pollutant
95 if obv[ATTR_API_AQI_PARAM] == ATTR_API_PM25:
97 data[ATTR_API_REPORT_DATE] = obv[ATTR_API_REPORT_DATE]
98 data[ATTR_API_REPORT_HOUR] = obv[ATTR_API_REPORT_HOUR]
99 data[ATTR_API_REPORT_TZ] = obv[ATTR_API_REPORT_TZ]
102 data[ATTR_API_STATE] = obv[ATTR_API_STATE]
103 data[ATTR_API_STATION] = obv[ATTR_API_STATION]
104 data[ATTR_API_STATION_LATITUDE] = obv[ATTR_API_STATION_LATITUDE]
105 data[ATTR_API_STATION_LONGITUDE] = obv[ATTR_API_STATION_LONGITUDE]
108 data[ATTR_API_AQI] = max_aqi
109 data[ATTR_API_AQI_LEVEL] = max_aqi_level
110 data[ATTR_API_AQI_DESCRIPTION] = max_aqi_desc
111 data[ATTR_API_POLLUTANT] = max_aqi_poll
dict[str, Any] _async_update_data(self)
None __init__(self, HomeAssistant hass, ClientSession session, str api_key, float latitude, float longitude, int distance, timedelta update_interval)