diff --git a/.coveragerc b/.coveragerc index 7a13c433b83..78bc9e0ccb1 100644 --- a/.coveragerc +++ b/.coveragerc @@ -771,6 +771,7 @@ omit = homeassistant/components/onvif/event.py homeassistant/components/onvif/parsers.py homeassistant/components/onvif/sensor.py + homeassistant/components/open_meteo/weather.py homeassistant/components/opencv/* homeassistant/components/openevse/sensor.py homeassistant/components/openexchangerates/sensor.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 018c0063f9e..d4d9cf65354 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: hooks: - id: codespell args: - - --ignore-words-list=hass,alot,datas,dof,dur,ether,farenheit,hist,iff,ines,ist,lightsensor,mut,nd,pres,referer,ser,serie,te,technik,ue,uint,visability,wan,wanna,withing,iam,incomfort,ba,haa + - --ignore-words-list=hass,alot,datas,dof,dur,ether,farenheit,hist,iff,ines,ist,lightsensor,mut,nd,pres,referer,rime,ser,serie,te,technik,ue,uint,visability,wan,wanna,withing,iam,incomfort,ba,haa - --skip="./.*,*.csv,*.json" - --quiet-level=2 exclude_types: [csv, json] diff --git a/.strict-typing b/.strict-typing index 5546086a456..f663ec6a6b9 100644 --- a/.strict-typing +++ b/.strict-typing @@ -95,6 +95,7 @@ homeassistant.components.notify.* homeassistant.components.notion.* homeassistant.components.number.* homeassistant.components.onewire.* +homeassistant.components.open_meteo.* homeassistant.components.openuv.* homeassistant.components.persistent_notification.* homeassistant.components.pi_hole.* diff --git a/CODEOWNERS b/CODEOWNERS index 7f011d3f182..d54ed4827c6 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -379,6 +379,7 @@ homeassistant/components/onboarding/* @home-assistant/core homeassistant/components/ondilo_ico/* @JeromeHXP homeassistant/components/onewire/* @garbled1 @epenet homeassistant/components/onvif/* @hunterjm +homeassistant/components/open_meteo/* @frenck homeassistant/components/openerz/* @misialq homeassistant/components/opengarage/* @danielhiversen homeassistant/components/openhome/* @bazwilliams diff --git a/homeassistant/components/open_meteo/__init__.py b/homeassistant/components/open_meteo/__init__.py new file mode 100644 index 00000000000..348f0616556 --- /dev/null +++ b/homeassistant/components/open_meteo/__init__.py @@ -0,0 +1,56 @@ +"""Support for Open-Meteo.""" +from __future__ import annotations + +from open_meteo import Forecast, OpenMeteo, OpenMeteoError + +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ATTR_LATITUDE, ATTR_LONGITUDE, CONF_ZONE, Platform +from homeassistant.core import HomeAssistant +from homeassistant.helpers.aiohttp_client import async_get_clientsession +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed + +from .const import DOMAIN, LOGGER, SCAN_INTERVAL + +PLATFORMS = [Platform.WEATHER] + + +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Set up Open-Meteo from a config entry.""" + session = async_get_clientsession(hass) + open_meteo = OpenMeteo(session=session) + + async def async_update_forecast() -> Forecast: + zone = hass.states.get(entry.data[CONF_ZONE]) + if zone is None: + raise UpdateFailed(f"Zone '{entry.data[CONF_ZONE]}' not found") + + try: + return await open_meteo.forecast( + latitude=zone.attributes[ATTR_LATITUDE], + longitude=zone.attributes[ATTR_LONGITUDE], + current_weather=True, + ) + except OpenMeteoError as err: + raise UpdateFailed("Open-Meteo API communication error") from err + + coordinator: DataUpdateCoordinator[Forecast] = DataUpdateCoordinator( + hass, + LOGGER, + name=f"{DOMAIN}_{entry.data[CONF_ZONE]}", + update_interval=SCAN_INTERVAL, + update_method=async_update_forecast, + ) + await coordinator.async_config_entry_first_refresh() + + hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator + hass.config_entries.async_setup_platforms(entry, PLATFORMS) + + return True + + +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Unload Open-Meteo config entry.""" + unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) + if unload_ok: + del hass.data[DOMAIN][entry.entry_id] + return unload_ok diff --git a/homeassistant/components/open_meteo/config_flow.py b/homeassistant/components/open_meteo/config_flow.py new file mode 100644 index 00000000000..76d5436f565 --- /dev/null +++ b/homeassistant/components/open_meteo/config_flow.py @@ -0,0 +1,54 @@ +"""Config flow to configure the Open-Meteo integration.""" +from __future__ import annotations + +from typing import Any + +import voluptuous as vol + +from homeassistant.components.zone import DOMAIN as ZONE_DOMAIN, ENTITY_ID_HOME +from homeassistant.config_entries import ConfigFlow +from homeassistant.const import CONF_ZONE +from homeassistant.data_entry_flow import FlowResult + +from .const import DOMAIN + + +class OpenMeteoFlowHandler(ConfigFlow, domain=DOMAIN): + """Config flow for OpenMeteo.""" + + VERSION = 1 + + async def async_step_user( + self, user_input: dict[str, Any] | None = None + ) -> FlowResult: + """Handle a flow initialized by the user.""" + if user_input is not None: + await self.async_set_unique_id(user_input[CONF_ZONE]) + self._abort_if_unique_id_configured() + + zone = self.hass.states.get(user_input[CONF_ZONE]) + return self.async_create_entry( + title=zone.name if zone else "Open-Meteo", + data={CONF_ZONE: user_input[CONF_ZONE]}, + ) + + zones: dict[str, str] = { + entity_id: state.name + for entity_id in self.hass.states.async_entity_ids(ZONE_DOMAIN) + if (state := self.hass.states.get(entity_id)) is not None + } + zones = dict(sorted(zones.items(), key=lambda x: x[1], reverse=True)) + + return self.async_show_form( + step_id="user", + data_schema=vol.Schema( + { + vol.Required(CONF_ZONE): vol.In( + { + ENTITY_ID_HOME: zones.pop(ENTITY_ID_HOME), + **zones, + } + ), + } + ), + ) diff --git a/homeassistant/components/open_meteo/const.py b/homeassistant/components/open_meteo/const.py new file mode 100644 index 00000000000..94e27293bad --- /dev/null +++ b/homeassistant/components/open_meteo/const.py @@ -0,0 +1,56 @@ +"""Constants for the Open-Meteo integration.""" +from __future__ import annotations + +from datetime import timedelta +import logging +from typing import Final + +from homeassistant.components.weather import ( + ATTR_CONDITION_CLOUDY, + ATTR_CONDITION_FOG, + ATTR_CONDITION_LIGHTNING, + ATTR_CONDITION_PARTLYCLOUDY, + ATTR_CONDITION_POURING, + ATTR_CONDITION_RAINY, + ATTR_CONDITION_SNOWY, + ATTR_CONDITION_SUNNY, +) + +DOMAIN: Final = "open_meteo" + +LOGGER = logging.getLogger(__package__) +SCAN_INTERVAL = timedelta(minutes=30) + +# World Meteorological Organization Weather Code +# mapped to Home Assistant weather conditions. +# https://www.weather.gov/tg/wmo +WMO_TO_HA_CONDITION_MAP = { + 0: ATTR_CONDITION_SUNNY, # Clear sky + 1: ATTR_CONDITION_SUNNY, # Mainly clear + 2: ATTR_CONDITION_PARTLYCLOUDY, # Partly cloudy + 3: ATTR_CONDITION_CLOUDY, # Overcast + 45: ATTR_CONDITION_FOG, # Fog + 48: ATTR_CONDITION_FOG, # Depositing rime fog + 51: ATTR_CONDITION_RAINY, # Drizzle: Light intensity + 53: ATTR_CONDITION_RAINY, # Drizzle: Moderate intensity + 55: ATTR_CONDITION_RAINY, # Drizzle: Dense intensity + 56: ATTR_CONDITION_RAINY, # Freezing Drizzle: Light intensity + 57: ATTR_CONDITION_RAINY, # Freezing Drizzle: Dense intensity + 61: ATTR_CONDITION_RAINY, # Rain: Slight intensity + 63: ATTR_CONDITION_RAINY, # Rain: Moderate intensity + 65: ATTR_CONDITION_POURING, # Rain: Heavy intensity + 66: ATTR_CONDITION_RAINY, # Freezing Rain: Light intensity + 67: ATTR_CONDITION_POURING, # Freezing Rain: Heavy intensity + 71: ATTR_CONDITION_SNOWY, # Snow fall: Slight intensity + 73: ATTR_CONDITION_SNOWY, # Snow fall: Moderate intensity + 75: ATTR_CONDITION_SNOWY, # Snow fall: Heavy intensity + 77: ATTR_CONDITION_SNOWY, # Snow grains + 80: ATTR_CONDITION_RAINY, # Rain showers: Slight intensity + 81: ATTR_CONDITION_RAINY, # Rain showers: Moderate intensity + 82: ATTR_CONDITION_POURING, # Rain showers: Violent intensity + 85: ATTR_CONDITION_SNOWY, # Snow showers: Slight intensity + 86: ATTR_CONDITION_SNOWY, # Snow showers: Heavy intensity + 95: ATTR_CONDITION_LIGHTNING, # Thunderstorm: Slight and moderate intensity + 96: ATTR_CONDITION_LIGHTNING, # Thunderstorm with slight hail + 99: ATTR_CONDITION_LIGHTNING, # Thunderstorm with heavy hail +} diff --git a/homeassistant/components/open_meteo/manifest.json b/homeassistant/components/open_meteo/manifest.json new file mode 100644 index 00000000000..ccfc7dbd51d --- /dev/null +++ b/homeassistant/components/open_meteo/manifest.json @@ -0,0 +1,10 @@ +{ + "domain": "open_meteo", + "name": "Open-Meteo", + "config_flow": true, + "documentation": "https://www.home-assistant.io/integrations/open_meteo", + "requirements": ["open-meteo==0.2.1"], + "dependencies": ["zone"], + "codeowners": ["@frenck"], + "iot_class": "cloud_polling" +} diff --git a/homeassistant/components/open_meteo/strings.json b/homeassistant/components/open_meteo/strings.json new file mode 100644 index 00000000000..f2f22413403 --- /dev/null +++ b/homeassistant/components/open_meteo/strings.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "description": "Select location to use for weather forecasting", + "data": { + "zone": "Zone" + } + } + } + } +} diff --git a/homeassistant/components/open_meteo/translations/en.json b/homeassistant/components/open_meteo/translations/en.json new file mode 100644 index 00000000000..7736b1da63e --- /dev/null +++ b/homeassistant/components/open_meteo/translations/en.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "zone": "Zone" + }, + "description": "Select location to use for weather forecasting" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/open_meteo/weather.py b/homeassistant/components/open_meteo/weather.py new file mode 100644 index 00000000000..b34de06efe5 --- /dev/null +++ b/homeassistant/components/open_meteo/weather.py @@ -0,0 +1,80 @@ +"""Support for Open-Meteo weather.""" +from __future__ import annotations + +from open_meteo import Forecast as OpenMeteoForecast + +from homeassistant.components.weather import WeatherEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import TEMP_CELSIUS +from homeassistant.core import HomeAssistant +from homeassistant.helpers.device_registry import DeviceEntryType +from homeassistant.helpers.entity import DeviceInfo +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.update_coordinator import ( + CoordinatorEntity, + DataUpdateCoordinator, +) + +from .const import DOMAIN, WMO_TO_HA_CONDITION_MAP + + +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up Open-Meteo weather entity based on a config entry.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + async_add_entities([OpenMeteoWeatherEntity(entry=entry, coordinator=coordinator)]) + + +class OpenMeteoWeatherEntity(CoordinatorEntity, WeatherEntity): + """Defines an Open-Meteo weather entity.""" + + _attr_temperature_unit = TEMP_CELSIUS + coordinator: DataUpdateCoordinator[OpenMeteoForecast] + + def __init__( + self, *, entry: ConfigEntry, coordinator: DataUpdateCoordinator + ) -> None: + """Initialize Open-Meteo weather entity.""" + super().__init__(coordinator=coordinator) + self._attr_unique_id = entry.entry_id + self._attr_name = entry.title + + self._attr_device_info = DeviceInfo( + entry_type=DeviceEntryType.SERVICE, + identifiers={(DOMAIN, entry.entry_id)}, + manufacturer="Open-Meteo", + name=entry.title, + ) + + @property + def condition(self) -> str | None: + """Return the current condition.""" + if not self.coordinator.data.current_weather: + return None + return WMO_TO_HA_CONDITION_MAP.get( + self.coordinator.data.current_weather.weather_code + ) + + @property + def temperature(self) -> float | None: + """Return the platform temperature.""" + if not self.coordinator.data.current_weather: + return None + return self.coordinator.data.current_weather.temperature + + @property + def wind_speed(self) -> float | None: + """Return the wind speed.""" + if not self.coordinator.data.current_weather: + return None + return self.coordinator.data.current_weather.wind_speed + + @property + def wind_bearing(self) -> float | str | None: + """Return the wind bearing.""" + if not self.coordinator.data.current_weather: + return None + return self.coordinator.data.current_weather.wind_direction diff --git a/homeassistant/generated/config_flows.py b/homeassistant/generated/config_flows.py index 469f5ae3c90..74a90052fa4 100644 --- a/homeassistant/generated/config_flows.py +++ b/homeassistant/generated/config_flows.py @@ -218,6 +218,7 @@ FLOWS = [ "ondilo_ico", "onewire", "onvif", + "open_meteo", "opengarage", "opentherm_gw", "openuv", diff --git a/mypy.ini b/mypy.ini index 47450bab8ed..475840c3b4d 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1056,6 +1056,17 @@ no_implicit_optional = true warn_return_any = true warn_unreachable = true +[mypy-homeassistant.components.open_meteo.*] +check_untyped_defs = true +disallow_incomplete_defs = true +disallow_subclassing_any = true +disallow_untyped_calls = true +disallow_untyped_decorators = true +disallow_untyped_defs = true +no_implicit_optional = true +warn_return_any = true +warn_unreachable = true + [mypy-homeassistant.components.openuv.*] check_untyped_defs = true disallow_incomplete_defs = true diff --git a/requirements_all.txt b/requirements_all.txt index 95a0e08e830..53d76bf5a6f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1140,6 +1140,9 @@ onvif-zeep-async==1.2.0 # homeassistant.components.opengarage open-garage==0.2.0 +# homeassistant.components.open_meteo +open-meteo==0.2.1 + # homeassistant.components.opencv # opencv-python-headless==4.5.2.54 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index d52f464f1eb..c34dfb8e6f6 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -705,6 +705,9 @@ onvif-zeep-async==1.2.0 # homeassistant.components.opengarage open-garage==0.2.0 +# homeassistant.components.open_meteo +open-meteo==0.2.1 + # homeassistant.components.openerz openerz-api==0.1.0 diff --git a/tests/components/open_meteo/__init__.py b/tests/components/open_meteo/__init__.py new file mode 100644 index 00000000000..11ac51700a8 --- /dev/null +++ b/tests/components/open_meteo/__init__.py @@ -0,0 +1 @@ +"""Tests for the Open-Meteo integration.""" diff --git a/tests/components/open_meteo/conftest.py b/tests/components/open_meteo/conftest.py new file mode 100644 index 00000000000..cb950dcc442 --- /dev/null +++ b/tests/components/open_meteo/conftest.py @@ -0,0 +1,49 @@ +"""Fixtures for the Open-Meteo integration tests.""" +from __future__ import annotations + +from collections.abc import Generator +from unittest.mock import MagicMock, patch + +from open_meteo import Forecast +import pytest + +from homeassistant.components.open_meteo.const import DOMAIN +from homeassistant.const import CONF_ZONE + +from tests.common import MockConfigEntry, load_fixture + + +@pytest.fixture +def mock_config_entry() -> MockConfigEntry: + """Return the default mocked config entry.""" + return MockConfigEntry( + title="Home", + domain=DOMAIN, + data={CONF_ZONE: "zone.home"}, + unique_id="zone.home", + ) + + +@pytest.fixture +def mock_setup_entry() -> Generator[None, None, None]: + """Mock setting up a config entry.""" + with patch( + "homeassistant.components.open_meteo.async_setup_entry", return_value=True + ): + yield + + +@pytest.fixture +def mock_open_meteo(request: pytest.FixtureRequest) -> Generator[None, MagicMock, None]: + """Return a mocked Open-Meteo client.""" + fixture: str = "forecast.json" + if hasattr(request, "param") and request.param: + fixture = request.param + + forecast = Forecast.parse_raw(load_fixture(fixture, DOMAIN)) + with patch( + "homeassistant.components.open_meteo.OpenMeteo", autospec=True + ) as open_meteo_mock: + open_meteo = open_meteo_mock.return_value + open_meteo.forecast.return_value = forecast + yield open_meteo diff --git a/tests/components/open_meteo/fixtures/forecast.json b/tests/components/open_meteo/fixtures/forecast.json new file mode 100644 index 00000000000..e9510cb2d2c --- /dev/null +++ b/tests/components/open_meteo/fixtures/forecast.json @@ -0,0 +1,6660 @@ +{ + "generationtime_ms": 2.886056900024414, + "latitude": 52.52, + "daily_units": { + "winddirection_10m_dominant": "°", + "temperature_2m_max": "°C", + "windspeed_10m_max": "km\/h", + "sunrise": "iso8601", + "precipitation_hours": "h", + "temperature_2m_min": "°C", + "apparent_temperature_min": "°C", + "sunset": "iso8601", + "apparent_temperature_max": "°C", + "weathercode": "wmo code", + "windgusts_10m_max": "km\/h", + "shortwave_radiation_sum": "MJ\/m²", + "time": "iso8601", + "precipitation_sum": "mm" + }, + "hourly": { + "soil_moisture_3_9cm": [ + 0.308, + 0.308, + 0.308, + 0.308, + 0.309, + 0.309, + 0.309, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.306, + 0.306, + 0.306, + 0.307, + 0.307, + 0.306, + 0.306, + 0.307, + 0.307, + 0.308, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.305, + 0.305, + 0.306, + 0.308, + 0.31, + 0.306, + 0.306, + 0.306, + 0.307, + 0.307, + 0.308, + 0.308, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.306, + 0.306, + 0.307, + 0.308, + 0.308, + 0.308, + 0.31, + 0.311, + 0.311, + 0.311, + 0.311, + 0.31, + 0.31, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.307, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.302, + 0.303, + 0.305, + 0.305, + 0.306, + 0.306, + 0.306, + 0.305, + 0.305, + 0.304, + 0.304, + 0.304, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.302, + 0.302, + 0.303, + 0.308 + ], + "soil_temperature_0cm": [ + 6.6, + 6.6, + 6.5, + 6.1, + 6.1, + 6, + 6.1, + 5.7, + 5.4, + 6.3, + 7, + 7.6, + 7.9, + 8.1, + 7.9, + 7.3, + 6.7, + 6.3, + 6.3, + 5.7, + 5.5, + 5.6, + 5.6, + 4.9, + 5.1, + 4.7, + 4.8, + 4.7, + 3.6, + 2.3, + 1.4, + 0.8, + 0.4, + 1.7, + 2.7, + 3.8, + 4.8, + 5.5, + 4.8, + 4.5, + 4.1, + 3.7, + 3.6, + 3.7, + 3.7, + 3.5, + 3.5, + 3.4, + 3.6, + 3.6, + 3.2, + 3.3, + 3.3, + 3.2, + 3, + 3.1, + 3.1, + 3.3, + 4.5, + 4.9, + 5.3, + 5.5, + 5.2, + 4.6, + 3.7, + 3.3, + 3.1, + 2.8, + 2.2, + 1.9, + 1.8, + 1.7, + 1.4, + 1.1, + 0.3, + -0, + -0, + -0, + -0.1, + -0.1, + -0.2, + -0.2, + 1.4, + 2.8, + 4.6, + 5.4, + 5, + 3.7, + 2.5, + 2.6, + 2.4, + 2.6, + 2.4, + 2.1, + 1.6, + 1.7, + 0.8, + -0, + -0.2, + -0.2, + -0.2, + -0.4, + -0.6, + -0.7, + -0.3, + 0.2, + 1, + 1.9, + 2.9, + 3.8, + 3.6, + 3.1, + 2.3, + 2, + 1.7, + 1.3, + 1, + 0.7, + 0.4, + 0.3, + 0.3, + 0.2, + 0.1, + 0.1, + -0.1, + -0.2, + -0.4, + -0.5, + -0.4, + -0.1, + 0.3, + 0.8, + 1.5, + 2.1, + 2.4, + 1.8, + 1.1, + 1.1, + 1.4, + 1.6, + 1.7, + 1.8, + 1.8, + 1.7, + 1.6, + 1.4, + 1.4, + 1.4, + 1.3, + 1.1, + 0.9, + 0.6, + 0.5, + 0.5, + 0.8, + 1.5, + 2.5, + 3.4, + 3.1, + 2.5, + 1.8, + 1.8, + 2.1, + 2.4, + 2.5, + 2.5, + 2.6, + 2.7 + ], + "weathercode": [ + 3, + 3, + 3, + 3, + 51, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 61, + 61, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 1, + 1, + 1, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 61, + 3, + 3, + 3, + 61, + 61, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 61, + 61, + 61, + 61, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 3, + 3, + 3, + 0, + 0, + 1, + 1, + 2, + 3, + 61, + 3, + 3, + 3, + 3, + 3, + 3, + 1, + 0, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 61, + 61, + 61, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 77, + 77, + 77, + 3, + 3, + 3, + 3, + 3, + 3, + 51, + 51, + 51, + 3, + 3, + 3, + 3, + 3, + 3, + 53, + 53, + 53, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 3, + 3, + 3, + 61, + 61, + 61, + 61, + 61, + 61, + 80 + ], + "windspeed_180m": [ + 26.8, + 26.6, + 27.5, + 24.6, + 27.8, + 28.5, + 27, + 24.9, + 26.6, + 22.8, + 21.1, + 18.6, + 14.3, + 14, + 12.3, + 13.3, + 10.8, + 8.6, + 10.7, + 12, + 14, + 16.4, + 17.1, + 17.9, + 20, + 22.4, + 20.9, + 19.5, + 16.9, + 16.5, + 14.5, + 13.8, + 16.2, + 20.7, + 16.3, + 12.2, + 13.8, + 14.6, + 22.7, + 26.5, + 22.9, + 30.1, + 34.3, + 35.4, + 31.3, + 30.7, + 33.5, + 34.4, + 32.8, + 31.4, + 29.8, + 30.4, + 30.5, + 27.5, + 26.1, + 27.1, + 25.9, + 27.8, + 25.4, + 22.1, + 20.1, + 16.7, + 17.1, + 17, + 20.1, + 16.7, + 20.3, + 23.3, + 32.4, + 34.8, + 36.2, + 35.8, + 34.2, + 33, + 36.1, + 38.7, + 38.8, + 37, + 35.5, + 35.7, + 35.9, + 36.9, + 37.6, + 35.1, + 30, + 25, + 21.1, + 24.5, + 29.8, + 30.4, + 29.5, + 29.8, + 31.9, + 32.2, + 24.2, + 25.7, + 27.5, + 25.7, + 26.5, + 27.4, + 28.5, + 28.8, + 28.9, + 28.6, + 28, + 27.1, + 25.8, + 24.6, + 23.2, + 21.7, + 21.5, + 21.6, + 20.9, + 18.8, + 16.6, + 16.5, + 18.7, + 21.9, + 24.6, + 24.1, + 22.4, + 20.4, + 20.1, + 20.3, + 20, + 19.2, + 18.2, + 17.1, + 16.1, + 15.2, + 15.1, + 16, + 17.6, + 19.5, + 21.8, + 25.4, + 30, + 33.1, + 36.4, + 40, + 41.9, + 43.2, + 43.6, + 41.9, + 39, + 35.9, + 35.1, + 34.9, + 34.7, + 34.5, + 34.3, + 33, + 30.8, + 28, + 24.4, + 21.9, + 19.5, + 17.8, + 18.4, + 20, + 23.4, + 28.5, + 36.2, + 44.9, + 47.4, + 47.8, + 47.9, + 48.8 + ], + "soil_moisture_9_27cm": [ + 0.315, + 0.315, + 0.314, + 0.314, + 0.315, + 0.315, + 0.315, + 0.315, + 0.315, + 0.315, + 0.315, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.314, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.313, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.308, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309, + 0.309 + ], + "shortwave_radiation": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.7, + 23, + 42.1, + 69.7, + 83, + 80.3, + 64.1, + 28, + 7.9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.7, + 32.4, + 77.2, + 109.4, + 124.7, + 120.1, + 93.1, + 26.9, + 14.6, + 0, + -0, + 0, + -0, + 0, + 0, + -0, + -0, + -0, + 0, + 0, + -0, + -0, + 0, + -0, + 0.3, + 17.4, + 58.5, + 92.6, + 107.1, + 114.2, + 92.2, + 46.9, + 12.3, + 0, + -0, + 0, + -0, + 0.1, + -0, + -0.1, + 0.1, + -0.1, + 0, + 0.1, + -0, + 0.1, + 0, + -0.2, + 0.3, + 27.8, + 71.4, + 115.2, + 117.8, + 83.3, + 87.2, + 54.4, + 11.1, + -0.2, + -0.1, + -0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 51.3, + 121.4, + 182, + 227.4, + 239.7, + 191.8, + 114.5, + 32.3, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 44.9, + 103.3, + 139.2, + 150.5, + 141.8, + 116.6, + 74.9, + 23.4, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 30.4, + 75.2, + 126.8, + 179.4, + 208.1, + 169.6, + 100.9, + 28.2, + 0, + 0, + 0, + -0, + -0, + 0, + 0 + ], + "cloudcover_mid": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 66, + 88, + 100, + 64, + 63, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 62, + 62, + 78, + 100, + 92, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 98, + 94, + 95, + 100, + 100, + 100, + 85, + 29, + 21, + 10, + 51, + 0, + 5, + 10, + 16, + 52, + 98, + 100, + 100, + 100, + 100, + 64, + 39, + 35, + 12, + 0, + 33, + 67, + 100, + 95, + 90, + 85, + 90, + 95, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 90, + 81, + 71, + 77, + 82, + 88, + 92, + 96, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 93, + 86, + 79, + 71, + 63, + 55, + 44, + 64, + 84, + 86, + 88, + 90, + 41, + 42, + 42, + 50, + 59, + 67, + 56, + 44, + 33, + 22, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20, + 40, + 60, + 73, + 87, + 100, + 100, + 100, + 100, + 94 + ], + "cloudcover": [ + 100, + 100, + 98, + 100, + 100, + 98, + 96, + 88, + 88, + 100, + 94, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 83, + 87, + 100, + 100, + 100, + 79, + 34, + 7, + 0, + 49, + 100, + 99, + 100, + 100, + 95, + 100, + 100, + 100, + 100, + 96, + 95, + 100, + 100, + 100, + 96, + 97, + 100, + 91, + 93, + 100, + 91, + 98, + 100, + 99, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 74, + 100, + 100, + 100, + 0, + 5, + 13, + 18, + 52, + 99, + 100, + 100, + 100, + 100, + 94, + 86, + 88, + 43, + 0, + 33, + 67, + 100, + 99, + 98, + 97, + 98, + 99, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 94, + 88, + 82, + 87, + 92, + 97, + 98, + 99, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 98, + 97, + 95, + 97, + 98, + 100, + 99, + 98, + 98, + 98, + 98, + 98, + 94, + 97, + 99, + 98, + 98, + 97, + 96, + 95, + 95, + 94, + 93, + 92, + 86, + 81, + 75, + 61, + 47, + 33, + 54, + 75, + 96, + 97, + 99, + 100, + 100, + 100, + 100, + 100 + ], + "relativehumidity_2m": [ + 95, + 95, + 94, + 93, + 95, + 95, + 94, + 94, + 95, + 94, + 92, + 88, + 85, + 83, + 82, + 84, + 89, + 89, + 93, + 93, + 95, + 96, + 95, + 96, + 94, + 92, + 89, + 86, + 87, + 90, + 93, + 96, + 97, + 100, + 96, + 88, + 85, + 83, + 79, + 82, + 84, + 83, + 85, + 85, + 84, + 84, + 85, + 86, + 87, + 89, + 90, + 91, + 92, + 91, + 92, + 90, + 88, + 87, + 84, + 80, + 77, + 74, + 73, + 75, + 82, + 86, + 89, + 89, + 83, + 82, + 80, + 78, + 78, + 78, + 79, + 79, + 79, + 81, + 82, + 83, + 83, + 85, + 82, + 77, + 73, + 69, + 68, + 70, + 76, + 82, + 84, + 84, + 83, + 84, + 86, + 87, + 89, + 92, + 92, + 92, + 92, + 93, + 93, + 93, + 92, + 90, + 88, + 85, + 81, + 77, + 77, + 79, + 81, + 83, + 84, + 86, + 87, + 88, + 89, + 88, + 88, + 87, + 87, + 87, + 88, + 88, + 88, + 89, + 90, + 91, + 92, + 89, + 86, + 82, + 81, + 82, + 84, + 87, + 91, + 95, + 94, + 93, + 93, + 93, + 93, + 94, + 94, + 95, + 94, + 93, + 92, + 90, + 89, + 88, + 87, + 83, + 79, + 76, + 77, + 81, + 85, + 88, + 90, + 91, + 91, + 89, + 87, + 88 + ], + "cloudcover_low": [ + 100, + 100, + 98, + 100, + 100, + 98, + 96, + 88, + 88, + 100, + 94, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 83, + 87, + 100, + 100, + 100, + 79, + 34, + 7, + 0, + 49, + 100, + 99, + 100, + 100, + 95, + 100, + 100, + 100, + 91, + 92, + 92, + 91, + 85, + 90, + 96, + 97, + 100, + 91, + 93, + 100, + 86, + 95, + 100, + 97, + 100, + 96, + 93, + 64, + 81, + 62, + 80, + 83, + 89, + 86, + 79, + 20, + 20, + 48, + 71, + 64, + 49, + 19, + 0, + 0, + 0, + 31, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 70, + 80, + 89, + 100, + 64, + 88, + 75, + 76, + 34, + 0, + 3, + 6, + 9, + 11, + 12, + 14, + 25, + 36, + 47, + 38, + 29, + 19, + 40, + 61, + 81, + 79, + 77, + 75, + 75, + 75, + 74, + 69, + 64, + 59, + 59, + 58, + 58, + 65, + 72, + 79, + 81, + 84, + 86, + 91, + 95, + 100, + 99, + 98, + 97, + 93, + 90, + 87, + 88, + 93, + 98, + 97, + 96, + 95, + 93, + 91, + 89, + 90, + 91, + 92, + 86, + 81, + 75, + 61, + 47, + 33, + 52, + 71, + 90, + 93, + 96, + 99, + 89, + 80, + 70, + 80 + ], + "soil_moisture_27_81cm": [ + 0.332, + 0.332, + 0.332, + 0.332, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.331, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.33, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.329, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324, + 0.324 + ], + "temperature_2m": [ + 6.9, + 6.8, + 6.8, + 6.6, + 6.5, + 6.4, + 6.4, + 6.2, + 5.9, + 6, + 6.5, + 6.9, + 7.3, + 7.6, + 7.6, + 7.5, + 7.2, + 6.9, + 6.6, + 6.4, + 6, + 5.9, + 5.8, + 5.5, + 5.4, + 5.1, + 5, + 4.9, + 4.2, + 3.2, + 2.2, + 1.5, + 0.8, + 0.2, + 0.6, + 1.8, + 2.7, + 3.8, + 4.5, + 4.5, + 4.4, + 4.2, + 3.9, + 3.9, + 4, + 3.9, + 3.9, + 3.8, + 3.7, + 3.6, + 3.4, + 3.3, + 3.2, + 3.2, + 3.1, + 3.1, + 3.1, + 3.1, + 3.5, + 3.9, + 4.3, + 4.6, + 4.8, + 4.6, + 4, + 3.5, + 3.3, + 3, + 2.7, + 2.3, + 2, + 1.8, + 1.6, + 1.2, + 0.7, + 0.4, + 0.3, + 0.2, + 0.2, + 0.1, + -0, + -0.1, + 0.6, + 1.7, + 2.9, + 4, + 4.5, + 4.2, + 3.5, + 3, + 2.8, + 2.8, + 2.8, + 2.6, + 2.3, + 2, + 1.6, + 0.9, + 0.6, + 0.4, + 0.1, + -0, + -0.2, + -0.2, + -0.1, + 0, + 0.5, + 1.2, + 2.2, + 3.1, + 3.4, + 3.4, + 3.2, + 3, + 2.7, + 2.2, + 1.9, + 1.5, + 1.1, + 0.9, + 0.8, + 0.6, + 0.4, + 0.2, + -0.1, + -0.3, + -0.4, + -0.5, + -0.5, + -0.5, + -0.3, + 0.3, + 1.1, + 2, + 2.2, + 2, + 1.7, + 1.4, + 1, + 0.7, + 2, + 1.9, + 1.8, + 1.8, + 1.7, + 1.6, + 1.5, + 1.5, + 1.3, + 1.1, + 0.8, + 0.5, + 0.1, + -0.2, + -0.3, + 0.2, + 1, + 1.9, + 2.2, + 2.4, + 2.6, + 2.6, + 2.5, + 2.4, + 2.5, + 2.8, + 3, + 3 + ], + "direct_radiation": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.7, + 1.1, + 6.3, + 3.8, + 3.6, + 6.7, + 0.1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.1, + 2.1, + 5.7, + 14.6, + 14.3, + 15.2, + 12.3, + 1.6, + 0.3, + 0, + -0, + 0, + -0, + 0, + 0, + -0, + -0, + 0, + 0, + 0, + -0, + 0, + 0, + -0, + 0, + 0.1, + 1.8, + 2.5, + 1.9, + 1.7, + 0.9, + 0, + -0, + 0, + -0, + 0, + 0, + -0, + -0, + -0.1, + 0.1, + -0.2, + 0, + 0, + -0, + 0.2, + -0.1, + -0.1, + 0.1, + 1.2, + 5.2, + 22, + 27.9, + 15.4, + 26.4, + 3.6, + 0.1, + -0.2, + 0, + -0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 29.8, + 72.1, + 117.5, + 160.8, + 177.8, + 135.5, + 71.8, + 16.7, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 18.6, + 42.2, + 53.5, + 52.3, + 43.3, + 38.3, + 23.5, + 7, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 5.7, + 17.3, + 44.9, + 84.7, + 113.8, + 92.4, + 52, + 13.2, + 0, + 0, + 0, + -0, + -0, + 0, + 0 + ], + "dewpoint_2m": [ + 6.2, + 6.1, + 5.9, + 5.6, + 5.7, + 5.7, + 5.6, + 5.3, + 5.2, + 5.2, + 5.3, + 5.1, + 4.9, + 4.9, + 4.8, + 5, + 5.6, + 5.2, + 5.5, + 5.4, + 5.3, + 5.2, + 5.1, + 4.8, + 4.5, + 3.9, + 3.4, + 2.7, + 2.3, + 1.7, + 1.2, + 0.9, + 0.4, + 0.1, + -0, + 0, + 0.5, + 1.1, + 1.2, + 1.7, + 1.9, + 1.4, + 1.6, + 1.6, + 1.5, + 1.5, + 1.6, + 1.7, + 1.8, + 2, + 2, + 2, + 2, + 1.9, + 1.9, + 1.6, + 1.3, + 1.2, + 1.1, + 0.8, + 0.6, + 0.4, + 0.4, + 0.6, + 1.2, + 1.3, + 1.6, + 1.4, + 0.7, + 0.5, + 0.1, + -0.4, + -0.6, + -1.1, + -1.7, + -2.3, + -2.3, + -2.5, + -2.5, + -2.5, + -2.4, + -2.1, + -1.8, + -1.4, + -0.9, + -0.5, + -0.2, + 0.1, + 0.6, + 0.9, + 1.1, + 1, + 1, + 1, + 0.8, + 0.4, + -0.3, + -1, + -1.3, + -1.4, + -1.5, + -1.6, + -1.7, + -1.7, + -1.7, + -1.7, + -1.6, + -1.4, + -1.2, + -0.9, + -0.8, + -0.8, + -0.7, + -0.6, + -0.5, + -0.5, + -0.5, + -0.6, + -0.7, + -0.8, + -1, + -1.2, + -1.2, + -1.2, + -1.1, + -1.1, + -1.1, + -1, + -1, + -1, + -1, + -0.8, + -0.6, + -0.4, + -0.4, + -0.5, + -0.5, + -0.1, + 0.5, + 1, + 1.1, + 1, + 0.8, + 0.7, + 0.7, + 0.7, + 0.7, + 0.7, + 0.5, + 0.1, + -0.3, + -1, + -1.4, + -1.9, + -2.3, + -2.4, + -2.3, + -2, + -1.4, + -0.6, + 0.3, + 0.7, + 1, + 1.2, + 1.2, + 1.1, + 1.1, + 1.2 + ], + "freezinglevel_height": [ + 2432, + 2434, + 2512, + 2448, + 2512, + 2524, + 2608, + 2458, + 2446, + 2454, + 2454, + 2438, + 2544, + 2554, + 2544, + 2540, + 2550, + 2578, + 2516, + 2586, + 2540, + 2516, + 2508, + 2440, + 2464, + 2464, + 2412, + 2432, + 2260, + 2003, + 1897, + 1774, + 702, + 702, + 693, + 1511, + 635, + 634, + 522, + 668, + 624, + 697, + 674, + 586, + 910, + 856, + 846, + 697, + 665, + 623, + 611, + 633, + 562, + 566, + 620, + 438, + 399, + 398, + 412, + 466, + 501, + 537, + 548, + 513, + 492, + 488, + 448, + 462, + 564, + 569, + 544, + 555, + 540, + 514, + 565, + 471, + 464, + 530, + 507, + 562, + 603, + 566, + 574, + 489, + 462, + 472, + 569, + 562, + 567, + 579, + 597, + 605, + 604, + 598, + 589, + 585, + 582, + 573, + 562, + 548, + 524, + 498, + 468, + 434, + 416, + 402, + 394, + 399, + 412, + 438, + 469, + 508, + 548, + 559, + 562, + 551, + 529, + 497, + 456, + 431, + 407, + 379, + 366, + 356, + 331, + 291, + 241, + 176, + 125, + 72, + 50, + 105, + 199, + 299, + 326, + 308, + 298, + 329, + 376, + 420, + 424, + 411, + 381, + 344, + 297, + 245, + 227, + 219, + 202, + 172, + 135, + 93, + 67, + 44, + 41, + 68, + 113, + 191, + 258, + 335, + 455, + 565, + 687, + 845, + 950, + 1049, + 1187, + 1320 + ], + "soil_temperature_54cm": [ + 8.5, + 8.5, + 8.5, + 8.5, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.3, + 8.3, + 8.3, + 8.3, + 8.3, + 8.3, + 8.3, + 8.3, + 8.3, + 8.3, + 8.3, + 8.2, + 8.2, + 8.2, + 8.2, + 8.2, + 8.2, + 8.2, + 8.1, + 8.1, + 8.1, + 8.1, + 8.1, + 8.1, + 8.1, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 7.9, + 7.9, + 7.9, + 7.9, + 7.9, + 7.9, + 7.9, + 7.8, + 7.8, + 7.8, + 7.5, + 7.5, + 7.5, + 7.5, + 7.5, + 7.4, + 7.4, + 7.4, + 7.4, + 7.4, + 7.4, + 7.3, + 7.3, + 7.3, + 7.3, + 7.3, + 7.2, + 7.2, + 7.2, + 7.2, + 7.2, + 7.1, + 7.1, + 7.1, + 7.1, + 7.1, + 7.1, + 7, + 7, + 7, + 7, + 7, + 7, + 6.9, + 6.9, + 6.9, + 6.9, + 6.9, + 6.8, + 6.8, + 6.8, + 6.8, + 6.8, + 6.8, + 6.7, + 6.7, + 6.7, + 6.7, + 6.7, + 6.7, + 6.6, + 6.6, + 6.6, + 6.6, + 6.6, + 6.6, + 6.5, + 6.5, + 6.5, + 6.5, + 6.5, + 6.4, + 6.4, + 6.4, + 6.4, + 6.4, + 6.4, + 6.3, + 6.3, + 6.3, + 6.3, + 6.3, + 6.3, + 6.3, + 6.2, + 6.2, + 6.2, + 6.2, + 6.2, + 6.2, + 6.2, + 6.1, + 6.1, + 6.1, + 6.1, + 6.1, + 6.1, + 6.1, + 6.1, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 5.9, + 5.9 + ], + "soil_temperature_6cm": [ + 6.4, + 6.4, + 6.4, + 6.4, + 6.3, + 6.3, + 6.3, + 6.1, + 6, + 6, + 6.3, + 6.7, + 7.1, + 7.5, + 7.6, + 7.5, + 7.3, + 7, + 6.8, + 6.5, + 6.3, + 6.2, + 6.1, + 6, + 5.8, + 5.6, + 5.5, + 5.5, + 5.2, + 4.7, + 4, + 3.4, + 2.9, + 2.7, + 3.1, + 3.6, + 4.2, + 4.7, + 5, + 5, + 4.8, + 4.6, + 4.4, + 4.4, + 4.3, + 4.3, + 4.2, + 4.2, + 4.2, + 4.2, + 4.1, + 4, + 4, + 3.9, + 3.9, + 3.8, + 3.8, + 3.8, + 4, + 4.4, + 4.8, + 5.1, + 5.3, + 5.2, + 4.8, + 4.5, + 4.2, + 4, + 3.5, + 3.2, + 3, + 2.9, + 2.7, + 2.6, + 2.2, + 1.9, + 1.6, + 1.5, + 1.4, + 1.3, + 1.2, + 1.2, + 1.4, + 2, + 2.8, + 3.7, + 4.2, + 4.2, + 3.8, + 3.4, + 3.2, + 3.1, + 3.1, + 2.9, + 2.7, + 2.6, + 2.4, + 1.9, + 1.7, + 1.5, + 1.2, + 1.1, + 1, + 0.9, + 0.8, + 0.8, + 0.9, + 1.4, + 2, + 2.6, + 2.9, + 3.1, + 3.1, + 3, + 2.8, + 2.5, + 2.2, + 2, + 1.7, + 1.6, + 1.5, + 1.3, + 1.2, + 1.1, + 1, + 0.9, + 0.9, + 0.8, + 0.7, + 0.6, + 0.7, + 1, + 1.4, + 1.9, + 2.5, + 2.5, + 2.4, + 2.3, + 2.2, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 2, + 1.9, + 1.7, + 1.5, + 1.3, + 1.2, + 1.6, + 2.1, + 2.7, + 2.8, + 2.8, + 2.8, + 2.7, + 2.7, + 2.6, + 2.6, + 2.7, + 2.8, + 2.8 + ], + "soil_moisture_1_3cm": [ + 0.305, + 0.305, + 0.305, + 0.305, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.306, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.303, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.306, + 0.306, + 0.305, + 0.305, + 0.305, + 0.305, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.303, + 0.303, + 0.303, + 0.303, + 0.302, + 0.303, + 0.308, + 0.31, + 0.312, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.303, + 0.303, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.303, + 0.304, + 0.304, + 0.299, + 0.299, + 0.298, + 0.298, + 0.299, + 0.299, + 0.299, + 0.299, + 0.299, + 0.299, + 0.3, + 0.301, + 0.303, + 0.305, + 0.307, + 0.307, + 0.306, + 0.304, + 0.304, + 0.303, + 0.303, + 0.302, + 0.302, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.3, + 0.299, + 0.302, + 0.312 + ], + "winddirection_80m": [ + 263, + 268, + 277, + 271, + 278, + 278, + 276, + 273, + 264, + 271, + 263, + 257, + 257, + 266, + 253, + 258, + 240, + 232, + 194, + 198, + 183, + 186, + 179, + 178, + 165, + 167, + 171, + 168, + 154, + 156, + 166, + 173, + 182, + 192, + 202, + 199, + 204, + 208, + 246, + 217, + 230, + 227, + 232, + 235, + 241, + 239, + 245, + 255, + 257, + 260, + 254, + 251, + 257, + 252, + 240, + 243, + 247, + 256, + 253, + 252, + 244, + 239, + 234, + 217, + 204, + 208, + 173, + 172, + 179, + 177, + 173, + 170, + 167, + 159, + 158, + 159, + 158, + 158, + 152, + 147, + 145, + 143, + 141, + 140, + 145, + 138, + 142, + 143, + 148, + 150, + 151, + 144, + 153, + 169, + 167, + 170, + 179, + 181, + 178, + 171, + 162, + 157, + 152, + 148, + 148, + 150, + 152, + 150, + 145, + 140, + 142, + 146, + 153, + 160, + 171, + 188, + 194, + 195, + 195, + 196, + 196, + 198, + 199, + 201, + 203, + 206, + 210, + 216, + 220, + 225, + 235, + 247, + 258, + 266, + 270, + 267, + 265, + 266, + 268, + 270, + 290, + 287, + 285, + 285, + 287, + 289, + 290, + 290, + 290, + 291, + 291, + 291, + 289, + 286, + 281, + 278, + 274, + 268, + 260, + 249, + 231, + 218, + 208, + 202, + 200, + 199, + 199, + 198 + ], + "winddirection_10m": [ + 261, + 265, + 274, + 268, + 275, + 272, + 271, + 269, + 258, + 268, + 261, + 255, + 256, + 263, + 251, + 256, + 233, + 218, + 185, + 188, + 173, + 175, + 168, + 168, + 158, + 160, + 165, + 162, + 149, + 151, + 159, + 158, + 170, + 190, + 202, + 197, + 202, + 205, + 245, + 214, + 223, + 224, + 229, + 231, + 238, + 236, + 243, + 253, + 255, + 258, + 251, + 248, + 254, + 249, + 238, + 240, + 245, + 254, + 252, + 251, + 243, + 237, + 233, + 216, + 201, + 207, + 167, + 167, + 167, + 165, + 162, + 163, + 160, + 152, + 149, + 149, + 148, + 148, + 140, + 136, + 134, + 133, + 135, + 136, + 142, + 135, + 139, + 141, + 144, + 142, + 137, + 130, + 144, + 157, + 146, + 154, + 164, + 160, + 156, + 147, + 136, + 130, + 125, + 123, + 126, + 132, + 137, + 135, + 131, + 127, + 128, + 132, + 137, + 141, + 146, + 156, + 166, + 174, + 181, + 182, + 182, + 182, + 186, + 189, + 194, + 196, + 198, + 203, + 206, + 211, + 222, + 237, + 253, + 262, + 268, + 264, + 260, + 261, + 263, + 265, + 286, + 284, + 282, + 283, + 285, + 287, + 287, + 287, + 288, + 289, + 290, + 290, + 288, + 284, + 280, + 277, + 273, + 267, + 259, + 244, + 212, + 202, + 199, + 198, + 197, + 195, + 194, + 194 + ], + "time": [ + "2021-11-24T00:00", + "2021-11-24T01:00", + "2021-11-24T02:00", + "2021-11-24T03:00", + "2021-11-24T04:00", + "2021-11-24T05:00", + "2021-11-24T06:00", + "2021-11-24T07:00", + "2021-11-24T08:00", + "2021-11-24T09:00", + "2021-11-24T10:00", + "2021-11-24T11:00", + "2021-11-24T12:00", + "2021-11-24T13:00", + "2021-11-24T14:00", + "2021-11-24T15:00", + "2021-11-24T16:00", + "2021-11-24T17:00", + "2021-11-24T18:00", + "2021-11-24T19:00", + "2021-11-24T20:00", + "2021-11-24T21:00", + "2021-11-24T22:00", + "2021-11-24T23:00", + "2021-11-25T00:00", + "2021-11-25T01:00", + "2021-11-25T02:00", + "2021-11-25T03:00", + "2021-11-25T04:00", + "2021-11-25T05:00", + "2021-11-25T06:00", + "2021-11-25T07:00", + "2021-11-25T08:00", + "2021-11-25T09:00", + "2021-11-25T10:00", + "2021-11-25T11:00", + "2021-11-25T12:00", + "2021-11-25T13:00", + "2021-11-25T14:00", + "2021-11-25T15:00", + "2021-11-25T16:00", + "2021-11-25T17:00", + "2021-11-25T18:00", + "2021-11-25T19:00", + "2021-11-25T20:00", + "2021-11-25T21:00", + "2021-11-25T22:00", + "2021-11-25T23:00", + "2021-11-26T00:00", + "2021-11-26T01:00", + "2021-11-26T02:00", + "2021-11-26T03:00", + "2021-11-26T04:00", + "2021-11-26T05:00", + "2021-11-26T06:00", + "2021-11-26T07:00", + "2021-11-26T08:00", + "2021-11-26T09:00", + "2021-11-26T10:00", + "2021-11-26T11:00", + "2021-11-26T12:00", + "2021-11-26T13:00", + "2021-11-26T14:00", + "2021-11-26T15:00", + "2021-11-26T16:00", + "2021-11-26T17:00", + "2021-11-26T18:00", + "2021-11-26T19:00", + "2021-11-26T20:00", + "2021-11-26T21:00", + "2021-11-26T22:00", + "2021-11-26T23:00", + "2021-11-27T00:00", + "2021-11-27T01:00", + "2021-11-27T02:00", + "2021-11-27T03:00", + "2021-11-27T04:00", + "2021-11-27T05:00", + "2021-11-27T06:00", + "2021-11-27T07:00", + "2021-11-27T08:00", + "2021-11-27T09:00", + "2021-11-27T10:00", + "2021-11-27T11:00", + "2021-11-27T12:00", + "2021-11-27T13:00", + "2021-11-27T14:00", + "2021-11-27T15:00", + "2021-11-27T16:00", + "2021-11-27T17:00", + "2021-11-27T18:00", + "2021-11-27T19:00", + "2021-11-27T20:00", + "2021-11-27T21:00", + "2021-11-27T22:00", + "2021-11-27T23:00", + "2021-11-28T00:00", + "2021-11-28T01:00", + "2021-11-28T02:00", + "2021-11-28T03:00", + "2021-11-28T04:00", + "2021-11-28T05:00", + "2021-11-28T06:00", + "2021-11-28T07:00", + "2021-11-28T08:00", + "2021-11-28T09:00", + "2021-11-28T10:00", + "2021-11-28T11:00", + "2021-11-28T12:00", + "2021-11-28T13:00", + "2021-11-28T14:00", + "2021-11-28T15:00", + "2021-11-28T16:00", + "2021-11-28T17:00", + "2021-11-28T18:00", + "2021-11-28T19:00", + "2021-11-28T20:00", + "2021-11-28T21:00", + "2021-11-28T22:00", + "2021-11-28T23:00", + "2021-11-29T00:00", + "2021-11-29T01:00", + "2021-11-29T02:00", + "2021-11-29T03:00", + "2021-11-29T04:00", + "2021-11-29T05:00", + "2021-11-29T06:00", + "2021-11-29T07:00", + "2021-11-29T08:00", + "2021-11-29T09:00", + "2021-11-29T10:00", + "2021-11-29T11:00", + "2021-11-29T12:00", + "2021-11-29T13:00", + "2021-11-29T14:00", + "2021-11-29T15:00", + "2021-11-29T16:00", + "2021-11-29T17:00", + "2021-11-29T18:00", + "2021-11-29T19:00", + "2021-11-29T20:00", + "2021-11-29T21:00", + "2021-11-29T22:00", + "2021-11-29T23:00", + "2021-11-30T00:00", + "2021-11-30T01:00", + "2021-11-30T02:00", + "2021-11-30T03:00", + "2021-11-30T04:00", + "2021-11-30T05:00", + "2021-11-30T06:00", + "2021-11-30T07:00", + "2021-11-30T08:00", + "2021-11-30T09:00", + "2021-11-30T10:00", + "2021-11-30T11:00", + "2021-11-30T12:00", + "2021-11-30T13:00", + "2021-11-30T14:00", + "2021-11-30T15:00", + "2021-11-30T16:00", + "2021-11-30T17:00", + "2021-11-30T18:00", + "2021-11-30T19:00", + "2021-11-30T20:00", + "2021-11-30T21:00", + "2021-11-30T22:00", + "2021-11-30T23:00" + ], + "soil_moisture_0_1cm": [ + 0.304, + 0.304, + 0.304, + 0.304, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.305, + 0.304, + 0.304, + 0.304, + 0.303, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.304, + 0.303, + 0.303, + 0.303, + 0.304, + 0.304, + 0.303, + 0.303, + 0.303, + 0.303, + 0.302, + 0.303, + 0.304, + 0.303, + 0.303, + 0.303, + 0.305, + 0.306, + 0.305, + 0.305, + 0.304, + 0.304, + 0.304, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.303, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.303, + 0.31, + 0.312, + 0.313, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.301, + 0.301, + 0.301, + 0.301, + 0.301, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.301, + 0.301, + 0.301, + 0.301, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.302, + 0.303, + 0.304, + 0.304, + 0.298, + 0.298, + 0.297, + 0.297, + 0.298, + 0.298, + 0.298, + 0.298, + 0.298, + 0.299, + 0.3, + 0.302, + 0.304, + 0.307, + 0.309, + 0.308, + 0.306, + 0.303, + 0.302, + 0.302, + 0.302, + 0.301, + 0.301, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.301, + 0.3, + 0.299, + 0.302, + 0.314 + ], + "direct_normal_irradiance": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.4, + 8.5, + 5.8, + 25.1, + 13.4, + 13, + 28, + 0.5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1.5, + 24.6, + 32.2, + 58.9, + 50.7, + 54.7, + 52.4, + 10.4, + 3.5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1.4, + 10.5, + 10.4, + 6.8, + 6, + 4, + 0.3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1.4, + 13.3, + 30.5, + 91.3, + 101.2, + 56.8, + 114.8, + 23.7, + 1.5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 341.5, + 430.3, + 493.5, + 589.6, + 660.9, + 596.3, + 477.7, + 191.5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 213.7, + 256.9, + 227.8, + 193.9, + 162.6, + 170.3, + 158.4, + 80.4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 65.4, + 107.1, + 193.9, + 317.5, + 431.7, + 415.9, + 356.1, + 151.7, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "soil_temperature_18cm": [ + 6.3, + 6.4, + 6.4, + 6.5, + 6.5, + 6.6, + 6.6, + 6.6, + 6.6, + 6.6, + 6.6, + 6.7, + 6.7, + 6.8, + 6.9, + 7, + 7.1, + 7.1, + 7.1, + 7.1, + 7.1, + 7.1, + 7, + 7, + 6.9, + 6.9, + 6.8, + 6.8, + 6.7, + 6.6, + 6.5, + 6.3, + 6.1, + 5.9, + 5.7, + 5.6, + 5.5, + 5.5, + 5.6, + 5.6, + 5.6, + 5.6, + 5.6, + 5.6, + 5.5, + 5.5, + 5.5, + 5.5, + 5.4, + 5.4, + 5.4, + 5.3, + 5.3, + 5.3, + 5.2, + 5.2, + 5.2, + 5.1, + 5.1, + 5.1, + 5.2, + 5.2, + 5.3, + 5.4, + 5.4, + 5.4, + 5.4, + 5.3, + 4.9, + 4.9, + 4.8, + 4.7, + 4.6, + 4.6, + 4.5, + 4.4, + 4.2, + 4.1, + 4, + 3.9, + 3.8, + 3.7, + 3.6, + 3.5, + 3.5, + 3.6, + 3.7, + 3.9, + 4, + 4, + 4.1, + 4.1, + 4.1, + 4.1, + 4.1, + 4, + 4, + 3.9, + 3.8, + 3.8, + 3.6, + 3.5, + 3.4, + 3.3, + 3.2, + 3.1, + 3.1, + 3, + 3, + 3.1, + 3.1, + 3.2, + 3.4, + 3.4, + 3.4, + 3.5, + 3.5, + 3.4, + 3.4, + 3.4, + 3.3, + 3.2, + 3.2, + 3.1, + 3, + 3, + 2.9, + 2.8, + 2.8, + 2.7, + 2.7, + 2.6, + 2.6, + 2.6, + 2.9, + 2.9, + 3, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3.1, + 3, + 2.9, + 2.9, + 2.9, + 3, + 3, + 3.1, + 3.2, + 3.2, + 3.2, + 3.3, + 3.3, + 3.3, + 3.3, + 3.4 + ], + "winddirection_180m": [ + 266, + 271, + 284, + 279, + 287, + 290, + 283, + 277, + 277, + 274, + 274, + 267, + 258, + 267, + 254, + 259, + 253, + 246, + 208, + 208, + 196, + 199, + 194, + 191, + 174, + 178, + 181, + 177, + 165, + 168, + 186, + 199, + 201, + 207, + 219, + 222, + 222, + 214, + 247, + 229, + 241, + 236, + 245, + 247, + 247, + 243, + 250, + 257, + 259, + 263, + 257, + 255, + 261, + 256, + 247, + 248, + 250, + 257, + 254, + 253, + 245, + 240, + 234, + 218, + 205, + 209, + 185, + 186, + 200, + 198, + 196, + 193, + 192, + 187, + 183, + 180, + 180, + 181, + 178, + 173, + 170, + 169, + 167, + 168, + 168, + 156, + 144, + 145, + 157, + 166, + 175, + 168, + 177, + 192, + 200, + 195, + 200, + 202, + 199, + 196, + 192, + 190, + 188, + 186, + 185, + 184, + 183, + 183, + 182, + 182, + 181, + 180, + 182, + 189, + 203, + 219, + 221, + 218, + 216, + 217, + 219, + 222, + 223, + 223, + 225, + 230, + 236, + 246, + 253, + 260, + 268, + 271, + 271, + 272, + 302, + 298, + 297, + 300, + 305, + 308, + 306, + 303, + 298, + 296, + 294, + 291, + 291, + 291, + 292, + 293, + 293, + 293, + 291, + 287, + 282, + 278, + 275, + 268, + 264, + 261, + 252, + 239, + 228, + 220, + 215, + 211, + 207, + 206 + ], + "apparent_temperature": [ + 4.4, + 4.2, + 4.3, + 4.4, + 4.1, + 4, + 3.9, + 3.7, + 3.6, + 3.4, + 4.1, + 4.6, + 4.9, + 5.2, + 5.3, + 5.4, + 5.5, + 5.3, + 4.8, + 4.7, + 4.2, + 4, + 3.9, + 3.4, + 3.2, + 2.8, + 2.5, + 2.3, + 1.6, + 0.5, + -0.5, + -1.2, + -2, + -2.9, + -2.6, + -1.3, + -0.3, + 0.7, + 0.9, + 1.1, + 1.4, + 0.8, + 0.4, + 0.5, + 0.5, + 0.3, + 0.2, + 0.1, + 0.1, + -0, + -0.1, + -0.3, + -0.5, + -0.2, + -0.2, + -0.3, + -0.4, + -1, + -0.2, + 0.2, + 0.7, + 1.3, + 1.4, + 1.3, + 0.7, + 0.4, + 0.5, + 0, + -0.6, + -1.1, + -1.5, + -1.9, + -2.2, + -2.6, + -3.2, + -3.5, + -3.6, + -3.6, + -3.7, + -3.8, + -3.9, + -4, + -3.4, + -2, + -0.9, + 0.2, + 0.6, + 0.5, + 0, + -0.3, + -0.3, + -0.4, + -0.4, + -0.6, + -0.8, + -1, + -1.4, + -2.1, + -2.4, + -2.7, + -3, + -3.2, + -3.4, + -3.5, + -3.5, + -3.3, + -2.8, + -2, + -1, + 0, + 0.3, + 0.4, + 0.3, + 0.2, + -0.1, + -0.5, + -0.9, + -1.4, + -1.9, + -2.1, + -2.3, + -2.5, + -2.8, + -3, + -3.3, + -3.5, + -3.6, + -3.6, + -3.6, + -3.6, + -3.3, + -2.7, + -1.9, + -1.2, + -1.4, + -1.4, + -1.6, + -1.9, + -2.4, + -2.9, + -1.6, + -1.8, + -2, + -2.1, + -2.3, + -2.4, + -2.4, + -2.4, + -2.5, + -2.9, + -3.3, + -3.9, + -4.2, + -4.5, + -4.6, + -4, + -3.1, + -2, + -1.3, + -0.7, + -0.3, + -0.5, + -1, + -1.4, + -1.5, + -1.4, + -1.3, + -1.2 + ], + "cloudcover_high": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 92, + 1, + 0, + 0, + 0, + 0, + 0, + 83, + 100, + 0, + 7, + 100, + 100, + 100, + 3, + 0, + 0, + 0, + 0, + 0, + 14, + 62, + 1, + 58, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 87, + 99, + 100, + 100, + 100, + 100, + 100, + 100, + 55, + 100, + 100, + 100, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33, + 67, + 100, + 94, + 87, + 81, + 75, + 70, + 65, + 43, + 22, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 15, + 22, + 15, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11, + 22, + 33, + 22, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 16, + 24, + 49, + 75, + 100, + 100, + 100, + 100, + 67 + ], + "pressure_msl": [ + 1025.2, + 1025.7, + 1025.7, + 1025.2, + 1024.7, + 1024.2, + 1024.2, + 1024.2, + 1024.2, + 1023.7, + 1024.2, + 1023.7, + 1023.2, + 1022.2, + 1021.2, + 1021.2, + 1020.7, + 1020.2, + 1020.2, + 1019.7, + 1018.7, + 1018.7, + 1018.2, + 1017.7, + 1016.7, + 1015.7, + 1015.2, + 1014.2, + 1013.7, + 1012.7, + 1012.2, + 1011.1, + 1011.1, + 1010.6, + 1010.1, + 1009.6, + 1008.6, + 1008.1, + 1007.6, + 1007.1, + 1007.1, + 1006.6, + 1006.1, + 1006.1, + 1005.6, + 1005.6, + 1005.1, + 1005.1, + 1005.1, + 1005.1, + 1004.6, + 1004.1, + 1004.1, + 1003.6, + 1003.6, + 1003.6, + 1003.1, + 1002.6, + 1002.6, + 1002.1, + 1001.6, + 1000.6, + 1000.1, + 999.6, + 999.6, + 999.1, + 998.6, + 998.1, + 997.2, + 996.7, + 996.2, + 995.7, + 995.2, + 994.7, + 994.2, + 993.7, + 993.2, + 992.7, + 992.7, + 992.2, + 992.7, + 992.7, + 992.7, + 992.7, + 992.2, + 991.7, + 991.7, + 991.7, + 992.2, + 992.2, + 992.7, + 992.7, + 992.7, + 993.2, + 993.2, + 993.2, + 993.7, + 993.2, + 993.7, + 993.7, + 993.7, + 993.7, + 994.2, + 994.2, + 994.7, + 994.7, + 995.2, + 995.2, + 995.2, + 995.2, + 995.2, + 995.2, + 995.7, + 995.7, + 996.2, + 996.2, + 996.7, + 996.7, + 996.7, + 996.7, + 997.2, + 997.2, + 997.2, + 997.7, + 997.7, + 997.7, + 998.2, + 998.7, + 999.3, + 999.3, + 999.8, + 1000.3, + 1000.3, + 1000.3, + 1000.6, + 1001.1, + 1001.1, + 1001.6, + 1002.1, + 1002.1, + 1006.6, + 1007.1, + 1007.1, + 1007.6, + 1007.6, + 1008.2, + 1008.2, + 1008.7, + 1008.7, + 1008.7, + 1008.7, + 1009.2, + 1009.2, + 1009.7, + 1009.7, + 1009.7, + 1009.2, + 1008.7, + 1008.2, + 1007.6, + 1006.6, + 1005.6, + 1004.6, + 1003.6, + 1002.1, + 1001.1, + 999.1, + 998.1 + ], + "diffuse_radiation": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.7, + 22.3, + 41, + 63.3, + 79.1, + 76.7, + 57.4, + 27.9, + 7.9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.6, + 30.3, + 71.4, + 94.8, + 110.4, + 104.9, + 80.8, + 25.3, + 14.3, + -0, + 0, + 0, + -0, + 0, + -0, + 0, + 0, + -0, + 0, + 0, + 0, + -0, + 0, + -0, + 0.3, + 17.3, + 56.7, + 90.1, + 105.3, + 112.5, + 91.3, + 46.8, + 12.3, + 0, + -0, + 0, + -0.1, + 0.1, + -0, + -0, + -0, + 0, + -0, + 0.1, + -0, + -0.1, + 0.1, + -0, + 0.2, + 26.7, + 66.2, + 93.2, + 89.9, + 67.9, + 60.8, + 50.8, + 11, + 0, + -0.1, + -0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 21.5, + 49.3, + 64.5, + 66.6, + 62, + 56.3, + 42.7, + 15.6, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 26.2, + 61.1, + 85.6, + 98.2, + 98.6, + 78.3, + 51.4, + 16.4, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0, + -0, + 0, + 0, + 24.8, + 57.9, + 81.8, + 94.8, + 94.4, + 77.1, + 48.9, + 15, + 0, + 0, + 0, + -0, + -0, + 0, + 0 + ], + "snow_depth": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "windspeed_10m": [ + 10.4, + 10.9, + 10.1, + 7.9, + 8.8, + 8.9, + 9.3, + 9.4, + 8.1, + 9.6, + 8.5, + 7.6, + 7.9, + 7.4, + 7.1, + 6.4, + 4, + 3.1, + 5, + 4.3, + 4.6, + 4.9, + 5.3, + 5.3, + 5.8, + 6, + 6.3, + 5.9, + 5.9, + 6, + 5.2, + 4.7, + 5.1, + 7, + 6.9, + 6.6, + 6.6, + 7.8, + 11.5, + 10.5, + 8.1, + 10.1, + 10.9, + 10.9, + 11.2, + 11.8, + 12.3, + 12.9, + 12.7, + 12.5, + 12.1, + 12.3, + 12.6, + 10.9, + 10, + 10.8, + 10.8, + 14.8, + 12.1, + 11.5, + 10.5, + 8.8, + 9.2, + 8.7, + 9.2, + 7.8, + 6.3, + 7.5, + 7.9, + 7.9, + 8.7, + 9.5, + 9.2, + 9.4, + 9.6, + 9.4, + 9.6, + 9.1, + 9.2, + 9.4, + 9.2, + 9.5, + 10.6, + 9.2, + 9.9, + 10.2, + 10.7, + 10.4, + 8.9, + 8.2, + 7.2, + 7.6, + 7.7, + 7.4, + 6.5, + 6.6, + 6.2, + 5.8, + 5.7, + 5.6, + 5.9, + 6.2, + 6.6, + 7, + 7, + 6.9, + 6.8, + 6.6, + 6.2, + 5.9, + 5.8, + 5.8, + 5.6, + 5.1, + 4.5, + 4.1, + 4.3, + 4.9, + 5.6, + 5.7, + 5.5, + 5.3, + 5.4, + 5.7, + 5.9, + 5.6, + 5.2, + 4.7, + 4.5, + 4.4, + 4.3, + 4.6, + 5.4, + 6.5, + 8.7, + 7.7, + 6.8, + 7.5, + 8.6, + 9.8, + 11.1, + 11.7, + 12.5, + 13, + 13.4, + 13.6, + 13.4, + 12.9, + 12.5, + 12.8, + 13.5, + 14, + 13.8, + 13.3, + 12.4, + 11.9, + 11.3, + 10, + 8.2, + 6, + 5.5, + 7.4, + 10, + 13, + 14.3, + 15.2, + 15.8, + 16.1 + ], + "vapor_pressure_deficit": [ + 0.05, + 0.05, + 0.06, + 0.07, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.08, + 0.12, + 0.16, + 0.17, + 0.19, + 0.16, + 0.11, + 0.11, + 0.07, + 0.06, + 0.05, + 0.04, + 0.04, + 0.04, + 0.05, + 0.07, + 0.09, + 0.12, + 0.1, + 0.08, + 0.05, + 0.03, + 0.02, + 0, + 0.03, + 0.08, + 0.11, + 0.14, + 0.18, + 0.15, + 0.14, + 0.14, + 0.12, + 0.12, + 0.13, + 0.13, + 0.12, + 0.11, + 0.1, + 0.08, + 0.08, + 0.07, + 0.06, + 0.07, + 0.06, + 0.08, + 0.09, + 0.1, + 0.13, + 0.16, + 0.19, + 0.22, + 0.23, + 0.21, + 0.14, + 0.11, + 0.09, + 0.08, + 0.13, + 0.13, + 0.14, + 0.15, + 0.15, + 0.15, + 0.14, + 0.14, + 0.13, + 0.12, + 0.11, + 0.11, + 0.1, + 0.09, + 0.12, + 0.16, + 0.21, + 0.25, + 0.27, + 0.25, + 0.18, + 0.14, + 0.12, + 0.12, + 0.13, + 0.12, + 0.1, + 0.09, + 0.08, + 0.06, + 0.05, + 0.05, + 0.05, + 0.05, + 0.04, + 0.04, + 0.05, + 0.06, + 0.08, + 0.1, + 0.14, + 0.17, + 0.18, + 0.17, + 0.15, + 0.13, + 0.12, + 0.1, + 0.09, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.07, + 0.07, + 0.07, + 0.06, + 0.05, + 0.05, + 0.07, + 0.09, + 0.13, + 0.14, + 0.13, + 0.11, + 0.09, + 0.06, + 0.03, + 0.04, + 0.05, + 0.05, + 0.05, + 0.05, + 0.04, + 0.04, + 0.04, + 0.04, + 0.04, + 0.05, + 0.06, + 0.07, + 0.07, + 0.08, + 0.1, + 0.14, + 0.17, + 0.16, + 0.14, + 0.11, + 0.09, + 0.07, + 0.06, + 0.07, + 0.08, + 0.1, + 0.09 + ], + "windgusts_10m": [ + 22.1, + 23.8, + 23.5, + 21.5, + 18.4, + 19.6, + 19.9, + 20.3, + 19.6, + 20.8, + 25, + 19.1, + 17.9, + 17.6, + 16.8, + 15.7, + 14, + 8.5, + 10.4, + 11, + 9.5, + 10.2, + 11.1, + 11.8, + 12.2, + 13, + 14.4, + 13.3, + 13.2, + 12.5, + 12.7, + 10.6, + 10.4, + 15.6, + 16.8, + 18.8, + 15.9, + 17.8, + 25.3, + 24.6, + 22.5, + 21.4, + 23.4, + 23.3, + 24.7, + 25.3, + 26.2, + 29.2, + 28.2, + 27.9, + 26.9, + 26.8, + 28, + 27.2, + 23.5, + 24.9, + 24.6, + 31.8, + 32.6, + 27.5, + 25.1, + 23.1, + 20.4, + 20.2, + 24, + 20.1, + 16.8, + 16, + 20.5, + 20.1, + 21.1, + 22.2, + 23.6, + 24.4, + 25.7, + 26.4, + 26.3, + 27.2, + 27.1, + 27, + 26.4, + 26.4, + 27.1, + 28.7, + 28.1, + 27.2, + 26.5, + 25.5, + 23.6, + 23.6, + 22.2, + 21.4, + 20.4, + 19.4, + 18.4, + 18.1, + 17.7, + 17.4, + 17.6, + 17.9, + 18.1, + 18.4, + 18.6, + 18.9, + 19.2, + 19.5, + 19.9, + 21.5, + 23, + 24.6, + 24.1, + 23.6, + 23.1, + 21.4, + 19.8, + 18.1, + 15.8, + 13.5, + 11.2, + 10.9, + 10.6, + 10.3, + 8.9, + 7.5, + 6, + 5.1, + 4.2, + 3.3, + 5.5, + 7.8, + 10, + 14.4, + 18.8, + 23.2, + 24, + 25.6, + 27.2, + 26.1, + 25, + 24, + 25.6, + 27.1, + 28.7, + 29.6, + 30.5, + 31.4, + 30.5, + 29.7, + 28.8, + 30.3, + 31.8, + 33.3, + 32.3, + 31.3, + 30.4, + 28.3, + 26.2, + 24.2, + 21.1, + 18, + 14.9, + 19.9, + 24.9, + 29.9, + 32, + 34.1, + 36.3, + 36.9 + ], + "winddirection_120m": [ + 265, + 269, + 280, + 274, + 281, + 282, + 279, + 275, + 270, + 273, + 266, + 259, + 257, + 266, + 254, + 258, + 245, + 240, + 202, + 205, + 189, + 192, + 186, + 184, + 169, + 172, + 176, + 172, + 158, + 161, + 174, + 185, + 192, + 201, + 203, + 201, + 205, + 210, + 246, + 221, + 235, + 229, + 235, + 238, + 243, + 241, + 247, + 256, + 258, + 262, + 255, + 252, + 258, + 253, + 243, + 245, + 248, + 256, + 253, + 253, + 245, + 239, + 234, + 218, + 204, + 209, + 179, + 179, + 189, + 188, + 184, + 181, + 179, + 172, + 170, + 169, + 169, + 169, + 164, + 159, + 156, + 155, + 153, + 153, + 147, + 140, + 143, + 144, + 153, + 157, + 163, + 156, + 164, + 179, + 183, + 182, + 190, + 192, + 190, + 185, + 179, + 175, + 172, + 168, + 168, + 168, + 168, + 166, + 164, + 161, + 161, + 162, + 166, + 174, + 187, + 205, + 208, + 207, + 205, + 206, + 207, + 209, + 211, + 212, + 214, + 218, + 223, + 230, + 236, + 243, + 253, + 259, + 265, + 269, + 271, + 272, + 272, + 273, + 274, + 275, + 298, + 293, + 288, + 288, + 289, + 290, + 291, + 291, + 292, + 292, + 293, + 292, + 290, + 286, + 281, + 278, + 275, + 268, + 262, + 255, + 242, + 227, + 215, + 207, + 204, + 203, + 202, + 201 + ], + "windspeed_120m": [ + 24.7, + 24.5, + 23.8, + 20.2, + 21.5, + 22, + 23.5, + 22.3, + 22.2, + 21.2, + 18.6, + 14.6, + 13.8, + 13.2, + 12, + 12.7, + 9.1, + 8.1, + 11.3, + 12.5, + 13.6, + 15, + 15.3, + 16.1, + 17.6, + 18, + 17.9, + 16, + 14.8, + 15, + 14.5, + 12.9, + 14.8, + 18.2, + 10.1, + 9.9, + 9.7, + 13, + 21.6, + 22.1, + 19.3, + 23.4, + 26.6, + 25.5, + 26.5, + 27.7, + 29.1, + 30.2, + 29, + 27.8, + 27, + 26.9, + 27.4, + 23.8, + 22.1, + 23.9, + 23.4, + 28.4, + 23.9, + 21.3, + 19.3, + 15.9, + 16.5, + 16.4, + 19, + 15.9, + 16.9, + 19.5, + 27.9, + 29.4, + 30.7, + 31.2, + 29.3, + 28.6, + 31.6, + 34.1, + 35.2, + 33.5, + 32.8, + 33.5, + 33.4, + 34.1, + 33.3, + 27.9, + 19.2, + 18.6, + 20.4, + 23.3, + 27.3, + 27.1, + 26.5, + 27.4, + 29.3, + 28.8, + 22.7, + 23.9, + 25, + 24.2, + 24, + 23.5, + 23.2, + 23.4, + 23.7, + 24.1, + 24.4, + 24.6, + 24, + 22.1, + 19.5, + 17, + 17.2, + 18.2, + 18.5, + 16.5, + 14, + 13.5, + 15.8, + 19.2, + 22.4, + 22.1, + 20.5, + 18.9, + 19.1, + 19.8, + 20, + 19.1, + 17.7, + 15.9, + 14.8, + 13.8, + 13.4, + 14.1, + 15.5, + 17.2, + 18.2, + 20.8, + 23.9, + 26, + 28, + 30.1, + 34.7, + 33.6, + 32.6, + 32.7, + 32.9, + 33.2, + 33.3, + 33.4, + 33.2, + 33, + 32.6, + 31.4, + 29.6, + 27.3, + 24.3, + 22, + 19.6, + 17.3, + 16.7, + 17, + 18.5, + 21.8, + 27.2, + 34.1, + 37, + 38.7, + 39.8, + 40.2 + ], + "windspeed_80m": [ + 20.9, + 21.3, + 19.9, + 16.7, + 18.1, + 18.4, + 19.3, + 18.9, + 17.9, + 18.3, + 15.5, + 13, + 13, + 12.3, + 11.4, + 11.5, + 7.7, + 7.2, + 10.1, + 10.6, + 11.3, + 12, + 12.3, + 12.7, + 14.1, + 13.8, + 14, + 12.1, + 12.3, + 12.8, + 12.3, + 11.4, + 12.5, + 11.3, + 9.7, + 9.2, + 9.3, + 12, + 20, + 19.4, + 16.4, + 20.5, + 21.8, + 21.8, + 22.3, + 23.6, + 24.6, + 25.8, + 25.1, + 24.1, + 23.4, + 23.6, + 24, + 20.7, + 19.2, + 20.8, + 20.6, + 26.7, + 21.8, + 19.9, + 17.9, + 14.8, + 15.5, + 15.4, + 17.2, + 14.5, + 13.1, + 14.8, + 21.2, + 21.6, + 22.6, + 21.9, + 20.4, + 20.2, + 22.7, + 24.1, + 25.2, + 24.1, + 24.8, + 25, + 24.5, + 25.1, + 21.7, + 16.7, + 17.6, + 17.5, + 19.2, + 20.9, + 20.8, + 20.1, + 19.4, + 20.7, + 21.7, + 21.6, + 18.2, + 18.9, + 19, + 18.7, + 18.5, + 18.2, + 18.3, + 18.7, + 19.3, + 20, + 20.3, + 20.5, + 19.7, + 17.6, + 14.7, + 12.2, + 12.8, + 14.5, + 15.8, + 14.3, + 12.2, + 11.3, + 13, + 15.5, + 17.9, + 17.6, + 16.4, + 15.1, + 15, + 15.2, + 15.1, + 14.5, + 13.6, + 12.4, + 11.5, + 10.7, + 10.2, + 10.6, + 11.9, + 13.5, + 16.1, + 15.4, + 15.3, + 16.5, + 18.4, + 20.4, + 24.6, + 25.3, + 26.3, + 27.2, + 28, + 28.4, + 27.8, + 26.7, + 25.7, + 26.2, + 27.1, + 27.6, + 26.7, + 25.1, + 22.8, + 21, + 19, + 16.5, + 14.9, + 13.8, + 14.3, + 17, + 21.4, + 26.9, + 29.7, + 31.7, + 33.3, + 33.9 + ], + "evapotranspiration": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.01, + 0.02, + 0.02, + 0.02, + 0.02, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.01, + 0.01, + 0.01, + 0, + 0, + 0, + 0, + 0.01, + 0.02, + 0.02, + 0.02, + 0.03, + 0.02, + 0.02, + 0.01, + 0.01, + 0.01, + 0.02, + 0.02, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.02, + 0.02, + 0.03, + 0.02, + 0.02, + 0.02, + 0.02, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.01, + 0.01, + 0.02, + 0.02, + 0.03, + 0.03, + 0.03, + 0.02, + 0.02, + 0.02, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.01, + 0.02, + 0.02, + 0.03, + 0.03, + 0.02, + 0.02, + 0.01, + 0.01, + 0.01, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.03, + 0.03, + 0.03, + 0.02, + 0.02, + 0.02, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.01, + 0.02 + ], + "precipitation": [ + 0, + 0, + 0.01, + 0, + 0.03, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.01, + 0, + 0.06, + 0.06, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.03, + 0.07, + 0, + 0, + 0, + 0.09, + 0.09, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.1, + 0.3, + 0.2, + 0.15, + 0, + 0, + 0, + 0, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.1, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.05, + 0.05, + 0.05, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.01, + 0.01, + 0.01, + 0.03, + 0.03, + 0.03, + 0.02, + 0.02, + 0.02, + 0.13, + 0.13, + 0.13, + 0, + 0, + 0, + 0.07, + 0.07, + 0.07, + 0.16, + 0.16, + 0.16, + 0.01, + 0.01, + 0.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.03, + 0.03, + 0.03, + 0.04, + 0.04, + 0.04, + 0.88 + ] + }, + "daily": { + "temperature_2m_max": [ + 7.6, + 5.4, + 4.8, + 4.5, + 3.4, + 2.2, + 3 + ], + "precipitation_hours": [ + 7, + 5, + 5, + 3, + 3, + 13, + 15 + ], + "shortwave_radiation_sum": [ + 1.44, + 2.16, + 1.95, + 2.05, + 4.18, + 2.86, + 3.31 + ], + "winddirection_10m_dominant": [ + 251, + 210, + 230, + 143, + 143, + 248, + 256 + ], + "windspeed_10m_max": [ + 10.9, + 12.9, + 14.8, + 10.7, + 7, + 13, + 16.1 + ], + "apparent_temperature_min": [ + 3.4, + -2.9, + -1.9, + -4, + -3.5, + -3.6, + -4.6 + ], + "sunset": [ + "2021-11-24T16:04", + "2021-11-25T16:03", + "2021-11-26T16:02", + "2021-11-27T16:01", + "2021-11-28T16:00", + "2021-11-29T15:59", + "2021-11-30T15:59" + ], + "weathercode": [ + 61, + 61, + 61, + 61, + 61, + 77, + 80 + ], + "sunrise": [ + "2021-11-24T07:41", + "2021-11-25T07:43", + "2021-11-26T07:45", + "2021-11-27T07:46", + "2021-11-28T07:48", + "2021-11-29T07:49", + "2021-11-30T07:51" + ], + "apparent_temperature_max": [ + 5.5, + 3.2, + 1.4, + 0.6, + 0.4, + -1.2, + -0.3 + ], + "temperature_2m_min": [ + 5.5, + 0.2, + 1.8, + -0.1, + -0.2, + -0.5, + -0.3 + ], + "windgusts_10m_max": [ + 8.5, + 10.4, + 16, + 18.1, + 10.9, + 3.3, + 14.9 + ], + "precipitation_sum": [ + 0.19, + 0.29, + 0.76, + 0.12, + 0.15, + 0.64, + 1.74 + ], + "time": [ + "2021-11-24", + "2021-11-25", + "2021-11-26", + "2021-11-27", + "2021-11-28", + "2021-11-29", + "2021-11-30" + ] + }, + "utc_offset_seconds": 3600, + "hourly_units": { + "precipitation": "mm", + "shortwave_radiation": "W\/m²", + "soil_moisture_0_1cm": "m³\/m³", + "pressure_msl": "hPa", + "soil_moisture_3_9cm": "m³\/m³", + "soil_temperature_54cm": "°C", + "soil_temperature_18cm": "°C", + "winddirection_120m": "°", + "vapor_pressure_deficit": "kPa", + "dewpoint_2m": "°C", + "winddirection_180m": "°", + "windspeed_10m": "km\/h", + "cloudcover_low": "%", + "cloudcover_mid": "%", + "cloudcover_high": "%", + "windgusts_10m": "km\/h", + "soil_moisture_9_27cm": "m³\/m³", + "windspeed_120m": "km\/h", + "winddirection_10m": "°", + "time": "iso8601", + "soil_temperature_6cm": "°C", + "apparent_temperature": "°C", + "windspeed_80m": "km\/h", + "soil_moisture_1_3cm": "m³\/m³", + "diffuse_radiation": "W\/m²", + "snow_depth": "m", + "windspeed_180m": "km\/h", + "weathercode": "wmo code", + "direct_normal_irradiance": "W\/m²", + "relativehumidity_2m": "%", + "soil_moisture_27_81cm": "m³\/m³", + "winddirection_80m": "°", + "freezinglevel_height": "m", + "evapotranspiration": "mm", + "cloudcover": "%", + "soil_temperature_0cm": "°C", + "direct_radiation": "W\/m²", + "temperature_2m": "°C" + }, + "longitude": 13.419998, + "elevation": 44.8125, + "current_weather": { + "temperature": 5.5, + "windspeed": 5.3, + "weathercode": 3, + "winddirection": 168, + "time": "2021-11-24T23:00" + } +} \ No newline at end of file diff --git a/tests/components/open_meteo/test_config_flow.py b/tests/components/open_meteo/test_config_flow.py new file mode 100644 index 00000000000..f985e2a6193 --- /dev/null +++ b/tests/components/open_meteo/test_config_flow.py @@ -0,0 +1,33 @@ +"""Tests for the Open-Meteo config flow.""" + +from unittest.mock import MagicMock + +from homeassistant.components.open_meteo.const import DOMAIN +from homeassistant.components.zone import ENTITY_ID_HOME +from homeassistant.config_entries import SOURCE_USER +from homeassistant.const import CONF_ZONE +from homeassistant.core import HomeAssistant +from homeassistant.data_entry_flow import RESULT_TYPE_CREATE_ENTRY, RESULT_TYPE_FORM + + +async def test_full_user_flow( + hass: HomeAssistant, + mock_setup_entry: MagicMock, +) -> None: + """Test the full user configuration flow.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_USER} + ) + + assert result.get("type") == RESULT_TYPE_FORM + assert result.get("step_id") == SOURCE_USER + assert "flow_id" in result + + result2 = await hass.config_entries.flow.async_configure( + result["flow_id"], + user_input={CONF_ZONE: ENTITY_ID_HOME}, + ) + + assert result2.get("type") == RESULT_TYPE_CREATE_ENTRY + assert result2.get("title") == "test home" + assert result2.get("data") == {CONF_ZONE: ENTITY_ID_HOME} diff --git a/tests/components/open_meteo/test_init.py b/tests/components/open_meteo/test_init.py new file mode 100644 index 00000000000..38619bc09db --- /dev/null +++ b/tests/components/open_meteo/test_init.py @@ -0,0 +1,68 @@ +"""Tests for the Open-Meteo integration.""" +from unittest.mock import AsyncMock, MagicMock, patch + +from open_meteo import OpenMeteoConnectionError +from pytest import LogCaptureFixture + +from homeassistant.components.open_meteo.const import DOMAIN +from homeassistant.config_entries import ConfigEntryState +from homeassistant.const import CONF_ZONE +from homeassistant.core import HomeAssistant + +from tests.common import MockConfigEntry + + +async def test_load_unload_config_entry( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, + mock_open_meteo: AsyncMock, +) -> None: + """Test the Open-Meteo configuration entry loading/unloading.""" + mock_config_entry.add_to_hass(hass) + await hass.config_entries.async_setup(mock_config_entry.entry_id) + await hass.async_block_till_done() + + assert mock_config_entry.state is ConfigEntryState.LOADED + + await hass.config_entries.async_unload(mock_config_entry.entry_id) + await hass.async_block_till_done() + + assert not hass.data.get(DOMAIN) + assert mock_config_entry.state is ConfigEntryState.NOT_LOADED + + +@patch( + "homeassistant.components.open_meteo.OpenMeteo.forecast", + side_effect=OpenMeteoConnectionError, +) +async def test_config_entry_not_ready( + mock_forecast: MagicMock, + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, +) -> None: + """Test the Open-Meteo configuration entry not ready.""" + mock_config_entry.add_to_hass(hass) + await hass.config_entries.async_setup(mock_config_entry.entry_id) + await hass.async_block_till_done() + + assert mock_forecast.call_count == 1 + assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY + + +async def test_config_entry_zone_removed( + hass: HomeAssistant, + caplog: LogCaptureFixture, +) -> None: + """Test the Open-Meteo configuration entry not ready.""" + mock_config_entry = MockConfigEntry( + title="My Castle", + domain=DOMAIN, + data={CONF_ZONE: "zone.castle"}, + unique_id="zone.castle", + ) + mock_config_entry.add_to_hass(hass) + await hass.config_entries.async_setup(mock_config_entry.entry_id) + await hass.async_block_till_done() + + assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY + assert "Zone 'zone.castle' not found" in caplog.text