def console():
    """Output DSMR data to 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')

    args = parser.parse_args()

    if args.verbose:
        level = logging.DEBUG
    else:
        level = logging.ERROR
    logging.basicConfig(level=level)

    loop = asyncio.get_event_loop()

    def print_callback(telegram):
        """Callback that prints telegram values."""
        for obiref, obj in telegram.items():
            if obj:
                print(obj.value, obj.unit)
        print()

    # 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)

    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()