def test_device_common_len_65(pathlist=None): try: d = device.Device() d.from_pics(filename='pics_test_device_2.xml', pathlist=pathlist) m_1 = d.models[1][0] expected_value = 'TestDevice-2' p = 'Md' value = m_1.points[p].value if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value))) m_63001 = d.models[63001][0] expected_value = -180 p = 'int16_4' m_63001.points[p].value = expected_value value = m_63001.points[p].value if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value))) except Exception, e: print '*** Failure test_device_common_len_65: %s' % str(e) return False
def test_device_from_pics(self): d1 = device.Device() d1.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) d2 = create_test_device_1() not_equal = d1.not_equal(d2) if not_equal: raise Exception(not_equal)
def test_sunspec_client_device_1(pathlist=None): try: d = client.SunSpecClientDevice(client.MAPPED, slave_id=1, name='mbmap_test_device_1.xml', pathlist=pathlist) d.read() dp = device.Device() dp.from_pics(filename='pics_test_device_1.xml', pathlist=pathlist) not_equal = dp.not_equal(d.device) if not_equal: raise Exception(not_equal) expected = 'SunSpecTest' if d.common.Mn != expected: raise Exception("'common.Mn' point mismatch: %s %s" % (d.common.Mn, expected)) expected = 'sn-123456789' if d.common.SN != expected: raise Exception("'common.SN' point mismatch: %s %s" % (d.common.SN, expected)) # int16 read and write d.model_63001.read() expected = -20 if d.model_63001.int16_4 != expected: raise Exception("'model_63001.int16_4' point mismatch: %s %s" % (d.model_63001.int16_4, expected)) value = 330 d.model_63001.int16_4 = value d.model_63001.write() d.model_63001.read() value = d.model_63001.int16_4 if d.model_63001.int16_4 != value: raise Exception("'model_63001.int16_4' write failure: %s %s" % (d.model_63001.int16_4, value)) # string read and write expected = '12345678' if d.model_63001.string != expected: raise Exception("'model_63001.string' point mismatch: %s %s" % (d.model_63001.string, expected)) value = 'abcdefg' d.model_63001.string = value d.model_63001.write() d.model_63001.read() if d.model_63001.string != value: raise Exception("'model_63001.string' write failure: %s %s" % (d.model_63001.string, value)) d.close() except Exception, e: print '*** Failure test_sunspec_client_device_1: %s' % str(e) return False
def test_device_to_pics(self): d1 = device.Device() d1.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) root = ET.Element(pics.PICS_ROOT) d1.to_pics(root, single_repeating=False) # util.indent(root) # print ET.tostring(root) d = root.find(pics.PICS_DEVICE) if d is None: raise Exception("No '%s' elements found in '%s' element" % (pics.PICS_DEVICE, root.tag)) d2 = device.Device() d2.from_pics(element=d) not_equal = d1.not_equal(d2) if not_equal: raise Exception(not_equal)
def test_device_constant_sf(self): d = device.Device() d.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) m = d.models[63001][0] p = 'uint32_4' value = m.points[p].value expected_value = 190 if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value)))
def test_device_value_set(self): d = device.Device() d.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) m = d.models[63001][0] expected_value = -180 p = 'int16_4' m.points[p].value = expected_value value = m.points[p].value if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value)))
def test_device_value_get(self): d = device.Device() d.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) m = d.models[63001][0] p = 'int16_4' value = m.points[p].value expected_value = -20 if value != expected_value: raise Exception("Value '{}' mismatch: {} {}".format( p, str(value), str(expected_value)))
def test_device_from_pics(pathlist=None): try: d1 = device.Device() d1.from_pics(filename='pics_test_device_1.xml', pathlist=pathlist) d2 = create_test_device_1() not_equal = d1.not_equal(d2) if not_equal: raise Exception(not_equal) except Exception, e: raise print '*** Failure test_device_from_pics: %s' % str(e) return False
def test_client_device(self): d = client.ClientDevice(client.MAPPED, slave_id=1, name='mbmap_test_device_1.xml', pathlist=self.pathlist) d.scan() d.read_points() dp = device.Device() dp.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) not_equal = dp.not_equal(d) if not_equal: raise Exception(not_equal)
def test_device_value_set_rounding(self): d = device.Device() d.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) m = d.models[63001][0] m.points_sf['sunssf_1'].value = -1 expected_value = 84.3 p = 'int16_1' point = m.points[p] point.value_sf = point.sf_point.value_base point.value = expected_value value = point.value if abs(value - expected_value) > 0.1 / 100: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value)))
def test_client_device(pathlist=None): try: d = client.ClientDevice(client.MAPPED, slave_id=1, name='mbmap_test_device_1.xml', pathlist = pathlist) d.scan() d.read_points() dp = device.Device() dp.from_pics(filename='pics_test_device_1.xml', pathlist=pathlist) not_equal = dp.not_equal(d) if not_equal: raise Exception(not_equal) except Exception, e: print '*** Failure test_client_device: %s' % str(e) return False
def test_device_constant_sf(pathlist=None): try: d = device.Device() d.from_pics(filename='pics_test_device_1.xml', pathlist=pathlist) m = d.models[63001][0] p = 'uint32_4' value = m.points[p].value expected_value = 190 if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value))) except Exception, e: print '*** Failure test_device_constant_sf: %s' % str(e) return False
def test_device_value_set(pathlist=None): try: d = device.Device() d.from_pics(filename='pics_test_device_1.xml', pathlist=pathlist) m = d.models[63001][0] expected_value = -180 p = 'int16_4' m.points[p].value = expected_value value = m.points[p].value if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value))) except Exception, e: print '*** Failure test_device_value_get: %s' % str(e) return False
def test_device_common_len_65(self): d = device.Device() d.from_pics(filename='pics_test_device_2.xml', pathlist=self.pathlist) m_1 = d.models[1][0] expected_value = 'TestDevice-2' p = 'Md' value = m_1.points[p].value if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value))) m_63001 = d.models[63001][0] expected_value = -180 p = 'int16_4' m_63001.points[p].value = expected_value value = m_63001.points[p].value if value != expected_value: raise Exception("Value '%s' mismatch: %s %s" % (p, str(value), str(expected_value)))
def test_client_device(pathlist=None, raw_traceback=False): try: d = client.ClientDevice(client.MAPPED, slave_id=1, name='mbmap_test_device_1.xml', pathlist=pathlist) d.scan() d.read_points() dp = device.Device() dp.from_pics(filename='pics_test_device_1.xml', pathlist=pathlist) not_equal = dp.not_equal(d) if not_equal: raise Exception(not_equal) except Exception as e: if raw_traceback: traceback.print_exc(file=sys.stdout) print('*** Failure test_client_device: %s' % str(e)) return False return True
def test_sunspec_client_device_1(self): d = client.SunSpecClientDevice(client.MAPPED, slave_id=1, name='mbmap_test_device_1.xml', pathlist=self.pathlist) d.read() dp = device.Device() dp.from_pics(filename='pics_test_device_1.xml', pathlist=self.pathlist) not_equal = dp.not_equal(d.device) if not_equal: raise Exception(not_equal) expected = 'SunSpecTest' if d.common.Mn != expected: raise Exception("'common.Mn' point mismatch: %s %s" % (d.common.Mn, expected)) expected = 'sn-123456789' if d.common.SN != expected: raise Exception("'common.SN' point mismatch: %s %s" % (d.common.SN, expected)) # int16 read and write d.model_63001.read() expected = -20 if d.model_63001.int16_4 != expected: raise Exception("'model_63001.int16_4' point mismatch: %s %s" % (d.model_63001.int16_4, expected)) value = 330 d.model_63001.int16_4 = value d.model_63001.write() d.model_63001.read() value = d.model_63001.int16_4 if d.model_63001.int16_4 != value: raise Exception("'model_63001.int16_4' write failure: %s %s" % (d.model_63001.int16_4, value)) # string read and write expected = '12345678' if d.model_63001.string != expected: raise Exception("'model_63001.string' point mismatch: %s %s" % (d.model_63001.string, expected)) value = 'abcdefg' d.model_63001.string = value d.model_63001.write() d.model_63001.read() if d.model_63001.string != value: raise Exception("'model_63001.string' write failure: %s %s" % (d.model_63001.string, value)) # write multiple d.model_63001.read() expected = 65524 if d.model_63001.uint16_3 != expected: raise Exception("'model_63001.uint16_3' point mismatch: %s %s" % (d.model_63001.uint16_3, expected)) expected = 60 if d.model_63001.uint16_4 != expected: raise Exception("'model_63001.uint16_4' point mismatch: %s %s" % (d.model_63001.uint16_4, expected)) expected = 7 if d.model_63001.uint16_5 != expected: raise Exception("'model_63001.uint16_5' point mismatch: %s %s" % (d.model_63001.uint16_5, expected)) value_3 = 65525 value_4 = 70 value_5 = 8 d.model_63001.uint16_3 = value_3 d.model_63001.uint16_4 = value_4 d.model_63001.uint16_5 = value_5 d.model_63001.write() d.model_63001.read() value = d.model_63001.uint16_3 if d.model_63001.uint16_3 != value_3: raise Exception("'model_63001.int16_3' write failure: %s %s" % (d.model_63001.uint16_3, value_3)) value = d.model_63001.uint16_4 if d.model_63001.uint16_4 != value_4: raise Exception("'model_63001.int16_4' write failure: %s %s" % (d.model_63001.uint16_4, value_4)) value = d.model_63001.uint16_5 if d.model_63001.uint16_5 != value_5: raise Exception("'model_63001.int16_5' write failure: %s %s" % (d.model_63001.uint16_5, value_5)) # write multiple d.model_63001.read() expected = value_3 if d.model_63001.uint16_3 != expected: raise Exception("'model_63001.uint16_3' point mismatch: %s %s" % (d.model_63001.uint16_3, expected)) expected = value_4 if d.model_63001.uint16_4 != expected: raise Exception("'model_63001.uint16_4' point mismatch: %s %s" % (d.model_63001.uint16_4, expected)) expected = value_5 if d.model_63001.uint16_5 != expected: raise Exception("'model_63001.uint16_5' point mismatch: %s %s" % (d.model_63001.uint16_5, expected)) value_3 = 65524 value_5 = 7 d.model_63001.uint16_3 = value_3 d.model_63001.uint16_5 = value_5 d.model_63001.write() d.model_63001.read() value = d.model_63001.uint16_3 if d.model_63001.uint16_3 != value_3: raise Exception("'model_63001.int16_3' write failure: %s %s" % (d.model_63001.uint16_3, value_3)) value = d.model_63001.uint16_4 if d.model_63001.uint16_4 != value_4: raise Exception("'model_63001.int16_4' write failure: %s %s" % (d.model_63001.uint16_4, value_4)) value = d.model_63001.uint16_5 if d.model_63001.uint16_5 != value_5: raise Exception("'model_63001.int16_5' write failure: %s %s" % (d.model_63001.uint16_5, value_5)) d.close()
def create_test_device_1(): d = device.Device() # create model 1 with values m1 = device.Model(device=d, mid=1) m1.load() d.models_list.append(m1) b = m1.blocks[0] b.points['Mn'].value_base = 'SunSpecTest' b.points['Md'].value_base = 'TestDevice-1' b.points['Opt'].value_base = 'opt_a_b_c' b.points['Vr'].value_base = '1.2.3' b.points['SN'].value_base = 'sn-123456789' b.points['DA'].value_base = 1 # create model 63001 with values m2 = device.Model(device=d, mid=63001, mlen=188) m2.load() d.models_list.append(m2) # fixed block b = m2.blocks[0] b.points_sf['sunssf_1'].value_base = -10 b.points_sf['sunssf_2'].value_base = 10 b.points_sf['sunssf_3'].value_base = 0 b.points_sf['sunssf_4'].value_base = 1 b.points_sf['sunssf_5'].value_base = 2 b.points_sf['sunssf_6'].value_base = 3 b.points_sf['sunssf_7'].value_base = 4 b.points['int16_1'].value_base = 1 b.points['int16_2'].value_base = -1 b.points['int16_3'].value_base = 2 b.points['int16_4'].value_base = -2 b.points['int16_5'].value_base = 3 b.points['int16_u'].value_base = None b.points['uint16_1'].value_base = 4 b.points['uint16_2'].value_base = 5 b.points['uint16_3'].value_base = 65524 b.points['uint16_4'].value_base = 6 b.points['uint16_5'].value_base = 7 b.points['uint16_u'].value_base = None b.points['acc16'].value_base = 8 b.points['acc16_u'].value_base = None b.points['enum16'].value_base = 9 b.points['enum16_u'].value_base = None b.points['bitfield16'].value_base = 10 b.points['bitfield16_u'].value_base = None b.points['int32_1'].value_base = 11 b.points['int32_2'].value_base = 12 b.points['int32_3'].value_base = 13 b.points['int32_4'].value_base = 14 b.points['int32_5'].value_base = 15 b.points['int32_u'].value_base = None b.points['uint32_1'].value_base = 16 b.points['uint32_2'].value_base = 17 b.points['uint32_3'].value_base = 18 b.points['uint32_4'].value_base = 19 b.points['uint32_5'].value_base = 20 b.points['uint32_u'].value_base = None b.points['acc32'].value_base = 21 b.points['acc32_u'].value_base = None b.points['enum32'].value_base = 22 b.points['enum32_u'].value_base = None b.points['bitfield32'].value_base = 23 b.points['bitfield32_u'].value_base = None b.points['ipaddr'].value_base = 0x01020304 b.points['ipaddr_u'].value_base = None b.points['int64'].value_base = 24 b.points['int64_u'].value_base = None b.points['acc64'].value_base = 25 b.points['acc64_u'].value_base = None b.points['ipv6addr'].value_base = None b.points['ipv6addr_u'].value_base = None b.points['float32'].value_base = 26 b.points['float32_u'].value_base = None b.points['string'].value_base = '12345678' b.points['string_u'].value_base = None # repeating block 1 b = m2.blocks[1] b.points_sf['sunssf_8'].value_base = -2 b.points_sf['sunssf_9'].value_base = -3 b.points['int16_11'].value_base = 30 b.points['int16_12'].value_base = 31 b.points['int16_u'].value_base = None b.points['uint16_11'].value_base = 32 b.points['uint16_12'].value_base = 33 b.points['uint16_13'].value_base = 34 b.points['uint16_u'].value_base = None b.points['int32'].value_base = 35 b.points['int32_u'].value_base = None b.points['uint32'].value_base = 36 b.points['uint32_u'].value_base = None # repeating block 2 b = m2.blocks[2] b.points_sf['sunssf_8'].value_base = -4 b.points_sf['sunssf_9'].value_base = -5 b.points['int16_11'].value_base = 40 b.points['int16_12'].value_base = 41 b.points['int16_u'].value_base = None b.points['uint16_11'].value_base = 42 b.points['uint16_12'].value_base = 43 b.points['uint16_13'].value_base = 44 b.points['uint16_u'].value_base = None b.points['int32'].value_base = 45 b.points['int32_u'].value_base = None b.points['uint32'].value_base = 46 b.points['uint32_u'].value_base = None # repeating block 3 b = m2.blocks[3] b.points_sf['sunssf_8'].value_base = 2 b.points_sf['sunssf_9'].value_base = 3 b.points['int16_11'].value_base = 50 b.points['int16_12'].value_base = 51 b.points['int16_u'].value_base = None b.points['uint16_11'].value_base = 52 b.points['uint16_12'].value_base = 53 b.points['uint16_13'].value_base = 54 b.points['uint16_u'].value_base = None b.points['int32'].value_base = 55 b.points['int32_u'].value_base = None b.points['uint32'].value_base = 56 b.points['uint32_u'].value_base = None # update scale factor values in points for block in m2.blocks: for point in block.points_list: if point.sf_point is not None: point.value_sf = point.sf_point.value_base return d