mirror of
https://github.com/home-assistant/core.git
synced 2025-07-11 23:37:18 +00:00
Remove hourly weather entity from Aemet (#110764)
This commit is contained in:
parent
48553ece68
commit
4fb11dc4f3
@ -121,8 +121,3 @@ FORECAST_MAP = {
|
|||||||
AOD_WIND_SPEED: ATTR_FORECAST_NATIVE_WIND_SPEED,
|
AOD_WIND_SPEED: ATTR_FORECAST_NATIVE_WIND_SPEED,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
WEATHER_FORECAST_MODES = {
|
|
||||||
AOD_FORECAST_DAILY: "daily",
|
|
||||||
AOD_FORECAST_HOURLY: "hourly",
|
|
||||||
}
|
|
||||||
|
@ -14,7 +14,6 @@ from aemet_opendata.const import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from homeassistant.components.weather import (
|
from homeassistant.components.weather import (
|
||||||
DOMAIN as WEATHER_DOMAIN,
|
|
||||||
Forecast,
|
Forecast,
|
||||||
SingleCoordinatorWeatherEntity,
|
SingleCoordinatorWeatherEntity,
|
||||||
WeatherEntityFeature,
|
WeatherEntityFeature,
|
||||||
@ -27,7 +26,6 @@ from homeassistant.const import (
|
|||||||
UnitOfTemperature,
|
UnitOfTemperature,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
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 (
|
||||||
@ -36,7 +34,6 @@ from .const import (
|
|||||||
DOMAIN,
|
DOMAIN,
|
||||||
ENTRY_NAME,
|
ENTRY_NAME,
|
||||||
ENTRY_WEATHER_COORDINATOR,
|
ENTRY_WEATHER_COORDINATOR,
|
||||||
WEATHER_FORECAST_MODES,
|
|
||||||
)
|
)
|
||||||
from .coordinator import WeatherUpdateCoordinator
|
from .coordinator import WeatherUpdateCoordinator
|
||||||
from .entity import AemetEntity
|
from .entity import AemetEntity
|
||||||
@ -51,31 +48,14 @@ async def async_setup_entry(
|
|||||||
domain_data = hass.data[DOMAIN][config_entry.entry_id]
|
domain_data = hass.data[DOMAIN][config_entry.entry_id]
|
||||||
weather_coordinator = domain_data[ENTRY_WEATHER_COORDINATOR]
|
weather_coordinator = domain_data[ENTRY_WEATHER_COORDINATOR]
|
||||||
|
|
||||||
entities = []
|
async_add_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(
|
|
||||||
AemetWeather(
|
AemetWeather(
|
||||||
domain_data[ENTRY_NAME],
|
domain_data[ENTRY_NAME], config_entry.unique_id, weather_coordinator
|
||||||
config_entry.unique_id,
|
|
||||||
weather_coordinator,
|
|
||||||
AOD_FORECAST_DAILY,
|
|
||||||
)
|
)
|
||||||
)
|
],
|
||||||
|
False,
|
||||||
async_add_entities(entities, False)
|
)
|
||||||
|
|
||||||
|
|
||||||
class AemetWeather(
|
class AemetWeather(
|
||||||
@ -98,14 +78,9 @@ class AemetWeather(
|
|||||||
name,
|
name,
|
||||||
unique_id,
|
unique_id,
|
||||||
coordinator: WeatherUpdateCoordinator,
|
coordinator: WeatherUpdateCoordinator,
|
||||||
forecast_mode,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize the sensor."""
|
"""Initialize the sensor."""
|
||||||
super().__init__(coordinator)
|
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_name = name
|
||||||
self._attr_unique_id = unique_id
|
self._attr_unique_id = unique_id
|
||||||
|
|
||||||
@ -115,11 +90,6 @@ class AemetWeather(
|
|||||||
cond = self.get_aemet_value([AOD_WEATHER, AOD_CONDITION])
|
cond = self.get_aemet_value([AOD_WEATHER, AOD_CONDITION])
|
||||||
return CONDITIONS_MAP.get(cond)
|
return CONDITIONS_MAP.get(cond)
|
||||||
|
|
||||||
@property
|
|
||||||
def forecast(self) -> list[Forecast]:
|
|
||||||
"""Return the forecast array."""
|
|
||||||
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."""
|
||||||
|
@ -7,19 +7,10 @@ from freezegun.api import FrozenDateTimeFactory
|
|||||||
import pytest
|
import pytest
|
||||||
from syrupy.assertion import SnapshotAssertion
|
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.aemet.coordinator import WEATHER_UPDATE_INTERVAL
|
||||||
from homeassistant.components.weather import (
|
from homeassistant.components.weather import (
|
||||||
ATTR_CONDITION_SNOWY,
|
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_HUMIDITY,
|
||||||
ATTR_WEATHER_PRESSURE,
|
ATTR_WEATHER_PRESSURE,
|
||||||
ATTR_WEATHER_TEMPERATURE,
|
ATTR_WEATHER_TEMPERATURE,
|
||||||
@ -32,8 +23,6 @@ from homeassistant.components.weather import (
|
|||||||
)
|
)
|
||||||
from homeassistant.const import ATTR_ATTRIBUTION
|
from homeassistant.const import ATTR_ATTRIBUTION
|
||||||
from homeassistant.core import HomeAssistant
|
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
|
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_BEARING] == 122.0
|
||||||
assert state.attributes[ATTR_WEATHER_WIND_GUST_SPEED] == 12.2
|
assert state.attributes[ATTR_WEATHER_WIND_GUST_SPEED] == 12.2
|
||||||
assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 3.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")
|
state = hass.states.get("weather.aemet_hourly")
|
||||||
assert state is None
|
assert state is None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user