From 5442d619122d2e00710e21d3f791d966befab8d4 Mon Sep 17 00:00:00 2001 From: Hamish Moffatt Date: Fri, 30 Nov 2018 02:46:38 +0000 Subject: [PATCH 1/3] allow timer to be started and app exited from command line --- holman/holman.py | 2 ++ holmanctl.py | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/holman/holman.py b/holman/holman.py index afb1643..9c5ff84 100644 --- a/holman/holman.py +++ b/holman/holman.py @@ -224,6 +224,8 @@ def stop(self): def characteristic_write_value_succeeded(self, characteristic): self._refresh_state() + if self.listener and characteristic == self._manual_characteristic: + self.listener.timer_written() def characteristic_write_value_failed(self, characteristic, error): self._refresh_state() diff --git a/holmanctl.py b/holmanctl.py index 55b17a1..4f15d5d 100755 --- a/holmanctl.py +++ b/holmanctl.py @@ -29,14 +29,18 @@ def started_disconnecting(self): def disconnect_succeeded(self): self.print("disconnected") + def timer_written(self): + self.print("timer written") + def print(self, string): print("Holman tap timer " + self.tap_timer.mac_address + " " + string) - class TapTimerTestListener(TapTimerPrintListener): - def __init__(self, tap_timer, auto_reconnect=False): + def __init__(self, tap_timer, auto_reconnect=False, auto_start=None, auto_exit=False): super().__init__(tap_timer) self.auto_reconnect = auto_reconnect + self.auto_start = auto_start + self.auto_exit = auto_exit def connect_failed(self, error): super().connect_failed(error) @@ -54,6 +58,21 @@ def disconnect_succeeded(self): tap_timer_manager.stop() sys.exit(0) + def connect_succeeded(self): + super().connect_succeeded() + if self.auto_start is not None: + if self.auto_start == 0: + self.tap_timer.stop() + else: + self.tap_timer.start(self.auto_start) + self.auto_start = None + + def timer_written(self): + super().timer_written() + if self.auto_exit: + self.print('exiting') + tap_timer_manager.stop() + class TapTimerManagerPrintListener(holman.TapTimerManagerListener): def tap_timer_discovered(self, tap_timer): @@ -90,11 +109,31 @@ def main(): metavar='address', type=str, help="Disconnect a Holman tap timer with a given MAC address") + arg_parser.add_argument( + '--run', + default=None, + metavar='MINUTES', + type=int, + help="Run the timer for the specified number of minutes") + arg_parser.add_argument( + '--exit', + action='store_const', + const=True, + default=False, + help="Exit after starting the timer") args = arg_parser.parse_args() global tap_timer_manager tap_timer_manager = holman.TapTimerManager(adapter_name=args.adapter) + if args.exit and args.run is None: + arg_parser.error('--exit can only be used with --run.') + return + + if args.run is not None and not (args.connect or args.auto): + arg_parser.error('--run can only be used with --auto or --connect.') + return + if args.discover: tap_timer_manager.listener = TapTimerManagerPrintListener() tap_timer_manager.start_discovery() @@ -108,14 +147,15 @@ def main(): tap_timer.connect() elif args.auto: tap_timer = holman.TapTimer(mac_address=args.auto, manager=tap_timer_manager) - tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_reconnect=True) + tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_reconnect=True, auto_start=args.run, auto_exit=args.exit) tap_timer.connect() elif args.disconnect: tap_timer = holman.TapTimer(mac_address=args.disconnect, manager=tap_timer_manager) tap_timer.disconnect() return - print("Terminate with Ctrl+C") + if not args.exit: + print("Terminate with Ctrl+C") try: tap_timer_manager.run() except KeyboardInterrupt: From 21ff6bb4799e136122f8ffcfbda1362392cdea53 Mon Sep 17 00:00:00 2001 From: Hamish Moffatt Date: Tue, 4 Dec 2018 14:04:07 +1100 Subject: [PATCH 2/3] add stop command, always auto exit if run/stop passed rather than through explicit command --- holmanctl.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/holmanctl.py b/holmanctl.py index 4f15d5d..3236600 100755 --- a/holmanctl.py +++ b/holmanctl.py @@ -109,31 +109,36 @@ def main(): metavar='address', type=str, help="Disconnect a Holman tap timer with a given MAC address") - arg_parser.add_argument( + + arg_run_group = arg_parser.add_mutually_exclusive_group(required=False) + arg_run_group.add_argument( '--run', default=None, metavar='MINUTES', type=int, help="Run the timer for the specified number of minutes") - arg_parser.add_argument( - '--exit', + arg_run_group.add_argument( + '--stop', action='store_const', const=True, default=False, - help="Exit after starting the timer") + help="Stop the timer") args = arg_parser.parse_args() global tap_timer_manager tap_timer_manager = holman.TapTimerManager(adapter_name=args.adapter) - if args.exit and args.run is None: - arg_parser.error('--exit can only be used with --run.') + if args.run is not None and not (args.connect or args.auto): + arg_parser.error('--run can only be used with --auto or --connect.') return - if args.run is not None and not (args.connect or args.auto): + if args.stop is not None and not (args.connect or args.auto): arg_parser.error('--run can only be used with --auto or --connect.') return + run_time = 0 if args.stop else args.run + auto_exit = run_time is not None + if args.discover: tap_timer_manager.listener = TapTimerManagerPrintListener() tap_timer_manager.start_discovery() @@ -143,18 +148,18 @@ def main(): return elif args.connect: tap_timer = holman.TapTimer(mac_address=args.connect, manager=tap_timer_manager) - tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer) + tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_start=run_time, auto_exit=auto_exit) tap_timer.connect() elif args.auto: tap_timer = holman.TapTimer(mac_address=args.auto, manager=tap_timer_manager) - tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_reconnect=True, auto_start=args.run, auto_exit=args.exit) + tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_reconnect=True, auto_start=run_time, auto_exit=auto_exit) tap_timer.connect() elif args.disconnect: tap_timer = holman.TapTimer(mac_address=args.disconnect, manager=tap_timer_manager) tap_timer.disconnect() return - if not args.exit: + if not auto_exit: print("Terminate with Ctrl+C") try: tap_timer_manager.run() From 99dac8607b714a562472e6774a5c1ad656cf4109 Mon Sep 17 00:00:00 2001 From: Hamish Moffatt Date: Tue, 4 Dec 2018 14:49:09 +1100 Subject: [PATCH 3/3] fix logic for stop command --- holmanctl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/holmanctl.py b/holmanctl.py index 3236600..25a9b12 100755 --- a/holmanctl.py +++ b/holmanctl.py @@ -132,8 +132,8 @@ def main(): arg_parser.error('--run can only be used with --auto or --connect.') return - if args.stop is not None and not (args.connect or args.auto): - arg_parser.error('--run can only be used with --auto or --connect.') + if args.stop and not (args.connect or args.auto): + arg_parser.error('--stop can only be used with --auto or --connect.') return run_time = 0 if args.stop else args.run