Skip to content

Commit

Permalink
v2024.5.1
Browse files Browse the repository at this point in the history
  • Loading branch information
jeroenterheerdt committed May 17, 2024
1 parent 7234310 commit 7948d87
Show file tree
Hide file tree
Showing 6 changed files with 10,280 additions and 444 deletions.
147 changes: 69 additions & 78 deletions custom_components/smart_irrigation/OWMClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def __init__(
self._cached_forecast_data = None

def get_forecast_data(self):
"""Validate and return forecast data"""
"""Validate and return forecast data."""
if (
self._cached_forecast_data is None
or self.override_cache
Expand Down Expand Up @@ -115,53 +115,49 @@ def get_forecast_data(self):
for k in OWM_required_keys:
if k not in data:
self.raiseIOError(k)
else:
# check value
if k not in [
OWM_wind_speed_key_name,
OWM_temp_key_name,
OWM_pressure_key_name,
]:
if (
data[k] < OWM_validators[k]["min"]
or data[k] > OWM_validators[k]["max"]
elif k not in [
OWM_wind_speed_key_name,
OWM_temp_key_name,
OWM_pressure_key_name,
]:
if (
data[k] < OWM_validators[k]["min"]
or data[k] > OWM_validators[k]["max"]
):
self.validationError(
k,
data[k],
OWM_validators[k]["min"],
OWM_validators[k]["max"],
)
elif k is OWM_temp_key_name:
for kt in OWM_required_key_temp:
if kt not in data[OWM_temp_key_name]:
self.raiseIOError(kt)
elif (
data[OWM_temp_key_name][kt]
< OWM_validators["temp"]["min"]
or data[OWM_temp_key_name][kt]
> OWM_validators["temp"]["max"]
):
self.validationError(
k,
data[k],
OWM_validators[k]["min"],
OWM_validators[k]["max"],
kt,
data[OWM_temp_key_name][kt],
OWM_validators["temp"]["min"],
OWM_validators["temp"]["max"],
)
elif k is OWM_temp_key_name:
for kt in OWM_required_key_temp:
if kt not in data[OWM_temp_key_name]:
self.raiseIOError(kt)
else:
# check value
if (
data[OWM_temp_key_name][kt]
< OWM_validators["temp"]["min"]
or data[OWM_temp_key_name][kt]
> OWM_validators["temp"]["max"]
):
self.validationError(
kt,
data[OWM_temp_key_name][kt],
OWM_validators["temp"]["min"],
OWM_validators["temp"]["max"],
)
elif k is OWM_wind_speed_key_name:
# OWM reports wind speed at 10m height, so need to convert to 2m:
data[OWM_wind_speed_key_name] = data[
OWM_wind_speed_key_name
] * (4.87 / math.log((67.8 * 10) - 5.42))
elif k is OWM_pressure_key_name:
# OWM provides relative pressure, replace it with estimated absolute pressure returning!
data[
OWM_pressure_key_name
] = self.relative_to_absolute_pressure(
data[OWM_pressure_key_name], self.elevation
)
elif k is OWM_wind_speed_key_name:
# OWM reports wind speed at 10m height, so need to convert to 2m:
data[OWM_wind_speed_key_name] = data[
OWM_wind_speed_key_name
] * (4.87 / math.log((67.8 * 10) - 5.42))
elif k is OWM_pressure_key_name:
# OWM provides relative pressure, replace it with estimated absolute pressure returning!
data[
OWM_pressure_key_name
] = self.relative_to_absolute_pressure(
data[OWM_pressure_key_name], self.elevation
)
parsed_data[MAPPING_WINDSPEED] = data[OWM_wind_speed_key_name]

parsed_data[MAPPING_PRESSURE] = data[OWM_pressure_key_name]
Expand Down Expand Up @@ -202,15 +198,12 @@ def get_forecast_data(self):
return self._cached_forecast_data

def relative_to_absolute_pressure(self, pressure, height):
"""
Convert relative pressure to absolute pressure.
"""
"""Convert relative pressure to absolute pressure."""
# Constants
g = 9.80665 # m/s^2
M = 0.0289644 # kg/mol
R = 8.31447 # J/(mol*K)
T0 = 288.15 # K
p0 = 101325 # Pa

# Calculate temperature at given height
temperature = T0 - (g * M * height) / (R * T0)
Expand Down Expand Up @@ -245,34 +238,32 @@ def get_data(self):
for k in OWM_required_keys:
if k not in data:
self.raiseIOError(k)
else:
# check value
if k not in [
OWM_wind_speed_key_name,
OWM_pressure_key_name,
]:
if (
data[k] < OWM_validators[k]["min"]
or data[k] > OWM_validators[k]["max"]
):
self.validationError(
k,
data[k],
OWM_validators[k]["min"],
OWM_validators[k]["max"],
)
elif k is OWM_wind_speed_key_name:
# OWM reports wind speed at 10m height, so need to convert to 2m:
data[OWM_wind_speed_key_name] = data[
OWM_wind_speed_key_name
] * (4.87 / math.log((67.8 * 10) - 5.42))
elif k is OWM_pressure_key_name:
# OWM provides relative pressure, replace it with estimated absolute pressure returning!
data[
OWM_pressure_key_name
] = self.relative_to_absolute_pressure(
data[OWM_pressure_key_name], self.elevation
elif k not in [
OWM_wind_speed_key_name,
OWM_pressure_key_name,
]:
if (
data[k] < OWM_validators[k]["min"]
or data[k] > OWM_validators[k]["max"]
):
self.validationError(
k,
data[k],
OWM_validators[k]["min"],
OWM_validators[k]["max"],
)
elif k is OWM_wind_speed_key_name:
# OWM reports wind speed at 10m height, so need to convert to 2m:
data[OWM_wind_speed_key_name] = data[
OWM_wind_speed_key_name
] * (4.87 / math.log((67.8 * 10) - 5.42))
elif k is OWM_pressure_key_name:
# OWM provides relative pressure, replace it with estimated absolute pressure returning!
data[
OWM_pressure_key_name
] = self.relative_to_absolute_pressure(
data[OWM_pressure_key_name], self.elevation
)
parsed_data[MAPPING_WINDSPEED] = data[OWM_wind_speed_key_name]
parsed_data[MAPPING_PRESSURE] = data[OWM_pressure_key_name]
parsed_data[MAPPING_HUMIDITY] = data[OWM_humidity_key_name]
Expand Down Expand Up @@ -326,11 +317,11 @@ def get_data(self):
return self._cached_data

def raiseIOError(self, key):
raise IOError("Missing required key {0} in OWM API return".format(key))
raise IOError("Missing required key {} in OWM API return".format(key))

def validationError(self, key, value, minval, maxval):
raise ValueError(
"Value {0} is not valid for {1}. Excepted range: {2}-{3}".format(
"Value {} is not valid for {}. Excepted range: {}-{}".format(
value, key, minval, maxval
)
)
6 changes: 3 additions & 3 deletions custom_components/smart_irrigation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ def __init__(self, hass: HomeAssistant, session, entry, store) -> None:
super().__init__(hass, _LOGGER, name=const.DOMAIN)

@callback
def setup_SmartIrrigation_entities(self):
def setup_SmartIrrigation_entities(self): # noqa: D102
zones = self.store.async_get_zones()
# self.store.async_get_modules()
# self.store.async_get_config()
Expand All @@ -247,7 +247,7 @@ def setup_SmartIrrigation_entities(self):
# self.async_create_zone(zone)
async_dispatcher_send(self.hass, const.DOMAIN + "_register_entity", zone)

async def async_update_config(self, data):
async def async_update_config(self, data): # noqa: D102
# handle auto calc changes
await self.set_up_auto_calc_time(data)
# handle auto update changes, includings updating OWMClient cache settings
Expand All @@ -257,7 +257,7 @@ async def async_update_config(self, data):
self.store.async_update_config(data)
async_dispatcher_send(self.hass, const.DOMAIN + "_config_updated")

async def set_up_auto_update_time(self, data):
async def set_up_auto_update_time(self, data): # noqa: D102
if data[const.CONF_AUTO_UPDATE_ENABLED]:
# CONF_AUTO_UPDATE_SCHEDULE: minute, hour, day
# CONF_AUTO_UPDATE_INTERVAL: X
Expand Down
Loading

0 comments on commit 7948d87

Please sign in to comment.