Add error handling to async serial.
This commit is contained in:
parent
927a4bc8e7
commit
616db8b1cc
@ -1,8 +1,15 @@
|
|||||||
import serial
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import serial
|
||||||
|
|
||||||
import serial_asyncio
|
import serial_asyncio
|
||||||
|
from dsmr_parser.exceptions import ParseError
|
||||||
from dsmr_parser.parsers import TelegramParser, TelegramParserV2_2
|
from dsmr_parser.parsers import TelegramParser, TelegramParserV2_2
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
SERIAL_SETTINGS_V2_2 = {
|
SERIAL_SETTINGS_V2_2 = {
|
||||||
'baudrate': 9600,
|
'baudrate': 9600,
|
||||||
'bytesize': serial.SEVENBITS,
|
'bytesize': serial.SEVENBITS,
|
||||||
@ -44,7 +51,6 @@ SERIAL_SETTINGS_V4_EVEN = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def is_start_of_telegram(line):
|
def is_start_of_telegram(line):
|
||||||
return line.startswith('/')
|
return line.startswith('/')
|
||||||
|
|
||||||
@ -129,6 +135,11 @@ class AsyncSerialReader(SerialReader):
|
|||||||
telegram.append(line)
|
telegram.append(line)
|
||||||
|
|
||||||
if is_end_of_telegram(line):
|
if is_end_of_telegram(line):
|
||||||
|
try:
|
||||||
|
parsed_telegram = self.telegram_parser.parse(telegram)
|
||||||
# push new parsed telegram onto queue
|
# push new parsed telegram onto queue
|
||||||
queue.put_nowait(self.telegram_parser.parse(telegram))
|
queue.put_nowait(parsed_telegram)
|
||||||
|
except ParseError:
|
||||||
|
logger.exception("failed to parse telegram")
|
||||||
|
|
||||||
telegram = []
|
telegram = []
|
||||||
|
Loading…
Reference in New Issue
Block a user