From 1cdd4d1d8a1407ac92ae77d50283a4f3c23191d9 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Fri, 13 Jan 2017 07:43:02 +0000 Subject: Output dexcom connection status Also output extra debug info with command line option '-v' --- dexcom_reader/dexcom_dumper.py | 60 +++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/dexcom_reader/dexcom_dumper.py b/dexcom_reader/dexcom_dumper.py index 4a14762..9708f36 100644 --- a/dexcom_reader/dexcom_dumper.py +++ b/dexcom_reader/dexcom_dumper.py @@ -1,7 +1,8 @@ import constants import readdata -from sys import stdout -from datetime import timedelta +import sys +from sys import stdout, stderr +from datetime import timedelta, datetime from time import sleep from optparse import OptionParser @@ -17,10 +18,12 @@ parser.add_option("-a", "--all", action="store_const", dest="command", const="d parser.add_option("-p", "--poll", action="store_const", dest="command", const="poll", help="poll for latest CGM record") parser.add_option("-n", type="int", dest="num_records", default=DEFAULT_PAGE_COUNT, help="number of pages of CGM records to display") +parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="verbosity (currently for debugging)") (options, args) = parser.parse_args() command = options.command or "dump_cgm" +VERBOSE = options.verbose def get_dexcom_reader(): if options.g5: @@ -56,33 +59,66 @@ def recent(t): now = dr.ReadSystemTime() return t.system_time > now - timedelta(minutes=5) +def print_verbose(s): + global VERBOSE + if VERBOSE: + stderr.write('%s\n' % str(s)) + def read_recent_egv_data(): - try: - r = dr.ReadRecords('EGV_DATA', options.num_records)[-1] - if recent(r) and not r.is_special and not r.display_only: - return r - else: - return None - except: - return None + try: + r = dr.ReadRecords('EGV_DATA', options.num_records)[-1] + if recent(r) and not r.is_special and not r.display_only: + return r + else: + return None + except ValueError as v: + if (v.args[0] == 'Attempting to use a port that is not open'): + return False + else: + print_verbose(v) + return None + except: + print_verbose(sys.exc_info) + return None def format_times(now, stamp): diff = (stamp - now).total_seconds() operand = '-' if diff < 0 else '+' # should always be - return '%s %s %d' % (now.strftime('%s'), operand, abs(diff)) +def print_localtime(str): + print '%s (system): %s' % (datetime.now().strftime('%s'), str) + +CONNECTED = None +def connected(state): + global CONNECTED + if (state == CONNECTED): + return + else: + CONNECTED = state + print_localtime('dexcom receiver %s connected' % ('is' if state else 'is not')) + +def sleep_verbose(n): + print_verbose('sleep(%d)' % n) + sleep(n) + def poll(): + print_localtime('dexcom_dumper started') while True: r = read_recent_egv_data() if r is None: - sleep(10) + connected(True) + sleep_verbose(10) + elif r is False: + connected(False) + sleep_verbose(10) else: now = dr.ReadSystemTime() print '%s: %s %s' % (format_times(now, r.system_time), r.glucose, r.trend_arrow) stdout.flush() next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() if (next_reading > 0): - sleep(next_reading) + sleep_verbose(next_reading) {"dump_everything": dump_everything, "dump_cgm": dump_cgm, -- cgit v1.2.3