Skip to content
This repository has been archived by the owner on Jan 23, 2022. It is now read-only.

Commit

Permalink
round temperature to the nearest 0.5 step
Browse files Browse the repository at this point in the history
  • Loading branch information
tgermain authored and thomasgermain committed May 1, 2019
1 parent c3debe2 commit 0e5fc32
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
13 changes: 13 additions & 0 deletions tests/test_systemmanager.py
Expand Up @@ -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()
Expand Down
16 changes: 12 additions & 4 deletions vr900connector/systemmanager.py
Expand Up @@ -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")
Expand Down Expand Up @@ -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")
Expand All @@ -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")
Expand All @@ -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")
Expand Down Expand Up @@ -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

0 comments on commit 0e5fc32

Please sign in to comment.