Add AEMET library data to coordinator and use it for weather platform (#102954)

This commit is contained in:
Álvaro Fernández Rojas 2023-10-28 20:53:40 +02:00 committed by GitHub
parent 8703621c64
commit fb5d058885
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 336 additions and 175 deletions

View File

@ -12,6 +12,18 @@ from aemet_opendata.const import (
AOD_COND_RAINY, AOD_COND_RAINY,
AOD_COND_SNOWY, AOD_COND_SNOWY,
AOD_COND_SUNNY, AOD_COND_SUNNY,
AOD_CONDITION,
AOD_FORECAST_DAILY,
AOD_FORECAST_HOURLY,
AOD_PRECIPITATION,
AOD_PRECIPITATION_PROBABILITY,
AOD_TEMP,
AOD_TEMP_MAX,
AOD_TEMP_MIN,
AOD_TIMESTAMP,
AOD_WIND_DIRECTION,
AOD_WIND_SPEED,
AOD_WIND_SPEED_MAX,
) )
from homeassistant.components.weather import ( from homeassistant.components.weather import (
@ -25,6 +37,15 @@ from homeassistant.components.weather import (
ATTR_CONDITION_RAINY, ATTR_CONDITION_RAINY,
ATTR_CONDITION_SNOWY, ATTR_CONDITION_SNOWY,
ATTR_CONDITION_SUNNY, ATTR_CONDITION_SUNNY,
ATTR_FORECAST_CONDITION,
ATTR_FORECAST_NATIVE_PRECIPITATION,
ATTR_FORECAST_NATIVE_TEMP,
ATTR_FORECAST_NATIVE_TEMP_LOW,
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED,
ATTR_FORECAST_NATIVE_WIND_SPEED,
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
ATTR_FORECAST_TIME,
ATTR_FORECAST_WIND_BEARING,
) )
from homeassistant.const import Platform from homeassistant.const import Platform
@ -122,3 +143,30 @@ FORECAST_MODE_ATTR_API = {
FORECAST_MODE_DAILY: ATTR_API_FORECAST_DAILY, FORECAST_MODE_DAILY: ATTR_API_FORECAST_DAILY,
FORECAST_MODE_HOURLY: ATTR_API_FORECAST_HOURLY, FORECAST_MODE_HOURLY: ATTR_API_FORECAST_HOURLY,
} }
FORECAST_MAP = {
AOD_FORECAST_DAILY: {
AOD_CONDITION: ATTR_FORECAST_CONDITION,
AOD_PRECIPITATION_PROBABILITY: ATTR_FORECAST_PRECIPITATION_PROBABILITY,
AOD_TEMP_MAX: ATTR_FORECAST_NATIVE_TEMP,
AOD_TEMP_MIN: ATTR_FORECAST_NATIVE_TEMP_LOW,
AOD_TIMESTAMP: ATTR_FORECAST_TIME,
AOD_WIND_DIRECTION: ATTR_FORECAST_WIND_BEARING,
AOD_WIND_SPEED: ATTR_FORECAST_NATIVE_WIND_SPEED,
},
AOD_FORECAST_HOURLY: {
AOD_CONDITION: ATTR_FORECAST_CONDITION,
AOD_PRECIPITATION_PROBABILITY: ATTR_FORECAST_PRECIPITATION_PROBABILITY,
AOD_PRECIPITATION: ATTR_FORECAST_NATIVE_PRECIPITATION,
AOD_TEMP: ATTR_FORECAST_NATIVE_TEMP,
AOD_TIMESTAMP: ATTR_FORECAST_TIME,
AOD_WIND_DIRECTION: ATTR_FORECAST_WIND_BEARING,
AOD_WIND_SPEED_MAX: ATTR_FORECAST_NATIVE_WIND_GUST_SPEED,
AOD_WIND_SPEED: ATTR_FORECAST_NATIVE_WIND_SPEED,
},
}
WEATHER_FORECAST_MODES = {
AOD_FORECAST_DAILY: "daily",
AOD_FORECAST_HOURLY: "hourly",
}

View File

@ -0,0 +1,23 @@
"""Entity classes for the AEMET OpenData integration."""
from __future__ import annotations
from typing import Any
from aemet_opendata.helpers import dict_nested_value
from homeassistant.components.weather import Forecast
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .weather_update_coordinator import WeatherUpdateCoordinator
class AemetEntity(CoordinatorEntity[WeatherUpdateCoordinator]):
"""Define an AEMET entity."""
def get_aemet_forecast(self, forecast_mode: str) -> list[Forecast]:
"""Return AEMET entity forecast by mode."""
return self.coordinator.data["forecast"][forecast_mode]
def get_aemet_value(self, keys: list[str]) -> Any:
"""Return AEMET entity value by keys."""
return dict_nested_value(self.coordinator.data["lib"], keys)

View File

@ -1,16 +1,19 @@
"""Support for the AEMET OpenData service.""" """Support for the AEMET OpenData service."""
from typing import cast
from aemet_opendata.const import (
AOD_CONDITION,
AOD_FORECAST_DAILY,
AOD_FORECAST_HOURLY,
AOD_HUMIDITY,
AOD_PRESSURE,
AOD_TEMP,
AOD_WEATHER,
AOD_WIND_DIRECTION,
AOD_WIND_SPEED,
AOD_WIND_SPEED_MAX,
)
from homeassistant.components.weather import ( from homeassistant.components.weather import (
ATTR_FORECAST_CONDITION,
ATTR_FORECAST_NATIVE_PRECIPITATION,
ATTR_FORECAST_NATIVE_TEMP,
ATTR_FORECAST_NATIVE_TEMP_LOW,
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED,
ATTR_FORECAST_NATIVE_WIND_SPEED,
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
ATTR_FORECAST_TIME,
ATTR_FORECAST_WIND_BEARING,
DOMAIN as WEATHER_DOMAIN, DOMAIN as WEATHER_DOMAIN,
Forecast, Forecast,
SingleCoordinatorWeatherEntity, SingleCoordinatorWeatherEntity,
@ -28,55 +31,16 @@ from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import ( from .const import (
ATTR_API_CONDITION,
ATTR_API_FORECAST_CONDITION,
ATTR_API_FORECAST_PRECIPITATION,
ATTR_API_FORECAST_PRECIPITATION_PROBABILITY,
ATTR_API_FORECAST_TEMP,
ATTR_API_FORECAST_TEMP_LOW,
ATTR_API_FORECAST_TIME,
ATTR_API_FORECAST_WIND_BEARING,
ATTR_API_FORECAST_WIND_MAX_SPEED,
ATTR_API_FORECAST_WIND_SPEED,
ATTR_API_HUMIDITY,
ATTR_API_PRESSURE,
ATTR_API_TEMPERATURE,
ATTR_API_WIND_BEARING,
ATTR_API_WIND_MAX_SPEED,
ATTR_API_WIND_SPEED,
ATTRIBUTION, ATTRIBUTION,
CONDITIONS_MAP,
DOMAIN, DOMAIN,
ENTRY_NAME, ENTRY_NAME,
ENTRY_WEATHER_COORDINATOR, ENTRY_WEATHER_COORDINATOR,
FORECAST_MODE_ATTR_API, WEATHER_FORECAST_MODES,
FORECAST_MODE_DAILY,
FORECAST_MODE_HOURLY,
FORECAST_MODES,
) )
from .entity import AemetEntity
from .weather_update_coordinator import WeatherUpdateCoordinator from .weather_update_coordinator import WeatherUpdateCoordinator
FORECAST_MAP = {
FORECAST_MODE_DAILY: {
ATTR_API_FORECAST_CONDITION: ATTR_FORECAST_CONDITION,
ATTR_API_FORECAST_PRECIPITATION_PROBABILITY: ATTR_FORECAST_PRECIPITATION_PROBABILITY,
ATTR_API_FORECAST_TEMP_LOW: ATTR_FORECAST_NATIVE_TEMP_LOW,
ATTR_API_FORECAST_TEMP: ATTR_FORECAST_NATIVE_TEMP,
ATTR_API_FORECAST_TIME: ATTR_FORECAST_TIME,
ATTR_API_FORECAST_WIND_BEARING: ATTR_FORECAST_WIND_BEARING,
ATTR_API_FORECAST_WIND_SPEED: ATTR_FORECAST_NATIVE_WIND_SPEED,
},
FORECAST_MODE_HOURLY: {
ATTR_API_FORECAST_CONDITION: ATTR_FORECAST_CONDITION,
ATTR_API_FORECAST_PRECIPITATION_PROBABILITY: ATTR_FORECAST_PRECIPITATION_PROBABILITY,
ATTR_API_FORECAST_PRECIPITATION: ATTR_FORECAST_NATIVE_PRECIPITATION,
ATTR_API_FORECAST_TEMP: ATTR_FORECAST_NATIVE_TEMP,
ATTR_API_FORECAST_TIME: ATTR_FORECAST_TIME,
ATTR_API_FORECAST_WIND_BEARING: ATTR_FORECAST_WIND_BEARING,
ATTR_API_FORECAST_WIND_MAX_SPEED: ATTR_FORECAST_NATIVE_WIND_GUST_SPEED,
ATTR_API_FORECAST_WIND_SPEED: ATTR_FORECAST_NATIVE_WIND_SPEED,
},
}
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
@ -95,11 +59,11 @@ async def async_setup_entry(
if entity_registry.async_get_entity_id( if entity_registry.async_get_entity_id(
WEATHER_DOMAIN, WEATHER_DOMAIN,
DOMAIN, DOMAIN,
f"{config_entry.unique_id} {FORECAST_MODE_HOURLY}", f"{config_entry.unique_id} {WEATHER_FORECAST_MODES[AOD_FORECAST_HOURLY]}",
): ):
for mode in FORECAST_MODES: for mode, mode_id in WEATHER_FORECAST_MODES.items():
name = f"{domain_data[ENTRY_NAME]} {mode}" name = f"{domain_data[ENTRY_NAME]} {mode_id}"
unique_id = f"{config_entry.unique_id} {mode}" unique_id = f"{config_entry.unique_id} {mode_id}"
entities.append(AemetWeather(name, unique_id, weather_coordinator, mode)) entities.append(AemetWeather(name, unique_id, weather_coordinator, mode))
else: else:
entities.append( entities.append(
@ -107,15 +71,18 @@ async def async_setup_entry(
domain_data[ENTRY_NAME], domain_data[ENTRY_NAME],
config_entry.unique_id, config_entry.unique_id,
weather_coordinator, weather_coordinator,
FORECAST_MODE_DAILY, AOD_FORECAST_DAILY,
) )
) )
async_add_entities(entities, False) async_add_entities(entities, False)
class AemetWeather(SingleCoordinatorWeatherEntity[WeatherUpdateCoordinator]): class AemetWeather(
"""Implementation of an AEMET OpenData sensor.""" AemetEntity,
SingleCoordinatorWeatherEntity[WeatherUpdateCoordinator],
):
"""Implementation of an AEMET OpenData weather."""
_attr_attribution = ATTRIBUTION _attr_attribution = ATTRIBUTION
_attr_native_precipitation_unit = UnitOfPrecipitationDepth.MILLIMETERS _attr_native_precipitation_unit = UnitOfPrecipitationDepth.MILLIMETERS
@ -137,7 +104,7 @@ class AemetWeather(SingleCoordinatorWeatherEntity[WeatherUpdateCoordinator]):
super().__init__(coordinator) super().__init__(coordinator)
self._forecast_mode = forecast_mode self._forecast_mode = forecast_mode
self._attr_entity_registry_enabled_default = ( self._attr_entity_registry_enabled_default = (
self._forecast_mode == FORECAST_MODE_DAILY self._forecast_mode == AOD_FORECAST_DAILY
) )
self._attr_name = name self._attr_name = name
self._attr_unique_id = unique_id self._attr_unique_id = unique_id
@ -145,61 +112,50 @@ class AemetWeather(SingleCoordinatorWeatherEntity[WeatherUpdateCoordinator]):
@property @property
def condition(self): def condition(self):
"""Return the current condition.""" """Return the current condition."""
return self.coordinator.data[ATTR_API_CONDITION] cond = self.get_aemet_value([AOD_WEATHER, AOD_CONDITION])
return CONDITIONS_MAP.get(cond)
def _forecast(self, forecast_mode: str) -> list[Forecast]:
"""Return the forecast array."""
forecasts = self.coordinator.data[FORECAST_MODE_ATTR_API[forecast_mode]]
forecast_map = FORECAST_MAP[forecast_mode]
return cast(
list[Forecast],
[
{ha_key: forecast[api_key] for api_key, ha_key in forecast_map.items()}
for forecast in forecasts
],
)
@property @property
def forecast(self) -> list[Forecast]: def forecast(self) -> list[Forecast]:
"""Return the forecast array.""" """Return the forecast array."""
return self._forecast(self._forecast_mode) return self.get_aemet_forecast(self._forecast_mode)
@callback @callback
def _async_forecast_daily(self) -> list[Forecast]: def _async_forecast_daily(self) -> list[Forecast]:
"""Return the daily forecast in native units.""" """Return the daily forecast in native units."""
return self._forecast(FORECAST_MODE_DAILY) return self.get_aemet_forecast(AOD_FORECAST_DAILY)
@callback @callback
def _async_forecast_hourly(self) -> list[Forecast]: def _async_forecast_hourly(self) -> list[Forecast]:
"""Return the hourly forecast in native units.""" """Return the hourly forecast in native units."""
return self._forecast(FORECAST_MODE_HOURLY) return self.get_aemet_forecast(AOD_FORECAST_HOURLY)
@property @property
def humidity(self): def humidity(self):
"""Return the humidity.""" """Return the humidity."""
return self.coordinator.data[ATTR_API_HUMIDITY] return self.get_aemet_value([AOD_WEATHER, AOD_HUMIDITY])
@property @property
def native_pressure(self): def native_pressure(self):
"""Return the pressure.""" """Return the pressure."""
return self.coordinator.data[ATTR_API_PRESSURE] return self.get_aemet_value([AOD_WEATHER, AOD_PRESSURE])
@property @property
def native_temperature(self): def native_temperature(self):
"""Return the temperature.""" """Return the temperature."""
return self.coordinator.data[ATTR_API_TEMPERATURE] return self.get_aemet_value([AOD_WEATHER, AOD_TEMP])
@property @property
def wind_bearing(self): def wind_bearing(self):
"""Return the wind bearing.""" """Return the wind bearing."""
return self.coordinator.data[ATTR_API_WIND_BEARING] return self.get_aemet_value([AOD_WEATHER, AOD_WIND_DIRECTION])
@property @property
def native_wind_gust_speed(self): def native_wind_gust_speed(self):
"""Return the wind gust speed in native units.""" """Return the wind gust speed in native units."""
return self.coordinator.data[ATTR_API_WIND_MAX_SPEED] return self.get_aemet_value([AOD_WEATHER, AOD_WIND_SPEED_MAX])
@property @property
def native_wind_speed(self): def native_wind_speed(self):
"""Return the wind speed.""" """Return the wind speed."""
return self.coordinator.data[ATTR_API_WIND_SPEED] return self.get_aemet_value([AOD_WEATHER, AOD_WIND_SPEED])

View File

@ -4,7 +4,7 @@ from __future__ import annotations
from asyncio import timeout from asyncio import timeout
from datetime import timedelta from datetime import timedelta
import logging import logging
from typing import Any, Final from typing import Any, Final, cast
from aemet_opendata.const import ( from aemet_opendata.const import (
AEMET_ATTR_DATE, AEMET_ATTR_DATE,
@ -31,17 +31,24 @@ from aemet_opendata.const import (
AEMET_ATTR_TEMPERATURE, AEMET_ATTR_TEMPERATURE,
AEMET_ATTR_WIND, AEMET_ATTR_WIND,
AEMET_ATTR_WIND_GUST, AEMET_ATTR_WIND_GUST,
AOD_CONDITION,
AOD_FORECAST,
AOD_FORECAST_DAILY,
AOD_FORECAST_HOURLY,
AOD_TOWN,
ATTR_DATA, ATTR_DATA,
) )
from aemet_opendata.exceptions import AemetError from aemet_opendata.exceptions import AemetError
from aemet_opendata.forecast import ForecastValue from aemet_opendata.forecast import ForecastValue
from aemet_opendata.helpers import ( from aemet_opendata.helpers import (
dict_nested_value,
get_forecast_day_value, get_forecast_day_value,
get_forecast_hour_value, get_forecast_hour_value,
get_forecast_interval_value, get_forecast_interval_value,
) )
from aemet_opendata.interface import AEMET from aemet_opendata.interface import AEMET
from homeassistant.components.weather import Forecast
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
@ -79,6 +86,7 @@ from .const import (
ATTR_API_WIND_SPEED, ATTR_API_WIND_SPEED,
CONDITIONS_MAP, CONDITIONS_MAP,
DOMAIN, DOMAIN,
FORECAST_MAP,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -239,6 +247,12 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator):
weather_response, now weather_response, now
) )
data = self.aemet.data()
forecasts: list[dict[str, Forecast]] = {
AOD_FORECAST_DAILY: self.aemet_forecast(data, AOD_FORECAST_DAILY),
AOD_FORECAST_HOURLY: self.aemet_forecast(data, AOD_FORECAST_HOURLY),
}
return { return {
ATTR_API_CONDITION: condition, ATTR_API_CONDITION: condition,
ATTR_API_FORECAST_DAILY: forecast_daily, ATTR_API_FORECAST_DAILY: forecast_daily,
@ -261,8 +275,29 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator):
ATTR_API_WIND_BEARING: wind_bearing, ATTR_API_WIND_BEARING: wind_bearing,
ATTR_API_WIND_MAX_SPEED: wind_max_speed, ATTR_API_WIND_MAX_SPEED: wind_max_speed,
ATTR_API_WIND_SPEED: wind_speed, ATTR_API_WIND_SPEED: wind_speed,
"forecast": forecasts,
"lib": data,
} }
def aemet_forecast(
self,
data: dict[str, Any],
forecast_mode: str,
) -> list[Forecast]:
"""Return the forecast array."""
forecasts = dict_nested_value(data, [AOD_TOWN, forecast_mode, AOD_FORECAST])
forecast_map = FORECAST_MAP[forecast_mode]
forecast_list: list[dict[str, Any]] = []
for forecast in forecasts:
cur_forecast: dict[str, Any] = {}
for api_key, ha_key in forecast_map.items():
value = forecast[api_key]
if api_key == AOD_CONDITION:
value = CONDITIONS_MAP.get(value)
cur_forecast[ha_key] = value
forecast_list += [cur_forecast]
return cast(list[Forecast], forecast_list)
def _get_daily_forecast_from_weather_response(self, weather_response, now): def _get_daily_forecast_from_weather_response(self, weather_response, now):
if weather_response.daily: if weather_response.daily:
parse = False parse = False

View File

@ -14,7 +14,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-11T00:00:00+00:00', 'datetime': '2021-01-11T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 3.0, 'temperature': 3.0,
'templow': -7.0, 'templow': -7.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -23,7 +23,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-12T00:00:00+00:00', 'datetime': '2021-01-12T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'templow': -13.0, 'templow': -13.0,
'wind_bearing': None, 'wind_bearing': None,
@ -31,7 +31,7 @@
dict({ dict({
'condition': 'sunny', 'condition': 'sunny',
'datetime': '2021-01-13T00:00:00+00:00', 'datetime': '2021-01-13T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 6.0, 'temperature': 6.0,
'templow': -11.0, 'templow': -11.0,
'wind_bearing': None, 'wind_bearing': None,
@ -39,7 +39,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-14T00:00:00+00:00', 'datetime': '2021-01-14T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 6.0, 'temperature': 6.0,
'templow': -7.0, 'templow': -7.0,
'wind_bearing': None, 'wind_bearing': None,
@ -47,7 +47,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-15T00:00:00+00:00', 'datetime': '2021-01-15T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 5.0, 'temperature': 5.0,
'templow': -4.0, 'templow': -4.0,
'wind_bearing': None, 'wind_bearing': None,
@ -151,6 +151,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-09T21:00:00+00:00', 'datetime': '2021-01-09T21:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 90.0, 'wind_bearing': 90.0,
@ -160,6 +161,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-09T22:00:00+00:00', 'datetime': '2021-01-09T22:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -169,6 +171,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-09T23:00:00+00:00', 'datetime': '2021-01-09T23:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 90.0, 'wind_bearing': 90.0,
@ -178,7 +181,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T00:00:00+00:00', 'datetime': '2021-01-10T00:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 10,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 12.0, 'wind_gust_speed': 12.0,
@ -187,6 +191,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T01:00:00+00:00', 'datetime': '2021-01-10T01:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -196,6 +201,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T02:00:00+00:00', 'datetime': '2021-01-10T02:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -205,6 +211,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T03:00:00+00:00', 'datetime': '2021-01-10T03:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -214,6 +221,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T04:00:00+00:00', 'datetime': '2021-01-10T04:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -223,6 +231,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T05:00:00+00:00', 'datetime': '2021-01-10T05:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -232,7 +241,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T06:00:00+00:00', 'datetime': '2021-01-10T06:00:00+00:00',
'precipitation_probability': 10, 'precipitation': 0.0,
'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
'wind_gust_speed': 13.0, 'wind_gust_speed': 13.0,
@ -241,6 +251,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T07:00:00+00:00', 'datetime': '2021-01-10T07:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -250,6 +261,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T08:00:00+00:00', 'datetime': '2021-01-10T08:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -259,6 +271,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T09:00:00+00:00', 'datetime': '2021-01-10T09:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -268,6 +281,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T10:00:00+00:00', 'datetime': '2021-01-10T10:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -277,6 +291,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T11:00:00+00:00', 'datetime': '2021-01-10T11:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': 2.0, 'temperature': 2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -286,7 +301,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T12:00:00+00:00', 'datetime': '2021-01-10T12:00:00+00:00',
'precipitation_probability': 15, 'precipitation': 0.0,
'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 32.0, 'wind_gust_speed': 32.0,
@ -295,6 +311,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T13:00:00+00:00', 'datetime': '2021-01-10T13:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -304,6 +321,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T14:00:00+00:00', 'datetime': '2021-01-10T14:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -313,6 +331,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T15:00:00+00:00', 'datetime': '2021-01-10T15:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 4.0, 'temperature': 4.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -322,6 +341,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T16:00:00+00:00', 'datetime': '2021-01-10T16:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -331,6 +351,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T17:00:00+00:00', 'datetime': '2021-01-10T17:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 2.0, 'temperature': 2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -340,7 +361,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T18:00:00+00:00', 'datetime': '2021-01-10T18:00:00+00:00',
'precipitation_probability': 5, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 24.0, 'wind_gust_speed': 24.0,
@ -349,7 +371,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T19:00:00+00:00', 'datetime': '2021-01-10T19:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 25.0, 'wind_gust_speed': 25.0,
@ -358,7 +381,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T20:00:00+00:00', 'datetime': '2021-01-10T20:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 25.0, 'wind_gust_speed': 25.0,
@ -367,7 +391,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T21:00:00+00:00', 'datetime': '2021-01-10T21:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 24.0, 'wind_gust_speed': 24.0,
@ -376,7 +401,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T22:00:00+00:00', 'datetime': '2021-01-10T22:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 27.0, 'wind_gust_speed': 27.0,
@ -385,7 +411,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T23:00:00+00:00', 'datetime': '2021-01-10T23:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 30.0, 'wind_gust_speed': 30.0,
@ -394,7 +421,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-11T00:00:00+00:00', 'datetime': '2021-01-11T00:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 30.0, 'wind_gust_speed': 30.0,
@ -403,7 +431,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-11T01:00:00+00:00', 'datetime': '2021-01-11T01:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 27.0, 'wind_gust_speed': 27.0,
@ -412,7 +441,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T02:00:00+00:00', 'datetime': '2021-01-11T02:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 22.0, 'wind_gust_speed': 22.0,
@ -421,7 +451,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T03:00:00+00:00', 'datetime': '2021-01-11T03:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 17.0, 'wind_gust_speed': 17.0,
@ -430,7 +461,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T04:00:00+00:00', 'datetime': '2021-01-11T04:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -3.0, 'temperature': -3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 15.0, 'wind_gust_speed': 15.0,
@ -439,7 +471,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T05:00:00+00:00', 'datetime': '2021-01-11T05:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -4.0, 'temperature': -4.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 15.0, 'wind_gust_speed': 15.0,
@ -471,7 +504,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-11T00:00:00+00:00', 'datetime': '2021-01-11T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 3.0, 'temperature': 3.0,
'templow': -7.0, 'templow': -7.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -480,7 +513,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-12T00:00:00+00:00', 'datetime': '2021-01-12T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'templow': -13.0, 'templow': -13.0,
'wind_bearing': None, 'wind_bearing': None,
@ -488,7 +521,7 @@
dict({ dict({
'condition': 'sunny', 'condition': 'sunny',
'datetime': '2021-01-13T00:00:00+00:00', 'datetime': '2021-01-13T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 6.0, 'temperature': 6.0,
'templow': -11.0, 'templow': -11.0,
'wind_bearing': None, 'wind_bearing': None,
@ -496,7 +529,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-14T00:00:00+00:00', 'datetime': '2021-01-14T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 6.0, 'temperature': 6.0,
'templow': -7.0, 'templow': -7.0,
'wind_bearing': None, 'wind_bearing': None,
@ -504,7 +537,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-15T00:00:00+00:00', 'datetime': '2021-01-15T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 5.0, 'temperature': 5.0,
'templow': -4.0, 'templow': -4.0,
'wind_bearing': None, 'wind_bearing': None,
@ -525,7 +558,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-11T00:00:00+00:00', 'datetime': '2021-01-11T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 3.0, 'temperature': 3.0,
'templow': -7.0, 'templow': -7.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -534,7 +567,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-12T00:00:00+00:00', 'datetime': '2021-01-12T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'templow': -13.0, 'templow': -13.0,
'wind_bearing': None, 'wind_bearing': None,
@ -542,7 +575,7 @@
dict({ dict({
'condition': 'sunny', 'condition': 'sunny',
'datetime': '2021-01-13T00:00:00+00:00', 'datetime': '2021-01-13T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 6.0, 'temperature': 6.0,
'templow': -11.0, 'templow': -11.0,
'wind_bearing': None, 'wind_bearing': None,
@ -550,7 +583,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-14T00:00:00+00:00', 'datetime': '2021-01-14T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 6.0, 'temperature': 6.0,
'templow': -7.0, 'templow': -7.0,
'wind_bearing': None, 'wind_bearing': None,
@ -558,7 +591,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-15T00:00:00+00:00', 'datetime': '2021-01-15T00:00:00+00:00',
'precipitation_probability': None, 'precipitation_probability': 0,
'temperature': 5.0, 'temperature': 5.0,
'templow': -4.0, 'templow': -4.0,
'wind_bearing': None, 'wind_bearing': None,
@ -660,6 +693,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-09T21:00:00+00:00', 'datetime': '2021-01-09T21:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 90.0, 'wind_bearing': 90.0,
@ -669,6 +703,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-09T22:00:00+00:00', 'datetime': '2021-01-09T22:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -678,6 +713,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-09T23:00:00+00:00', 'datetime': '2021-01-09T23:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 90.0, 'wind_bearing': 90.0,
@ -687,7 +723,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T00:00:00+00:00', 'datetime': '2021-01-10T00:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 10,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 12.0, 'wind_gust_speed': 12.0,
@ -696,6 +733,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T01:00:00+00:00', 'datetime': '2021-01-10T01:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -705,6 +743,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T02:00:00+00:00', 'datetime': '2021-01-10T02:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -714,6 +753,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T03:00:00+00:00', 'datetime': '2021-01-10T03:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -723,6 +763,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T04:00:00+00:00', 'datetime': '2021-01-10T04:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -732,6 +773,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T05:00:00+00:00', 'datetime': '2021-01-10T05:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -741,7 +783,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T06:00:00+00:00', 'datetime': '2021-01-10T06:00:00+00:00',
'precipitation_probability': 10, 'precipitation': 0.0,
'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
'wind_gust_speed': 13.0, 'wind_gust_speed': 13.0,
@ -750,6 +793,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T07:00:00+00:00', 'datetime': '2021-01-10T07:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -759,6 +803,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T08:00:00+00:00', 'datetime': '2021-01-10T08:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -768,6 +813,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T09:00:00+00:00', 'datetime': '2021-01-10T09:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -777,6 +823,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T10:00:00+00:00', 'datetime': '2021-01-10T10:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -786,6 +833,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T11:00:00+00:00', 'datetime': '2021-01-10T11:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': 2.0, 'temperature': 2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -795,7 +843,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T12:00:00+00:00', 'datetime': '2021-01-10T12:00:00+00:00',
'precipitation_probability': 15, 'precipitation': 0.0,
'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 32.0, 'wind_gust_speed': 32.0,
@ -804,6 +853,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T13:00:00+00:00', 'datetime': '2021-01-10T13:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -813,6 +863,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T14:00:00+00:00', 'datetime': '2021-01-10T14:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -822,6 +873,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T15:00:00+00:00', 'datetime': '2021-01-10T15:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 4.0, 'temperature': 4.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -831,6 +883,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T16:00:00+00:00', 'datetime': '2021-01-10T16:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -840,6 +893,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T17:00:00+00:00', 'datetime': '2021-01-10T17:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 2.0, 'temperature': 2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -849,7 +903,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T18:00:00+00:00', 'datetime': '2021-01-10T18:00:00+00:00',
'precipitation_probability': 5, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 24.0, 'wind_gust_speed': 24.0,
@ -858,7 +913,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T19:00:00+00:00', 'datetime': '2021-01-10T19:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 25.0, 'wind_gust_speed': 25.0,
@ -867,7 +923,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T20:00:00+00:00', 'datetime': '2021-01-10T20:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 25.0, 'wind_gust_speed': 25.0,
@ -876,7 +933,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T21:00:00+00:00', 'datetime': '2021-01-10T21:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 24.0, 'wind_gust_speed': 24.0,
@ -885,7 +943,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T22:00:00+00:00', 'datetime': '2021-01-10T22:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 27.0, 'wind_gust_speed': 27.0,
@ -894,7 +953,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T23:00:00+00:00', 'datetime': '2021-01-10T23:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 30.0, 'wind_gust_speed': 30.0,
@ -903,7 +963,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-11T00:00:00+00:00', 'datetime': '2021-01-11T00:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 30.0, 'wind_gust_speed': 30.0,
@ -912,7 +973,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-11T01:00:00+00:00', 'datetime': '2021-01-11T01:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 27.0, 'wind_gust_speed': 27.0,
@ -921,7 +983,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T02:00:00+00:00', 'datetime': '2021-01-11T02:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 22.0, 'wind_gust_speed': 22.0,
@ -930,7 +993,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T03:00:00+00:00', 'datetime': '2021-01-11T03:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 17.0, 'wind_gust_speed': 17.0,
@ -939,7 +1003,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T04:00:00+00:00', 'datetime': '2021-01-11T04:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -3.0, 'temperature': -3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 15.0, 'wind_gust_speed': 15.0,
@ -948,7 +1013,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T05:00:00+00:00', 'datetime': '2021-01-11T05:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -4.0, 'temperature': -4.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 15.0, 'wind_gust_speed': 15.0,
@ -1060,6 +1126,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-09T21:00:00+00:00', 'datetime': '2021-01-09T21:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 90.0, 'wind_bearing': 90.0,
@ -1069,6 +1136,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-09T22:00:00+00:00', 'datetime': '2021-01-09T22:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1078,6 +1146,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-09T23:00:00+00:00', 'datetime': '2021-01-09T23:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 100, 'precipitation_probability': 100,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 90.0, 'wind_bearing': 90.0,
@ -1087,7 +1156,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T00:00:00+00:00', 'datetime': '2021-01-10T00:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 10,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 12.0, 'wind_gust_speed': 12.0,
@ -1096,6 +1166,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T01:00:00+00:00', 'datetime': '2021-01-10T01:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1105,6 +1176,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T02:00:00+00:00', 'datetime': '2021-01-10T02:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -1114,6 +1186,7 @@
dict({ dict({
'condition': 'fog', 'condition': 'fog',
'datetime': '2021-01-10T03:00:00+00:00', 'datetime': '2021-01-10T03:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -1123,6 +1196,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T04:00:00+00:00', 'datetime': '2021-01-10T04:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1132,6 +1206,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T05:00:00+00:00', 'datetime': '2021-01-10T05:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 10, 'precipitation_probability': 10,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
@ -1141,7 +1216,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T06:00:00+00:00', 'datetime': '2021-01-10T06:00:00+00:00',
'precipitation_probability': 10, 'precipitation': 0.0,
'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 0.0, 'wind_bearing': 0.0,
'wind_gust_speed': 13.0, 'wind_gust_speed': 13.0,
@ -1150,6 +1226,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T07:00:00+00:00', 'datetime': '2021-01-10T07:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1159,6 +1236,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T08:00:00+00:00', 'datetime': '2021-01-10T08:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1168,6 +1246,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T09:00:00+00:00', 'datetime': '2021-01-10T09:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1177,6 +1256,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T10:00:00+00:00', 'datetime': '2021-01-10T10:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1186,6 +1266,7 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T11:00:00+00:00', 'datetime': '2021-01-10T11:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 15, 'precipitation_probability': 15,
'temperature': 2.0, 'temperature': 2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1195,7 +1276,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T12:00:00+00:00', 'datetime': '2021-01-10T12:00:00+00:00',
'precipitation_probability': 15, 'precipitation': 0.0,
'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 32.0, 'wind_gust_speed': 32.0,
@ -1204,6 +1286,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T13:00:00+00:00', 'datetime': '2021-01-10T13:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1213,6 +1296,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T14:00:00+00:00', 'datetime': '2021-01-10T14:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1222,6 +1306,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T15:00:00+00:00', 'datetime': '2021-01-10T15:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 4.0, 'temperature': 4.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1231,6 +1316,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T16:00:00+00:00', 'datetime': '2021-01-10T16:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 3.0, 'temperature': 3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1240,6 +1326,7 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T17:00:00+00:00', 'datetime': '2021-01-10T17:00:00+00:00',
'precipitation': 0.0,
'precipitation_probability': 5, 'precipitation_probability': 5,
'temperature': 2.0, 'temperature': 2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
@ -1249,7 +1336,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T18:00:00+00:00', 'datetime': '2021-01-10T18:00:00+00:00',
'precipitation_probability': 5, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 24.0, 'wind_gust_speed': 24.0,
@ -1258,7 +1346,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-10T19:00:00+00:00', 'datetime': '2021-01-10T19:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 25.0, 'wind_gust_speed': 25.0,
@ -1267,7 +1356,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T20:00:00+00:00', 'datetime': '2021-01-10T20:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 25.0, 'wind_gust_speed': 25.0,
@ -1276,7 +1366,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T21:00:00+00:00', 'datetime': '2021-01-10T21:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 1.0, 'temperature': 1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 24.0, 'wind_gust_speed': 24.0,
@ -1285,7 +1376,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T22:00:00+00:00', 'datetime': '2021-01-10T22:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 27.0, 'wind_gust_speed': 27.0,
@ -1294,7 +1386,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-10T23:00:00+00:00', 'datetime': '2021-01-10T23:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': 0.0, 'temperature': 0.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 30.0, 'wind_gust_speed': 30.0,
@ -1303,7 +1396,8 @@
dict({ dict({
'condition': 'cloudy', 'condition': 'cloudy',
'datetime': '2021-01-11T00:00:00+00:00', 'datetime': '2021-01-11T00:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 30.0, 'wind_gust_speed': 30.0,
@ -1312,7 +1406,8 @@
dict({ dict({
'condition': 'partlycloudy', 'condition': 'partlycloudy',
'datetime': '2021-01-11T01:00:00+00:00', 'datetime': '2021-01-11T01:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -1.0, 'temperature': -1.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 27.0, 'wind_gust_speed': 27.0,
@ -1321,7 +1416,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T02:00:00+00:00', 'datetime': '2021-01-11T02:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 22.0, 'wind_gust_speed': 22.0,
@ -1330,7 +1426,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T03:00:00+00:00', 'datetime': '2021-01-11T03:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -2.0, 'temperature': -2.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 17.0, 'wind_gust_speed': 17.0,
@ -1339,7 +1436,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T04:00:00+00:00', 'datetime': '2021-01-11T04:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -3.0, 'temperature': -3.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 15.0, 'wind_gust_speed': 15.0,
@ -1348,7 +1446,8 @@
dict({ dict({
'condition': 'clear-night', 'condition': 'clear-night',
'datetime': '2021-01-11T05:00:00+00:00', 'datetime': '2021-01-11T05:00:00+00:00',
'precipitation_probability': None, 'precipitation': 0.0,
'precipitation_probability': 0,
'temperature': -4.0, 'temperature': -4.0,
'wind_bearing': 45.0, 'wind_bearing': 45.0,
'wind_gust_speed': 15.0, 'wind_gust_speed': 15.0,

View File

@ -54,25 +54,25 @@ async def test_aemet_weather(
state = hass.states.get("weather.aemet") state = hass.states.get("weather.aemet")
assert state assert state
assert state.state == ATTR_CONDITION_SNOWY assert state.state == ATTR_CONDITION_SNOWY
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION assert state.attributes[ATTR_ATTRIBUTION] == ATTRIBUTION
assert state.attributes.get(ATTR_WEATHER_HUMIDITY) == 99.0 assert state.attributes[ATTR_WEATHER_HUMIDITY] == 99.0
assert state.attributes.get(ATTR_WEATHER_PRESSURE) == 1004.4 # 100440.0 Pa -> hPa assert state.attributes[ATTR_WEATHER_PRESSURE] == 1004.4 # 100440.0 Pa -> hPa
assert state.attributes.get(ATTR_WEATHER_TEMPERATURE) == -0.7 assert state.attributes[ATTR_WEATHER_TEMPERATURE] == -0.7
assert state.attributes.get(ATTR_WEATHER_WIND_BEARING) == 90.0 assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 122.0
assert state.attributes.get(ATTR_WEATHER_WIND_GUST_SPEED) == 24.0 assert state.attributes[ATTR_WEATHER_WIND_GUST_SPEED] == 12.2
assert state.attributes.get(ATTR_WEATHER_WIND_SPEED) == 15.0 # 4.17 m/s -> km/h assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 3.2
forecast = state.attributes.get(ATTR_FORECAST)[0] forecast = state.attributes[ATTR_FORECAST][0]
assert forecast.get(ATTR_FORECAST_CONDITION) == ATTR_CONDITION_PARTLYCLOUDY assert forecast[ATTR_FORECAST_CONDITION] == ATTR_CONDITION_PARTLYCLOUDY
assert forecast.get(ATTR_FORECAST_PRECIPITATION) is None assert ATTR_FORECAST_PRECIPITATION not in forecast
assert forecast.get(ATTR_FORECAST_PRECIPITATION_PROBABILITY) == 30 assert forecast[ATTR_FORECAST_PRECIPITATION_PROBABILITY] == 30
assert forecast.get(ATTR_FORECAST_TEMP) == 4 assert forecast[ATTR_FORECAST_TEMP] == 4
assert forecast.get(ATTR_FORECAST_TEMP_LOW) == -4 assert forecast[ATTR_FORECAST_TEMP_LOW] == -4
assert ( assert (
forecast.get(ATTR_FORECAST_TIME) forecast[ATTR_FORECAST_TIME]
== dt_util.parse_datetime("2021-01-10 00:00:00+00:00").isoformat() == dt_util.parse_datetime("2021-01-10 00:00:00+00:00").isoformat()
) )
assert forecast.get(ATTR_FORECAST_WIND_BEARING) == 45.0 assert forecast[ATTR_FORECAST_WIND_BEARING] == 45.0
assert forecast.get(ATTR_FORECAST_WIND_SPEED) == 20.0 # 5.56 m/s -> km/h assert forecast[ATTR_FORECAST_WIND_SPEED] == 20.0 # 5.56 m/s -> km/h
state = hass.states.get("weather.aemet_hourly") state = hass.states.get("weather.aemet_hourly")
assert state is None assert state is None
@ -98,25 +98,25 @@ async def test_aemet_weather_legacy(
state = hass.states.get("weather.aemet_daily") state = hass.states.get("weather.aemet_daily")
assert state assert state
assert state.state == ATTR_CONDITION_SNOWY assert state.state == ATTR_CONDITION_SNOWY
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION assert state.attributes[ATTR_ATTRIBUTION] == ATTRIBUTION
assert state.attributes.get(ATTR_WEATHER_HUMIDITY) == 99.0 assert state.attributes[ATTR_WEATHER_HUMIDITY] == 99.0
assert state.attributes.get(ATTR_WEATHER_PRESSURE) == 1004.4 # 100440.0 Pa -> hPa assert state.attributes[ATTR_WEATHER_PRESSURE] == 1004.4 # 100440.0 Pa -> hPa
assert state.attributes.get(ATTR_WEATHER_TEMPERATURE) == -0.7 assert state.attributes[ATTR_WEATHER_TEMPERATURE] == -0.7
assert state.attributes.get(ATTR_WEATHER_WIND_BEARING) == 90.0 assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 122.0
assert state.attributes.get(ATTR_WEATHER_WIND_GUST_SPEED) == 24.0 assert state.attributes[ATTR_WEATHER_WIND_GUST_SPEED] == 12.2
assert state.attributes.get(ATTR_WEATHER_WIND_SPEED) == 15.0 # 4.17 m/s -> km/h assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 3.2
forecast = state.attributes.get(ATTR_FORECAST)[0] forecast = state.attributes[ATTR_FORECAST][0]
assert forecast.get(ATTR_FORECAST_CONDITION) == ATTR_CONDITION_PARTLYCLOUDY assert forecast[ATTR_FORECAST_CONDITION] == ATTR_CONDITION_PARTLYCLOUDY
assert forecast.get(ATTR_FORECAST_PRECIPITATION) is None assert ATTR_FORECAST_PRECIPITATION not in forecast
assert forecast.get(ATTR_FORECAST_PRECIPITATION_PROBABILITY) == 30 assert forecast[ATTR_FORECAST_PRECIPITATION_PROBABILITY] == 30
assert forecast.get(ATTR_FORECAST_TEMP) == 4 assert forecast[ATTR_FORECAST_TEMP] == 4
assert forecast.get(ATTR_FORECAST_TEMP_LOW) == -4 assert forecast[ATTR_FORECAST_TEMP_LOW] == -4
assert ( assert (
forecast.get(ATTR_FORECAST_TIME) forecast[ATTR_FORECAST_TIME]
== dt_util.parse_datetime("2021-01-10 00:00:00+00:00").isoformat() == dt_util.parse_datetime("2021-01-10 00:00:00+00:00").isoformat()
) )
assert forecast.get(ATTR_FORECAST_WIND_BEARING) == 45.0 assert forecast[ATTR_FORECAST_WIND_BEARING] == 45.0
assert forecast.get(ATTR_FORECAST_WIND_SPEED) == 20.0 # 5.56 m/s -> km/h assert forecast[ATTR_FORECAST_WIND_SPEED] == 20.0 # 5.56 m/s -> km/h
state = hass.states.get("weather.aemet_hourly") state = hass.states.get("weather.aemet_hourly")
assert state is None assert state is None