Expose UV Index in Met.no (#124992)

UV Index now also appears in forecasts.
pull/125177/head
Hans Kröner 2024-09-03 21:00:44 +02:00 committed by GitHub
parent 27032c1780
commit be8f14167f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 2 deletions

View File

@ -21,12 +21,14 @@ from homeassistant.components.weather import (
ATTR_FORECAST_NATIVE_WIND_SPEED,
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
ATTR_FORECAST_TIME,
ATTR_FORECAST_UV_INDEX,
ATTR_FORECAST_WIND_BEARING,
ATTR_WEATHER_CLOUD_COVERAGE,
ATTR_WEATHER_DEW_POINT,
ATTR_WEATHER_HUMIDITY,
ATTR_WEATHER_PRESSURE,
ATTR_WEATHER_TEMPERATURE,
ATTR_WEATHER_UV_INDEX,
ATTR_WEATHER_VISIBILITY,
ATTR_WEATHER_WIND_BEARING,
ATTR_WEATHER_WIND_GUST_SPEED,
@ -190,6 +192,7 @@ FORECAST_MAP = {
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: "wind_gust",
ATTR_FORECAST_CLOUD_COVERAGE: "cloudiness",
ATTR_FORECAST_HUMIDITY: "humidity",
ATTR_FORECAST_UV_INDEX: "uv_index",
}
ATTR_MAP = {
@ -202,4 +205,5 @@ ATTR_MAP = {
ATTR_WEATHER_WIND_GUST_SPEED: "wind_gust",
ATTR_WEATHER_CLOUD_COVERAGE: "cloudiness",
ATTR_WEATHER_DEW_POINT: "dew_point",
ATTR_WEATHER_UV_INDEX: "uv_index",
}

View File

@ -13,6 +13,7 @@ from homeassistant.components.weather import (
ATTR_WEATHER_HUMIDITY,
ATTR_WEATHER_PRESSURE,
ATTR_WEATHER_TEMPERATURE,
ATTR_WEATHER_UV_INDEX,
ATTR_WEATHER_WIND_BEARING,
ATTR_WEATHER_WIND_GUST_SPEED,
ATTR_WEATHER_WIND_SPEED,
@ -208,6 +209,13 @@ class MetWeather(SingleCoordinatorWeatherEntity[MetDataUpdateCoordinator]):
ATTR_MAP[ATTR_WEATHER_DEW_POINT]
)
@property
def uv_index(self) -> float | None:
"""Return the uv index."""
return self.coordinator.data.current_weather_data.get(
ATTR_MAP[ATTR_WEATHER_UV_INDEX]
)
def _forecast(self, hourly: bool) -> list[Forecast] | None:
"""Return the forecast array."""
if hourly:

View File

@ -17,8 +17,9 @@ def mock_weather():
"pressure": 100,
"humidity": 50,
"wind_speed": 10,
"wind_bearing": "NE",
"wind_bearing": 90,
"dew_point": 12.1,
"uv_index": 1.1,
}
mock_data.get_forecast.return_value = {}
yield mock_data

View File

@ -2,10 +2,22 @@
from homeassistant import config_entries
from homeassistant.components.met import DOMAIN
from homeassistant.components.weather import DOMAIN as WEATHER_DOMAIN
from homeassistant.components.weather import (
ATTR_CONDITION_CLOUDY,
ATTR_WEATHER_DEW_POINT,
ATTR_WEATHER_HUMIDITY,
ATTR_WEATHER_PRESSURE,
ATTR_WEATHER_TEMPERATURE,
ATTR_WEATHER_UV_INDEX,
ATTR_WEATHER_WIND_BEARING,
ATTR_WEATHER_WIND_SPEED,
DOMAIN as WEATHER_DOMAIN,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import init_integration
async def test_new_config_entry(
hass: HomeAssistant, entity_registry: er.EntityRegistry, mock_weather
@ -36,6 +48,25 @@ async def test_legacy_config_entry(
assert len(er.async_entries_for_config_entry(entity_registry, entry.entry_id)) == 1
async def test_weather(hass: HomeAssistant, mock_weather) -> None:
"""Test states of the weather."""
await init_integration(hass)
assert len(hass.states.async_entity_ids("weather")) == 1
entity_id = hass.states.async_entity_ids("weather")[0]
state = hass.states.get(entity_id)
assert state
assert state.state == ATTR_CONDITION_CLOUDY
assert state.attributes[ATTR_WEATHER_TEMPERATURE] == 15
assert state.attributes[ATTR_WEATHER_PRESSURE] == 100
assert state.attributes[ATTR_WEATHER_HUMIDITY] == 50
assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 10
assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 90
assert state.attributes[ATTR_WEATHER_DEW_POINT] == 12.1
assert state.attributes[ATTR_WEATHER_UV_INDEX] == 1.1
async def test_tracking_home(hass: HomeAssistant, mock_weather) -> None:
"""Test we track home."""
await hass.config_entries.flow.async_init("met", context={"source": "onboarding"})