From 9ca5bdda7f6a7917856984914aac2cc6e8a54ed9 Mon Sep 17 00:00:00 2001 From: cgtobi Date: Thu, 6 Jun 2019 09:30:16 +0200 Subject: [PATCH] Add exception handling for Netatmo climate (#24311) * Add exception handling * Make pylint happy --- homeassistant/components/netatmo/climate.py | 85 ++++++++++++--------- 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/homeassistant/components/netatmo/climate.py b/homeassistant/components/netatmo/climate.py index 33ad34b25ff..a49c83d2dd9 100644 --- a/homeassistant/components/netatmo/climate.py +++ b/homeassistant/components/netatmo/climate.py @@ -344,8 +344,8 @@ class ThermostatData: """Return all module available on the API as a list.""" if not self.setup(): return [] - for key in self.homestatus.rooms: - self.room_ids.append(key) + for room in self.homestatus.rooms: + self.room_ids.append(room) return self.room_ids def setup(self): @@ -365,6 +365,7 @@ class ThermostatData: def update(self): """Call the NetAtmo API to update the data.""" import pyatmo + try: self.homestatus = pyatmo.HomeStatus(self.auth, home=self.home) except TypeError: @@ -372,40 +373,52 @@ class ThermostatData: return _LOGGER.debug("Following is the debugging output for homestatus:") _LOGGER.debug(self.homestatus.rawData) - for key in self.homestatus.rooms: - roomstatus = {} - homestatus_room = self.homestatus.rooms[key] - homedata_room = self.homedata.rooms[self.home][key] - roomstatus['roomID'] = homestatus_room['id'] - roomstatus['roomname'] = homedata_room['name'] - roomstatus['target_temperature'] = \ - homestatus_room['therm_setpoint_temperature'] - roomstatus['setpoint_mode'] = \ - homestatus_room['therm_setpoint_mode'] - roomstatus['current_temperature'] = \ - homestatus_room['therm_measured_temperature'] - roomstatus['module_type'] = \ - self.homestatus.thermostatType(self.home, key) - roomstatus['module_id'] = None - roomstatus['heating_status'] = None - roomstatus['heating_power_request'] = None - for module_id in homedata_room['module_ids']: - if self.homedata.modules[self.home][module_id]['type'] == \ - NA_THERM or roomstatus['module_id'] is None: - roomstatus['module_id'] = module_id - if roomstatus['module_type'] == NA_THERM: - self.boilerstatus = self.homestatus.boilerStatus( - rid=roomstatus['module_id']) - roomstatus['heating_status'] = self.boilerstatus - elif roomstatus['module_type'] == NA_VALVE: - roomstatus['heating_power_request'] = \ - homestatus_room['heating_power_request'] - roomstatus['heating_status'] = \ - roomstatus['heating_power_request'] > 0 - if self.boilerstatus is not None: - roomstatus['heating_status'] = \ - self.boilerstatus and roomstatus['heating_status'] - self.room_status[key] = roomstatus + for room in self.homestatus.rooms: + try: + roomstatus = {} + homestatus_room = self.homestatus.rooms[room] + homedata_room = self.homedata.rooms[self.home][room] + roomstatus["roomID"] = homestatus_room["id"] + roomstatus["roomname"] = homedata_room["name"] + roomstatus["target_temperature"] = homestatus_room[ + "therm_setpoint_temperature" + ] + roomstatus["setpoint_mode"] = homestatus_room[ + "therm_setpoint_mode" + ] + roomstatus["current_temperature"] = homestatus_room[ + "therm_measured_temperature" + ] + roomstatus["module_type"] = self.homestatus.thermostatType( + self.home, room + ) + roomstatus["module_id"] = None + roomstatus["heating_status"] = None + roomstatus["heating_power_request"] = None + for module_id in homedata_room["module_ids"]: + if (self.homedata.modules[self.home][module_id]["type"] + == NA_THERM + or roomstatus["module_id"] is None): + roomstatus["module_id"] = module_id + if roomstatus["module_type"] == NA_THERM: + self.boilerstatus = self.homestatus.boilerStatus( + rid=roomstatus["module_id"] + ) + roomstatus["heating_status"] = self.boilerstatus + elif roomstatus["module_type"] == NA_VALVE: + roomstatus["heating_power_request"] = homestatus_room[ + "heating_power_request" + ] + roomstatus["heating_status"] = ( + roomstatus["heating_power_request"] > 0 + ) + if self.boilerstatus is not None: + roomstatus["heating_status"] = ( + self.boilerstatus and roomstatus["heating_status"] + ) + self.room_status[room] = roomstatus + except KeyError as err: + _LOGGER.error("Update of room %s failed. Error: %s", room, err) self.away_temperature = self.homestatus.getAwaytemp(self.home) self.hg_temperature = self.homestatus.getHgtemp(self.home) self.setpoint_duration = self.homedata.setpoint_duration[self.home]