diff options
Diffstat (limited to 'dexcom_reader/dexcom_dumper.py')
-rwxr-xr-x | dexcom_reader/dexcom_dumper.py | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/dexcom_reader/dexcom_dumper.py b/dexcom_reader/dexcom_dumper.py index be5b0d8..e7db00e 100755 --- a/dexcom_reader/dexcom_dumper.py +++ b/dexcom_reader/dexcom_dumper.py | |||
@@ -4,6 +4,7 @@ import readdata | |||
4 | import sys | 4 | import sys |
5 | import json | 5 | import json |
6 | import traceback | 6 | import traceback |
7 | from devicer import simple_devicer | ||
7 | # import requests # As this takes SEVEN SECONDS, it's delayed until needed | 8 | # import requests # As this takes SEVEN SECONDS, it's delayed until needed |
8 | from sys import stdout, stderr | 9 | from sys import stdout, stderr |
9 | from datetime import timedelta, datetime | 10 | from datetime import timedelta, datetime |
@@ -206,6 +207,64 @@ def poll_remote(): | |||
206 | else: | 207 | else: |
207 | sleep_verbose(10) | 208 | sleep_verbose(10) |
208 | 209 | ||
210 | def poll_remote_redux(): | ||
211 | (n, r) = remote_update('EGV_DATA') | ||
212 | if n is None: | ||
213 | return 10 | ||
214 | else: | ||
215 | now = dr.ReadSystemTime() | ||
216 | if n == 0: | ||
217 | send_ping(now) | ||
218 | if r: | ||
219 | for t in ['METER_DATA', 'INSERTION_TIME', 'USER_EVENT_DATA']: | ||
220 | # TODO: track how long this takes & adjust sleep accordingly | ||
221 | try: | ||
222 | remote_update(t) | ||
223 | except: | ||
224 | traceback.print_exc() | ||
225 | next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() | ||
226 | return max(10, next_reading) | ||
227 | else: | ||
228 | return 10 | ||
229 | |||
230 | def poll_redux(): | ||
231 | poll = poll_remote_redux | ||
232 | |||
233 | dexcom_g5_product = '22a3/47/100' | ||
234 | |||
235 | def is_dexcom_g5(dev): | ||
236 | try: return dev.parent.get('PRODUCT') == dexcom_g5_product | ||
237 | except: return False | ||
238 | |||
239 | devicer = simple_devicer('tty', is_dexcom_g5) | ||
240 | |||
241 | while True: | ||
242 | try: | ||
243 | print_verbose("Waiting for device.") | ||
244 | if not devicer.wait_add(600): | ||
245 | continue | ||
246 | print_verbose("Device found.") | ||
247 | |||
248 | global dr | ||
249 | if dr: | ||
250 | dr.Disconnect() | ||
251 | dr = readdata.DexcomG5(devicer.device.device_node) | ||
252 | |||
253 | print("Device opened.") | ||
254 | while devicer.have(): | ||
255 | print_verbose("Polling device.") | ||
256 | try: | ||
257 | sleeptime = poll() | ||
258 | except: | ||
259 | sleeptime = 10 | ||
260 | |||
261 | if devicer.wait_remove(sleeptime): | ||
262 | print_verbose("Device unplugged.") | ||
263 | dr.Disconnect() | ||
264 | dr = None | ||
265 | except KeyboardInterrupt: | ||
266 | break | ||
267 | |||
209 | def poll_stdout(): | 268 | def poll_stdout(): |
210 | (r, now) = read_recent_egv_data() | 269 | (r, now) = read_recent_egv_data() |
211 | connected(True) | 270 | connected(True) |
@@ -343,5 +402,5 @@ def toJSON(o): | |||
343 | {"dump_everything": dump_everything, | 402 | {"dump_everything": dump_everything, |
344 | "dump_cgm": dump_cgm, | 403 | "dump_cgm": dump_cgm, |
345 | "poll": poll, | 404 | "poll": poll, |
346 | "test": test, | 405 | "test": poll_redux, |
347 | }[command]() | 406 | }[command]() |