Fix Netatmo climate battery level (#25165)

* Interpolate battery level

* Sort list
This commit is contained in:
cgtobi 2019-07-16 04:27:28 +02:00 committed by Martin Hjelmare
parent 5e5abf77da
commit 25285ef6a7

View File

@ -470,13 +470,55 @@ class ThermostatData:
.get("battery_level")) .get("battery_level"))
if batterylevel: if batterylevel:
batterypct = interpolate(
batterylevel, roomstatus["module_type"])
if roomstatus.get("battery_level") is None: if roomstatus.get("battery_level") is None:
roomstatus["battery_level"] = batterylevel roomstatus["battery_level"] = batterypct
elif batterylevel < roomstatus["battery_level"]: elif batterypct < roomstatus["battery_level"]:
roomstatus["battery_level"] = batterylevel roomstatus["battery_level"] = batterypct
self.room_status[room] = roomstatus self.room_status[room] = roomstatus
except KeyError as err: except KeyError as err:
_LOGGER.error("Update of room %s failed. Error: %s", room, err) _LOGGER.error("Update of room %s failed. Error: %s", room, err)
self.away_temperature = self.homestatus.getAwaytemp(self.home) self.away_temperature = self.homestatus.getAwaytemp(self.home)
self.hg_temperature = self.homestatus.getHgtemp(self.home) self.hg_temperature = self.homestatus.getHgtemp(self.home)
self.setpoint_duration = self.homedata.setpoint_duration[self.home] self.setpoint_duration = self.homedata.setpoint_duration[self.home]
def interpolate(batterylevel, module_type):
"""Interpolate battery level depending on device type."""
na_battery_levels = {
NA_THERM: {
'full': 4100,
'high': 3600,
'medium': 3300,
'low': 3000,
'empty': 2800},
NA_VALVE: {
'full': 3200,
'high': 2700,
'medium': 2400,
'low': 2200,
'empty': 2200},
}
levels = sorted(na_battery_levels[module_type].values())
steps = [20, 50, 80, 100]
na_battery_level = na_battery_levels[module_type]
if batterylevel >= na_battery_level['full']:
return 100
if batterylevel >= na_battery_level['high']:
i = 3
elif batterylevel >= na_battery_level['medium']:
i = 2
elif batterylevel >= na_battery_level['low']:
i = 1
else:
return 0
pct = steps[i-1] + (
(steps[i] - steps[i-1]) *
(batterylevel - levels[i]) /
(levels[i+1] - levels[i])
)
return int(pct)