From 2f697eb803f523380f95cd18d8f1fef85afa73ef Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Sun, 19 May 2019 19:47:28 +0100 Subject: fsprecisionneo: Scale ketone readings to mmol/l The FreeStyle Optimum Neo reports ketones in using the same unit as FreeStyle Libre. Move the conversion function from fslibre.py to freestyle.py to facilitate sharing and do the right conversion in fsprecisionneo.py. --- glucometerutils/drivers/fslibre.py | 14 +------------- glucometerutils/drivers/fsprecisionneo.py | 8 +++++++- glucometerutils/support/freestyle.py | 10 ++++++++++ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/glucometerutils/drivers/fslibre.py b/glucometerutils/drivers/fslibre.py index 5031a04..85bfdab 100644 --- a/glucometerutils/drivers/fslibre.py +++ b/glucometerutils/drivers/fslibre.py @@ -101,18 +101,6 @@ def _extract_timestamp(parsed_record, prefix=''): parsed_record[prefix + 'second']) -def _convert_ketone_unit(raw_value): - """Convert raw ketone value as read in the device to its value in mmol/L. - - As per - https://flameeyes.github.io/glucometer-protocols/abbott/freestyle-libre.html - this is actually not using any mg/dL→mmol/L conversion, but rather the same - as the meter uses for blood glucose. - - """ - return raw_value // 18 - - def _parse_arresult(record): """Takes an array of string fields as input and parses it into a Reading.""" @@ -160,7 +148,7 @@ def _parse_arresult(record): measure_method = common.MeasurementMethod.BLOOD_SAMPLE cls = common.KetoneReading # automatically convert the raw value in mmol/L - value = _convert_ketone_unit(parsed_record['value']) + value = freestyle.convert_ketone_unit(parsed_record['value']) else: # unknown reading return None diff --git a/glucometerutils/drivers/fsprecisionneo.py b/glucometerutils/drivers/fsprecisionneo.py index b818f8f..15be65c 100644 --- a/glucometerutils/drivers/fsprecisionneo.py +++ b/glucometerutils/drivers/fsprecisionneo.py @@ -89,4 +89,10 @@ class Device(freestyle.FreeStyleHidDevice): raw_reading.year + 2000, raw_reading.month, raw_reading.day, raw_reading.hour, raw_reading.minute) - yield cls(timestamp, raw_reading.value) + if record and record[0] == _TYPE_KETONE_READING: + value = freestyle.convert_ketone_unit(raw_reading.value) + else: + value = raw_reading.value + + yield cls(timestamp, value) + diff --git a/glucometerutils/support/freestyle.py b/glucometerutils/support/freestyle.py index 816af81..d18a81f 100644 --- a/glucometerutils/support/freestyle.py +++ b/glucometerutils/support/freestyle.py @@ -64,6 +64,16 @@ def _verify_checksum(message, expected_checksum_hex): if expected_checksum != calculated_checksum: raise exceptions.InvalidChecksum(expected_checksum, calculated_checksum) +def convert_ketone_unit(raw_value): + """Convert raw ketone value as read in the device to its value in mmol/L. + + As per + https://flameeyes.github.io/glucometer-protocols/abbott/freestyle-libre.html + this is actually not using any mg/dL→mmol/L conversion, but rather the same + as the meter uses for blood glucose. + + """ + return raw_value / 18.0 class FreeStyleHidDevice(hiddevice.HidDevice): """Base class implementing the FreeStyle HID common protocol. -- cgit v1.2.3