diff --git a/docs/meshtastic/tunnel.html b/docs/meshtastic/tunnel.html index 115c93b..dd06dbb 100644 --- a/docs/meshtastic/tunnel.html +++ b/docs/meshtastic/tunnel.html @@ -37,6 +37,7 @@ # ncat -e /bin/cat -k -u -l 1235 # ncat -u 10.115.64.152 1235 # ping -c 1 -W 20 10.115.64.152 +# ping -i 30 -W 30 10.115.64.152 # FIXME: use a more optimal MTU diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index 22f2932..2db0f1c 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -16,6 +16,8 @@ import pkg_resources """The command line arguments""" args = None +"""The parser for arguments""" +parser = argparse.ArgumentParser() def onReceive(packet, interface): """Callback invoked when a packet arrives""" @@ -300,9 +302,50 @@ def subscribe(): # pub.subscribe(onNode, "meshtastic.node") -def main(): - """Perform command line meshtastic operations""" - parser = argparse.ArgumentParser() +def common(): + """Shared code for all of our command line wrappers""" + global args + logging.basicConfig(level=logging.DEBUG if args.debug else logging.INFO) + + # Some commands require dest to be set, so we now use destOrAll for more lenient commands + args.destOrAll = args.dest + if not args.destOrAll: + args.destOrAll = "^all" + + if not args.seriallog: + if args.info or args.set or args.seturl or args.setowner or args.setlat or args.setlon or \ + args.settime or \ + args.setch_longslow or args.setch_shortfast or args.setstr or args.setchan or args.sendtext or \ + args.tunnel or args.router != None or args.qr: + args.seriallog = "none" # assume no debug output in this case + else: + args.seriallog = "stdout" # default to stdout + + if args.test: + test.testAll() + else: + if args.seriallog == "stdout": + logfile = sys.stdout + elif args.seriallog == "none": + args.seriallog = None + logging.debug("Not logging serial output") + logfile = None + else: + logging.info(f"Logging serial output to {args.seriallog}") + logfile = open(args.seriallog, 'w+', buffering=1) # line buffering + + subscribe() + if args.ble: + client = BLEInterface(args.ble, debugOut=logfile) + elif args.host: + client = TCPInterface( + args.host, debugOut=logfile, noProto=args.noproto) + else: + client = SerialInterface( + args.port, debugOut=logfile, noProto=args.noproto) + +def initParser(): + global parser, args parser.add_argument( "--port", @@ -409,47 +452,19 @@ def main(): parser.add_argument('--version', action='version', version=f"{pkg_resources.require('meshtastic')[0].version}") - global args args = parser.parse_args() - logging.basicConfig(level=logging.DEBUG if args.debug else logging.INFO) - # Some commands require dest to be set, so we now use destOrAll for more lenient commands - args.destOrAll = args.dest - if not args.destOrAll: - args.destOrAll = "^all" - - if not args.seriallog: - if args.info or args.set or args.seturl or args.setowner or args.setlat or args.setlon or \ - args.settime or \ - args.setch_longslow or args.setch_shortfast or args.setstr or args.setchan or args.sendtext or \ - args.tunnel or args.router != None or args.qr: - args.seriallog = "none" # assume no debug output in this case - else: - args.seriallog = "stdout" # default to stdout - - if args.test: - test.testAll() - else: - if args.seriallog == "stdout": - logfile = sys.stdout - elif args.seriallog == "none": - args.seriallog = None - logging.debug("Not logging serial output") - logfile = None - else: - logging.info(f"Logging serial output to {args.seriallog}") - logfile = open(args.seriallog, 'w+', buffering=1) # line buffering - - subscribe() - if args.ble: - client = BLEInterface(args.ble, debugOut=logfile) - elif args.host: - client = TCPInterface( - args.host, debugOut=logfile, noProto=args.noproto) - else: - client = SerialInterface( - args.port, debugOut=logfile, noProto=args.noproto) +def main(): + """Perform command line meshtastic operations""" + initParser() + common() +def tunnelMain(): + """Run a meshtastic IP tunnel""" + global args + initParser() + args.tunnel = True + common() if __name__ == "__main__": main() diff --git a/meshtastic/tunnel.py b/meshtastic/tunnel.py index 57ac7c9..c6eebca 100644 --- a/meshtastic/tunnel.py +++ b/meshtastic/tunnel.py @@ -9,6 +9,7 @@ # ncat -e /bin/cat -k -u -l 1235 # ncat -u 10.115.64.152 1235 # ping -c 1 -W 20 10.115.64.152 +# ping -i 30 -W 30 10.115.64.152 # FIXME: use a more optimal MTU diff --git a/setup.py b/setup.py index c5b6d85..3e40f32 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ with open("README.md", "r") as fh: # This call to setup() does all the work setup( name="meshtastic", - version="1.1.26", + version="1.1.27", description="Python API & client shell for talking to Meshtastic devices", long_description=long_description, long_description_content_type="text/markdown", @@ -29,11 +29,15 @@ setup( include_package_data=True, install_requires=["pyserial>=3.4", "protobuf>=3.13.0", "pypubsub>=4.0.3", "dotmap>=1.3.14", "pexpect>=4.6.0", "pyqrcode>=1.2.1", - "pygatt>=4.0.5", "pytap2>=2.0.0"], + "pygatt>=4.0.5"], + extras_require={ + 'tunnel': ["pytap2>=2.0.0"] + }, python_requires='>=3.6', entry_points={ "console_scripts": [ - "meshtastic=meshtastic.__main__:main" + "meshtastic=meshtastic.__main__:main", + "mesh-tunnel=meshtastic.__main__:tunnelMain [tunnel]" ] }, )