mirror of
https://github.com/jdejaegh/irm-kmi-ha.git
synced 2025-06-27 03:35:56 +02:00
Use degrees for wind bearing instead of cardinal point
This commit is contained in:
parent
f98f846d71
commit
e4c4c8e954
2 changed files with 44 additions and 15 deletions
|
@ -209,37 +209,52 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
pressure = float(now_hourly.get('pressure', None)) if now_hourly is not None else None
|
pressure = float(now_hourly.get('pressure', None)) if now_hourly is not None else None
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
pressure = None
|
pressure = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
wind_speed = float(now_hourly.get('windSpeedKm', None)) if now_hourly is not None else None
|
wind_speed = float(now_hourly.get('windSpeedKm', None)) if now_hourly is not None else None
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
wind_speed = None
|
wind_speed = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
wind_gust_speed = float(now_hourly.get('windPeakSpeedKm', None)) if now_hourly is not None else None
|
wind_gust_speed = float(now_hourly.get('windPeakSpeedKm', None)) if now_hourly is not None else None
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
wind_gust_speed = None
|
wind_gust_speed = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
temperature = float(api_data.get('obs', {}).get('temp'))
|
temperature = float(api_data.get('obs', {}).get('temp'))
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
temperature = None
|
temperature = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
dir_cardinal = now_hourly.get('windDirectionText', {}).get('en') if now_hourly is not None else None
|
||||||
|
if dir_cardinal == 'VAR' or now_hourly is None:
|
||||||
|
wind_bearing = None
|
||||||
|
else:
|
||||||
|
wind_bearing = (float(now_hourly.get('windDirection')) + 180) % 360
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
wind_bearing = None
|
||||||
|
|
||||||
current_weather = CurrentWeatherData(
|
current_weather = CurrentWeatherData(
|
||||||
condition=CDT_MAP.get((api_data.get('obs', {}).get('ww'), api_data.get('obs', {}).get('dayNight')), None),
|
condition=CDT_MAP.get((api_data.get('obs', {}).get('ww'), api_data.get('obs', {}).get('dayNight')), None),
|
||||||
temperature=temperature,
|
temperature=temperature,
|
||||||
wind_speed=wind_speed,
|
wind_speed=wind_speed,
|
||||||
wind_gust_speed=wind_gust_speed,
|
wind_gust_speed=wind_gust_speed,
|
||||||
wind_bearing=now_hourly.get('windDirectionText', {}).get('en') if now_hourly is not None else None,
|
wind_bearing=wind_bearing,
|
||||||
pressure=pressure,
|
pressure=pressure,
|
||||||
uv_index=uv_index
|
uv_index=uv_index
|
||||||
)
|
)
|
||||||
|
|
||||||
if api_data.get('country', '') == 'NL':
|
if api_data.get('country', '') == 'NL':
|
||||||
current_weather['wind_speed'] = api_data.get('obs', {}).get('windSpeedKm')
|
current_weather['wind_speed'] = api_data.get('obs', {}).get('windSpeedKm')
|
||||||
current_weather['wind_bearing'] = api_data.get('obs', {}).get('windDirectionText', {}).get('en')
|
if api_data.get('obs', {}).get('windDirectionText', {}).get('en') == 'VAR':
|
||||||
|
current_weather['wind_bearing'] = None
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
current_weather['wind_bearing'] = (float(api_data.get('obs', {}).get('windDirection')) + 180) % 360
|
||||||
|
except ValueError:
|
||||||
|
current_weather['wind_bearing'] = None
|
||||||
|
|
||||||
return current_weather
|
return current_weather
|
||||||
|
|
||||||
|
@ -268,6 +283,13 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
|
||||||
if f.get('ww', None) is not None:
|
if f.get('ww', None) is not None:
|
||||||
ww = int(f.get('ww'))
|
ww = int(f.get('ww'))
|
||||||
|
|
||||||
|
wind_bearing = None
|
||||||
|
if f.get('windDirectionText', {}).get('en') != 'VAR':
|
||||||
|
try:
|
||||||
|
wind_bearing = (float(f.get('windDirection')) + 180) % 360
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
pass
|
||||||
|
|
||||||
forecast = Forecast(
|
forecast = Forecast(
|
||||||
datetime=day.strftime(f'%Y-%m-%dT{hour}:00:00'),
|
datetime=day.strftime(f'%Y-%m-%dT{hour}:00:00'),
|
||||||
condition=CDT_MAP.get((ww, f.get('dayNight', None)), None),
|
condition=CDT_MAP.get((ww, f.get('dayNight', None)), None),
|
||||||
|
@ -277,7 +299,7 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
|
||||||
native_wind_gust_speed=f.get('windPeakSpeedKm', None),
|
native_wind_gust_speed=f.get('windPeakSpeedKm', None),
|
||||||
native_wind_speed=f.get('windSpeedKm', None),
|
native_wind_speed=f.get('windSpeedKm', None),
|
||||||
precipitation_probability=precipitation_probability,
|
precipitation_probability=precipitation_probability,
|
||||||
wind_bearing=f.get('windDirectionText', {}).get('en'),
|
wind_bearing=wind_bearing,
|
||||||
native_pressure=f.get('pressure', None),
|
native_pressure=f.get('pressure', None),
|
||||||
is_daytime=f.get('dayNight', None) == 'd'
|
is_daytime=f.get('dayNight', None) == 'd'
|
||||||
)
|
)
|
||||||
|
@ -299,14 +321,21 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
|
||||||
if f.get('precipQuantity', None) is not None:
|
if f.get('precipQuantity', None) is not None:
|
||||||
try:
|
try:
|
||||||
precipitation = float(f.get('precipQuantity'))
|
precipitation = float(f.get('precipQuantity'))
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
native_wind_gust_speed = None
|
native_wind_gust_speed = None
|
||||||
if f.get('wind', {}).get('peakSpeed') is not None:
|
if f.get('wind', {}).get('peakSpeed') is not None:
|
||||||
try:
|
try:
|
||||||
native_wind_gust_speed = int(f.get('wind', {}).get('peakSpeed'))
|
native_wind_gust_speed = int(f.get('wind', {}).get('peakSpeed'))
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
wind_bearing = None
|
||||||
|
if f.get('wind', {}).get('dirText', {}).get('en') != 'VAR':
|
||||||
|
try:
|
||||||
|
wind_bearing = (float(f.get('wind', {}).get('dir')) + 180) % 360
|
||||||
|
except (TypeError, ValueError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
is_daytime = f.get('dayNight', None) == 'd'
|
is_daytime = f.get('dayNight', None) == 'd'
|
||||||
|
@ -321,7 +350,7 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
|
||||||
native_wind_gust_speed=native_wind_gust_speed,
|
native_wind_gust_speed=native_wind_gust_speed,
|
||||||
native_wind_speed=f.get('wind', {}).get('speed'),
|
native_wind_speed=f.get('wind', {}).get('speed'),
|
||||||
precipitation_probability=f.get('precipChance', None),
|
precipitation_probability=f.get('precipChance', None),
|
||||||
wind_bearing=f.get('wind', {}).get('dirText', {}).get('en'),
|
wind_bearing=wind_bearing,
|
||||||
is_daytime=is_daytime,
|
is_daytime=is_daytime,
|
||||||
text=f.get('text', {}).get(self.hass.config.language, ""),
|
text=f.get('text', {}).get(self.hass.config.language, ""),
|
||||||
)
|
)
|
||||||
|
@ -393,7 +422,7 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
|
||||||
warning_id = int(data.get('warningType', {}).get('id'))
|
warning_id = int(data.get('warningType', {}).get('id'))
|
||||||
start = datetime.fromisoformat(data.get('fromTimestamp', None))
|
start = datetime.fromisoformat(data.get('fromTimestamp', None))
|
||||||
end = datetime.fromisoformat(data.get('toTimestamp', None))
|
end = datetime.fromisoformat(data.get('toTimestamp', None))
|
||||||
except TypeError | ValueError:
|
except (TypeError, ValueError):
|
||||||
# Without this data, the warning is useless
|
# Without this data, the warning is useless
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ def test_current_weather_be() -> None:
|
||||||
temperature=7,
|
temperature=7,
|
||||||
wind_speed=5,
|
wind_speed=5,
|
||||||
wind_gust_speed=None,
|
wind_gust_speed=None,
|
||||||
wind_bearing='WSW',
|
wind_bearing=248,
|
||||||
pressure=1020,
|
pressure=1020,
|
||||||
uv_index=.7
|
uv_index=.7
|
||||||
)
|
)
|
||||||
|
@ -73,7 +73,7 @@ def test_current_weather_nl() -> None:
|
||||||
temperature=11,
|
temperature=11,
|
||||||
wind_speed=40,
|
wind_speed=40,
|
||||||
wind_gust_speed=None,
|
wind_gust_speed=None,
|
||||||
wind_bearing='SW',
|
wind_bearing=225,
|
||||||
pressure=1008,
|
pressure=1008,
|
||||||
uv_index=1
|
uv_index=1
|
||||||
)
|
)
|
||||||
|
@ -103,7 +103,7 @@ async def test_daily_forecast(
|
||||||
native_wind_gust_speed=50,
|
native_wind_gust_speed=50,
|
||||||
native_wind_speed=20,
|
native_wind_speed=20,
|
||||||
precipitation_probability=0,
|
precipitation_probability=0,
|
||||||
wind_bearing='S',
|
wind_bearing=180,
|
||||||
is_daytime=True,
|
is_daytime=True,
|
||||||
text='Hey!',
|
text='Hey!',
|
||||||
)
|
)
|
||||||
|
@ -128,7 +128,7 @@ def test_hourly_forecast() -> None:
|
||||||
native_wind_gust_speed=None,
|
native_wind_gust_speed=None,
|
||||||
native_wind_speed=15,
|
native_wind_speed=15,
|
||||||
precipitation_probability=70,
|
precipitation_probability=70,
|
||||||
wind_bearing='S',
|
wind_bearing=180,
|
||||||
native_pressure=1020,
|
native_pressure=1020,
|
||||||
is_daytime=False
|
is_daytime=False
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue