Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The AEMET OpenData component."""
2 
3 import logging
4 
5 from aemet_opendata.exceptions import AemetError, TownNotFound
6 from aemet_opendata.interface import AEMET, ConnectionOptions, UpdateFeature
7 
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import ConfigEntryNotReady
12 from homeassistant.helpers import aiohttp_client
13 
14 from .const import CONF_STATION_UPDATES, PLATFORMS
15 from .coordinator import AemetConfigEntry, AemetData, WeatherUpdateCoordinator
16 
17 _LOGGER = logging.getLogger(__name__)
18 
19 
20 async def async_setup_entry(hass: HomeAssistant, entry: AemetConfigEntry) -> bool:
21  """Set up AEMET OpenData as config entry."""
22  name = entry.data[CONF_NAME]
23  api_key = entry.data[CONF_API_KEY]
24  latitude = entry.data[CONF_LATITUDE]
25  longitude = entry.data[CONF_LONGITUDE]
26  update_features: int = UpdateFeature.FORECAST
27  if entry.options.get(CONF_STATION_UPDATES, True):
28  update_features |= UpdateFeature.STATION
29 
30  options = ConnectionOptions(api_key, update_features)
31  aemet = AEMET(aiohttp_client.async_get_clientsession(hass), options)
32  try:
33  await aemet.select_coordinates(latitude, longitude)
34  except TownNotFound as err:
35  _LOGGER.error(err)
36  return False
37  except AemetError as err:
38  raise ConfigEntryNotReady(err) from err
39 
40  weather_coordinator = WeatherUpdateCoordinator(hass, entry, aemet)
41  await weather_coordinator.async_config_entry_first_refresh()
42 
43  entry.runtime_data = AemetData(name=name, coordinator=weather_coordinator)
44 
45  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
46 
47  entry.async_on_unload(entry.add_update_listener(async_update_options))
48 
49  return True
50 
51 
52 async def async_update_options(hass: HomeAssistant, entry: ConfigEntry) -> None:
53  """Update options."""
54  await hass.config_entries.async_reload(entry.entry_id)
55 
56 
57 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
58  """Unload a config entry."""
59  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
None async_update_options(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:52
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:57
bool async_setup_entry(HomeAssistant hass, AemetConfigEntry entry)
Definition: __init__.py:20