1 """DataUpdateCoordinator for Met.no integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from datetime
import timedelta
8 from random
import randrange
9 from types
import MappingProxyType
10 from typing
import Any, Self
19 EVENT_CORE_CONFIG_UPDATE,
27 from .const
import CONF_TRACK_HOME, DOMAIN
30 URL =
"https://aa015h6buqvih86i1.api.met.no/weatherapi/locationforecast/2.0/complete"
32 _LOGGER = logging.getLogger(__name__)
36 """Unable to connect to the web site."""
40 """Keep data for Met.no weather entities."""
42 def __init__(self, hass: HomeAssistant, config: MappingProxyType[str, Any]) ->
None:
43 """Initialise the weather entity data."""
50 self.
_coordinates_coordinates: dict[str, str] |
None =
None
53 """Weather data initialization - set the coordinates."""
54 if self.
_config_config.
get(CONF_TRACK_HOME,
False):
55 latitude = self.
hasshass.config.latitude
56 longitude = self.
hasshass.config.longitude
57 elevation = self.
hasshass.config.elevation
59 latitude = self.
_config_config[CONF_LATITUDE]
60 longitude = self.
_config_config[CONF_LONGITUDE]
61 elevation = self.
_config_config[CONF_ELEVATION]
65 "lon":
str(longitude),
66 "msl":
str(elevation),
78 """Fetch data from API - (current weather and forecast)."""
83 time_zone = dt_util.get_default_time_zone()
90 """Class to manage fetching Met data."""
92 def __init__(self, hass: HomeAssistant, config_entry: ConfigEntry) ->
None:
93 """Initialize global Met data updater."""
98 update_interval =
timedelta(minutes=randrange(55, 65))
100 super().
__init__(hass, _LOGGER, name=DOMAIN, update_interval=update_interval)
103 """Fetch data from Met."""
106 except Exception
as err:
110 """Start tracking changes to HA home setting."""
114 async
def _async_update_weather_data(_event: Event |
None =
None) ->
None:
115 """Update weather data."""
120 EVENT_CORE_CONFIG_UPDATE, _async_update_weather_data
124 """Stop tracking changes to HA home setting."""
None __init__(self, HomeAssistant hass, ConfigEntry config_entry)
MetWeatherData _async_update_data(self)
None __init__(self, HomeAssistant hass, MappingProxyType[str, Any] config)
bool set_coordinates(self)
web.Response get(self, web.Request request, str config_key)
list[Forecast]|None get_forecast(ec_data, hourly)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)