Do not break when parsing malformed hex strings
This commit is contained in:
parent
0ca167993e
commit
034801e385
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from binascii import a2b_hex, b2a_hex
|
import binascii
|
||||||
from smllib.sml_frame import SmlFrame
|
from smllib.sml_frame import SmlFrame
|
||||||
from smllib.const import OBIS_NAMES, UNITS
|
from smllib.const import OBIS_NAMES, UNITS
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
@ -18,9 +18,18 @@ class TasmotaSMLParser:
|
|||||||
"""Parse a line into a frame"""
|
"""Parse a line into a frame"""
|
||||||
if " : 77 " in input.strip():
|
if " : 77 " in input.strip():
|
||||||
# Remove the spaces and return a bytestring
|
# Remove the spaces and return a bytestring
|
||||||
frame = a2b_hex("".join((input.split(" : ", 1)[1]).split()))
|
try:
|
||||||
|
frame = binascii.a2b_hex("".join((input.split(" : ", 1)[1]).split()))
|
||||||
|
except binascii.Error:
|
||||||
|
self.parse_errors.append(input)
|
||||||
|
return
|
||||||
|
|
||||||
elif input.startswith("77 "):
|
elif input.startswith("77 "):
|
||||||
frame = a2b_hex("".join(input.split()))
|
try:
|
||||||
|
frame = binascii.a2b_hex("".join(input.split()))
|
||||||
|
except binascii.Error:
|
||||||
|
self.parse_errors.append(input)
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
self.parse_errors.append(input)
|
self.parse_errors.append(input)
|
||||||
return
|
return
|
||||||
@ -35,7 +44,7 @@ class TasmotaSMLParser:
|
|||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.obis_errors.append(
|
self.obis_errors.append(
|
||||||
{"frame": frame, "hex": b2a_hex(frame, b" "), "msg": e.args[0]}
|
{"frame": frame, "hex": binascii.b2a_hex(frame, b" "), "msg": e.args[0]}
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
return msgs
|
return msgs
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user