Remove hourly weather entity from Aemet (#110764)

This commit is contained in:
G Johansson 2024-03-22 16:31:43 +01:00 committed by GitHub
parent 48553ece68
commit 4fb11dc4f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 109 deletions

View File

@ -121,8 +121,3 @@ FORECAST_MAP = {
AOD_WIND_SPEED: ATTR_FORECAST_NATIVE_WIND_SPEED,
},
}
WEATHER_FORECAST_MODES = {
AOD_FORECAST_DAILY: "daily",
AOD_FORECAST_HOURLY: "hourly",
}

View File

@ -14,7 +14,6 @@ from aemet_opendata.const import (
)
from homeassistant.components.weather import (
DOMAIN as WEATHER_DOMAIN,
Forecast,
SingleCoordinatorWeatherEntity,
WeatherEntityFeature,
@ -27,7 +26,6 @@ from homeassistant.const import (
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import (
@ -36,7 +34,6 @@ from .const import (
DOMAIN,
ENTRY_NAME,
ENTRY_WEATHER_COORDINATOR,
WEATHER_FORECAST_MODES,
)
from .coordinator import WeatherUpdateCoordinator
from .entity import AemetEntity
@ -51,31 +48,14 @@ async def async_setup_entry(
domain_data = hass.data[DOMAIN][config_entry.entry_id]
weather_coordinator = domain_data[ENTRY_WEATHER_COORDINATOR]
entities = []
entity_registry = er.async_get(hass)
# Add daily + hourly entity for legacy config entries, only add daily for new
# config entries. This can be removed in HA Core 2024.3
if entity_registry.async_get_entity_id(
WEATHER_DOMAIN,
DOMAIN,
f"{config_entry.unique_id} {WEATHER_FORECAST_MODES[AOD_FORECAST_HOURLY]}",
):
for mode, mode_id in WEATHER_FORECAST_MODES.items():
name = f"{domain_data[ENTRY_NAME]} {mode_id}"
unique_id = f"{config_entry.unique_id} {mode_id}"
entities.append(AemetWeather(name, unique_id, weather_coordinator, mode))
else:
entities.append(
async_add_entities(
[
AemetWeather(
domain_data[ENTRY_NAME],
config_entry.unique_id,
weather_coordinator,
AOD_FORECAST_DAILY,
domain_data[ENTRY_NAME], config_entry.unique_id, weather_coordinator
)
)
async_add_entities(entities, False)
],
False,
)
class AemetWeather(
@ -98,14 +78,9 @@ class AemetWeather(
name,
unique_id,
coordinator: WeatherUpdateCoordinator,
forecast_mode,
) -> None:
"""Initialize the sensor."""
super().__init__(coordinator)
self._forecast_mode = forecast_mode
self._attr_entity_registry_enabled_default = (
self._forecast_mode == AOD_FORECAST_DAILY
)
self._attr_name = name
self._attr_unique_id = unique_id
@ -115,11 +90,6 @@ class AemetWeather(
cond = self.get_aemet_value([AOD_WEATHER, AOD_CONDITION])
return CONDITIONS_MAP.get(cond)
@property
def forecast(self) -> list[Forecast]:
"""Return the forecast array."""
return self.get_aemet_forecast(self._forecast_mode)
@callback
def _async_forecast_daily(self) -> list[Forecast]:
"""Return the daily forecast in native units."""

View File

@ -7,19 +7,10 @@ from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.aemet.const import ATTRIBUTION, DOMAIN
from homeassistant.components.aemet.const import ATTRIBUTION
from homeassistant.components.aemet.coordinator import WEATHER_UPDATE_INTERVAL
from homeassistant.components.weather import (
ATTR_CONDITION_SNOWY,
ATTR_FORECAST,
ATTR_FORECAST_CONDITION,
ATTR_FORECAST_PRECIPITATION,
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
ATTR_FORECAST_TEMP,
ATTR_FORECAST_TEMP_LOW,
ATTR_FORECAST_TIME,
ATTR_FORECAST_WIND_BEARING,
ATTR_FORECAST_WIND_SPEED,
ATTR_WEATHER_HUMIDITY,
ATTR_WEATHER_PRESSURE,
ATTR_WEATHER_TEMPERATURE,
@ -32,8 +23,6 @@ from homeassistant.components.weather import (
)
from homeassistant.const import ATTR_ATTRIBUTION
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
import homeassistant.util.dt as dt_util
from .util import async_init_integration, mock_api_call
@ -60,62 +49,6 @@ async def test_aemet_weather(
assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 122.0
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_SNOWY
assert ATTR_FORECAST_PRECIPITATION not in forecast
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-08 23:00:00+00:00").isoformat()
)
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
async def test_aemet_weather_legacy(
hass: HomeAssistant,
freezer: FrozenDateTimeFactory,
entity_registry: er.EntityRegistry,
) -> None:
"""Test states of legacy weather."""
entity_registry.async_get_or_create(
WEATHER_DOMAIN,
DOMAIN,
"None hourly",
)
hass.config.set_time_zone("UTC")
freezer.move_to("2021-01-09 12:00:00+00:00")
await async_init_integration(hass)
state = hass.states.get("weather.aemet_daily")
assert state
assert state.state == ATTR_CONDITION_SNOWY
assert state.attributes[ATTR_ATTRIBUTION] == ATTRIBUTION
assert state.attributes[ATTR_WEATHER_HUMIDITY] == 99.0
assert state.attributes[ATTR_WEATHER_PRESSURE] == 1004.4 # 100440.0 Pa -> hPa
assert state.attributes[ATTR_WEATHER_TEMPERATURE] == -0.7
assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 122.0
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_SNOWY
assert ATTR_FORECAST_PRECIPITATION not in forecast
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-08 23:00:00+00:00").isoformat()
)
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