diff --git a/tests/test_systemmanager.py b/tests/test_systemmanager.py index 6a4f149..b46169a 100644 --- a/tests/test_systemmanager.py +++ b/tests/test_systemmanager.py @@ -82,6 +82,19 @@ def test_set_hot_water_setpoint_temperature(self): self.assertTrue(self.manager.set_hot_water_setpoint_temperature(hotwater, 60)) self.assertEqual(json.dumps(payload), responses.calls[-1].request.body.decode('utf-8')) + @responses.activate + def test_set_hot_water_setpoint_temperature_number_to_round(self): + serial = TestUtil.mock_full_auth_success() + + hotwater = HotWater('id', 'name', None, 50, 55, HeatingMode.AUTO) + url = Urls.hot_water_temperature_setpoint(hotwater.id) + payload = Payloads.hotwater_temperature_setpoint(60.5) + + responses.add(responses.PUT, url.format(serial_number=serial), status=200) + + self.assertTrue(self.manager.set_hot_water_setpoint_temperature(hotwater, 60.4)) + self.assertEqual(json.dumps(payload), responses.calls[-1].request.body.decode('utf-8')) + @responses.activate def test_set_quick_mode_no_current_quick_mode(self): serial = TestUtil.mock_full_auth_success() diff --git a/vr900connector/systemmanager.py b/vr900connector/systemmanager.py index 9c0c6a4..8eb22db 100644 --- a/vr900connector/systemmanager.py +++ b/vr900connector/systemmanager.py @@ -78,7 +78,7 @@ def set_hot_water_setpoint_temperature(self, hot_water: HotWater, temperature: f LOGGER.info("Will try to set dhw target temperature to %s", temperature) if temperature and hot_water: self._connector.put(Urls.hot_water_temperature_setpoint(hot_water.id), - Payloads.hotwater_temperature_setpoint(round(float(temperature), 1))) + Payloads.hotwater_temperature_setpoint(self._round(temperature))) return True else: LOGGER.debug("No temperature nor hot_water provided, nothing to do") @@ -215,7 +215,7 @@ def set_room_setpoint_temperature(self, room: Room, temperature: float): LOGGER.info("Will try to set room target temperature to %s", temperature) if temperature and room: self._connector.put(Urls.room_set_temperature_setpoint(room.id), - Payloads.room_temperature_setpoint(round(float(temperature), 1))) + Payloads.room_temperature_setpoint(self._round(temperature))) return True else: LOGGER.debug("No temperature nor room provided, nothing to do") @@ -232,7 +232,7 @@ def set_zone_setpoint_temperature(self, zone: Zone, temperature: float): LOGGER.info("Will try to set zone target temperature to %s", temperature) if temperature and zone: self._connector.put(Urls.zone_heating_setpoint_temperature(zone.id), - Payloads.zone_temperature_setpoint(round(float(temperature), 1))) + Payloads.zone_temperature_setpoint(self._round(temperature))) return True else: LOGGER.debug("No temperature nor zone provided, nothing to do") @@ -249,7 +249,7 @@ def set_zone_setback_temperature(self, zone: Zone, temperature: float): LOGGER.info("Will try to set zone setback temperature to %s", temperature) if temperature and zone: self._connector.put(Urls.zone_heating_setback_temperature(zone.id), - Payloads.zone_temperature_setback(round(float(temperature), 1))) + Payloads.zone_temperature_setback(self._round(temperature))) return True else: LOGGER.debug("No temperature nor zone provided, nothing to do") @@ -294,3 +294,11 @@ def logout(self): Get logged out from the API """ self._connector.logout() + + def _round(self, number: float): + """ + This function round a float to the nearest 0.5, as vaillant API only accepts 0.5 step + :param number: the number to round + :return: the rounded number + """ + return round(number * 2) / 2