Disable AEMET legacy options (#107795)

* aemet: disable legacy options

This enables proper timezone handling:
- Atlantic/Canary for the Canary Islands.
- Europe/Madrid for the Iberian Peninsula.

Also provides daily data for the current day after AEMET stops providing the
full day interval, which is normally after midday (12:00).
This is a breaking change because with the previous behaviour the daily data
for the current day wasn't available after midday and now it will be.
What the integration library does to workaround this is to fallback to the
12-24 interval data if the the 00-24 is no longer provided by the API.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* Fix AEMET tests with v0.4.8

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

---------

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
Álvaro Fernández Rojas 2024-02-22 12:52:57 +01:00 committed by GitHub
parent 85be94e0a9
commit b72d64a3dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 414 additions and 391 deletions

View File

@ -31,7 +31,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
longitude = entry.data[CONF_LONGITUDE]
station_updates = entry.options.get(CONF_STATION_UPDATES, True)
options = ConnectionOptions(api_key, station_updates, True)
options = ConnectionOptions(api_key, station_updates, False)
aemet = AEMET(aiohttp_client.async_get_clientsession(hass), options)
try:
await aemet.select_coordinates(latitude, longitude)

View File

@ -45,7 +45,7 @@ class AemetConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
await self.async_set_unique_id(f"{latitude}-{longitude}")
self._abort_if_unique_id_configured()
options = ConnectionOptions(user_input[CONF_API_KEY], False, True)
options = ConnectionOptions(user_input[CONF_API_KEY], False, False)
aemet = AEMET(aiohttp_client.async_get_clientsession(self.hass), options)
try:
await aemet.select_coordinates(latitude, longitude)

File diff suppressed because it is too large Load Diff

View File

@ -2,10 +2,7 @@
from freezegun.api import FrozenDateTimeFactory
from homeassistant.components.weather import (
ATTR_CONDITION_PARTLYCLOUDY,
ATTR_CONDITION_SNOWY,
)
from homeassistant.components.weather import ATTR_CONDITION_SNOWY
from homeassistant.core import HomeAssistant
import homeassistant.util.dt as dt_util
@ -23,27 +20,27 @@ async def test_aemet_forecast_create_sensors(
await async_init_integration(hass)
state = hass.states.get("sensor.aemet_daily_forecast_condition")
assert state.state == ATTR_CONDITION_PARTLYCLOUDY
assert state.state == ATTR_CONDITION_SNOWY
state = hass.states.get("sensor.aemet_daily_forecast_precipitation_probability")
assert state.state == "30"
assert state.state == "0"
state = hass.states.get("sensor.aemet_daily_forecast_temperature")
assert state.state == "4"
assert state.state == "2"
state = hass.states.get("sensor.aemet_daily_forecast_temperature_low")
assert state.state == "-4"
assert state.state == "-1"
state = hass.states.get("sensor.aemet_daily_forecast_time")
assert (
state.state == dt_util.parse_datetime("2021-01-10 00:00:00+00:00").isoformat()
state.state == dt_util.parse_datetime("2021-01-08 23:00:00+00:00").isoformat()
)
state = hass.states.get("sensor.aemet_daily_forecast_wind_bearing")
assert state.state == "45.0"
assert state.state == "90.0"
state = hass.states.get("sensor.aemet_daily_forecast_wind_speed")
assert state.state == "20"
assert state.state == "0"
state = hass.states.get("sensor.aemet_hourly_forecast_condition")
assert state is None
@ -99,7 +96,7 @@ async def test_aemet_weather_create_sensors(
assert state.state == "100"
state = hass.states.get("sensor.aemet_snow")
assert state.state == "1.8"
assert state.state == "1.2"
state = hass.states.get("sensor.aemet_snow_probability")
assert state.state == "100"

View File

@ -9,7 +9,6 @@ from syrupy.assertion import SnapshotAssertion
from homeassistant.components.aemet.const import ATTRIBUTION, DOMAIN
from homeassistant.components.aemet.coordinator import WEATHER_UPDATE_INTERVAL
from homeassistant.components.weather import (
ATTR_CONDITION_PARTLYCLOUDY,
ATTR_CONDITION_SNOWY,
ATTR_FORECAST,
ATTR_FORECAST_CONDITION,
@ -61,17 +60,17 @@ async def test_aemet_weather(
assert state.attributes[ATTR_WEATHER_WIND_GUST_SPEED] == 12.2
assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 3.2
forecast = state.attributes[ATTR_FORECAST][0]
assert forecast[ATTR_FORECAST_CONDITION] == ATTR_CONDITION_PARTLYCLOUDY
assert forecast[ATTR_FORECAST_CONDITION] == ATTR_CONDITION_SNOWY
assert ATTR_FORECAST_PRECIPITATION not in forecast
assert forecast[ATTR_FORECAST_PRECIPITATION_PROBABILITY] == 30
assert forecast[ATTR_FORECAST_TEMP] == 4
assert forecast[ATTR_FORECAST_TEMP_LOW] == -4
assert forecast[ATTR_FORECAST_PRECIPITATION_PROBABILITY] == 0
assert forecast[ATTR_FORECAST_TEMP] == 2
assert forecast[ATTR_FORECAST_TEMP_LOW] == -1
assert (
forecast[ATTR_FORECAST_TIME]
== dt_util.parse_datetime("2021-01-10 00:00:00+00:00").isoformat()
== dt_util.parse_datetime("2021-01-08 23:00:00+00:00").isoformat()
)
assert forecast[ATTR_FORECAST_WIND_BEARING] == 45.0
assert forecast[ATTR_FORECAST_WIND_SPEED] == 20.0 # 5.56 m/s -> km/h
assert forecast[ATTR_FORECAST_WIND_BEARING] == 90.0
assert forecast[ATTR_FORECAST_WIND_SPEED] == 0.0
state = hass.states.get("weather.aemet_hourly")
assert state is None
@ -105,17 +104,17 @@ async def test_aemet_weather_legacy(
assert state.attributes[ATTR_WEATHER_WIND_GUST_SPEED] == 12.2
assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 3.2
forecast = state.attributes[ATTR_FORECAST][0]
assert forecast[ATTR_FORECAST_CONDITION] == ATTR_CONDITION_PARTLYCLOUDY
assert forecast[ATTR_FORECAST_CONDITION] == ATTR_CONDITION_SNOWY
assert ATTR_FORECAST_PRECIPITATION not in forecast
assert forecast[ATTR_FORECAST_PRECIPITATION_PROBABILITY] == 30
assert forecast[ATTR_FORECAST_TEMP] == 4
assert forecast[ATTR_FORECAST_TEMP_LOW] == -4
assert forecast[ATTR_FORECAST_PRECIPITATION_PROBABILITY] == 0
assert forecast[ATTR_FORECAST_TEMP] == 2
assert forecast[ATTR_FORECAST_TEMP_LOW] == -1
assert (
forecast[ATTR_FORECAST_TIME]
== dt_util.parse_datetime("2021-01-10 00:00:00+00:00").isoformat()
== dt_util.parse_datetime("2021-01-08 23:00:00+00:00").isoformat()
)
assert forecast[ATTR_FORECAST_WIND_BEARING] == 45.0
assert forecast[ATTR_FORECAST_WIND_SPEED] == 20.0 # 5.56 m/s -> km/h
assert forecast[ATTR_FORECAST_WIND_BEARING] == 90.0
assert forecast[ATTR_FORECAST_WIND_SPEED] == 0.0
state = hass.states.get("weather.aemet_hourly")
assert state is None