Add TCP arguments to console. Implement reconnect logic in protocol.

This commit is contained in:
Johan Bloemberg
2017-01-03 21:27:10 +01:00
parent cdc9e395aa
commit 763237ef1d
2 changed files with 48 additions and 15 deletions

View File

@@ -1,8 +1,9 @@
import argparse
import asyncio
import logging
from functools import partial
from .protocol import create_dsmr_reader
from .protocol import create_dsmr_reader, create_tcp_dsmr_reader
def console():
@@ -11,6 +12,10 @@ def console():
parser = argparse.ArgumentParser(description=console.__doc__)
parser.add_argument('--device', default='/dev/ttyUSB0',
help='port to read DSMR data from')
parser.add_argument('--host', default=None,
help='alternatively connect using TCP host.')
parser.add_argument('--port', default=None,
help='TCP port to use for connection')
parser.add_argument('--version', default='2.2', choices=['2.2', '4'],
help='DSMR version (2.2, 4)')
parser.add_argument('--verbose', '-v', action='count')
@@ -32,7 +37,29 @@ def console():
print(obj.value, obj.unit)
print()
conn = create_dsmr_reader(args.device, args.version, print_callback, loop=loop)
# create tcp or serial connection depending on args
if args.host and args.port:
create_connection = partial(create_tcp_dsmr_reader,
args.host, args.port, args.version,
print_callback, loop=loop)
else:
create_connection = partial(create_dsmr_reader,
args.device, args.version,
print_callback, loop=loop)
loop.create_task(conn)
loop.run_forever()
try:
# connect and keep connected until interrupted by ctrl-c
while True:
# create serial or tcp connection
conn = create_connection()
transport, protocol = loop.run_until_complete(conn)
# wait until connection it closed
loop.run_until_complete(protocol.wait_closed())
# wait 5 seconds before attempting reconnect
loop.run_until_complete(asyncio.sleep(5))
except KeyboardInterrupt:
# cleanup connection after user initiated shutdown
transport.close()
loop.run_until_complete(asyncio.sleep(0))
finally:
loop.close()