diff options
author | Andrew Cady <d@jerkface.net> | 2017-01-13 07:43:02 +0000 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2017-01-17 14:58:07 +0000 |
commit | 1cdd4d1d8a1407ac92ae77d50283a4f3c23191d9 (patch) | |
tree | a464e6412b891a41d43ff58f8fce86c97054d1e5 | |
parent | 1c7351722dab02b01b4d76565f5b16bdcbd61404 (diff) |
Output dexcom connection status
Also output extra debug info with command line option '-v'
-rw-r--r-- | dexcom_reader/dexcom_dumper.py | 60 |
1 files 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 @@ | |||
1 | import constants | 1 | import constants |
2 | import readdata | 2 | import readdata |
3 | from sys import stdout | 3 | import sys |
4 | from datetime import timedelta | 4 | from sys import stdout, stderr |
5 | from datetime import timedelta, datetime | ||
5 | from time import sleep | 6 | from time import sleep |
6 | 7 | ||
7 | from optparse import OptionParser | 8 | from optparse import OptionParser |
@@ -17,10 +18,12 @@ parser.add_option("-a", "--all", action="store_const", dest="command", const="d | |||
17 | parser.add_option("-p", "--poll", action="store_const", dest="command", const="poll", help="poll for latest CGM record") | 18 | parser.add_option("-p", "--poll", action="store_const", dest="command", const="poll", help="poll for latest CGM record") |
18 | 19 | ||
19 | parser.add_option("-n", type="int", dest="num_records", default=DEFAULT_PAGE_COUNT, help="number of pages of CGM records to display") | 20 | parser.add_option("-n", type="int", dest="num_records", default=DEFAULT_PAGE_COUNT, help="number of pages of CGM records to display") |
21 | parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="verbosity (currently for debugging)") | ||
20 | 22 | ||
21 | (options, args) = parser.parse_args() | 23 | (options, args) = parser.parse_args() |
22 | 24 | ||
23 | command = options.command or "dump_cgm" | 25 | command = options.command or "dump_cgm" |
26 | VERBOSE = options.verbose | ||
24 | 27 | ||
25 | def get_dexcom_reader(): | 28 | def get_dexcom_reader(): |
26 | if options.g5: | 29 | if options.g5: |
@@ -56,33 +59,66 @@ def recent(t): | |||
56 | now = dr.ReadSystemTime() | 59 | now = dr.ReadSystemTime() |
57 | return t.system_time > now - timedelta(minutes=5) | 60 | return t.system_time > now - timedelta(minutes=5) |
58 | 61 | ||
62 | def print_verbose(s): | ||
63 | global VERBOSE | ||
64 | if VERBOSE: | ||
65 | stderr.write('%s\n' % str(s)) | ||
66 | |||
59 | def read_recent_egv_data(): | 67 | def read_recent_egv_data(): |
60 | try: | 68 | try: |
61 | r = dr.ReadRecords('EGV_DATA', options.num_records)[-1] | 69 | r = dr.ReadRecords('EGV_DATA', options.num_records)[-1] |
62 | if recent(r) and not r.is_special and not r.display_only: | 70 | if recent(r) and not r.is_special and not r.display_only: |
63 | return r | 71 | return r |
64 | else: | 72 | else: |
65 | return None | 73 | return None |
66 | except: | 74 | except ValueError as v: |
67 | return None | 75 | if (v.args[0] == 'Attempting to use a port that is not open'): |
76 | return False | ||
77 | else: | ||
78 | print_verbose(v) | ||
79 | return None | ||
80 | except: | ||
81 | print_verbose(sys.exc_info) | ||
82 | return None | ||
68 | 83 | ||
69 | def format_times(now, stamp): | 84 | def format_times(now, stamp): |
70 | diff = (stamp - now).total_seconds() | 85 | diff = (stamp - now).total_seconds() |
71 | operand = '-' if diff < 0 else '+' # should always be - | 86 | operand = '-' if diff < 0 else '+' # should always be - |
72 | return '%s %s %d' % (now.strftime('%s'), operand, abs(diff)) | 87 | return '%s %s %d' % (now.strftime('%s'), operand, abs(diff)) |
73 | 88 | ||
89 | def print_localtime(str): | ||
90 | print '%s (system): %s' % (datetime.now().strftime('%s'), str) | ||
91 | |||
92 | CONNECTED = None | ||
93 | def connected(state): | ||
94 | global CONNECTED | ||
95 | if (state == CONNECTED): | ||
96 | return | ||
97 | else: | ||
98 | CONNECTED = state | ||
99 | print_localtime('dexcom receiver %s connected' % ('is' if state else 'is not')) | ||
100 | |||
101 | def sleep_verbose(n): | ||
102 | print_verbose('sleep(%d)' % n) | ||
103 | sleep(n) | ||
104 | |||
74 | def poll(): | 105 | def poll(): |
106 | print_localtime('dexcom_dumper started') | ||
75 | while True: | 107 | while True: |
76 | r = read_recent_egv_data() | 108 | r = read_recent_egv_data() |
77 | if r is None: | 109 | if r is None: |
78 | sleep(10) | 110 | connected(True) |
111 | sleep_verbose(10) | ||
112 | elif r is False: | ||
113 | connected(False) | ||
114 | sleep_verbose(10) | ||
79 | else: | 115 | else: |
80 | now = dr.ReadSystemTime() | 116 | now = dr.ReadSystemTime() |
81 | print '%s: %s %s' % (format_times(now, r.system_time), r.glucose, r.trend_arrow) | 117 | print '%s: %s %s' % (format_times(now, r.system_time), r.glucose, r.trend_arrow) |
82 | stdout.flush() | 118 | stdout.flush() |
83 | next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() | 119 | next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() |
84 | if (next_reading > 0): | 120 | if (next_reading > 0): |
85 | sleep(next_reading) | 121 | sleep_verbose(next_reading) |
86 | 122 | ||
87 | {"dump_everything": dump_everything, | 123 | {"dump_everything": dump_everything, |
88 | "dump_cgm": dump_cgm, | 124 | "dump_cgm": dump_cgm, |