def test_HomeStatus_error_and_data(auth, requests_mock): with open("fixtures/home_status_error_and_data.json") as f: json_fixture = json.load(f) requests_mock.post( pyatmo.thermostat._GETHOMESTATUS_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) with open("fixtures/home_data_simple.json") as f: json_fixture = json.load(f) requests_mock.post( pyatmo.thermostat._GETHOMESDATA_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) homeStatus = pyatmo.HomeStatus(auth) assert len(homeStatus.rooms) == 3 assert homeStatus.default_room["id"] == "2746182631" expexted = { "id": "2746182631", "reachable": True, "therm_measured_temperature": 19.8, "therm_setpoint_temperature": 12, "therm_setpoint_mode": "away", "therm_setpoint_start_time": 1559229567, "therm_setpoint_end_time": 0, } assert homeStatus.default_room == expexted
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: _LOGGER.error("Error when getting homestatus.") return except requests.exceptions.Timeout: _LOGGER.warning("Timed out when connecting to Netatmo server.") return _LOGGER.debug("Following is the debugging output for homestatus:") _LOGGER.debug(self.homestatus.rawData) 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"] if homestatus_room["reachable"]: 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]
def home_status(auth, home_id, requests_mock): with open("fixtures/home_status_simple.json") as json_file: json_fixture = json.load(json_file) requests_mock.post( pyatmo.thermostat._GETHOMESTATUS_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) return pyatmo.HomeStatus(auth, home_id)
def setup(self): """Retrieve HomeData and HomeStatus by NetAtmo API.""" import pyatmo try: self.homedata = pyatmo.HomeData(self.auth) self.homestatus = pyatmo.HomeStatus(self.auth, home=self.home) self.home_id = self.homedata.gethomeId(self.home) self.update() except TypeError: _LOGGER.error("ThermostatData::setup() got error.") return False return True
def setup(self): """Retrieve HomeData and HomeStatus by NetAtmo API.""" try: self.homedata = pyatmo.HomeData(self.auth) self.homestatus = pyatmo.HomeStatus(self.auth, home_id=self.home_id) self.home_name = self.homedata.getHomeName(self.home_id) self.update() except TypeError: _LOGGER.error("ThermostatData::setup() got error") return False except pyatmo.exceptions.NoDevice: _LOGGER.debug("No climate devices for %s (%s)", self.home_name, self.home_id) return False return True
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: _LOGGER.error("Error when getting homestatus.") 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 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]
def test_HomeStatus_error_disconnected(auth, requests_mock): with open("fixtures/home_status_error_disconnected.json") as f: json_fixture = json.load(f) requests_mock.post( pyatmo.thermostat._GETHOMESTATUS_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) with open("fixtures/home_data_simple.json") as f: json_fixture = json.load(f) requests_mock.post( pyatmo.thermostat._GETHOMESDATA_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) with pytest.raises(pyatmo.NoDevice): pyatmo.HomeStatus(auth)
def test_home_status_error(auth, requests_mock): with open("fixtures/home_status_empty.json") as json_file: json_fixture = json.load(json_file) requests_mock.post( pyatmo.thermostat._GETHOMESTATUS_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) with open("fixtures/home_data_simple.json") as json_file: json_fixture = json.load(json_file) requests_mock.post( pyatmo.thermostat._GETHOMESDATA_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) with pytest.raises(pyatmo.NoDevice): assert pyatmo.HomeStatus(auth, home_id="91763b24c43d3e344f424e8b")
def test_home_status_error_and_data(auth, requests_mock): with open("fixtures/home_status_error_and_data.json") as json_file: json_fixture = json.load(json_file) requests_mock.post( pyatmo.thermostat._GETHOMESTATUS_REQ, json=json_fixture, headers={"content-type": "application/json"}, ) home_status = pyatmo.HomeStatus(auth, home_id="91763b24c43d3e344f424e8b") assert len(home_status.rooms) == 3 expexted = { "id": "2746182631", "reachable": True, "therm_measured_temperature": 19.8, "therm_setpoint_temperature": 12, "therm_setpoint_mode": "away", "therm_setpoint_start_time": 1559229567, "therm_setpoint_end_time": 0, } assert home_status.rooms["2746182631"] == expexted
def update(self): """Call the NetAtmo API to update the data.""" try: self.homestatus = pyatmo.HomeStatus(self.auth, home_id=self.home_id) except pyatmo.exceptions.NoDevice: _LOGGER.error("No device found") return except TypeError: _LOGGER.error("Error when getting homestatus") return except requests.exceptions.Timeout: _LOGGER.warning("Timed out when connecting to Netatmo server") return for room in self.homestatus.rooms: try: roomstatus = {} homestatus_room = self.homestatus.rooms[room] homedata_room = self.homedata.rooms[self.home_id][room] roomstatus["roomID"] = homestatus_room["id"] if homestatus_room["reachable"]: 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( home_id=self.home_id, rid=room, home=self.home_name) roomstatus["module_id"] = None roomstatus["heating_status"] = None roomstatus["heating_power_request"] = None batterylevel = None for module_id in homedata_room["module_ids"]: if (self.homedata.modules[ self.home_id][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 batterylevel = self.homestatus.thermostats[ roomstatus["module_id"]].get("battery_level") 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"]) batterylevel = self.homestatus.valves[ roomstatus["module_id"]].get("battery_level") if batterylevel: batterypct = interpolate(batterylevel, roomstatus["module_type"]) if roomstatus.get("battery_level") is None: roomstatus["battery_level"] = batterypct elif batterypct < roomstatus["battery_level"]: roomstatus["battery_level"] = batterypct 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( home_id=self.home_id) self.hg_temperature = self.homestatus.getHgtemp(home_id=self.home_id) self.setpoint_duration = self.homedata.setpoint_duration[self.home_id]