Home Assistant Unofficial Reference 2024.12.1
helpers.py
Go to the documentation of this file.
1 """Helpers used for Met Office integration."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 import datapoint
8 from datapoint.Site import Site
9 
10 from homeassistant.helpers.update_coordinator import UpdateFailed
11 from homeassistant.util.dt import utcnow
12 
13 from .const import MODE_3HOURLY
14 from .data import MetOfficeData
15 
16 _LOGGER = logging.getLogger(__name__)
17 
18 
20  connection: datapoint.Manager, latitude: float, longitude: float
21 ) -> Site | None:
22  """Fetch site information from Datapoint API."""
23  try:
24  return connection.get_nearest_forecast_site(
25  latitude=latitude, longitude=longitude
26  )
27  except datapoint.exceptions.APIException as err:
28  _LOGGER.error("Received error from Met Office Datapoint: %s", err)
29  return None
30 
31 
32 def fetch_data(connection: datapoint.Manager, site: Site, mode: str) -> MetOfficeData:
33  """Fetch weather and forecast from Datapoint API."""
34  try:
35  forecast = connection.get_forecast_for_site(site.location_id, mode)
36  except (ValueError, datapoint.exceptions.APIException) as err:
37  _LOGGER.error("Check Met Office connection: %s", err.args)
38  raise UpdateFailed from err
39 
40  time_now = utcnow()
41  return MetOfficeData(
42  now=forecast.now(),
43  forecast=[
44  timestep
45  for day in forecast.days
46  for timestep in day.timesteps
47  if timestep.date > time_now
48  and (
49  mode == MODE_3HOURLY or timestep.date.hour > 6
50  ) # ensures only one result per day in MODE_DAILY
51  ],
52  site=site,
53  )
Site|None fetch_site(datapoint.Manager connection, float latitude, float longitude)
Definition: helpers.py:21
MetOfficeData fetch_data(datapoint.Manager connection, Site site, str mode)
Definition: helpers.py:32