Beispiel #1
0
 def test_read_field(self):
     setup = SetupTestClass()
     adaptor = MockHeatmiserAdaptor(setup)
     self.func = ThermoStatDay(adaptor, self.settings2)
     responses = [[0, 170], [0, 180]]
     adaptor.setresponse(responses)
     self.assertEqual(17, self.func.read_field('airtemp', 1))
     self.assertEqual(17, self.func.read_field('airtemp',
                                               -1))  #only check presence
     self.func.airtemp.lastreadtime = 0  #force reread
     self.assertEqual(18, self.func.read_field('airtemp', None))
Beispiel #2
0
class TestOtherFunctions(unittest.TestCase):
    """Unittests for other functions"""
    def setUp(self):
        logging.basicConfig(level=logging.ERROR)
        self.settings = {
            'address': 1,
            'protocol': HMV3_ID,
            'long_name': 'test controller',
            'expected_model': 'prt_e_model',
            'expected_prog_mode': PROG_MODE_DAY
        }
        self.func = ThermoStatHotWaterDay(None, self.settings)

    @staticmethod
    def extract_addresses(blocklist):
        return [[block[0].address, block[1].address, block[2]]
                for block in blocklist]

    def test_getfieldblocks(self):
        self.assertEqual([[34, 42, 9]],
                         self.extract_addresses(
                             self.func._get_field_blocks_from_id_range(
                                 self.func._fieldnametonum['remoteairtemp'],
                                 self.func._fieldnametonum['hotwaterdemand'])))
        self.assertEqual([[42, 43, 5]],
                         self.extract_addresses(
                             self.func._get_field_blocks_from_id_range(
                                 self.func._fieldnametonum['hotwaterdemand'],
                                 self.func._fieldnametonum['currenttime'])))
        self.func = ThermoStatDay(None, self.settings)
        self.assertEqual([[0, 24, 26], [32, 41, 10], [43, 43, 4]],
                         self.extract_addresses(
                             self.func._get_field_blocks_from_id_range(
                                 self.func._fieldnametonum['DCBlen'],
                                 self.func._fieldnametonum['currenttime'])))
        self.assertEqual(
            [[0, 24, 26], [32, 41, 10], [43, 59, 28], [103, 175, 84]],
            self.extract_addresses(
                self.func._get_field_blocks_from_id_range(
                    self.func._fieldnametonum['DCBlen'],
                    self.func._fieldnametonum['sun_heat'])))

    def test_checkblock4(self):
        #print 'DCBlen','sun_water'
        #print self.func._getFieldBlocks('DCBlen','sun_water')
        #from timeit import default_timer as timer
        #start = timer()
        for _ in range(1):
            self.func._get_field_blocks_from_id_range(
                self.func._fieldnametonum['DCBlen'],
                self.func._fieldnametonum['sun_water'])
        #print (timer()-start)/1000

    def test_configure_fields(self):
        self.func._configure_fields()
        expected = [[0, 0], [25, 30], [26, 32], [31, 41], [32, 53], [40, 157],
                    [48, 277]]
        for u, d in expected:
            self.assertEqual(d, self.func.fields[u].dcbaddress)
Beispiel #3
0
 def test_readall(self):
     setup = SetupTestClass()
     adaptor = MockHeatmiserAdaptor(setup)
     self.func = ThermoStatHotWaterDay(adaptor, self.settings)
     #basetime = (6 - 2) * 86400 + 53376.0 + YEAR2000
     #self.func.lastreadtime = basetime - get_offset(basetime)
     lta = self.func.currenttime.localtimearray()
     #, 3, 14, 49, 36,
     responses = [[
         1, 37, 0, 22, 4, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 38, 1, 9, 12, 28, 1,
         1, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 220, 0, 0, 0
     ] + lta + [
         7, 0, 19, 9, 30, 10, 17, 0, 19, 21, 30, 10, 7, 0, 19, 21, 30, 10,
         24, 0, 5, 24, 0, 5, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24,
         0, 24, 0, 8, 0, 9, 0, 18, 0, 19, 0, 24, 0, 24, 0, 24, 0, 24, 0, 7,
         0, 20, 21, 30, 12, 24, 0, 12, 24, 0, 12, 7, 0, 20, 21, 30, 12, 24,
         0, 12, 24, 0, 12, 7, 0, 19, 8, 30, 12, 16, 30, 20, 21, 0, 12, 7, 0,
         20, 12, 0, 12, 17, 0, 20, 21, 30, 12, 5, 0, 20, 21, 30, 12, 24, 0,
         12, 24, 0, 12, 7, 0, 20, 12, 0, 12, 17, 0, 20, 21, 30, 12, 7, 0,
         12, 24, 0, 12, 24, 0, 12, 24, 0, 12, 17, 30, 18, 0, 24, 0, 24, 0,
         24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24,
         0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0,
         24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17,
         30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0,
         24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24,
         0, 24, 0, 24, 0, 24, 0, 24, 0
     ]]
     adaptor.setresponse(responses)
     self.func.read_all()
     self.assertEqual([(1, 3, 0, 293, True)], adaptor.arguments)
Beispiel #4
0
 def setUp(self):
     logging.basicConfig(level=logging.ERROR)
     self.settings = {
         'address': 1,
         'protocol': HMV3_ID,
         'long_name': 'test controller',
         'expected_model': 'prt_e_model',
         'expected_prog_mode': PROG_MODE_DAY
     }
     self.func = ThermoStatHotWaterDay(None, self.settings)
Beispiel #5
0
 def setUp(self):
     logging.basicConfig(level=logging.ERROR)
     self.settings = {
         'address': 5,
         'protocol': HMV3_ID,
         'long_name': 'test controller',
         'expected_model': 'prt_e_model',
         'expected_prog_mode': PROG_MODE_DAY
     }
     setup = SetupTestClass()
     self.tester = MockHeatmiserAdaptor(setup)
     #self.tester.write_to_device = self.tester.store
     self.func = ThermoStatDay(self.tester, self.settings)
Beispiel #6
0
    def test_get_temps_and_demand(self):
        setup = SetupTestClass()
        adaptor = MockHeatmiserAdaptor(setup)
        self.func = ThermoStatHotWaterDay(adaptor, self.settings)

        #queue some data to recieve
        responses = [[1, 1, 17, 0, 17, 0, 0, 0, 1]]
        adaptor.setresponse(responses)
        #run command
        self.func.get_temps_and_demand()
        self.assertEqual([(1, 3, 34, 9, False)], adaptor.arguments)
        self.assertEqual(25.7, self.func.remoteairtemp.value)
        self.assertEqual(1, self.func.hotwaterdemand.value)
Beispiel #7
0
 def test_getfieldblocks(self):
     self.assertEqual([[34, 42, 9]],
                      self.extract_addresses(
                          self.func._get_field_blocks_from_id_range(
                              self.func._fieldnametonum['remoteairtemp'],
                              self.func._fieldnametonum['hotwaterdemand'])))
     self.assertEqual([[42, 43, 5]],
                      self.extract_addresses(
                          self.func._get_field_blocks_from_id_range(
                              self.func._fieldnametonum['hotwaterdemand'],
                              self.func._fieldnametonum['currenttime'])))
     self.func = ThermoStatDay(None, self.settings)
     self.assertEqual([[0, 24, 26], [32, 41, 10], [43, 43, 4]],
                      self.extract_addresses(
                          self.func._get_field_blocks_from_id_range(
                              self.func._fieldnametonum['DCBlen'],
                              self.func._fieldnametonum['currenttime'])))
     self.assertEqual(
         [[0, 24, 26], [32, 41, 10], [43, 59, 28], [103, 175, 84]],
         self.extract_addresses(
             self.func._get_field_blocks_from_id_range(
                 self.func._fieldnametonum['DCBlen'],
                 self.func._fieldnametonum['sun_heat'])))
Beispiel #8
0
 def test_read_fields(self):
     setup = SetupTestClass()
     adaptor = MockHeatmiserAdaptor(setup)
     self.func = ThermoStatDay(adaptor, self.settings2)
     responses = [[0, 170]]
     adaptor.setresponse(responses)
     self.assertEqual([17], self.func.read_fields(['airtemp'], 1))
     responses = [[0, 0, 0, 0, 0, 0, 0, 170]]
     adaptor.setresponse(responses)
     self.assertEqual([0, 17],
                      self.func.read_fields(['tempholdmins', 'airtemp'], 0))
     responses = [[3], [0, 100]]
     adaptor.setresponse(responses)
     self.assertEqual([3, 10], self.func.read_fields(['model', 'airtemp'],
                                                     0))
     responses = [[3], [0, 100, 0, 1]]
     adaptor.setresponse(responses)
     print self.func.read_fields(['model', 'airtemp', 'heatingdemand'], 0)
     responses = [[3], [0, 100, 0, 1]]
     adaptor.setresponse(responses)
     print self.func.read_fields(['model', 'airtemp', 'hotwaterdemand'], 0)
     responses = [[
         3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 7, 5, 20, 0, 0, 0
     ], [0, 100, 0, 1]]
     adaptor.setresponse(responses)
     print self.func.read_fields(
         ['model', 'airtemp', 'hotwaterdemand', 'keylock'], 0)
     responses = [[
         0, 3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 7, 5, 20, 0, 0, 0, 0, 0,
         0, 0
     ]]
     adaptor.setresponse(responses)
     print self.func.read_fields(['holidayhours', 'version'], 0)
     responses = [[0, 3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0],
                  [0, 3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0]]
     adaptor.setresponse(responses)
     print self.func.read_fields(['mon_heat', 'sun_heat'], 0)
Beispiel #9
0
    def test_readvariables(self):
        setup = SetupTestClass()
        adaptor = MockHeatmiserAdaptor(setup)
        self.func = ThermoStatHotWaterDay(adaptor, self.settings)

        #queue some data to recieve
        responses = [[17, 30, 1, 1, 1, 1, 0, 0],
                     [0, 0, 17, 0, 17, 0, 17, 0, 0, 0, 0]]
        adaptor.setresponse(responses)
        #run command
        self.func.get_variables()
        self.assertEqual([(1, 3, 18, 8, False), (1, 3, 32, 11, False)],
                         adaptor.arguments)
        self.assertEqual(17, self.func.setroomtemp.value)
        self.assertEqual(0, self.func.hotwaterdemand.value)
Beispiel #10
0
 def setUp(self):
     logging.basicConfig(level=logging.DEBUG)
     #network, address, protocol, short_name, long_name, model, mode
     #self.func = ThermoStat(None, 1, HMV3_ID, 'test', 'test controller', 'prt_hw_model', PROG_MODE_DAY)
     self.settings = {
         'address': 1,
         'protocol': HMV3_ID,
         'long_name': 'test controller',
         'expected_model': 'prt_hw_model',
         'expected_prog_mode': PROG_MODE_DAY,
         'autocorrectime': False
     }
     self.settings2 = {
         'address': 1,
         'protocol': HMV3_ID,
         'long_name': 'test controller',
         'expected_model': 'prt_e_model',
         'expected_prog_mode': PROG_MODE_DAY
     }
     self.func = ThermoStatHotWaterDay(None, self.settings)
Beispiel #11
0
class TestReadingData(unittest.TestCase):
    """Unittests for reading data functions"""
    def setUp(self):
        logging.basicConfig(level=logging.DEBUG)
        #network, address, protocol, short_name, long_name, model, mode
        #self.func = ThermoStat(None, 1, HMV3_ID, 'test', 'test controller', 'prt_hw_model', PROG_MODE_DAY)
        self.settings = {
            'address': 1,
            'protocol': HMV3_ID,
            'long_name': 'test controller',
            'expected_model': 'prt_hw_model',
            'expected_prog_mode': PROG_MODE_DAY,
            'autocorrectime': False
        }
        self.settings2 = {
            'address': 1,
            'protocol': HMV3_ID,
            'long_name': 'test controller',
            'expected_model': 'prt_e_model',
            'expected_prog_mode': PROG_MODE_DAY
        }
        self.func = ThermoStatHotWaterDay(None, self.settings)

    def test_procfield(self):
        #unique_address, length, divisor, valid range
        self.func._procfield([1],
                             HeatmiserFieldSingleReadOnly('test', 0, [], None))
        self.func._procfield([1],
                             HeatmiserFieldSingleReadOnly(
                                 'test', 0, [0, 1], None))
        self.func._procfield([1, 1],
                             HeatmiserFieldDoubleReadOnly(
                                 'test', 0, [0, 257], None))
        self.func._procfield([4],
                             HeatmiserFieldSingleReadOnly(
                                 'model', 0, [], None))
        #self.func._procfield([PROG_MODES[PROG_MODE_DAY]], HeatmiserFieldSingleReadOnly('programmode', 0, [], None))

    def test_procfield_range(self):
        with self.assertRaises(HeatmiserResponseError):
            self.func._procfield([3],
                                 HeatmiserFieldSingleReadOnly(
                                     'test', 0, [0, 1], None))

    def test_procfield_model(self):
        field = HeatmiserFieldSingleReadOnly('model', 0, [], None)
        field.expectedvalue = 4
        with self.assertRaises(HeatmiserResponseError):
            self.func._procfield([3], field)

    def test_procfield_timewrong(self):
        #field = HeatmiserFieldTime('currenttime', 0, [], None)
        basetime = (1 + 1) * 86400 + 9 * 3600 + 33 * 60 + 0 + YEAR2000
        self.func.lastreadtime = basetime - get_offset(
            basetime)  #has been read
        self.func.currenttime.value = [1, 0, 0, 0]
        with self.assertRaises(HeatmiserControllerTimeError):
            self.func._procfield([2, 12, 12, 12], self.func.currenttime)

    def test_procpayload(self):
        print "tz %i alt tz %i" % (time.timezone, time.altzone)
        goodmessage = [
            1, 37, 0, 22, 4, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 38, 1, 9, 12, 28, 1,
            1, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 220, 0, 0, 0, 3, 14,
            49, 36, 7, 0, 19, 9, 30, 10, 17, 0, 19, 21, 30, 10, 7, 0, 19, 21,
            30, 10, 24, 0, 5, 24, 0, 5, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24,
            0, 24, 0, 24, 0, 8, 0, 9, 0, 18, 0, 19, 0, 24, 0, 24, 0, 24, 0, 24,
            0, 7, 0, 20, 21, 30, 12, 24, 0, 12, 24, 0, 12, 7, 0, 20, 21, 30,
            12, 24, 0, 12, 24, 0, 12, 7, 0, 19, 8, 30, 12, 16, 30, 20, 21, 0,
            12, 7, 0, 20, 12, 0, 12, 17, 0, 20, 21, 30, 12, 5, 0, 20, 21, 30,
            12, 24, 0, 12, 24, 0, 12, 7, 0, 20, 12, 0, 12, 17, 0, 20, 21, 30,
            12, 7, 0, 12, 24, 0, 12, 24, 0, 12, 24, 0, 12, 17, 30, 18, 0, 24,
            0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24, 0,
            24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24,
            0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0,
            24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17,
            30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0,
            24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0
        ]

        self.func.autocorrectime = False
        basetime = (6 - 2) * 86400 + 53376.0 + YEAR2000
        self.func.lastreadtime = basetime - get_offset(basetime)
        self.func._procpayload(goodmessage)

    def test_procdefaultrange(self):
        self.func._procpartpayload([255, 255], 'remoteairtemp',
                                   'remoteairtemp')
        self.assertEqual(6553.5, self.func.remoteairtemp.value)

    def test_procdefaultrangeerror(self):
        self.func._procpartpayload([255, 256], 'remoteairtemp',
                                   'remoteairtemp')
        self.assertEqual(None, self.func.remoteairtemp.value)

    def test_procpartpayload(self):
        self.func._procpartpayload([0, 1], 'tempholdmins', 'tempholdmins')
        self.assertEqual(1, self.func.tempholdmins.value)
        self.func._procpartpayload([0, 1, 0, 0, 0, 0, 0, 0], 'tempholdmins',
                                   'airtemp')
        self.assertEqual(1, self.func.tempholdmins.value)

    def test_readall(self):
        setup = SetupTestClass()
        adaptor = MockHeatmiserAdaptor(setup)
        self.func = ThermoStatHotWaterDay(adaptor, self.settings)
        #basetime = (6 - 2) * 86400 + 53376.0 + YEAR2000
        #self.func.lastreadtime = basetime - get_offset(basetime)
        lta = self.func.currenttime.localtimearray()
        #, 3, 14, 49, 36,
        responses = [[
            1, 37, 0, 22, 4, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 38, 1, 9, 12, 28, 1,
            1, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 220, 0, 0, 0
        ] + lta + [
            7, 0, 19, 9, 30, 10, 17, 0, 19, 21, 30, 10, 7, 0, 19, 21, 30, 10,
            24, 0, 5, 24, 0, 5, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24,
            0, 24, 0, 8, 0, 9, 0, 18, 0, 19, 0, 24, 0, 24, 0, 24, 0, 24, 0, 7,
            0, 20, 21, 30, 12, 24, 0, 12, 24, 0, 12, 7, 0, 20, 21, 30, 12, 24,
            0, 12, 24, 0, 12, 7, 0, 19, 8, 30, 12, 16, 30, 20, 21, 0, 12, 7, 0,
            20, 12, 0, 12, 17, 0, 20, 21, 30, 12, 5, 0, 20, 21, 30, 12, 24, 0,
            12, 24, 0, 12, 7, 0, 20, 12, 0, 12, 17, 0, 20, 21, 30, 12, 7, 0,
            12, 24, 0, 12, 24, 0, 12, 24, 0, 12, 17, 30, 18, 0, 24, 0, 24, 0,
            24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24,
            0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0,
            24, 0, 17, 30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17,
            30, 18, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0,
            24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 17, 30, 18, 0, 24, 0, 24,
            0, 24, 0, 24, 0, 24, 0, 24, 0
        ]]
        adaptor.setresponse(responses)
        self.func.read_all()
        self.assertEqual([(1, 3, 0, 293, True)], adaptor.arguments)

    def test_readvariables(self):
        setup = SetupTestClass()
        adaptor = MockHeatmiserAdaptor(setup)
        self.func = ThermoStatHotWaterDay(adaptor, self.settings)

        #queue some data to recieve
        responses = [[17, 30, 1, 1, 1, 1, 0, 0],
                     [0, 0, 17, 0, 17, 0, 17, 0, 0, 0, 0]]
        adaptor.setresponse(responses)
        #run command
        self.func.get_variables()
        self.assertEqual([(1, 3, 18, 8, False), (1, 3, 32, 11, False)],
                         adaptor.arguments)
        self.assertEqual(17, self.func.setroomtemp.value)
        self.assertEqual(0, self.func.hotwaterdemand.value)

    def test_get_temps_and_demand(self):
        setup = SetupTestClass()
        adaptor = MockHeatmiserAdaptor(setup)
        self.func = ThermoStatHotWaterDay(adaptor, self.settings)

        #queue some data to recieve
        responses = [[1, 1, 17, 0, 17, 0, 0, 0, 1]]
        adaptor.setresponse(responses)
        #run command
        self.func.get_temps_and_demand()
        self.assertEqual([(1, 3, 34, 9, False)], adaptor.arguments)
        self.assertEqual(25.7, self.func.remoteairtemp.value)
        self.assertEqual(1, self.func.hotwaterdemand.value)

    def test_read_field(self):
        setup = SetupTestClass()
        adaptor = MockHeatmiserAdaptor(setup)
        self.func = ThermoStatDay(adaptor, self.settings2)
        responses = [[0, 170], [0, 180]]
        adaptor.setresponse(responses)
        self.assertEqual(17, self.func.read_field('airtemp', 1))
        self.assertEqual(17, self.func.read_field('airtemp',
                                                  -1))  #only check presence
        self.func.airtemp.lastreadtime = 0  #force reread
        self.assertEqual(18, self.func.read_field('airtemp', None))

    def test_read_fields(self):
        setup = SetupTestClass()
        adaptor = MockHeatmiserAdaptor(setup)
        self.func = ThermoStatDay(adaptor, self.settings2)
        responses = [[0, 170]]
        adaptor.setresponse(responses)
        self.assertEqual([17], self.func.read_fields(['airtemp'], 1))
        responses = [[0, 0, 0, 0, 0, 0, 0, 170]]
        adaptor.setresponse(responses)
        self.assertEqual([0, 17],
                         self.func.read_fields(['tempholdmins', 'airtemp'], 0))
        responses = [[3], [0, 100]]
        adaptor.setresponse(responses)
        self.assertEqual([3, 10], self.func.read_fields(['model', 'airtemp'],
                                                        0))
        responses = [[3], [0, 100, 0, 1]]
        adaptor.setresponse(responses)
        print self.func.read_fields(['model', 'airtemp', 'heatingdemand'], 0)
        responses = [[3], [0, 100, 0, 1]]
        adaptor.setresponse(responses)
        print self.func.read_fields(['model', 'airtemp', 'hotwaterdemand'], 0)
        responses = [[
            3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 7, 5, 20, 0, 0, 0
        ], [0, 100, 0, 1]]
        adaptor.setresponse(responses)
        print self.func.read_fields(
            ['model', 'airtemp', 'hotwaterdemand', 'keylock'], 0)
        responses = [[
            0, 3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 7, 5, 20, 0, 0, 0, 0, 0,
            0, 0
        ]]
        adaptor.setresponse(responses)
        print self.func.read_fields(['holidayhours', 'version'], 0)
        responses = [[0, 3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0],
                     [0, 3, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0]]
        adaptor.setresponse(responses)
        print self.func.read_fields(['mon_heat', 'sun_heat'], 0)