Add asyncio protocol implementation.

This commit is contained in:
Johan Bloemberg
2016-11-21 15:47:29 +01:00
parent f8a3c76c68
commit e3569e0719
6 changed files with 148 additions and 70 deletions

View File

@@ -1,6 +1,8 @@
import argparse
from dsmr_parser.serial import SERIAL_SETTINGS_V2_2, SERIAL_SETTINGS_V4, SerialReader
from dsmr_parser import telegram_specifications
import asyncio
import logging
from .protocol import create_dsmr_reader
def console():
@@ -11,22 +13,26 @@ def console():
help='port to read DSMR data from')
parser.add_argument('--version', default='2.2', choices=['2.2', '4'],
help='DSMR version (2.2, 4)')
parser.add_argument('--verbose', '-v', action='count')
args = parser.parse_args()
settings = {
'2.2': (SERIAL_SETTINGS_V2_2, telegram_specifications.V2_2),
'4': (SERIAL_SETTINGS_V4, telegram_specifications.V4),
}
if args.verbose:
level = logging.DEBUG
else:
level = logging.ERROR
logging.basicConfig(level=level)
serial_reader = SerialReader(
device=args.device,
serial_settings=settings[args.version][0],
telegram_specification=settings[args.version][1],
)
loop = asyncio.get_event_loop()
for telegram in serial_reader.read():
def print_callback(telegram):
"""Callback that prints telegram values."""
for obiref, obj in telegram.items():
if obj:
print(obj.value, obj.unit)
print()
conn = create_dsmr_reader(args.device, args.version, print_callback, loop=loop)
loop.create_task(conn)
loop.run_forever()