some more tests
This commit is contained in:
parent
88e36b0170
commit
c3a7c19d33
@ -97,7 +97,7 @@ class LongFrame(ControlFrame):
|
||||
def __init__(self, telegram, devices=[]):
|
||||
super(LongFrame, self).__init__(telegram)
|
||||
self.devices = devices
|
||||
if self.devices != None:
|
||||
if self.devices is not None:
|
||||
for device in self.devices:
|
||||
if not isinstance(device, Device):
|
||||
raise InvalidDevicesStructureException()
|
||||
@ -307,7 +307,7 @@ class LongFrame(ControlFrame):
|
||||
# print vifeCode
|
||||
(mask, value, descr, unit, factorMask, factorFunc) = vifeCode
|
||||
if (vife & mask) == value:
|
||||
if factorFunc == None:
|
||||
if factorFunc is None:
|
||||
retFactor = 1
|
||||
else:
|
||||
factorHelper = vife & factorMask
|
||||
@ -339,7 +339,7 @@ class LongFrame(ControlFrame):
|
||||
else:
|
||||
retDescr = descr
|
||||
retUnit = unit
|
||||
if factorFunc != None:
|
||||
if factorFunc is not None:
|
||||
factorHelper = vif & factorMask
|
||||
retFactor = factorFunc(factorHelper)
|
||||
break
|
||||
@ -379,7 +379,7 @@ class LongFrame(ControlFrame):
|
||||
self.consumed += userDataLength
|
||||
|
||||
dataConvFunc = LongFrame.DataInformationBlock.DATA_FIELD_CODES[self.dif & 0x0f][2]
|
||||
if dataConvFunc == None:
|
||||
if dataConvFunc is None:
|
||||
self.rawValue = 0
|
||||
else:
|
||||
self.rawValue = dataConvFunc(self.userData)
|
||||
@ -413,10 +413,10 @@ class LongFrame(ControlFrame):
|
||||
device = None
|
||||
for d in self.devices:
|
||||
if d.address == self.address:
|
||||
print("device found")
|
||||
#print("device found")
|
||||
device = d
|
||||
break
|
||||
if device != None:
|
||||
if device is not None:
|
||||
self.comment = device.comment
|
||||
else:
|
||||
self.comment = '-'
|
||||
@ -425,8 +425,11 @@ class LongFrame(ControlFrame):
|
||||
dibIndex = 0
|
||||
#print("Telegram length: %d" % len(self.telegram))
|
||||
while True:
|
||||
if device != None:
|
||||
comment = device.dataItems[dibIndex]
|
||||
if device is not None:
|
||||
try:
|
||||
comment = device.dataItems[dibIndex]
|
||||
except IndexError:
|
||||
raise DeviceItemsMismatchException()
|
||||
else:
|
||||
comment = '-'
|
||||
dibIndex += 1
|
||||
|
69
test1.py
69
test1.py
@ -10,8 +10,29 @@ import MeterbusTypeConversion
|
||||
import MeterbusLibExceptions
|
||||
|
||||
|
||||
class TestFrameParsing(unittest.TestCase):
|
||||
class TestCaseWFloat(unittest.TestCase):
|
||||
def assertBetween(self, v, bottom, top):
|
||||
self.assertTrue(v > bottom and v < top )
|
||||
|
||||
class TestFrameParsing(TestCaseWFloat):
|
||||
def setUp(self):
|
||||
#devices
|
||||
self.devices = []
|
||||
device_dishwasher_electric = MeterbusLib.Device(0x53, "Dishwasher", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
|
||||
self.devices.append(device_dishwasher_electric)
|
||||
device_3phase_electric = MeterbusLib.Device(0x50, "3 Phase Electric", ["Energy T1 total", "Energy T1 partial", "Energy T2 total", "Energy T2 partial",
|
||||
"Voltage phase 1", "Current phase 1", "Power phase 1", "img. Power phase 1",
|
||||
"Voltage phase 2", "Current phase 2", "Power phase 2", "img. Power phase 2",
|
||||
"Voltage phase 3", "Current phase 3", "Power phase 3", "img. Power phase 3",
|
||||
"converter ratio", "Power total", "img. Power total", "tariff"
|
||||
])
|
||||
self.devices.append(device_3phase_electric)
|
||||
|
||||
self.brokenDevices = []
|
||||
device_dishwasher_electric = MeterbusLib.Device(0x53, "Dishwasher", ["Energy total", "Energy partial", "Voltage", "Current", "Power"])
|
||||
self.brokenDevices.append(device_dishwasher_electric)
|
||||
|
||||
|
||||
# dishwasher, electric
|
||||
self.inputOkLongFrame_1phase_electric = "68 38 38 68 08 53 72 17 00 13 00 2E 19 24 02 D6 00 00 00 8C 10 04 01 02 00 00 8C 11 04 01 02 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 03 00 02 AC FF 01 01 00 82 40 AC FF 01 FA FF 20 16"
|
||||
self.inputNOkLongFrame_1phase_electric_wrong_medium = "68 38 38 68 08 53 72 17 00 13 00 2E 19 24 FE D6 00 00 00 8C 10 04 01 02 00 00 8C 11 04 01 02 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 03 00 02 AC FF 01 01 00 82 40 AC FF 01 FA FF 1c 16"
|
||||
@ -46,7 +67,7 @@ class TestFrameParsing(unittest.TestCase):
|
||||
|
||||
|
||||
def test_OK_LongFrame_1phase_electric(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOkLongFrame_1phase_electric)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
|
||||
@ -57,22 +78,36 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "FIN")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.version, 36)
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Electrity")
|
||||
self.assertEqual(telegram.frame.comment, "Dishwasher")
|
||||
self.assertEqual(telegram.frame.dib[0].comment, "Energy total")
|
||||
self.assertEqual(telegram.frame.dib[0].rawValue, 201)
|
||||
self.assertEqual(telegram.frame.dib[0].value, 2010)
|
||||
self.assertEqual(telegram.frame.dib[3].comment, "Current")
|
||||
self.assertEqual(telegram.frame.dib[3].rawValue, 3)
|
||||
v = telegram.frame.dib[3].value
|
||||
self.assertBetween(v, 0.2999, 0.3001)
|
||||
|
||||
def test_OK_LongFrame_1phase_electric_wrong_medium(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputNOkLongFrame_1phase_electric_wrong_medium)
|
||||
with self.assertRaises(MeterbusLibExceptions.MediumConversionException):
|
||||
telegram.parse()
|
||||
|
||||
def test_OK_LongFrame_1phase_electric_wrong_signature(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputNOkLongFrame_1phase_electric_wrong_signature)
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidFrameException):
|
||||
telegram.parse()
|
||||
|
||||
def test_OK_LongFrame_1phase_electric_device_items_wrong(self):
|
||||
telegram = MeterbusLib.Telegram(self.brokenDevices)
|
||||
telegram.fromHexString(self.inputOkLongFrame_1phase_electric)
|
||||
with self.assertRaises(MeterbusLibExceptions.DeviceItemsMismatchException):
|
||||
telegram.parse()
|
||||
|
||||
|
||||
def test_OK_LongFrame_3phase_electric(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOkLongFrame_3phase_electric)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
|
||||
@ -83,9 +118,11 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "FIN")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.version, 22)
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Electrity")
|
||||
self.assertEqual(telegram.frame.comment, "3 Phase Electric")
|
||||
|
||||
|
||||
def test_OK_LongFrame_water(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOkLongFrame_water)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
|
||||
@ -99,7 +136,7 @@ class TestFrameParsing(unittest.TestCase):
|
||||
|
||||
|
||||
def test_OK_LongFrame_gas(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOkLongFrame_gas)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
|
||||
@ -112,7 +149,7 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Gas")
|
||||
|
||||
def test_OK_LongFrame_thermometer(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOkLongFrame_thermometer)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
|
||||
@ -125,13 +162,13 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Other")
|
||||
|
||||
def test_OK_SingleCharacter(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOkSingleCharacter)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.SingleCharacter)
|
||||
|
||||
def test_OK_Shortframe(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOkShortframe)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.ShortFrame)
|
||||
@ -139,7 +176,7 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.address, 2);
|
||||
|
||||
def test_OK_Controlframe(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputOKControlframe)
|
||||
telegram.parse()
|
||||
self.assertIsInstance(telegram.frame, MeterbusLib.ControlFrame)
|
||||
@ -148,31 +185,31 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.ciField, 3);
|
||||
|
||||
def test_NOk_Shortframe_checksum_failure(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputNOkShortframe_checksum_failure)
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidChecksumException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_LongFrame_thermometer_checksum_failure(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputNOkLongFrame_thermometer_checksum_failure)
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidChecksumException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_Controlframe_wrong_stopcode(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputNOKControlframe_wrong_stopcode)
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidStopCharException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_Controlframe_wrong_secondlength(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputNOKControlframe_wrong_secondlength)
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidSecondLengthException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_wrong_startcode(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram = MeterbusLib.Telegram(self.devices)
|
||||
telegram.fromHexString(self.inputNOk_wrong_startcode)
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidStartCharException):
|
||||
telegram.parse()
|
||||
|
2
test2.py
2
test2.py
@ -30,7 +30,7 @@ inputOkLongFrame_water = "68 46 46 68 08 30 72 45 71 43 00 24 23 25 07 F6 00 00
|
||||
inputOkLongFrame_gas = "68 56 56 68 08 40 72 43 60 52 00 77 04 14 03 FF 10 00 00 0C 78 76 03 01 10 0D 7C 08 44 49 20 2E 74 73 75 63 0A 30 30 30 30 30 30 30 30 30 30 04 6D 06 0E EB 16 02 7C 09 65 6D 69 74 20 2E 74 61 62 A3 09 04 13 98 AE 04 00 04 93 7F 4E 01 00 00 44 13 FC A5 04 00 0F 01 00 1F 51 16"
|
||||
|
||||
telegram = MeterbusLib.Telegram(devices)
|
||||
telegram.fromHexString(inputOkLongFrame_thermometer)
|
||||
telegram.fromHexString(inputOkLongFrame_1phase_electric)
|
||||
telegram.parse()
|
||||
|
||||
print(json.dumps(telegram.getJSON(), indent=2))
|
||||
|
Loading…
x
Reference in New Issue
Block a user