Add second weather condition and evolution

This commit is contained in:
Jules 2025-05-03 20:59:52 +02:00
parent c3896bd3ce
commit c1caa01034
Signed by: jdejaegh
GPG key ID: 99D6D184CA66933A
5 changed files with 24 additions and 5 deletions

View file

@ -14,7 +14,7 @@ from zoneinfo import ZoneInfo
import aiohttp import aiohttp
import async_timeout import async_timeout
from .const import MAP_WARNING_ID_TO_SLUG as SLUG_MAP from .const import MAP_WARNING_ID_TO_SLUG as SLUG_MAP, WWEVOL_TO_ENUM_MAP
from .const import STYLE_TO_PARAM_MAP, WEEKDAYS from .const import STYLE_TO_PARAM_MAP, WEEKDAYS
from .data import (AnimationFrameData, CurrentWeatherData, Forecast, from .data import (AnimationFrameData, CurrentWeatherData, Forecast,
IrmKmiForecast, IrmKmiRadarForecast, RadarAnimationData, IrmKmiForecast, IrmKmiRadarForecast, RadarAnimationData,
@ -314,6 +314,8 @@ class IrmKmiApiClientHa(IrmKmiApiClient):
forecast = IrmKmiForecast( forecast = IrmKmiForecast(
datetime=(forecast_day.strftime('%Y-%m-%d')), datetime=(forecast_day.strftime('%Y-%m-%d')),
condition=self._cdt_map.get((f.get('ww1', None), f.get('dayNight', None)), None), condition=self._cdt_map.get((f.get('ww1', None), f.get('dayNight', None)), None),
condition_2=self._cdt_map.get((f.get('ww2', None), f.get('dayNight', None)), None),
condition_evol=WWEVOL_TO_ENUM_MAP.get(f.get('wwevol'), None),
native_precipitation=precipitation, native_precipitation=precipitation,
native_temperature=f.get('tempMax', None), native_temperature=f.get('tempMax', None),
native_templow=f.get('tempMin', None), native_templow=f.get('tempMin', None),

View file

@ -1,5 +1,7 @@
from typing import Final from typing import Final
from irm_kmi_api.data import IrmKmiConditionEvol
POLLEN_NAMES: Final = {'Alder', 'Ash', 'Birch', 'Grasses', 'Hazel', 'Mugwort', 'Oak'} POLLEN_NAMES: Final = {'Alder', 'Ash', 'Birch', 'Grasses', 'Hazel', 'Mugwort', 'Oak'}
POLLEN_LEVEL_TO_COLOR = {'null': 'green', 'low': 'yellow', 'moderate': 'orange', 'high': 'red', 'very high': 'purple', POLLEN_LEVEL_TO_COLOR = {'null': 'green', 'low': 'yellow', 'moderate': 'orange', 'high': 'red', 'very high': 'purple',
'active': 'active'} 'active': 'active'}
@ -26,3 +28,9 @@ MAP_WARNING_ID_TO_SLUG: Final = {
14: 'thunderstorm_large_rainfall', 14: 'thunderstorm_large_rainfall',
15: 'storm_surge', 15: 'storm_surge',
17: 'coldspell'} 17: 'coldspell'}
WWEVOL_TO_ENUM_MAP: Final = {
None: IrmKmiConditionEvol.STABLE,
0: IrmKmiConditionEvol.ONE_WAY,
1: IrmKmiConditionEvol.TWO_WAYS
}

View file

@ -1,5 +1,6 @@
"""Data classes for IRM KMI integration""" """Data classes for IRM KMI integration"""
from datetime import datetime from datetime import datetime
from enum import Enum
from typing import List, Required, TypedDict from typing import List, Required, TypedDict
@ -35,10 +36,16 @@ class Forecast(TypedDict, total=False):
is_daytime: bool | None # Mandatory to use with forecast_twice_daily is_daytime: bool | None # Mandatory to use with forecast_twice_daily
class IrmKmiForecast(Forecast): class IrmKmiConditionEvol(Enum):
ONE_WAY = 'one_way'
TWO_WAYS = 'two_ways'
STABLE = 'stable'
class IrmKmiForecast(Forecast, total=False):
"""Forecast class with additional attributes for IRM KMI""" """Forecast class with additional attributes for IRM KMI"""
# TODO: add condition_2 as well and evolution to match data from the API? condition_2: str | None
condition_evol: IrmKmiConditionEvol | None
text: str | None text: str | None
sunrise: str | None sunrise: str | None
sunset: str | None sunset: str | None

View file

@ -75,7 +75,7 @@
"tempMax": 9, "tempMax": 9,
"ww1": 3, "ww1": 3,
"ww2": null, "ww2": null,
"wwevol": null, "wwevol": 1,
"ff1": 4, "ff1": 4,
"ff2": null, "ff2": null,
"ffevol": null, "ffevol": null,

View file

@ -3,7 +3,7 @@ from zoneinfo import ZoneInfo
from freezegun import freeze_time from freezegun import freeze_time
from irm_kmi_api.data import IrmKmiForecast from irm_kmi_api.data import IrmKmiForecast, IrmKmiConditionEvol
from tests.conftest import get_api_with_data from tests.conftest import get_api_with_data
from tests.const import ATTR_CONDITION_PARTLYCLOUDY from tests.const import ATTR_CONDITION_PARTLYCLOUDY
@ -22,6 +22,8 @@ async def test_daily_forecast() -> None:
expected = IrmKmiForecast( expected = IrmKmiForecast(
datetime='2023-12-27', datetime='2023-12-27',
condition=ATTR_CONDITION_PARTLYCLOUDY, condition=ATTR_CONDITION_PARTLYCLOUDY,
condition_2=None,
condition_evol=IrmKmiConditionEvol.TWO_WAYS,
native_precipitation=0, native_precipitation=0,
native_temperature=9, native_temperature=9,
native_templow=4, native_templow=4,