From 1f3de244a446b3bde7232d265da30971d1992455 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Wed, 25 Jan 2017 14:31:09 -0500 Subject: dexcom_dumper: submit polled CGM data via HTTP Each reading is sent as JSON via an HTTP POST request to the host specified via '--http' and to the paths '/bgevent' and '/ping'. Currently, this is blocking and it does not retry after errors. --- dexcom_reader/dexcom_dumper.py | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/dexcom_reader/dexcom_dumper.py b/dexcom_reader/dexcom_dumper.py index bba4d17..e279433 100644 --- a/dexcom_reader/dexcom_dumper.py +++ b/dexcom_reader/dexcom_dumper.py @@ -2,6 +2,7 @@ import constants import readdata import sys import json +import requests from sys import stdout, stderr from datetime import timedelta, datetime from time import sleep @@ -22,6 +23,7 @@ parser.add_option("-n", type="int", dest="num_records", default=DEFAULT_PAGE_COU parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="verbosity (currently for debugging)") parser.add_option("-H", "--human", action="store_true", dest="human", help="print human-readable times") parser.add_option("-j", "--json", action="store_true", dest="json", help="print JSON output") +parser.add_option("--http", type="string", dest="host", help="submit via HTTP") (options, args) = parser.parse_args() @@ -29,6 +31,7 @@ command = options.command or "dump_cgm" VERBOSE = options.verbose HUMAN = options.human JSON = options.json +HOST = options.host def get_dexcom_reader(): if options.g5: @@ -111,15 +114,36 @@ def sleep_verbose(n): print_verbose('sleep(%d)' % n) sleep(n) +def POST(path, json_str): + try: + resp = requests.post(HOST + path, data=json_str, + headers={'Content-type': + 'application/json'}) + return True + except: + return False + +def strftime_JSON(t): + return t.strftime('%FT%T.0Z'); + +def send_ping(now): + if HOST: + POST('/ping', json.dumps(strftime_JSON(now))) + def print_cgm_bg(now, r): - if JSON: - print json.dumps({ - 'current_time': now.strftime('%s'), - 'event_time': r.system_time.strftime('%s'), - 'glucose': r.glucose, - 'trend_arrow': r.trend_arrow, - 'display_only': r.display_only + if HOST or JSON: + json_str = json.dumps({ + 'bgeEventTime': strftime_JSON(r.system_time), + 'bgeGlucose': r.glucose, + 'bgeTrendArrow': r.trend_arrow.replace('45_', 'DIAGONAL_', 1), + 'bgeDisplayOnly': r.display_only }) + if HOST: + POST('/bgevent', json_str) + send_ping(now) + return + if JSON: + print json_str else: print '%s: %s %s' % (format_times(now, r.system_time), r.glucose, r.trend_arrow) stdout.flush() @@ -130,6 +154,9 @@ def poll(): r = read_recent_egv_data() if r is None: connected(True) + if HOST: + now = dr.ReadSystemTime() + send_ping(now) sleep_verbose(10) elif r is False: connected(False) -- cgit v1.2.3