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
Example #2
0
    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]
Example #3
0
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)
Example #4
0
 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
Example #5
0
 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
Example #6
0
 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
Example #10
0
    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]