Merge pull request #48 from dupondje/fix_pycrc
Include needed PyCRC code
This commit is contained in:
commit
e7164d9af7
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from PyCRC.CRC16 import CRC16
|
from ctypes import c_ushort
|
||||||
|
|
||||||
from dsmr_parser.objects import MBusObject, CosemObject, Telegram
|
from dsmr_parser.objects import MBusObject, CosemObject, Telegram
|
||||||
from dsmr_parser.exceptions import ParseError, InvalidChecksumError
|
from dsmr_parser.exceptions import ParseError, InvalidChecksumError
|
||||||
@ -79,7 +79,7 @@ class TelegramParser(object):
|
|||||||
'incomplete. The checksum and/or content values are missing.'
|
'incomplete. The checksum and/or content values are missing.'
|
||||||
)
|
)
|
||||||
|
|
||||||
calculated_crc = CRC16().calculate(checksum_contents.group(0))
|
calculated_crc = TelegramParser.crc16(checksum_contents.group(0))
|
||||||
expected_crc = int(checksum_hex.group(0), base=16)
|
expected_crc = int(checksum_hex.group(0), base=16)
|
||||||
|
|
||||||
if calculated_crc != expected_crc:
|
if calculated_crc != expected_crc:
|
||||||
@ -91,6 +91,29 @@ class TelegramParser(object):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def crc16(telegram):
|
||||||
|
crc16_tab = []
|
||||||
|
|
||||||
|
for i in range(0, 256):
|
||||||
|
crc = c_ushort(i).value
|
||||||
|
for j in range(0, 8):
|
||||||
|
if (crc & 0x0001):
|
||||||
|
crc = c_ushort(crc >> 1).value ^ 0xA001
|
||||||
|
else:
|
||||||
|
crc = c_ushort(crc >> 1).value
|
||||||
|
crc16_tab.append(hex(crc))
|
||||||
|
|
||||||
|
crcValue = 0x0000
|
||||||
|
|
||||||
|
for c in telegram:
|
||||||
|
d = ord(c)
|
||||||
|
tmp = crcValue ^ d
|
||||||
|
rotated = c_ushort(crcValue >> 8).value
|
||||||
|
crcValue = rotated ^ int(crc16_tab[(tmp & 0x00ff)], 0)
|
||||||
|
|
||||||
|
return crcValue
|
||||||
|
|
||||||
|
|
||||||
class DSMRObjectParser(object):
|
class DSMRObjectParser(object):
|
||||||
"""
|
"""
|
||||||
|
1
setup.py
1
setup.py
@ -12,7 +12,6 @@ setup(
|
|||||||
'pyserial>=3,<4',
|
'pyserial>=3,<4',
|
||||||
'pyserial-asyncio<1',
|
'pyserial-asyncio<1',
|
||||||
'pytz',
|
'pytz',
|
||||||
'PyCRC>=1.2,<2'
|
|
||||||
],
|
],
|
||||||
entry_points={
|
entry_points={
|
||||||
'console_scripts': ['dsmr_console=dsmr_parser.__main__:console']
|
'console_scripts': ['dsmr_console=dsmr_parser.__main__:console']
|
||||||
|
Loading…
Reference in New Issue
Block a user