def __init__(self, rf_addr, room_number, boost_duration, boost_valve_position, decalc_day, decalc_hour, max_valve_setting): super(SetValveConfigMessage, self).__init__(SetMessage.ValveConfig, rf_addr, room_number) self.boost_duration = boost_duration self.boost_valve_position = boost_valve_position / 100.0 if isinstance(boost_valve_position, int) else boost_valve_position self.decalc_day = py_day_to_cube_day(decalc_day) self.decalc_hour = decalc_hour self.max_valve_setting = max_valve_setting
def get_payload(self): data = super(SetProgramMessage, self).get_payload() data += bytearray([py_day_to_cube_day(self.weekday)]) # the cube happily accepts less than 13 * 2 bytes for the schedules on a day # and will replace the the rest with "low temperature till midnight" schedules for schedule in self.program: result = pack_temp_and_time(schedule.temperature, schedule.end_minutes) rev_temp, rev_minutes = unpack_temp_and_time(result) #print("{0}°C, {1} results in {2:2X} {3:2X} ({2:08b} {3:08b}), revd: {4}°C, {5} minutes ({6} h)".format(schedule.temperature, schedule.end_minutes, result[0], result[1], rev_temp, rev_minutes, rev_minutes / 60.0)) data += result self.dump_bytes(data, "SetProgramMessage payload") return data
def test_py_day_to_cube_day(self): for py_day, cube_day in ((0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (5, 0), (6, 1)): self.assertEqual(py_day_to_cube_day(py_day), cube_day)