frame parsing
This commit is contained in:
42
test1.py
42
test1.py
@ -7,12 +7,15 @@ Created on 11.06.2015
|
||||
import unittest
|
||||
import MeterbusLib
|
||||
import MeterbusTypeConversion
|
||||
import MeterbusLibExceptions
|
||||
|
||||
|
||||
class TestFrameParsing(unittest.TestCase):
|
||||
def setUp(self):
|
||||
# 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"
|
||||
self.inputNOkLongFrame_1phase_electric_wrong_signature = "68 38 38 68 08 53 72 17 00 13 00 2E 19 24 02 D6 00 00 01 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 21 16"
|
||||
|
||||
# electricity
|
||||
self.inputOkLongFrame_3phase_electric = "68 92 92 68 08 50 72 81 14 01 11 2E 19 16 02 88 00 00 00 8C 10 04 58 43 86 00 8C 11 04 58 43 86 00 8C 20 04 00 00 00 00 8C 21 04 00 00 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 5A 00 02 AC FF 01 D2 00 82 40 AC FF 01 00 00 02 FD C9 FF 02 DF 00 02 FD DB FF 02 0F 00 02 AC FF 02 21 00 82 40 AC FF 02 FD FF 02 FD C9 FF 03 E3 00 02 FD DB FF 03 04 00 02 AC FF 03 02 00 82 40 AC FF 03 F4 FF 02 FF 68 00 00 02 AC FF 00 F5 00 82 40 AC FF 00 F1 FF 01 FF 13 00 F4 16"
|
||||
@ -51,6 +54,22 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.address, 0x53);
|
||||
self.assertEqual(telegram.frame.ciField, 0x72);
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.identNr, "17001300")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "FIN")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.version, 36)
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Electrity")
|
||||
|
||||
def test_OK_LongFrame_1phase_electric_wrong_medium(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
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.fromHexString(self.inputNOkLongFrame_1phase_electric_wrong_signature)
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidFrameException):
|
||||
telegram.parse()
|
||||
|
||||
|
||||
def test_OK_LongFrame_3phase_electric(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
@ -61,6 +80,9 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.address, 0x50);
|
||||
self.assertEqual(telegram.frame.ciField, 0x72);
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.identNr, "81140111")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "FIN")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.version, 22)
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Electrity")
|
||||
|
||||
def test_OK_LongFrame_water(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
@ -71,6 +93,10 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.address, 0x30);
|
||||
self.assertEqual(telegram.frame.ciField, 0x72);
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.identNr, "45714300")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "HYD")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.version, 37)
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Water")
|
||||
|
||||
|
||||
def test_OK_LongFrame_gas(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
@ -81,6 +107,9 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.address, 0x40);
|
||||
self.assertEqual(telegram.frame.ciField, 0x72);
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.identNr, "43605200")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "ACW")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.version, 20)
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Gas")
|
||||
|
||||
def test_OK_LongFrame_thermometer(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
@ -91,6 +120,9 @@ class TestFrameParsing(unittest.TestCase):
|
||||
self.assertEqual(telegram.frame.address, 0x21);
|
||||
self.assertEqual(telegram.frame.ciField, 0x72);
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.identNr, "00000000")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "@@@")
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.version, 1)
|
||||
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Other")
|
||||
|
||||
def test_OK_SingleCharacter(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
@ -118,31 +150,31 @@ class TestFrameParsing(unittest.TestCase):
|
||||
def test_NOk_Shortframe_checksum_failure(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram.fromHexString(self.inputNOkShortframe_checksum_failure)
|
||||
with self.assertRaises(MeterbusLib.InvalidChecksumException):
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidChecksumException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_LongFrame_thermometer_checksum_failure(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram.fromHexString(self.inputNOkLongFrame_thermometer_checksum_failure)
|
||||
with self.assertRaises(MeterbusLib.InvalidChecksumException):
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidChecksumException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_Controlframe_wrong_stopcode(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram.fromHexString(self.inputNOKControlframe_wrong_stopcode)
|
||||
with self.assertRaises(MeterbusLib.InvalidStopCharException):
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidStopCharException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_Controlframe_wrong_secondlength(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram.fromHexString(self.inputNOKControlframe_wrong_secondlength)
|
||||
with self.assertRaises(MeterbusLib.InvalidSecondLengthException):
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidSecondLengthException):
|
||||
telegram.parse()
|
||||
|
||||
def test_NOk_wrong_startcode(self):
|
||||
telegram = MeterbusLib.Telegram()
|
||||
telegram.fromHexString(self.inputNOk_wrong_startcode)
|
||||
with self.assertRaises(MeterbusLib.InvalidStartCharException):
|
||||
with self.assertRaises(MeterbusLibExceptions.InvalidStartCharException):
|
||||
telegram.parse()
|
||||
|
||||
def test_bcd(self):
|
||||
|
Reference in New Issue
Block a user