mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 08:47:10 +00:00
SMHI component: Bugfix - calc precipitation (#20745)
* Bugfix - calc precipitation * Feedback: better way to skip first forecast * Even less messy way * lint error
This commit is contained in:
parent
e581d41ded
commit
208ea6eae4
@ -11,7 +11,7 @@ from homeassistant.core import Config, HomeAssistant
|
|||||||
from .config_flow import smhi_locations # noqa: F401
|
from .config_flow import smhi_locations # noqa: F401
|
||||||
from .const import DOMAIN # noqa: F401
|
from .const import DOMAIN # noqa: F401
|
||||||
|
|
||||||
REQUIREMENTS = ['smhi-pkg==1.0.5']
|
REQUIREMENTS = ['smhi-pkg==1.0.8']
|
||||||
|
|
||||||
DEFAULT_NAME = 'smhi'
|
DEFAULT_NAME = 'smhi'
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ from homeassistant.const import (
|
|||||||
CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, TEMP_CELSIUS)
|
CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, TEMP_CELSIUS)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import aiohttp_client
|
from homeassistant.helpers import aiohttp_client
|
||||||
from homeassistant.util import Throttle, dt, slugify
|
from homeassistant.util import Throttle, slugify
|
||||||
|
|
||||||
DEPENDENCIES = ['smhi']
|
DEPENDENCIES = ['smhi']
|
||||||
|
|
||||||
@ -208,25 +208,24 @@ class SmhiWeather(WeatherEntity):
|
|||||||
@property
|
@property
|
||||||
def forecast(self) -> List:
|
def forecast(self) -> List:
|
||||||
"""Return the forecast."""
|
"""Return the forecast."""
|
||||||
if self._forecasts is None:
|
if self._forecasts is None or len(self._forecasts) < 2:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
data = []
|
data = []
|
||||||
for forecast in self._forecasts:
|
|
||||||
|
for forecast in self._forecasts[1:]:
|
||||||
condition = next((
|
condition = next((
|
||||||
k for k, v in CONDITION_CLASSES.items()
|
k for k, v in CONDITION_CLASSES.items()
|
||||||
if forecast.symbol in v), None)
|
if forecast.symbol in v), None)
|
||||||
|
|
||||||
# Only get mid day forecasts
|
data.append({
|
||||||
if forecast.valid_time.hour == 12:
|
ATTR_FORECAST_TIME: forecast.valid_time.isoformat(),
|
||||||
data.append({
|
ATTR_FORECAST_TEMP: forecast.temperature_max,
|
||||||
ATTR_FORECAST_TIME: dt.as_local(forecast.valid_time),
|
ATTR_FORECAST_TEMP_LOW: forecast.temperature_min,
|
||||||
ATTR_FORECAST_TEMP: forecast.temperature_max,
|
ATTR_FORECAST_PRECIPITATION:
|
||||||
ATTR_FORECAST_TEMP_LOW: forecast.temperature_min,
|
round(forecast.total_precipitation),
|
||||||
ATTR_FORECAST_PRECIPITATION:
|
ATTR_FORECAST_CONDITION: condition,
|
||||||
round(forecast.mean_precipitation*24),
|
})
|
||||||
ATTR_FORECAST_CONDITION: condition,
|
|
||||||
})
|
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
@ -1552,7 +1552,7 @@ smappy==0.2.16
|
|||||||
# smbus-cffi==0.5.1
|
# smbus-cffi==0.5.1
|
||||||
|
|
||||||
# homeassistant.components.smhi
|
# homeassistant.components.smhi
|
||||||
smhi-pkg==1.0.5
|
smhi-pkg==1.0.8
|
||||||
|
|
||||||
# homeassistant.components.media_player.snapcast
|
# homeassistant.components.media_player.snapcast
|
||||||
snapcast==2.0.9
|
snapcast==2.0.9
|
||||||
|
@ -269,7 +269,7 @@ simplisafe-python==3.1.14
|
|||||||
sleepyq==0.6
|
sleepyq==0.6
|
||||||
|
|
||||||
# homeassistant.components.smhi
|
# homeassistant.components.smhi
|
||||||
smhi-pkg==1.0.5
|
smhi-pkg==1.0.8
|
||||||
|
|
||||||
# homeassistant.components.climate.honeywell
|
# homeassistant.components.climate.honeywell
|
||||||
somecomfort==0.5.2
|
somecomfort==0.5.2
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"""Test for the smhi weather entity."""
|
"""Test for the smhi weather entity."""
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
|
|
||||||
from homeassistant.components.weather import (
|
from homeassistant.components.weather import (
|
||||||
@ -61,12 +61,11 @@ async def test_setup_hass(hass: HomeAssistant, aioclient_mock) -> None:
|
|||||||
assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 7
|
assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 7
|
||||||
assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 134
|
assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 134
|
||||||
_LOGGER.error(state.attributes)
|
_LOGGER.error(state.attributes)
|
||||||
assert len(state.attributes['forecast']) == 1
|
assert len(state.attributes['forecast']) == 4
|
||||||
|
|
||||||
forecast = state.attributes['forecast'][0]
|
forecast = state.attributes['forecast'][1]
|
||||||
assert forecast[ATTR_FORECAST_TIME] == datetime(2018, 9, 2, 12, 0,
|
assert forecast[ATTR_FORECAST_TIME] == '2018-09-02T12:00:00'
|
||||||
tzinfo=timezone.utc)
|
assert forecast[ATTR_FORECAST_TEMP] == 21
|
||||||
assert forecast[ATTR_FORECAST_TEMP] == 20
|
|
||||||
assert forecast[ATTR_FORECAST_TEMP_LOW] == 6
|
assert forecast[ATTR_FORECAST_TEMP_LOW] == 6
|
||||||
assert forecast[ATTR_FORECAST_PRECIPITATION] == 0
|
assert forecast[ATTR_FORECAST_PRECIPITATION] == 0
|
||||||
assert forecast[ATTR_FORECAST_CONDITION] == 'partlycloudy'
|
assert forecast[ATTR_FORECAST_CONDITION] == 'partlycloudy'
|
||||||
@ -102,7 +101,8 @@ def test_properties_unknown_symbol() -> None:
|
|||||||
hass = Mock()
|
hass = Mock()
|
||||||
data = Mock()
|
data = Mock()
|
||||||
data.temperature = 5
|
data.temperature = 5
|
||||||
data.mean_precipitation = 1
|
data.mean_precipitation = 0.5
|
||||||
|
data.total_precipitation = 1
|
||||||
data.humidity = 5
|
data.humidity = 5
|
||||||
data.wind_speed = 10
|
data.wind_speed = 10
|
||||||
data.wind_direction = 180
|
data.wind_direction = 180
|
||||||
@ -114,7 +114,8 @@ def test_properties_unknown_symbol() -> None:
|
|||||||
|
|
||||||
data2 = Mock()
|
data2 = Mock()
|
||||||
data2.temperature = 5
|
data2.temperature = 5
|
||||||
data2.mean_precipitation = 1
|
data2.mean_precipitation = 0.5
|
||||||
|
data2.total_precipitation = 1
|
||||||
data2.humidity = 5
|
data2.humidity = 5
|
||||||
data2.wind_speed = 10
|
data2.wind_speed = 10
|
||||||
data2.wind_direction = 180
|
data2.wind_direction = 180
|
||||||
@ -126,7 +127,8 @@ def test_properties_unknown_symbol() -> None:
|
|||||||
|
|
||||||
data3 = Mock()
|
data3 = Mock()
|
||||||
data3.temperature = 5
|
data3.temperature = 5
|
||||||
data3.mean_precipitation = 1
|
data3.mean_precipitation = 0.5
|
||||||
|
data3.total_precipitation = 1
|
||||||
data3.humidity = 5
|
data3.humidity = 5
|
||||||
data3.wind_speed = 10
|
data3.wind_speed = 10
|
||||||
data3.wind_direction = 180
|
data3.wind_direction = 180
|
||||||
|
Loading…
x
Reference in New Issue
Block a user