From 2583527159342baa110ccd90b6913246eedf0be6 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Tue, 1 Dec 2015 03:09:00 +0000 Subject: [PATCH 01/15] 640g onto Nightscout via CareLink --- README.markdown | 2 + Release.md | 8 - Selenium_Upload_Example.html | 71 ++++++++ config.sh | 20 +++ lib/parsers/basal_temp_absolute.js | 55 +++++++ lib/parsers/basal_temp_percent.js | 57 +++++++ lib/parsers/battery.js | 34 ++++ lib/parsers/bolus.js | 35 +++- lib/parsers/cbg.js | 10 +- lib/parsers/index.js | 19 ++- lib/parsers/insulin.js | 35 ++++ lib/parsers/medpredict.js | 41 +++++ lib/parsers/plgm.js | 49 ++++++ lib/parsers/pump_alarms.js | 33 ++++ lib/parsers/sensor_start.js | 35 ++++ lib/parsers/smbg.js | 41 ++--- lib/parsers/wizard.js | 55 +++++-- lib/utils.js | 38 ++++- mmcsv640g.bat | 2 + mmcsv640g.mmmacro | 5 + mmcsv640g.sh | 253 +++++++++++++++++++++++++++++ 21 files changed, 836 insertions(+), 62 deletions(-) delete mode 100644 Release.md create mode 100644 Selenium_Upload_Example.html create mode 100644 config.sh create mode 100644 lib/parsers/basal_temp_absolute.js create mode 100644 lib/parsers/basal_temp_percent.js create mode 100644 lib/parsers/battery.js create mode 100644 lib/parsers/insulin.js create mode 100644 lib/parsers/medpredict.js create mode 100644 lib/parsers/plgm.js create mode 100644 lib/parsers/pump_alarms.js create mode 100644 lib/parsers/sensor_start.js create mode 100644 mmcsv640g.bat create mode 100644 mmcsv640g.mmmacro create mode 100644 mmcsv640g.sh diff --git a/README.markdown b/README.markdown index 83affef..c666d35 100644 --- a/README.markdown +++ b/README.markdown @@ -1,5 +1,7 @@ mmcsv =========== +This is the ORIGINAL README file for Ben West's mmcsv repo. It should all still work if needed, hence I've left this in +Instructions on mmcsv640g will go up soon :-) Scraper and Parser for Medtronic pump, cgb and connected bg meter data. diff --git a/Release.md b/Release.md deleted file mode 100644 index cb37c7c..0000000 --- a/Release.md +++ /dev/null @@ -1,8 +0,0 @@ - -v0.0.3 / 2014-02-27 -================== - - * make basals in desalinate stream match expectations - * Merge pull request #21 from tidepool-org/release/v0.0.2 - - This will help `pool-whisperer` product rate segments correctly. diff --git a/Selenium_Upload_Example.html b/Selenium_Upload_Example.html new file mode 100644 index 0000000..06f7706 --- /dev/null +++ b/Selenium_Upload_Example.html @@ -0,0 +1,71 @@ + + + + + + +Upload_Only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Upload_Only
open/patient/entry.jsp?bhcp=1
typeid=j_usernameYOURUSERNAME
typeid=j_passwordYOURPASSWORD
clickAndWaitid=loginButton
clicklink=Upload Data from My Device
waitForPageToLoad
pause180000180000
clickAndWaitid=toReports
clicklink=Data Export (CSV)
selectWindownull
clickAndWaitcss=#reportPicker11 > span.reportNav_right > #reportNav_button
+ + diff --git a/config.sh b/config.sh new file mode 100644 index 0000000..383fde7 --- /dev/null +++ b/config.sh @@ -0,0 +1,20 @@ +#! /bin/bash +# Initialising Carelink Automation +# Proof of concept ONLY - 640g csv to NightScout +# +# **************************************************************************************** +# USER SPECIFIC Working Directories - Please enter your details here +# **************************************************************************************** +# ExamplePath='/c/Data/Path' +# NB NO SPACES anywhere here, unless you know what you're doing please - Welcome to Shell Scripting :-) +Mmcsv640gPath='/c/Users/matt/Nightscout/csv/mmcsv' #Installation Directory for mmscv640g stack +CSVDataPath='/c/Users/matt/AutoCSV' # The directory you want to throw all the data around in +DownloadPath='/c/Users/matt/Downloads' # Where your CSV file downloaded from CareLink will appear (without any IMPORTANT CSV files in it!) +NodejsPath='/c/Program Files/nodejs' # Where Nodejs installed on your system +MousePath='/c/Users/matt/Nightscout' #Where MiniMouseMacro is installed +# **************************************************************************************** +# USER SPECIFIC Variables - Please enter your values here +# **************************************************************************************** +api_secret_hash='2ce212ef676099da17ec5aff64db0c83bf3f7b4f' # This is the SHA-1 Hash of your API-SECRET string - eg "ASANEXAMPLE1" is transformed into... +your_nightscout='https://yourwebsite.azurewebsites.net' #'https://something.azurewebsites.net' +gap_mins=10 # time between CSV uploads (roughly). Suggest betweem 5 and 10 minutes and always start higher \ No newline at end of file diff --git a/lib/parsers/basal_temp_absolute.js b/lib/parsers/basal_temp_absolute.js new file mode 100644 index 0000000..d6d887a --- /dev/null +++ b/lib/parsers/basal_temp_absolute.js @@ -0,0 +1,55 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + //'Temp Basal Start': { bg: true, duration: true, percent: true, absolute: true } + // 'Temp Basal End': { bg: true} + // Adapted to push in temporary basals + // Requires careportal plugin in Nightscout + // Currently just picking out manual temp basals, not smartguard (PLGM) - see plgm.js + // eventTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ' + // Note Temp Basal event type (not start / end) + // Raw Values are ChangeProgrammedTempBasalPercent at start / on + // Raw Values are ChangeTempBasalPercent at off /cancelation + // Absolute change only in this script + + var details = utils.pluck(row, ['Raw-Type', 'Timestamp']); + var value = details['Raw-Type']; + + var values = utils.details(utils.select(row, 'Raw-Values') || ''); + + if (value == 'ChangeProgrammedTempBasal') { + var data = { + value: value, + eventType: 'Temp Basal', + duration: parseInt(values.DURATION)/(60.*1000.), + absolute: parseFloat(values.RATE), + enteredBy: 'CSV', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + } + else { + var data = { + value: value, + eventType: 'Temp Basal', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; + + return callback(null, data); + } + + function isValid (data) { + return data.value || false; + } + + var pattern = /ChangeProgrammedTempBasal|ChangeTempBasal/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; + +} diff --git a/lib/parsers/basal_temp_percent.js b/lib/parsers/basal_temp_percent.js new file mode 100644 index 0000000..51d92f4 --- /dev/null +++ b/lib/parsers/basal_temp_percent.js @@ -0,0 +1,57 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + //'Temp Basal Start': { bg: true, duration: true, percent: true, absolute: true } + // 'Temp Basal End': { bg: true} + // Adapted to push in temporary basals + // Requires careportal plugin in Nightscout + // Currently just picking out manual temp basals, not smartguard (PLGM) - see plgm.js + // eventTime: 'hh:mm', 'YYYY-MM-DDTHH:mm:ss.SSSZ' + // Medtronic % change is % of original ie 0% = 0units, 150% = 1.5 units / hr on 1.0 unit/hr basal + // Nightscout % change is % change ie 0% = 1unit/hr (no change), -100% = 0 units/hr; convert from Medtronic to NS by -100 + // Note Temp Basal event type (not start / end) + // Raw Values are ChangeProgrammedTempBasalPercent at start / on + // Raw Values are ChangeTempBasalPercent at off /cancelation + // Percent change only in this script + + var details = utils.pluck(row, ['Raw-Type', 'Timestamp']); + var value = details['Raw-Type']; + + var values = utils.details(utils.select(row, 'Raw-Values') || ''); + + if (value == 'ChangeProgrammedTempBasalPercent') { + var data = { + value: value, + eventType: 'Temp Basal', + duration: parseInt((values.DURATION)/(60.*1000.)), + percent: parseInt(values.PERCENT_OF_RATE - 100), + enteredBy: 'CSV', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + } + else { + var data = { + value: value, + eventType: 'Temp Basal', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; + + return callback(null, data); + } + + function isValid (data) { + return data.value || false; + } + + var pattern = /ChangeProgrammedTempBasalPercent|ChangeTempBasalPercent/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; + +} diff --git a/lib/parsers/battery.js b/lib/parsers/battery.js new file mode 100644 index 0000000..f496d53 --- /dev/null +++ b/lib/parsers/battery.js @@ -0,0 +1,34 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + // Dummy - Not used at the mo... + + // eventTime: 'hh:mm', 'YYYY-MM-DDTHH:mm:sssZ' + + var details = utils.pluck(row, ['Prime Type', 'Timestamp']); + var value = details['Prime Type']; + + if (value == 'Fill Canula') { + var data = { + value: value, + eventType: 'Insulin Change', + enteredBy: 'CSV', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; + + return callback(null, data); + } + + function isValid (data) { + return data.value || false; + } + + var pattern = /Prime/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; +} diff --git a/lib/parsers/bolus.js b/lib/parsers/bolus.js index f6b842c..7b52ee1 100644 --- a/lib/parsers/bolus.js +++ b/lib/parsers/bolus.js @@ -2,6 +2,17 @@ module.exports = function configure (utils) { function exists (d) { return d; } function lower (d) { return d.toLowerCase( ); } +// CarePortal adjustments +// Bolus will handle insulin delivery ONLY +// Wizard will handle planned delivery, carbs and estimate +// ie both wizard and bolus need to be called +// eventType = ("Correction Bolus"), "Meal Bolus", ("Snack Bolus") +// eventTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ' +// bg, carbs not used here! +// insulin used +// notes used to record if all planned bolus was delivered (or cancelled eg due to PLGM) - CHECK THIS ON THE PUMP OF COURSE! +// rest are left for info and possible future use + function parse (row, callback) { var keys = [ 'Bolus Type', 'Timestamp', 'Raw-Values', 'Raw-Upload ID', 'Index', 'Raw-Device Type' ]; @@ -11,17 +22,33 @@ module.exports = function configure (utils) { var details = utils.details(fields['Raw-Values'] || ''); var delivered = details.AMOUNT; var programmed = details.PROGRAMMED_AMOUNT; - var duration = details.DURATION; + var gap_value = (programmed - delivered).toFixed(3); // ie to capture if anything was lost in eg pump suspend or other pump error... + var gap_message = "Delivered"; + if (gap_value > 0) { + gap_message = gap_value.toString() + "U CANCELLED"; + } + var duration = details.DURATION; + duration_mins = (duration / 60000.).toFixed(); // in minutes + var enteredText = 'Now'; + if (lower(fields['Bolus Type'] || '') == 'dual/square') { + enteredText = (duration_mins).toString() + "mins ago"; + } var data = { value: delivered, - bolus: parseFloat(delivered), + insulin: parseFloat(delivered), programmed: parseFloat(programmed), type: 'bolus', subType: lower(fields['Bolus Type'] || ''), - deviceTime: utils.reformatISO(fields.Timestamp) + eventType: 'Meal Bolus', + enteredBy: enteredText, + notes: gap_message, + dateString: utils.reformatISO(fields.Timestamp), + created_at: utils.reformatCPTime(fields.Timestamp), + date: utils.reformatDate(fields.Timestamp) + }; if (duration) { - data.duration = duration; + data.duration = parseInt(duration_mins); } if (details.IS_DUAL_COMPONENT === 'true') { if (data.subType == 'dual/square') { diff --git a/lib/parsers/cbg.js b/lib/parsers/cbg.js index 070c744..e4d83fd 100644 --- a/lib/parsers/cbg.js +++ b/lib/parsers/cbg.js @@ -1,12 +1,16 @@ module.exports = function configure (utils) { + // changed cbg to sgv for NS compatibility + // changed Devicetime to dateString + // added date function parse (row, callback) { var o = utils.pluck(row, ['Sensor Glucose (mg/dL)', 'Timestamp']); var value = o['Sensor Glucose (mg/dL)']; var data = { value: value, - cbg: parseInt(value), - type: 'cbg', - deviceTime: utils.reformatISO(o['Timestamp']) + sgv: parseInt(value), + type: 'sgv', + dateString: utils.reformatISO(o['Timestamp']), + date: utils.reformatDate(o['Timestamp']) }; return callback(null, data); diff --git a/lib/parsers/index.js b/lib/parsers/index.js index 54a54f6..17f0ab1 100644 --- a/lib/parsers/index.js +++ b/lib/parsers/index.js @@ -2,6 +2,15 @@ var es = require('event-stream'); // explicitly require each parser module, for the benefit of tools like // browserify +// Added plgm (predicted low glucose management, Smartguard) +// Added basal_temp_percent +// Added basal_temp_absolute +// Added insulin (change) +// Added sensor_start +// Added battery (pump battery) +// Added medpredict (Medtronic Predicted Value + 30 mins) +// Added pump_alarms + var parsers = { smbg: require('./smbg') , cbg: require('./cbg') @@ -9,9 +18,17 @@ var parsers = { , carbs: require('./carbs') , basal: require('./basal') , wizard: require('./wizard') + , plgm: require('./plgm') + , basal_temp_percent: require('./basal_temp_percent') + , basal_temp_absolute: require('./basal_temp_absolute') + , insulin: require('./insulin') + , sensor_start: require('./sensor_start') + , battery: require('./battery') + , medpredict: require('./medpredict') + , pump_alarms: require('./pump_alarms') }; -var TYPES = ['smbg', 'cbg', 'bolus', 'carbs', 'basal', 'wizard' ]; +var TYPES = ['smbg', 'cbg', 'bolus', 'carbs', 'basal', 'wizard', 'plgm', 'basal_temp_percent', 'basal_temp_absolute', 'insulin', 'sensor_start', 'battery','medpredict', 'pump_alarms']; function init ( ) { var stream = es.pipeline(es.split(), es.map(iter)); function iter (data, callback) { diff --git a/lib/parsers/insulin.js b/lib/parsers/insulin.js new file mode 100644 index 0000000..1d135de --- /dev/null +++ b/lib/parsers/insulin.js @@ -0,0 +1,35 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + // Logs change of insulin + // Requires careportal plugin in Nightscout + + // eventTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ' + + var details = utils.pluck(row, ['Prime Type', 'Timestamp']); + var value = details['Prime Type']; + + if (value == 'Fill Cannula') { + var data = { + value: value, + eventType: 'Site Change', + enteredBy: 'CSV', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; + + return callback(null, data); + } + + function isValid (data) { + return data.value || false; + } + + var pattern = /Prime/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; +} diff --git a/lib/parsers/medpredict.js b/lib/parsers/medpredict.js new file mode 100644 index 0000000..f239e4a --- /dev/null +++ b/lib/parsers/medpredict.js @@ -0,0 +1,41 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + // Place Medtronic's Predicted SG value in mmol/L (I know, I know...) to NS as a notes + // placing 5 minute note, 25 minutes in advance (so that it's visible) + // should represent Medtronic's estimate of SG in 30 minutes time post Timestamp + // Requires careportal plugin in Nightscout + // eventTime: 'hh:mm', 'YYYY-MM-DDTHH:mm:ss.SSSZ' + + var moment = require('moment'); + var fields = utils.pluck(row, ['Raw-Values', 'Timestamp']); + var details = utils.details(fields['Raw-Values'] || ''); + var predicted_mgdl = details.PREDICTED_SENSOR_GLUCOSE_AMOUNT; + predicted_value = (predicted_mgdl / 18.1).toFixed(1); + var current_date = utils.reformatDate(fields['Timestamp']); + new_date = current_date + 25.*60. * 1000.; + var new_m = moment(new_date); + var data = { + value: predicted_mgdl, // in mg/dL + eventType: 'Note', + enteredBy: 'CSV', + duration: 5, + notes: predicted_value.toString(), // Predicted Value in mmol/L + dateString: new_m.format('YYYY-MM-DDTHH:mm:ss'), + created_at: new_m.format('YYYY-MM-DDTHH:mm:ss.SSSZ'), + date: new_date + }; + + return callback(null, data); + } + + function isValid (data) { + return (!isNaN(data.value)) || false; + } + + var pattern = /GlucoseSensorData/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; +} diff --git a/lib/parsers/plgm.js b/lib/parsers/plgm.js new file mode 100644 index 0000000..3342119 --- /dev/null +++ b/lib/parsers/plgm.js @@ -0,0 +1,49 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + //'Temp Basal Start': { bg: true, duration: true, percent: true, absolute: true } + // , 'Temp Basal End': { bg: true} + // Adapted to push in temporary basals + // Requires careportal plugin in Nightscout + // Currently just picking out smartguard (PLGM) OR any other reasons for suspend eg battery, reservoir... + // eventTime: 'hh:mm', 'YYYY-MM-DDTHH:mm:ss.SSSZ' + // Note Temp Basal event type (not start / end) + + var details = utils.pluck(row, ['Suspend', 'Timestamp']); + var value = details['Suspend']; + + if (value == 'Resume') { + var data = { + value: value, + eventType: 'Temp Basal', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + } + else { + var data = { + value: value, + eventType: 'Temp Basal', + duration: 120, + absolute: 0, + enteredBy: 'PLGM', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; + + return callback(null, data); + } + + function isValid (data) { + return data.value || false; + } + + var pattern = /ChangeSuspendState/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; +} diff --git a/lib/parsers/pump_alarms.js b/lib/parsers/pump_alarms.js new file mode 100644 index 0000000..a14b2bc --- /dev/null +++ b/lib/parsers/pump_alarms.js @@ -0,0 +1,33 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + // Flag all pump alarms on NS (this will need some way of selecting out what the user wants...) + // Requires careportal plugin in Nightscout + // eventTime: 'hh:mm', 'YYYY-MM-DDTHH:mm:ss.SSSZ' + + var details = utils.pluck(row, ['Alarm', 'Timestamp']); + var value = details['Alarm']; + + var data = { + value: value, + eventType: 'Announcement', + enteredBy: 'CSV', + notes: value, + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + }; + + return callback(null, data); + } + + function isValid (data) { + return data.value || false; + } + + var pattern = /AlarmPumpNGP/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; +} diff --git a/lib/parsers/sensor_start.js b/lib/parsers/sensor_start.js new file mode 100644 index 0000000..81affcf --- /dev/null +++ b/lib/parsers/sensor_start.js @@ -0,0 +1,35 @@ + +module.exports = function configure (utils) { + function parse (row, callback) { + + // Logs change of insulin + // Requires careportal plugin in Nightscout + // SensorReplaced string in Raw-Type for new sensor (not restarted) + // eventTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ' + + var details = utils.pluck(row, ['Raw-Type', 'Timestamp']); + var value = details['Raw-Type']; + + if (value == 'SensorReplaced') { + var data = { + value: value, + eventType: 'Sensor Start', + enteredBy: 'CSV', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; + + return callback(null, data); + } + + function isValid (data) { + return data.value || false; + } + + var pattern = /SensorReplaced/g; + var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); + var parser = { pattern: pattern, stream: stream, parse: parse }; + return parser; +} diff --git a/lib/parsers/smbg.js b/lib/parsers/smbg.js index 0f03ad2..0d4f077 100644 --- a/lib/parsers/smbg.js +++ b/lib/parsers/smbg.js @@ -1,33 +1,28 @@ - module.exports = function configure (utils) { - + // changed smbg to mbg for NS compatibility + // changed Devicetime to dateString + // added date + function parse (row, callback) { - var bg = utils.select(row, 'BG Reading (mg/dL)'); - if (isNaN(parseFloat(bg))) { - bg = utils.select(row, 'Sensor Calibration BG (mg/dL)'); - } - - if (bg) { - - var data = { - value: bg, - type: 'smbg', - deviceTime: utils.reformatISO(utils.select(row, 'Timestamp')) - }; - return callback(null, data); - } - return callback( ); - + var o = utils.pluck(row, ['BG Reading (mg/dL)', 'Timestamp']); + var value = o['BG Reading (mg/dL)']; + var data = { + value: value, + mbg: parseInt(value), + type: 'mbg', + dateString: utils.reformatISO(o['Timestamp']), + date: utils.reformatDate(o['Timestamp']) + }; + + return callback(null, data); } - function isValid (data) { - return (data && !isNaN(data.value) && data.type == 'smbg'); + return data.value || false; } - var pattern = /CalBGForPH/g; + var pattern = /BGCapturedOnPump/g; var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); var parser = { pattern: pattern, stream: stream, parse: parse }; return parser; -} - +} \ No newline at end of file diff --git a/lib/parsers/wizard.js b/lib/parsers/wizard.js index 5ba16a5..007ff75 100644 --- a/lib/parsers/wizard.js +++ b/lib/parsers/wizard.js @@ -1,5 +1,16 @@ module.exports = function configure (utils) { +// CarePortal adjustments +// Wizard will handle BG and carb info ONLY +// bolus will handle actual *delivered* insulin +// ie both wizard and bolus need to be called +// eventType = "Correction Bolus", "Meal Bolus", ("Snack Bolus") +// eventTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ' +// bg, carbs used +// insulin not used here! +// rest are left for info and possible future use + + function parse (row, callback) { var keys = [ 'Timestamp', 'Raw-Values', 'Raw-Upload ID', 'Index', 'Raw-Device Type' ]; @@ -8,31 +19,39 @@ module.exports = function configure (utils) { var device = fields['Raw-Device Type']; var index = parseInt(fields.Index) + 1; var key = [ fields['Raw-Upload ID'], index, device ].join(' '); - var data = { - value: details.BOLUS_ESTIMATE - , smbg: details.BG_INPUT - , carbs: details.CARB_INPUT - , carb_units: details.CARB_UNITS - , carb_ratio: details.CARB_RATIO - , sensitivity: details.INSULIN_SENSITIVITY - , recommended: details.BOLUS_ESTIMATE - , correction: details.CORRECTION_ESTIMATE - , food: details.FOOD_ESTIMATE - , joinKey: utils.hash(key) - , type: 'wizard' - , deviceTime: utils.reformatISO(fields.Timestamp) - }; - - return callback(null, data); - } + + if (details.CARB_INPUT != '') { + var data = { + value: details.BOLUS_ESTIMATE + , bg: details.BG_INPUT + , carbs: details.CARB_INPUT + , carb_units: details.CARB_UNITS + , carb_ratio: details.CARB_RATIO + , sensitivity: details.INSULIN_SENSITIVITY + , recommended: details.BOLUS_ESTIMATE + , correction: details.CORRECTION_ESTIMATE + , food: details.FOOD_ESTIMATE + , joinKey: utils.hash(key) + , type: 'wizard' + , eventType: 'Meal Bolus' + , enteredBy: 'CSV' + , dateString: utils.reformatISO(fields.Timestamp) + , created_at: utils.reformatCPTime(fields.Timestamp) + , date: utils.reformatDate(fields.Timestamp) + } + }; + return callback(null, data); + } + function isValid (data) { return ( !isNaN(data.value) && data.type == "wizard" ); } - var pattern = /BolusWizard/g; + // changed pattern from BolusWizard + var pattern = /BolusWizardBolusEstimate/g; var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); var parser = { pattern: pattern, stream: stream, parse: parse }; return parser; diff --git a/lib/utils.js b/lib/utils.js index 1d8d477..67bdcbc 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -13,21 +13,45 @@ function validator (valid) { } return es.map(each); } - -var CARELINK_TIME = 'MM/DD/YYTHH:mm:ss'; +// changed date format from MM/DD/YYTHH:mm:ss +var CARELINK_TIME = 'DD/MM/YYTHH:mm:ss'; var OUTPUT_TIME_MASK = 'YYYY-MM-DDTHH:mm:ss'; + +//Added for Careportal in NS +var OUTPUT_CAREPORTAL_TIME = 'YYYY-MM-DDTHH:mm:ss.SSSZ'; +var OUTPUT_CAREPORTAL_DATE = 'YYYY-MM-DD'; + function reformatISO (str) { - var m = moment(str, CARELINK_TIME); - return m.format(OUTPUT_TIME_MASK); + var m = moment(str, CARELINK_TIME); + return m.format(OUTPUT_TIME_MASK); +} + +// added reformatDate fn +function reformatDate (str) { + var m = moment(str, CARELINK_TIME); + return m.valueOf(); +} + +// added reformatCPDate fn +function reformatCPDate (str) { + var m = moment(str, CARELINK_TIME); + return m.format(OUTPUT_CAREPORTAL_DATE); +} + +// added reformatCPTime fn +function reformatCPTime (str) { + var m = moment(str, CARELINK_TIME); + return m.format(OUTPUT_CAREPORTAL_TIME); } function validTime (str) { return moment(str, OUTPUT_TIME_MASK).isValid( ); } +// changed from dateString to date function times (valid) { function withTime (data, next) { - if (valid(data.deviceTime)) { + if (valid(data.dateString)) { return next(null, data); } next( ); @@ -118,6 +142,7 @@ function validate ( ) { return es.pipeline(validTimes( ), validValues( )); } +// Added reformatDate, reformatCPDate, reformatCPTime below var api = { columns: columns , validator: validator @@ -126,6 +151,9 @@ var api = { , pipeline: es.pipeline , validTimes: validTimes , reformatISO: reformatISO + , reformatDate: reformatDate + , reformatCPDate: reformatCPDate + , reformatCPTime: reformatCPTime , pluck: pluck , split: split , fields: splitIntoFields diff --git a/mmcsv640g.bat b/mmcsv640g.bat new file mode 100644 index 0000000..1eb1ebc --- /dev/null +++ b/mmcsv640g.bat @@ -0,0 +1,2 @@ +MiniMouseMacro /m /e mmcsv640g.mmmacro +exit \ No newline at end of file diff --git a/mmcsv640g.mmmacro b/mmcsv640g.mmmacro new file mode 100644 index 0000000..4400e0c --- /dev/null +++ b/mmcsv640g.mmmacro @@ -0,0 +1,5 @@ +1 | 612 | 663 | 2999 | Left Click Down + +2 | 612 | 663 | 104 | Left Click Release +3 | 610 | 610 | 2999 | Left Click Down +4 | 610 | 610 | 104 | Left Click Release diff --git a/mmcsv640g.sh b/mmcsv640g.sh new file mode 100644 index 0000000..fc9affa --- /dev/null +++ b/mmcsv640g.sh @@ -0,0 +1,253 @@ +#! /bin/bash +# Initialising Carelink Automation +# Proof of concept ONLY - 640g csv to NightScout +# +echo '*****************************' +echo '*** MMCSV640G ***' +echo '*** FOR TEST PURPOSES ONLY***' +echo '*Only Use If You Accept This*' +echo '* Started 12th November 2015*' +echo '*** Thanks - @LittleDMatt ***' +echo '*****************************' +VERSION='V0.7 1st December 2015' +# +# Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options +# Currently using crude logic here to keep things moving, with limited error trapping... +# Split up jsons for debug - no need, just split entries, treatments to be more efficient... +# Please use with caution. There'll be bugs here... +# You run this at your own risk. +# Thank you. + +# **************************************************************************************** +# Known Issues TO (TRY TO) FIX - +# **************************************************************************************** +# Doesn't change over to latest date on CSV upload - log out and back in again in Selenium script but need to avoid Medtronic browser alert page if you do... +# Dropping the odd data point between uploads - overhaul data selection to use timestamp and not line number... +# Medtronic Predicted SG values bunch up horribly on >3hr or narrow browser display, not being rescaled. Change sample rate? eg display every other? +# Double vision-currently clears out CSV files to prevent IO error on pause to look for CSV files - an easy fix when I'm more awake... +# **************************************************************************************** + + +# **************************************************************************************** +# Assumes run along with Selenium script +# Usually looking to upload data at around 1, 6, 11, 16, ..., 56 minutes past +# Import variables from config.sh script +# You must include the directory of your config script when calling +echo Importing Varables... +source "$1"/config.sh +# **************************************************************************************** +# Let's go... +# **************************************************************************************** +echo $VERSION + +echo Clearing Up CSV Download Directory in ten seconds... +sleep 10s +rm -f "$DownloadPath"/*.csv + +# Get to the right place locally... +export PATH=$PATH:$NodejsPath +cd "$CSVDataPath" +pwd +sleep 50 +# Capture empty JSON files later ie "[]" +EMPTYSIZE=3 #bytes + +# Allow to run for ~240 hours (roughly), ~5 min intervals +# This thing is bound to need some TLC and don't want it running indefinitely... +COUNT=0 +MAXCNT=2880 +until [ $COUNT -gt $MAXCNT ]; do +echo +echo Clearing Up CSV Download Directory... +rm -f "$DownloadPath"/*.csv + +echo "Waiting for CareLink upload page..." +# Extract minutes past each hours and start at preset time (10# forces base ten to avoid errors with leading 0 in returned value, eg at 08 mins) + while [ $((10#$(date +'%M') % $gap_mins)) -ne 0 ] ; + do + sleep 30s # check every 30 seconds + done +# Wait 1 minute post Selenium call up of upload page +echo "Waiting for Mouse Click on upload page..." +sleep 1m + +# Going to run MiniMouseMacro to perform mouse click on upload page +# MiniMouseMacro and a valid mmcsv640g.mmmacro file must be present in MousePath +echo "Uploading..." +"$MousePath"$"/MiniMouseMacro" //e //m "$MousePath"$"/mmcsv640g.mmmacro" + +echo +sleep 2m # at least a two minute wait for upload and transfer to CSV report page... +echo "Waiting for CSV file download from Carelink" + while [ ! -f "$DownloadPath"/*.csv ] ; + do + sleep 30s # check every 30 seconds + done + +# We've found a CSV file... hooray +uploaded_recent_file=$(ls -t "$DownloadPath"/*.csv | head -n1) +echo "$uploaded_recent_file" +echo +#move the file to the Data Directory and rename +mv "$uploaded_recent_file" "$CSVDataPath"/latest640g.csv + +# **************************************************************************************** +# Trim CSV to reflect only new entries since last poll (latest640gbutone.csv) +# Important to do this to cut down on duplicate entries in NS +# (these might cause issues esp in CarePortal, but also add to your data) +# First lose the header preamble +sed -i '1,11d' $CSVDataPath/latest640g.csv + +echo +echo Number of Entries in latest CSV file +if [ -f $CSVDataPath/latest640g.csv ] +then + LAST_LINES=$(awk '{n+=1} END {print n}' $CSVDataPath/latest640g.csv) +else + LAST_LINES=1 +fi +echo $LAST_LINES + +echo +echo Number of Entries in latest but one CSV file +if [ -f $CSVDataPath/latest640gbutone.csv ] +then + LAST_LINESBUTONE=$(awk '{n+=1} END {print n}' $CSVDataPath/latest640gbutone.csv) +else + LAST_LINESBUTONE=1 +fi + +# Check for null return +if [ $LAST_LINESBUTONE -le 0 ] +then + LAST_LINESBUTONE=1 +fi +echo $LAST_LINESBUTONE +echo + +# If LAST_LINESBUTONE > LAST_LINES then must be new day's CSV ; set LAST_LINESBUTONE to one ie keep latest640g.csv intact +if [ $LAST_LINESBUTONE -gt $LAST_LINES ] +then + LAST_LINESBUTONE=1 +fi + +# If LAST_LINESBUTONE = LAST_LINES then same CSV file ie pump upload failed skip... +if [ $LAST_LINESBUTONE -ne $LAST_LINES ] +then +echo Extract Newly Generated Entries Only +sed -n $LAST_LINESBUTONE,'$p' $CSVDataPath/latest640g.csv > $CSVDataPath/use640g.csv +echo + +# **************************************************************************************** +# Don't parse 'all' to entries as generates a ton of wasted entries in DB +# Time to extract and upload entries (SG and BG) +echo "Entries - SG and BG Data" +echo CBG +"$Mmcsv640gPath"/bin/cmd.js parse --filter=cbg $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_sg.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_sg.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_sg.json "$your_nightscout"$"/api/v1/entries" +fi +echo +echo SMBG +"$Mmcsv640gPath"/bin/cmd.js parse --filter=smbg $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_bg.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_bg.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_bg.json "$your_nightscout"$"/api/v1/entries" +fi + +# **************************************************************************************** +# Time to extract and upload treatments +# Step-by-step to aid debugging, not very slick... +echo +echo "Treatments - Basal Changes (percent and absolute), PLGM, Cannula Change, Sensor Start, Bolus and Wizard" + +echo PLGM - SmartGuard +"$Mmcsv640gPath"/bin/cmd.js parse --filter=plgm $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_plgm.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_plgm.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_plgm.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Temp Basal - Percentage +"$Mmcsv640gPath"/bin/cmd.js parse --filter=basal_temp_percent $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_temp_basal_percent.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_temp_basal_percent.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_temp_basal_percent.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Temp Basal - Absolute +"$Mmcsv640gPath"/bin/cmd.js parse --filter=basal_temp_absolute $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_temp_basal_absolute.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_temp_basal_absolute.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_temp_basal_absolute.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Site Change +"$Mmcsv640gPath"/bin/cmd.js parse --filter=insulin $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_insulin.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_insulin.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_insulin.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Sensor Change +"$Mmcsv640gPath"/bin/cmd.js parse --filter=sensor_start $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_sensor_start.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_sensor_start.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_sensor_start.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Bolus Wizard +"$Mmcsv640gPath"/bin/cmd.js parse --filter=wizard $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_wizard.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_wizard.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_wizard.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Bolus Delivered +"$Mmcsv640gPath"/bin/cmd.js parse --filter=bolus $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_bolus.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_bolus.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_bolus.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Medtronic Predictions - As Notes +"$Mmcsv640gPath"/bin/cmd.js parse --filter=medpredict $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_medpredict.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_medpredict.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_medpredict.json "$your_nightscout"$"/api/v1/treatments" +fi +echo + +echo Pump Alarms - As Announcements +"$Mmcsv640gPath"/bin/cmd.js parse --filter=pump_alarms $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_pump_alarms.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_pump_alarms.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_pump_alarms.json "$your_nightscout"$"/api/v1/treatments" +fi +echo +fi # found a file to process +echo +let COUNT=COUNT+1 +echo $COUNT +echo "Tidying Up..." +mv $CSVDataPath/latest640g.csv $CSVDataPath/latest640gbutone.csv +done \ No newline at end of file From ed611893d63222df8f0576aaf34812f3be90478f Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Sun, 13 Dec 2015 22:20:20 +0000 Subject: [PATCH 02/15] Without Medtronic Predicted SG Skipping Medtronic Predicted SG as noticed unstable performance after a couple of days... --- mmcsv640g.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mmcsv640g.sh b/mmcsv640g.sh index fc9affa..895de3b 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.7 1st December 2015' +VERSION='V0.71 2nd December 2015' # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options # Currently using crude logic here to keep things moving, with limited error trapping... @@ -227,13 +227,13 @@ then fi echo -echo Medtronic Predictions - As Notes -"$Mmcsv640gPath"/bin/cmd.js parse --filter=medpredict $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_medpredict.json -filesize=$(wc -c <"$CSVDataPath"$"/latest640g_medpredict.json") -if [ $filesize -gt $EMPTYSIZE ] -then - curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_medpredict.json "$your_nightscout"$"/api/v1/treatments" -fi +echo SKIPPING Medtronic Predictions - As Notes +#"$Mmcsv640gPath"/bin/cmd.js parse --filter=medpredict $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_medpredict.json +#filesize=$(wc -c <"$CSVDataPath"$"/latest640g_medpredict.json") +#if [ $filesize -gt $EMPTYSIZE ] +#then +# curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_medpredict.json "$your_nightscout"$"/api/v1/treatments" +#fi echo echo Pump Alarms - As Announcements From 3445cf6615fc1dc287a1338ffdf20195d81848ef Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Wed, 23 Dec 2015 21:18:48 +0000 Subject: [PATCH 03/15] Fix potential empty csv file error --- mmcsv640g.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mmcsv640g.sh b/mmcsv640g.sh index 895de3b..fdc82e6 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.71 2nd December 2015' +VERSION='V0.72 20th December 2015' # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options # Currently using crude logic here to keep things moving, with limited error trapping... @@ -78,8 +78,8 @@ echo "Uploading..." echo sleep 2m # at least a two minute wait for upload and transfer to CSV report page... -echo "Waiting for CSV file download from Carelink" - while [ ! -f "$DownloadPath"/*.csv ] ; +echo "Waiting for valid CSV file download from Carelink" + while [ ! -s "$DownloadPath"/*.csv ] ; # changed to -s to check for empty csv files also do sleep 30s # check every 30 seconds done @@ -100,7 +100,7 @@ sed -i '1,11d' $CSVDataPath/latest640g.csv echo echo Number of Entries in latest CSV file -if [ -f $CSVDataPath/latest640g.csv ] +if [ -s $CSVDataPath/latest640g.csv ] then LAST_LINES=$(awk '{n+=1} END {print n}' $CSVDataPath/latest640g.csv) else @@ -110,7 +110,7 @@ echo $LAST_LINES echo echo Number of Entries in latest but one CSV file -if [ -f $CSVDataPath/latest640gbutone.csv ] +if [ -s $CSVDataPath/latest640gbutone.csv ] then LAST_LINESBUTONE=$(awk '{n+=1} END {print n}' $CSVDataPath/latest640gbutone.csv) else From 6f4b93678d1bdf7c9b0ad7330d68e6e2c3399124 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Fri, 8 Jan 2016 01:39:00 +0000 Subject: [PATCH 04/15] Improved reliability when uploading + date roll-over fixed updated mmcsv640g.sh and example selenium upload macro - see each file for the small changes. --- Selenium_Upload_Example.html | 2 +- mmcsv640g.sh | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Selenium_Upload_Example.html b/Selenium_Upload_Example.html index 06f7706..9887feb 100644 --- a/Selenium_Upload_Example.html +++ b/Selenium_Upload_Example.html @@ -13,7 +13,7 @@ open - /patient/entry.jsp?bhcp=1 + /patient/signout.do diff --git a/mmcsv640g.sh b/mmcsv640g.sh index fdc82e6..8625dae 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.72 20th December 2015' +VERSION='V0.73 7th January 2016' # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options # Currently using crude logic here to keep things moving, with limited error trapping... @@ -76,6 +76,11 @@ sleep 1m echo "Uploading..." "$MousePath"$"/MiniMouseMacro" //e //m "$MousePath"$"/mmcsv640g.mmmacro" +# mm640g sometimes panics on first connection attempt - try clicking again soon after first try... +# (this will either do nothing - we're uploading - or click the Retry button) +sleep 45s +"$MousePath"$"/MiniMouseMacro" //e //m "$MousePath"$"/mmcsv640g.mmmacro" + echo sleep 2m # at least a two minute wait for upload and transfer to CSV report page... echo "Waiting for valid CSV file download from Carelink" From 4508eae113e816685e7e4ddceb27a9fd61028082 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Thu, 25 Feb 2016 23:24:27 +0000 Subject: [PATCH 05/15] Decimal comma handling and CareLink tweak Updated mmcsv640g.sh to deal with decimal comma use in some regions (lines 146, 147); updated Selenium_Upload_Example.html to deal with apparent change to CareLink login from non-recommended browser - Use this if the script get's 'stuck' at the Required Settings / "Continue" page --- Selenium_Upload_Example.html | 15 +++++++++++++++ mmcsv640g.bat | 2 -- mmcsv640g.sh | 7 +++++-- 3 files changed, 20 insertions(+), 4 deletions(-) delete mode 100644 mmcsv640g.bat diff --git a/Selenium_Upload_Example.html b/Selenium_Upload_Example.html index 9887feb..95d38f2 100644 --- a/Selenium_Upload_Example.html +++ b/Selenium_Upload_Example.html @@ -16,6 +16,21 @@ /patient/signout.do + + waitForPageToLoad + + + + + open + /patient/entry.jsp?bhcp=1 + + + + waitForPageToLoad + + + type id=j_username diff --git a/mmcsv640g.bat b/mmcsv640g.bat deleted file mode 100644 index 1eb1ebc..0000000 --- a/mmcsv640g.bat +++ /dev/null @@ -1,2 +0,0 @@ -MiniMouseMacro /m /e mmcsv640g.mmmacro -exit \ No newline at end of file diff --git a/mmcsv640g.sh b/mmcsv640g.sh index 8625dae..9bd3232 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.73 7th January 2016' +VERSION='V0.74 21st February 2016' # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options # Currently using crude logic here to keep things moving, with limited error trapping... @@ -140,9 +140,12 @@ fi if [ $LAST_LINESBUTONE -ne $LAST_LINES ] then echo Extract Newly Generated Entries Only -sed -n $LAST_LINESBUTONE,'$p' $CSVDataPath/latest640g.csv > $CSVDataPath/use640g.csv +sed -n $LAST_LINESBUTONE,'$p' $CSVDataPath/latest640g.csv > $CSVDataPath/use640g_orig.csv echo +# Check for decimal comma within quotes and convert to decimal point (e.g. some euro regions) +sed 's/"\([0-9]*\),\([0-9]*\)"/\1.\2/g' $CSVDataPath/use640g_orig.csv > $CSVDataPath/use640g.csv + # **************************************************************************************** # Don't parse 'all' to entries as generates a ton of wasted entries in DB # Time to extract and upload entries (SG and BG) From 86de7d587203b882d906e1bb78a6a5fb41485818 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Fri, 26 Feb 2016 21:53:57 +0000 Subject: [PATCH 06/15] Tiny startup script to semi-automate getting things going --- startNS.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 startNS.sh diff --git a/startNS.sh b/startNS.sh new file mode 100644 index 0000000..37c9e34 --- /dev/null +++ b/startNS.sh @@ -0,0 +1,3 @@ +./vhui32.exe & +./FirefoxPortable/FirefoxPortable.exe carelink.minimed.eu -chrome "chrome://selenium-ide/content" & +./mmcsv-mmcsv640g/mmcsv640g.sh "/d" \ No newline at end of file From 3ea63fce00c8635acf29b8a6353e2a4876a62e87 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Sun, 6 Mar 2016 23:51:47 +0000 Subject: [PATCH 07/15] Removed need to change CareLink Units CareLink units do not need changing - works with either mmol/L or mg/dl; minor bug fix on absolute temp basal record --- lib/parsers/basal.js | 45 +++++++++++++++++++++--------- lib/parsers/basal_temp_absolute.js | 2 +- lib/parsers/cbg.js | 20 ++++++++----- lib/parsers/smbg.js | 20 ++++++++----- mmcsv640g.sh | 12 +++++++- 5 files changed, 70 insertions(+), 29 deletions(-) diff --git a/lib/parsers/basal.js b/lib/parsers/basal.js index c205024..31b273b 100644 --- a/lib/parsers/basal.js +++ b/lib/parsers/basal.js @@ -2,27 +2,46 @@ module.exports = function configure (utils) { function parse (row, callback) { - var details = utils.details(utils.select(row, 'Raw-Values') || ''); - if (!details.RATE) { - return callback( ); - } + // Using careportal "Temp" basal to add values of SCHEDULED basal change (not perfect I know...) + // Using this will over-ride your basal PROFILE set in Nightscout... + //'Temp Basal Start': { bg: true, duration: true, percent: true, absolute: true } + // Requires careportal plugin in Nightscout + // Just picking out SCHEDULED basal changes here + // eventTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ' + // Note Temp Basal event type (not start / end) + // Raw Values are BasalProfileStart at start / on + // Absolute values (units per hour) only in this script + // Duration is preset to 24 hours - ie tees this up until next rate is spotted... + // NOT used at present... + + var details = utils.pluck(row, ['Raw-Type', 'Timestamp']); + var value = details['Raw-Type']; + var values = utils.details(utils.select(row, 'Raw-Values') || ''); + + if (value == 'BasalProfileStart') { var data = { - scheduleName: details.PATTERN_NAME, - value: parseFloat(details.RATE), - type: 'basal-rate-change', - deliveryType: 'scheduled', - deviceTime: utils.reformatISO(utils.select(row, 'Timestamp')) - }; + value: values.RATE, + eventType: 'Temp Basal', + duration: parseInt(1440), + absolute: parseFloat(values.RATE), + enteredBy: 'CSV', + dateString: utils.reformatISO(details['Timestamp']), + created_at: utils.reformatCPTime(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + } ; + return callback(null, data); } function isValid (data) { - return (!isNaN(data.value) && data.type == 'basal-rate-change'); + return data.value || false; } - - var pattern = /BasalProfileStart/g; + + var pattern = /ChangeProgrammedTempBasal|ChangeTempBasal/g; var stream = utils.pipeline(utils.split( ), utils.map(parse), utils.validator(isValid)); var parser = { pattern: pattern, stream: stream, parse: parse }; return parser; + } diff --git a/lib/parsers/basal_temp_absolute.js b/lib/parsers/basal_temp_absolute.js index d6d887a..1acb28b 100644 --- a/lib/parsers/basal_temp_absolute.js +++ b/lib/parsers/basal_temp_absolute.js @@ -22,7 +22,7 @@ module.exports = function configure (utils) { var data = { value: value, eventType: 'Temp Basal', - duration: parseInt(values.DURATION)/(60.*1000.), + duration: parseInt((values.DURATION)/(60.*1000.)), absolute: parseFloat(values.RATE), enteredBy: 'CSV', dateString: utils.reformatISO(details['Timestamp']), diff --git a/lib/parsers/cbg.js b/lib/parsers/cbg.js index e4d83fd..b19ee22 100644 --- a/lib/parsers/cbg.js +++ b/lib/parsers/cbg.js @@ -2,16 +2,22 @@ module.exports = function configure (utils) { // changed cbg to sgv for NS compatibility // changed Devicetime to dateString // added date + // changed to use GlucoseSensorData and AMOUNT (this is always mg/dl regardless of CareLink preference setting) function parse (row, callback) { - var o = utils.pluck(row, ['Sensor Glucose (mg/dL)', 'Timestamp']); - var value = o['Sensor Glucose (mg/dL)']; + + var details = utils.pluck(row, ['Raw-Type', 'Timestamp']); + var value = details['Raw-Type']; + var values = utils.details(utils.select(row, 'Raw-Values') || ''); + + if (value == 'GlucoseSensorData') { var data = { - value: value, - sgv: parseInt(value), + value: values.AMOUNT, + sgv: parseInt(values.AMOUNT), type: 'sgv', - dateString: utils.reformatISO(o['Timestamp']), - date: utils.reformatDate(o['Timestamp']) - }; + dateString: utils.reformatISO(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; return callback(null, data); } diff --git a/lib/parsers/smbg.js b/lib/parsers/smbg.js index 0d4f077..46c7684 100644 --- a/lib/parsers/smbg.js +++ b/lib/parsers/smbg.js @@ -2,17 +2,23 @@ module.exports = function configure (utils) { // changed smbg to mbg for NS compatibility // changed Devicetime to dateString // added date + // changed to use BGCapturedOnPump and AMOUNT (this is always mg/dl regardless of CareLink preference setting) function parse (row, callback) { - var o = utils.pluck(row, ['BG Reading (mg/dL)', 'Timestamp']); - var value = o['BG Reading (mg/dL)']; + + var details = utils.pluck(row, ['Raw-Type', 'Timestamp']); + var value = details['Raw-Type']; + var values = utils.details(utils.select(row, 'Raw-Values') || ''); + + if (value == 'BGCapturedOnPump') { var data = { - value: value, - mbg: parseInt(value), + value: values.AMOUNT, + mbg: parseInt(values.AMOUNT), type: 'mbg', - dateString: utils.reformatISO(o['Timestamp']), - date: utils.reformatDate(o['Timestamp']) - }; + dateString: utils.reformatISO(details['Timestamp']), + date: utils.reformatDate(details['Timestamp']) + } + }; return callback(null, data); } diff --git a/mmcsv640g.sh b/mmcsv640g.sh index 9bd3232..cad22ea 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.74 21st February 2016' +VERSION='V0.75 4th March 2016' # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options # Currently using crude logic here to keep things moving, with limited error trapping... @@ -172,6 +172,15 @@ fi echo echo "Treatments - Basal Changes (percent and absolute), PLGM, Cannula Change, Sensor Start, Bolus and Wizard" +# echo Basal - Absolute +#"$Mmcsv640gPath"/bin/cmd.js parse --filter=basal $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_basal.json +#filesize=$(wc -c <"$CSVDataPath"$"/latest640g_basal.json") +#if [ $filesize -gt $EMPTYSIZE ] +#then +# curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_basal.json "$your_nightscout"$"/api/v1/treatments" +#fi +#echo + echo PLGM - SmartGuard "$Mmcsv640gPath"/bin/cmd.js parse --filter=plgm $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_plgm.json filesize=$(wc -c <"$CSVDataPath"$"/latest640g_plgm.json") @@ -252,6 +261,7 @@ then curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_pump_alarms.json "$your_nightscout"$"/api/v1/treatments" fi echo + fi # found a file to process echo let COUNT=COUNT+1 From a3b28273f84bd982ee23b205484e9d6c07fc61cc Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Thu, 24 Mar 2016 01:56:15 +0000 Subject: [PATCH 08/15] NS Uploader now default for handling CareLink --- config.sh | 10 ++- .../Selenium_Upload_Example.html | 0 .../mmcsv640g.mmmacro | 0 mmcsv640g.sh | 61 ++++++++++++------ startNS.sh | 2 +- uploader/CareLinkUploader.exe | Bin 0 -> 678912 bytes uploader/README.md | 1 + vh_cron.sh | 37 +++++++++++ 8 files changed, 91 insertions(+), 20 deletions(-) rename Selenium_Upload_Example.html => depreciated/Selenium_Upload_Example.html (100%) rename mmcsv640g.mmmacro => depreciated/mmcsv640g.mmmacro (100%) create mode 100644 uploader/CareLinkUploader.exe create mode 100644 uploader/README.md create mode 100644 vh_cron.sh diff --git a/config.sh b/config.sh index 383fde7..efbf845 100644 --- a/config.sh +++ b/config.sh @@ -17,4 +17,12 @@ MousePath='/c/Users/matt/Nightscout' #Where MiniMouseMacro is installed # **************************************************************************************** api_secret_hash='2ce212ef676099da17ec5aff64db0c83bf3f7b4f' # This is the SHA-1 Hash of your API-SECRET string - eg "ASANEXAMPLE1" is transformed into... your_nightscout='https://yourwebsite.azurewebsites.net' #'https://something.azurewebsites.net' -gap_mins=10 # time between CSV uploads (roughly). Suggest betweem 5 and 10 minutes and always start higher \ No newline at end of file +gap_mins=5 # max time to wait for CSV download. Suggest 5 or 10 minutes and always start higher +gap_mins_delay=0 # use strict time for each upload cycle (if >0) or don't wait to minimise latency (0) +# **************************************************************************************** +# USER SPECIFIC Uploader Info - Please enter your values here +# **************************************************************************************** +uploader=1 #Firefox + Selenium (0) or .NET uploader (1): default is 1 from version 0.8 onwards +CareLinkURL='https://carelink.minimed.eu' #CareLink site, .eu or .com +CareLinkUsername='user' #CareLink Username +CareLinkPassword='password' #CareLink Password \ No newline at end of file diff --git a/Selenium_Upload_Example.html b/depreciated/Selenium_Upload_Example.html similarity index 100% rename from Selenium_Upload_Example.html rename to depreciated/Selenium_Upload_Example.html diff --git a/mmcsv640g.mmmacro b/depreciated/mmcsv640g.mmmacro similarity index 100% rename from mmcsv640g.mmmacro rename to depreciated/mmcsv640g.mmmacro diff --git a/mmcsv640g.sh b/mmcsv640g.sh index cad22ea..0930496 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,9 +9,10 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.75 4th March 2016' +VERSION='V0.82 23rd March 2016' # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options +# CareLink Uploader (ie not using Firefox) is provided by Tom Collins - thanks Tom! # Currently using crude logic here to keep things moving, with limited error trapping... # Split up jsons for debug - no need, just split entries, treatments to be more efficient... # Please use with caution. There'll be bugs here... @@ -20,17 +21,14 @@ VERSION='V0.75 4th March 2016' # **************************************************************************************** # Known Issues TO (TRY TO) FIX - -# **************************************************************************************** -# Doesn't change over to latest date on CSV upload - log out and back in again in Selenium script but need to avoid Medtronic browser alert page if you do... +# **************************************************************************************** # Dropping the odd data point between uploads - overhaul data selection to use timestamp and not line number... # Medtronic Predicted SG values bunch up horribly on >3hr or narrow browser display, not being rescaled. Change sample rate? eg display every other? -# Double vision-currently clears out CSV files to prevent IO error on pause to look for CSV files - an easy fix when I'm more awake... # **************************************************************************************** # **************************************************************************************** -# Assumes run along with Selenium script -# Usually looking to upload data at around 1, 6, 11, 16, ..., 56 minutes past +# Assumes running CareLink Uploader or running along with Selenium script (usually looking to upload data at 1, 6, 11, 16, ..., 56 minutes past) # Import variables from config.sh script # You must include the directory of your config script when calling echo Importing Varables... @@ -41,17 +39,21 @@ source "$1"/config.sh echo $VERSION echo Clearing Up CSV Download Directory in ten seconds... +echo $DownloadPath sleep 10s rm -f "$DownloadPath"/*.csv # Get to the right place locally... export PATH=$PATH:$NodejsPath +echo Using Data Directory cd "$CSVDataPath" pwd -sleep 50 +# sleep 50 # Capture empty JSON files later ie "[]" EMPTYSIZE=3 #bytes +START_TIME=0 #last time we ran the uploader (if at all) + # Allow to run for ~240 hours (roughly), ~5 min intervals # This thing is bound to need some TLC and don't want it running indefinitely... COUNT=0 @@ -61,12 +63,17 @@ echo echo Clearing Up CSV Download Directory... rm -f "$DownloadPath"/*.csv +# Splits here - Firefox or CareLink Uploader module) +if [ $uploader -eq 0 ] +then +echo "Using Firefox and Selenium..." echo "Waiting for CareLink upload page..." # Extract minutes past each hours and start at preset time (10# forces base ten to avoid errors with leading 0 in returned value, eg at 08 mins) - while [ $((10#$(date +'%M') % $gap_mins)) -ne 0 ] ; +while [ $((10#$(date +'%M') % $gap_mins)) -ne 0 ] ; do sleep 30s # check every 30 seconds - done + done + # Wait 1 minute post Selenium call up of upload page echo "Waiting for Mouse Click on upload page..." sleep 1m @@ -83,14 +90,32 @@ sleep 45s echo sleep 2m # at least a two minute wait for upload and transfer to CSV report page... + echo "Waiting for valid CSV file download from Carelink" while [ ! -s "$DownloadPath"/*.csv ] ; # changed to -s to check for empty csv files also do sleep 30s # check every 30 seconds done +else + echo "Using CareLink Uploader..." + while [ $((10#$(date +'%s')/60-$START_TIME)) -lt $gap_mins_delay ] ; + do + sleep 30s # check every 30 seconds + done + while [ ! -s "$DownloadPath"/*.csv ] ; # changed to -s to check for empty csv files also + do + if [ $((10#$(date +'%s')/60-$START_TIME)) -ge $gap_mins ] + then + START_TIME=$((10#$(date +'%s')/60)) + "$Mmcsv640gPath"/uploader/CareLinkUploader & + fi + sleep 30s # check every 30 seconds + done +fi + # We've found a CSV file... hooray -uploaded_recent_file=$(ls -t "$DownloadPath"/*.csv | head -n1) +uploaded_recent_file=$(ls -t "$DownloadPath"/*.csv | head -1) echo "$uploaded_recent_file" echo #move the file to the Data Directory and rename @@ -172,14 +197,14 @@ fi echo echo "Treatments - Basal Changes (percent and absolute), PLGM, Cannula Change, Sensor Start, Bolus and Wizard" -# echo Basal - Absolute -#"$Mmcsv640gPath"/bin/cmd.js parse --filter=basal $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_basal.json -#filesize=$(wc -c <"$CSVDataPath"$"/latest640g_basal.json") -#if [ $filesize -gt $EMPTYSIZE ] -#then -# curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_basal.json "$your_nightscout"$"/api/v1/treatments" -#fi -#echo +echo Basal - Absolute +"$Mmcsv640gPath"/bin/cmd.js parse --filter=basal $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_basal.json +filesize=$(wc -c <"$CSVDataPath"$"/latest640g_basal.json") +if [ $filesize -gt $EMPTYSIZE ] +then + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @latest640g_basal.json "$your_nightscout"$"/api/v1/treatments" +fi +echo echo PLGM - SmartGuard "$Mmcsv640gPath"/bin/cmd.js parse --filter=plgm $CSVDataPath/use640g.csv > $CSVDataPath/latest640g_plgm.json diff --git a/startNS.sh b/startNS.sh index 37c9e34..09d4ae8 100644 --- a/startNS.sh +++ b/startNS.sh @@ -1,3 +1,3 @@ ./vhui32.exe & -./FirefoxPortable/FirefoxPortable.exe carelink.minimed.eu -chrome "chrome://selenium-ide/content" & +#./FirefoxPortable/FirefoxPortable.exe carelink.minimed.eu -chrome "chrome://selenium-ide/content" & ./mmcsv-mmcsv640g/mmcsv640g.sh "/d" \ No newline at end of file diff --git a/uploader/CareLinkUploader.exe b/uploader/CareLinkUploader.exe new file mode 100644 index 0000000000000000000000000000000000000000..262d83a8535a5ed52ccb03f1a5fa3564990046bd GIT binary patch literal 678912 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%0Df)zcso8fvx0qBCwUb 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%0DbPVF_^Rs0q82H#XFvhi{D2 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�Le)%=)mf$)Z!0JDl3XsO%b%Q^l%8djc!PB7vYx9< zj*XSarJcL*k{n#EF#u`y>;4;uPVL-LSk<#~W$&6(x>l~~?d$4YJ-DVTzh=15)zhNP7@uidmR-?e6Fos?sE(@@vi!m6RJ{HosG zo>i;X46j?AzfpRYjIzEq!>sq_R}HUPTUgz-X7#3ZUA?`%E4w!3*9~?J^{pG~&G+W} z3ai)7RTZr5UYTJ@Ru1=_(l>ZYU)S26!pg4RRjb!^ty{BcQ`g$nLp{TNLp?+JQ=}xJ zO6Xsq31T41{VS9N1x=r7IfQ$2XO@D-SwwAA`fnOfC6`D;xg@d|^rRx)(sU0M^CRWW zmE4Kyr4N57cs`P!D2)Ght|l6RDE1E(#tJ1FsSK(yL;cCbhT1@;(axAd8zt4Wx)a;S zWK6TISX#ZRQ-59?>!>kYcP&rdX9OAVsto}up)mEqWFO-t88PV*j*XY;oXg`I#s{|) zC!`6Q9G8@rhhLi9B+cY`h3%J0moB5yzBN)GeZ4Dtdj|)HR}Kw_ULKKA%4B}C5sB*b s`&TH8!iY4U3wAZ>l1dE?as|3z(0t(hym?4q*#6D_1E)y7B<&;c{|*WjJOBUy literal 0 HcmV?d00001 diff --git a/uploader/README.md b/uploader/README.md new file mode 100644 index 0000000..f6cacd5 --- /dev/null +++ b/uploader/README.md @@ -0,0 +1 @@ +# mmcsvfetch \ No newline at end of file diff --git a/vh_cron.sh b/vh_cron.sh new file mode 100644 index 0000000..7c8bb09 --- /dev/null +++ b/vh_cron.sh @@ -0,0 +1,37 @@ +#! /bin/bash +# Simple script to check +# - if Virtual Here is running +# - if the USB device has disconnected +# @LittleDMatt +# V0.1 22nd March 2016 + +# Run as root +# !!Warning: Reboots your machine if required!! +# Designed to be run as regular (5 minute) crontab job +# Tested on a CHIP linux pc with VirtualHere v2.7.8 + +# Housekeeping +cd /root +rm -f vh.log +rm -f vh_check.log +rm -f vh_disconnect.log + +grep vhusbdarm /var/log/syslog | tail -1 > /root/vh.log + +# Check if we crashed and burned starting up... +grep '>>> Shutdown <<<' /root/vh.log > /root/vh_check.log +# last line of vh.log will have >>> Shutdown <<< if we're stuck +# Action (if required): try restarting in background +if [ -s /root/vh_check.log ] +then +/usr/sbin/vhusbdarm -b +fi + +# Check if we've lost the Bayer Stick... +grep 'Unmanaging device' /root/vh.log | tail -1 > /root/vh_disconnect.log +# last line of vh.log will have Unmanaging device if we're stuck +# Action (if required): reboot (ffs, got to be a better way :o ) +if [ -s /root/vh_disconnect.log ] +then +/sbin/reboot +fi \ No newline at end of file From ed11fdedcfeccb98e4d669900cb657b49c372df9 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Sun, 27 Mar 2016 03:07:32 +0100 Subject: [PATCH 09/15] Regional CareLink Timestamp Support Manually set in config.sh at the moment - expect that to change shortly :) If updating from 0.82, grab config.sh, mmcsv640g.sh and CareLinkUploader only (no need to reinstall repo locally). Update your local config.sh file with your personal settings. --- config.sh | 5 +++++ mmcsv640g.sh | 23 ++++++++++++++++++++--- uploader/CareLinkUploader.exe | Bin 678912 -> 683008 bytes 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/config.sh b/config.sh index efbf845..80350cc 100644 --- a/config.sh +++ b/config.sh @@ -19,6 +19,11 @@ api_secret_hash='2ce212ef676099da17ec5aff64db0c83bf3f7b4f' # This is the SHA-1 H your_nightscout='https://yourwebsite.azurewebsites.net' #'https://something.azurewebsites.net' gap_mins=5 # max time to wait for CSV download. Suggest 5 or 10 minutes and always start higher gap_mins_delay=0 # use strict time for each upload cycle (if >0) or don't wait to minimise latency (0) +carelink_timestamp='DD/MM/YYTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option +#carelink_timestamp='MM/YY/YYTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option +#carelink_timestamp='YYYY-MM-DDTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option +#carelink_timestamp='DD-MM-YYYYTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option + # **************************************************************************************** # USER SPECIFIC Uploader Info - Please enter your values here # **************************************************************************************** diff --git a/mmcsv640g.sh b/mmcsv640g.sh index 0930496..01161da 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.82 23rd March 2016' +VERSION='V0.83 27th March 2016' # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options # CareLink Uploader (ie not using Firefox) is provided by Tom Collins - thanks Tom! @@ -52,8 +52,20 @@ pwd # Capture empty JSON files later ie "[]" EMPTYSIZE=3 #bytes +# Uploader setup START_TIME=0 #last time we ran the uploader (if at all) +# Update date format if required +echo Checking Regional CareLink Settings +if [ -z "$carelink_timestamp" ] + then + echo Timestamp not found in config.sh - setting to default + carelink_timestamp='DD/MM/YYTHH:mm:ss' # UK Regional Settings + fi +CARELINK_LINE="var CARELINK_TIME = '"$"$carelink_timestamp"$"' ;" +echo $carelink_timestamp +sed -i "s+^var CARELINK_TIME.*+$CARELINK_LINE+g" "$Mmcsv640gPath"/lib/utils.js + # Allow to run for ~240 hours (roughly), ~5 min intervals # This thing is bound to need some TLC and don't want it running indefinitely... COUNT=0 @@ -108,10 +120,11 @@ else if [ $((10#$(date +'%s')/60-$START_TIME)) -ge $gap_mins ] then START_TIME=$((10#$(date +'%s')/60)) - "$Mmcsv640gPath"/uploader/CareLinkUploader & + "$Mmcsv640gPath"$"/uploader/CareLinkUploader" "$1"$"/config.sh" & fi sleep 30s # check every 30 seconds done + sleep 10s # in case we've just stumbled across the file before it's finished downloading... inotifywait would be better solution for another day... fi # We've found a CSV file... hooray @@ -168,8 +181,12 @@ echo Extract Newly Generated Entries Only sed -n $LAST_LINESBUTONE,'$p' $CSVDataPath/latest640g.csv > $CSVDataPath/use640g_orig.csv echo +# Regional tweaks # Check for decimal comma within quotes and convert to decimal point (e.g. some euro regions) -sed 's/"\([0-9]*\),\([0-9]*\)"/\1.\2/g' $CSVDataPath/use640g_orig.csv > $CSVDataPath/use640g.csv +sed 's/"\([0-9]*\),\([0-9]*\)"/\1.\2/g' $CSVDataPath/use640g_orig.csv > $CSVDataPath/use640g_temp.csv + +# Replace semicolon delimiter with a comma +sed 's/;/,/g' $CSVDataPath/use640g_temp.csv > $CSVDataPath/use640g.csv # **************************************************************************************** # Don't parse 'all' to entries as generates a ton of wasted entries in DB diff --git a/uploader/CareLinkUploader.exe b/uploader/CareLinkUploader.exe index 262d83a8535a5ed52ccb03f1a5fa3564990046bd..f998b620d31cba2b999e4f6cac6e54e4f7f765cb 100644 GIT binary patch delta 30750 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 b17GK!>XWW#=ew}>c~S5FflpVOf0zCbXspUr delta 26464 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 EKV6*;UH||9 From 56bea2165c25d001ccdb86a6a990a44dd5609d6a Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Tue, 12 Apr 2016 23:34:50 +0100 Subject: [PATCH 10/15] Updated time formats Region detection by script rather than manual --- config.sh | 15 ++++++----- mmcsv640g.sh | 46 ++++++++++++++++++++++------------ uploader/CareLinkUploader.exe | Bin 683008 -> 689664 bytes uploader/dateformats.js | 27 ++++++++++++++++++++ 4 files changed, 66 insertions(+), 22 deletions(-) create mode 100644 uploader/dateformats.js diff --git a/config.sh b/config.sh index 80350cc..29ca799 100644 --- a/config.sh +++ b/config.sh @@ -19,15 +19,18 @@ api_secret_hash='2ce212ef676099da17ec5aff64db0c83bf3f7b4f' # This is the SHA-1 H your_nightscout='https://yourwebsite.azurewebsites.net' #'https://something.azurewebsites.net' gap_mins=5 # max time to wait for CSV download. Suggest 5 or 10 minutes and always start higher gap_mins_delay=0 # use strict time for each upload cycle (if >0) or don't wait to minimise latency (0) -carelink_timestamp='DD/MM/YYTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option -#carelink_timestamp='MM/YY/YYTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option -#carelink_timestamp='YYYY-MM-DDTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option -#carelink_timestamp='DD-MM-YYYYTHH:mm:ss' # Please select one of these by removing the # from the beginning of just ONE option - # **************************************************************************************** # USER SPECIFIC Uploader Info - Please enter your values here # **************************************************************************************** uploader=1 #Firefox + Selenium (0) or .NET uploader (1): default is 1 from version 0.8 onwards CareLinkURL='https://carelink.minimed.eu' #CareLink site, .eu or .com CareLinkUsername='user' #CareLink Username -CareLinkPassword='password' #CareLink Password \ No newline at end of file +CareLinkPassword='password' #CareLink Password +# **************************************************************************************** +# AUTOMATICALLY GENERATED Variables - No need to edit these yourself +# **************************************************************************************** +carelink_dateformat='dd/MM/yyyy' # Website date format from CareLink +carelink_customerID='' # Customer ID from CareLink +carelink_locale='en_GB' # Locale from CareLink +carelink_timestamp='DD/MM/YYTHH:mm:ss' # CSV time and date format for CareLink locale +# \ No newline at end of file diff --git a/mmcsv640g.sh b/mmcsv640g.sh index 01161da..8eff8cd 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,8 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.83 27th March 2016' +VERSION='V0.85 1st April 2016' +echo $VERSION # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options # CareLink Uploader (ie not using Firefox) is provided by Tom Collins - thanks Tom! @@ -36,7 +37,6 @@ source "$1"/config.sh # **************************************************************************************** # Let's go... # **************************************************************************************** -echo $VERSION echo Clearing Up CSV Download Directory in ten seconds... echo $DownloadPath @@ -48,24 +48,15 @@ export PATH=$PATH:$NodejsPath echo Using Data Directory cd "$CSVDataPath" pwd -# sleep 50 +echo Clearing Up CSV Files... +rm -f "$CSVDataPath"/*.csv + # Capture empty JSON files later ie "[]" EMPTYSIZE=3 #bytes # Uploader setup START_TIME=0 #last time we ran the uploader (if at all) -# Update date format if required -echo Checking Regional CareLink Settings -if [ -z "$carelink_timestamp" ] - then - echo Timestamp not found in config.sh - setting to default - carelink_timestamp='DD/MM/YYTHH:mm:ss' # UK Regional Settings - fi -CARELINK_LINE="var CARELINK_TIME = '"$"$carelink_timestamp"$"' ;" -echo $carelink_timestamp -sed -i "s+^var CARELINK_TIME.*+$CARELINK_LINE+g" "$Mmcsv640gPath"/lib/utils.js - # Allow to run for ~240 hours (roughly), ~5 min intervals # This thing is bound to need some TLC and don't want it running indefinitely... COUNT=0 @@ -126,6 +117,20 @@ else done sleep 10s # in case we've just stumbled across the file before it's finished downloading... inotifywait would be better solution for another day... fi + +if [ $COUNT -eq 0 ] +then + # Update date format if required - first cycle only + echo First Run - Checking Regional CareLink Settings + if [ -z "$carelink_timestamp" ] + then + echo Timestamp not found in config.sh - setting to default + carelink_timestamp='DD/MM/YYTHH:mm:ss' # UK Regional Settings + fi + CARELINK_LINE="var CARELINK_TIME = '"$"$carelink_timestamp"$"' ;" + echo $carelink_timestamp + sed -i "s+^var CARELINK_TIME.*+$CARELINK_LINE+g" "$Mmcsv640gPath"/lib/utils.js +fi # We've found a CSV file... hooray uploaded_recent_file=$(ls -t "$DownloadPath"/*.csv | head -1) @@ -181,12 +186,21 @@ echo Extract Newly Generated Entries Only sed -n $LAST_LINESBUTONE,'$p' $CSVDataPath/latest640g.csv > $CSVDataPath/use640g_orig.csv echo -# Regional tweaks +# Regional tweaks - multiple files generated for debug # Check for decimal comma within quotes and convert to decimal point (e.g. some euro regions) sed 's/"\([0-9]*\),\([0-9]*\)"/\1.\2/g' $CSVDataPath/use640g_orig.csv > $CSVDataPath/use640g_temp.csv +# Check for decimal comma within ; and convert to decimal point (e.g. some euro regions) +sed 's/;\([0-9]*\),\([0-9]*\)/\1.\2,/g' $CSVDataPath/use640g_temp.csv > $CSVDataPath/use640g_temp1.csv + +# Check for decimal comma with preceeding = and convert to decimal point (e.g. some euro regions) +sed 's/=\([0-9]*\),\([0-9]\)/=\1.\2/g' $CSVDataPath/use640g_temp1.csv > $CSVDataPath/use640g_temp2.csv + +# Check for decimal comma with preceeding = and - and convert to decimal point (e.g. some euro regions) +sed 's/=-\([0-9]*\),\([0-9]\)/=-\1.\2/g' $CSVDataPath/use640g_temp2.csv > $CSVDataPath/use640g_temp3.csv + # Replace semicolon delimiter with a comma -sed 's/;/,/g' $CSVDataPath/use640g_temp.csv > $CSVDataPath/use640g.csv +sed 's/;/,/g' $CSVDataPath/use640g_temp3.csv > $CSVDataPath/use640g.csv # **************************************************************************************** # Don't parse 'all' to entries as generates a ton of wasted entries in DB diff --git a/uploader/CareLinkUploader.exe b/uploader/CareLinkUploader.exe index f998b620d31cba2b999e4f6cac6e54e4f7f765cb..aa3a0f63a6eda6896f91b54038cfa0b8d7a11520 100644 GIT binary patch delta 25973 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 diff --git a/uploader/dateformats.js b/uploader/dateformats.js new file mode 100644 index 0000000..24408c5 --- /dev/null +++ b/uploader/dateformats.js @@ -0,0 +1,27 @@ +var dateformats = [ +{'locale': 'ar', 'dateformat': 'DD/MM/YY'}, +{'locale': 'eu', 'dateformat': 'M/D/YY'}, +{'locale': 'ca_ES', 'dateformat': 'DD/MM/YY'}, +{'locale': 'zh_CN', 'dateformat': 'YY-M-D'}, +{'locale': 'zh_TW', 'dateformat': 'YYYY/M/D'}, +{'locale': 'nl_NL', 'dateformat': 'D-M-YY'}, +{'locale': 'en_AU', 'dateformat': 'D/MM/YY'}, +{'locale': 'en_NZ', 'dateformat': 'D/MM/YY'}, +{'locale': 'en_ZA', 'dateformat': 'YYYY/MM/DD'}, +{'locale': 'en_GB', 'dateformat': 'DD/MM/YY'}, +{'locale': 'en_US', 'dateformat': 'M/D/YY'}, +{'locale': 'en_PL', 'dateformat': 'DD/MM/YY'}, +{'locale': 'fr_CA', 'dateformat': 'YY-MM-DD'}, +{'locale': 'fr_FR', 'dateformat': 'DD/MM/YY'}, +{'locale': 'ja_JP', 'dateformat': 'YY/MM/DD'}, +{'locale': 'ko_KR', 'dateformat': 'YY. M. D'}, +{'locale': 'mn', 'dateformat': 'M/D/YY'}, +{'locale': 'pt_BR', 'dateformat': 'DD/MM/YY'}, +{'locale': 'pt_PT', 'dateformat': 'DD-MM-YYYY'}, +{'locale': 'ru_RU', 'dateformat': 'DD.MM.YY'}, +{'locale': 'es_MX', 'dateformat': 'D/MM/YY'}, +{'locale': 'es_ES', 'dateformat': 'D/MM/YY'}, +{'locale': 'sv_SE', 'dateformat': 'YYYY-MM-DD'}, +{'locale': 'tr_TR', 'dateformat': 'DD.MM.YYYY'}, +{'locale': 'vi_VN', 'dateformat': 'DD/MM/YYYY'}, +]; \ No newline at end of file From d6f008d09a50327113dbcbb4e29e70523030b21e Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Wed, 13 Apr 2016 00:21:11 +0100 Subject: [PATCH 11/15] Date format tweaks --- uploader/dateformats.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/uploader/dateformats.js b/uploader/dateformats.js index 24408c5..45e8a28 100644 --- a/uploader/dateformats.js +++ b/uploader/dateformats.js @@ -2,26 +2,26 @@ var dateformats = [ {'locale': 'ar', 'dateformat': 'DD/MM/YY'}, {'locale': 'eu', 'dateformat': 'M/D/YY'}, {'locale': 'ca_ES', 'dateformat': 'DD/MM/YY'}, -{'locale': 'zh_CN', 'dateformat': 'YY-M-D'}, -{'locale': 'zh_TW', 'dateformat': 'YYYY/M/D'}, -{'locale': 'nl_NL', 'dateformat': 'D-M-YY'}, -{'locale': 'en_AU', 'dateformat': 'D/MM/YY'}, -{'locale': 'en_NZ', 'dateformat': 'D/MM/YY'}, -{'locale': 'en_ZA', 'dateformat': 'YYYY/MM/DD'}, +{'locale': 'en_AU', 'dateformat': 'DD/MM/YY'}, {'locale': 'en_GB', 'dateformat': 'DD/MM/YY'}, -{'locale': 'en_US', 'dateformat': 'M/D/YY'}, +{'locale': 'en_NZ', 'dateformat': 'D/MM/YY'}, {'locale': 'en_PL', 'dateformat': 'DD/MM/YY'}, +{'locale': 'en_US', 'dateformat': 'MM/DD/YY'}, +{'locale': 'en_ZA', 'dateformat': 'YYYY/MM/DD'}, +{'locale': 'es_MX', 'dateformat': 'D/MM/YY'}, +{'locale': 'es_ES', 'dateformat': 'D/MM/YY'}, {'locale': 'fr_CA', 'dateformat': 'YY-MM-DD'}, {'locale': 'fr_FR', 'dateformat': 'DD/MM/YY'}, {'locale': 'ja_JP', 'dateformat': 'YY/MM/DD'}, {'locale': 'ko_KR', 'dateformat': 'YY. M. D'}, {'locale': 'mn', 'dateformat': 'M/D/YY'}, +{'locale': 'nl_NL', 'dateformat': 'D-M-YY'}, {'locale': 'pt_BR', 'dateformat': 'DD/MM/YY'}, {'locale': 'pt_PT', 'dateformat': 'DD-MM-YYYY'}, {'locale': 'ru_RU', 'dateformat': 'DD.MM.YY'}, -{'locale': 'es_MX', 'dateformat': 'D/MM/YY'}, -{'locale': 'es_ES', 'dateformat': 'D/MM/YY'}, {'locale': 'sv_SE', 'dateformat': 'YYYY-MM-DD'}, {'locale': 'tr_TR', 'dateformat': 'DD.MM.YYYY'}, {'locale': 'vi_VN', 'dateformat': 'DD/MM/YYYY'}, +{'locale': 'zh_CN', 'dateformat': 'YY-M-D'}, +{'locale': 'zh_TW', 'dateformat': 'YYYY/M/D'}, ]; \ No newline at end of file From b7418a4e5130e561a6898c4b7c1d0706b69544bf Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Wed, 13 Apr 2016 00:36:38 +0100 Subject: [PATCH 12/15] Added known issues to script Imported from blog --- mmcsv640g.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/mmcsv640g.sh b/mmcsv640g.sh index 8eff8cd..b27d095 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -20,13 +20,15 @@ echo $VERSION # You run this at your own risk. # Thank you. -# **************************************************************************************** -# Known Issues TO (TRY TO) FIX - -# **************************************************************************************** -# Dropping the odd data point between uploads - overhaul data selection to use timestamp and not line number... -# Medtronic Predicted SG values bunch up horribly on >3hr or narrow browser display, not being rescaled. Change sample rate? eg display every other? -# **************************************************************************************** - +echo '*****************************' +echo ' Known Issues TO (TRY TO) FIX' +echo '*****************************' +echo ' - Dropping the odd data point between uploads - overhaul data selection to use timestamp and not line number...' +echo ' - Square / Dual Bolus Insulin is marked at the end of the bolus period ie IOB will be under-estimated during a dual / square bolus and over-estimated at the end of the the bolus onward. This needs to be properly implemented' +echo ' - Every time you upload to CareLink your CareLink DB and CSV file becomes bloated by ~180 lines of summary information: that quickly mounts up. The long term impact of that on your CareLink dataset is unknown' +echo '*****************************' +# If you get stuck / accidentally upload a huge CSV file, delete Treatments (and possibly Entries) documents in your MongoDB to revive Nightscout... +# Removed Medtronic Predicted SG from default upload - stability issues that need more time to look at. # **************************************************************************************** # Assumes running CareLink Uploader or running along with Selenium script (usually looking to upload data at 1, 6, 11, 16, ..., 56 minutes past) From f291922806d4d48677523a391358f6d338c7db71 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Thu, 14 Apr 2016 23:23:17 +0100 Subject: [PATCH 13/15] VH script added Alpha v0.2 - for interest rather than routine use... --- vh_cron.sh | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 137 insertions(+), 6 deletions(-) diff --git a/vh_cron.sh b/vh_cron.sh index 7c8bb09..e6a5258 100644 --- a/vh_cron.sh +++ b/vh_cron.sh @@ -1,15 +1,19 @@ #! /bin/bash +################################ # Simple script to check # - if Virtual Here is running # - if the USB device has disconnected +# - if the battery is too low or too hot +# Work in progress to control CHIP / Pi with VirtualHere # @LittleDMatt -# V0.1 22nd March 2016 +# V0.2 14th April 2016 -# Run as root -# !!Warning: Reboots your machine if required!! -# Designed to be run as regular (5 minute) crontab job -# Tested on a CHIP linux pc with VirtualHere v2.7.8 +################################ +# Run as root / as cron job - */5 * * * * /bin/bash -lc /root/vh_cron.sh will run every five minutes +# !!Warning: Shutsdown and Reboots your machine if required!! +# Battery and power script adapted from battery.sh by RzBo, Bellesserre, France +################################ # Housekeeping cd /root rm -f vh.log @@ -18,20 +22,147 @@ rm -f vh_disconnect.log grep vhusbdarm /var/log/syslog | tail -1 > /root/vh.log +################################ # Check if we crashed and burned starting up... grep '>>> Shutdown <<<' /root/vh.log > /root/vh_check.log # last line of vh.log will have >>> Shutdown <<< if we're stuck # Action (if required): try restarting in background if [ -s /root/vh_check.log ] then +echo '/usr/sbin/vhusbdarm -b' > /root/vh_action.log /usr/sbin/vhusbdarm -b fi +################################ # Check if we've lost the Bayer Stick... grep 'Unmanaging device' /root/vh.log | tail -1 > /root/vh_disconnect.log # last line of vh.log will have Unmanaging device if we're stuck # Action (if required): reboot (ffs, got to be a better way :o ) if [ -s /root/vh_disconnect.log ] then +echo 'reboot' > /root/vh_action.log /sbin/reboot -fi \ No newline at end of file +fi + +################################ +# Check Power status of CHIP +# Adapted from battery.sh by RzBo, Bellesserre, France +# force ADC enable for battery voltage and current +/usr/sbin/i2cset -y -f 0 0x34 0x82 0xC3 + +################################ +#read Power status register @00h +POWER_STATUS=$(i2cget -y -f 0 0x34 0x00) +#echo $POWER_STATUS + +BAT_STATUS=$(($(($POWER_STATUS&0x02))/2)) # divide by 2 is like shifting rigth 1 times +# echo $(($POWER_STATUS&0x02)) +##echo "BAT_STATUS="$BAT_STATUS +# echo $BAT_STATUS + +################################ +#read Power OPERATING MODE register @01h +POWER_OP_MODE=$(i2cget -y -f 0 0x34 0x01) +#echo $POWER_OP_MODE + +CHARG_IND=$(($(($POWER_OP_MODE&0x40))/64)) # divide by 64 is like shifting rigth 6 times +#echo $(($POWER_OP_MODE&0x40)) +## echo "CHARG_IND="$CHARG_IND +# echo $CHARG_IND + +BAT_EXIST=$(($(($POWER_OP_MODE&0x20))/32)) # divide by 32 is like shifting rigth 5 times +#echo $(($POWER_OP_MODE&0x20)) +## echo "BAT_EXIST="$BAT_EXIST +# echo $BAT_EXIST + +################################ +#read Charge control register @33h +CHARGE_CTL=$(i2cget -y -f 0 0x34 0x33) +## echo "CHARGE_CTL="$CHARGE_CTL +# echo $CHARGE_CTL + + +################################ +#read Charge control register @34h +CHARGE_CTL2=$(i2cget -y -f 0 0x34 0x34) +## echo "CHARGE_CTL2="$CHARGE_CTL2 +# echo $CHARGE_CTL2 + + +################################ +#read battery voltage 79h, 78h 0 mV -> 000h, 1.1 mV/bit FFFh -> 4.5045 V +BAT_VOLT_MSB=$(i2cget -y -f 0 0x34 0x78) +BAT_VOLT_LSB=$(i2cget -y -f 0 0x34 0x79) + +#echo $BAT_VOLT_MSB $BAT_VOLT_LSB +# bash math -- converts hex to decimal so `bc` won't complain later... +# MSB is 8 bits, LSB is lower 4 bits +BAT_BIN=$(( $(($BAT_VOLT_MSB << 4)) | $(($(($BAT_VOLT_LSB & 0x0F)) )) )) + +BAT_VOLT=$(echo "($BAT_BIN*1.1)"|bc) +## echo "Battery voltage = "$BAT_VOLT"mV" + +################### +#read Battery Discharge Current 7Ch, 7Dh 0 mV -> 000h, 0.5 mA/bit 1FFFh -> 1800 mA +#AXP209 datasheet is wrong, discharge current is in registers 7Ch 7Dh +#13 bits +BAT_IDISCHG_MSB=$(i2cget -y -f 0 0x34 0x7C) +BAT_IDISCHG_LSB=$(i2cget -y -f 0 0x34 0x7D) + +#echo $BAT_IDISCHG_MSB $BAT_IDISCHG_LSB + +BAT_IDISCHG_BIN=$(( $(($BAT_IDISCHG_MSB << 5)) | $(($(($BAT_IDISCHG_LSB & 0x1F)) )) )) + +BAT_IDISCHG=$(echo "($BAT_IDISCHG_BIN*0.5)"|bc) +## echo "Battery discharge current = "$BAT_IDISCHG"mA" + +################### +#read Battery Charge Current 7Ah, 7Bh 0 mV -> 000h, 0.5 mA/bit FFFh -> 1800 mA +#AXP209 datasheet is wrong, charge current is in registers 7Ah 7Bh +#(12 bits) +BAT_ICHG_MSB=$(i2cget -y -f 0 0x34 0x7A) +BAT_ICHG_LSB=$(i2cget -y -f 0 0x34 0x7B) + +#echo $BAT_ICHG_MSB $BAT_ICHG_LSB + +BAT_ICHG_BIN=$(( $(($BAT_ICHG_MSB << 4)) | $(($(($BAT_ICHG_LSB & 0x0F)) )) )) + +BAT_ICHG=$(echo "($BAT_ICHG_BIN*0.5)"|bc) +## echo "Battery charge current = "$BAT_ICHG"mA" + +################### +#read internal temperature 5eh, 5fh -144.7c -> 000h, 0.1c/bit FFFh -> 264.8c +TEMP_MSB=$(i2cget -y -f 0 0x34 0x5e) +TEMP_LSB=$(i2cget -y -f 0 0x34 0x5f) + +# bash math -- converts hex to decimal so `bc` won't complain later... +# MSB is 8 bits, LSB is lower 4 bits +TEMP_BIN=$(( $(($TEMP_MSB << 4)) | $(($(($TEMP_LSB & 0x0F)) )) )) + +TEMP_C=$(echo "($TEMP_BIN*0.1-144.7)"|bc) +echo "Internal temperature = "$TEMP_C"c" > /root/vh_temp.log + +################### +#read fuel gauge B9h +BAT_GAUGE_HEX=$(i2cget -y -f 0 0x34 0xb9) + +# bash math -- converts hex to decimal so `bc` won't complain later... +# MSB is 8 bits, LSB is lower 4 bits +BAT_GAUGE_DEC=$(($BAT_GAUGE_HEX)) + +echo "Battery gauge = "$BAT_GAUGE_DEC"%" > /root/vh_battery.log + +################################ +# Power Action +if [ $BAT_GAUGE_DEC -le 5 ] +then +echo 'Low Battery' > /root/vh_action.log +/sbin/shutdown +fi + +# Heat Action +if [ ${TEMP_C%.*} -gt 65 ] +then +echo 'Overheat' > /root/vh_action.log +/sbin/shutdown +fi From 31fdfd12b0ac982f98d0c76e08dd1d646de8d5ae Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Tue, 10 May 2016 22:54:41 +0100 Subject: [PATCH 14/15] Improved uploader robustness, latency, monitoring Bayer status Tested with NS 0.9Beta1 --- lib/utils.js | 9 ++++++++- mmcsv640g.sh | 9 ++++++++- uploader/CareLinkUploader.exe | Bin 689664 -> 696320 bytes uploader/dateformats.js | 3 +++ vh_cron.sh | 22 +++++++++++++++++----- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/lib/utils.js b/lib/utils.js index 67bdcbc..b540e0a 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -44,6 +44,12 @@ function reformatCPTime (str) { return m.format(OUTPUT_CAREPORTAL_TIME); } +// added reformatCL fn +function reformatCL (str) { + var m = moment(str); + return m.format(CARELINK_TIME); +} + function validTime (str) { return moment(str, OUTPUT_TIME_MASK).isValid( ); } @@ -142,7 +148,7 @@ function validate ( ) { return es.pipeline(validTimes( ), validValues( )); } -// Added reformatDate, reformatCPDate, reformatCPTime below +// Added reformatDate, reformatCPDate, reformatCPTime, reformatCL below var api = { columns: columns , validator: validator @@ -154,6 +160,7 @@ var api = { , reformatDate: reformatDate , reformatCPDate: reformatCPDate , reformatCPTime: reformatCPTime + , reformatCL: reformatCL , pluck: pluck , split: split , fields: splitIntoFields diff --git a/mmcsv640g.sh b/mmcsv640g.sh index b27d095..1a219e7 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.85 1st April 2016' +VERSION='V0.86 5th May 2016' echo $VERSION # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options @@ -115,6 +115,13 @@ else START_TIME=$((10#$(date +'%s')/60)) "$Mmcsv640gPath"$"/uploader/CareLinkUploader" "$1"$"/config.sh" & fi + if [ -s "$DownloadPath"/Announcement.json ] + then + echo "Checking Bayer Condition..." + mv "$DownloadPath"/Announcement.json Announcement.json + curl -vs -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "api-secret:"$api_secret_hash --data-binary @Announcement.json "$your_nightscout"$"/api/v1/treatments" + echo + fi sleep 30s # check every 30 seconds done sleep 10s # in case we've just stumbled across the file before it's finished downloading... inotifywait would be better solution for another day... diff --git a/uploader/CareLinkUploader.exe b/uploader/CareLinkUploader.exe index aa3a0f63a6eda6896f91b54038cfa0b8d7a11520..be26cb034da9d9272f63ee7a673d2f3e2430a9e9 100644 GIT binary patch delta 50665 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 diff --git a/uploader/dateformats.js b/uploader/dateformats.js index 45e8a28..d5b0377 100644 --- a/uploader/dateformats.js +++ b/uploader/dateformats.js @@ -2,10 +2,12 @@ var dateformats = [ {'locale': 'ar', 'dateformat': 'DD/MM/YY'}, {'locale': 'eu', 'dateformat': 'M/D/YY'}, {'locale': 'ca_ES', 'dateformat': 'DD/MM/YY'}, +{'locale': 'da_DK', 'dateformat': 'DD-MM-YY'}, {'locale': 'en_AU', 'dateformat': 'DD/MM/YY'}, {'locale': 'en_GB', 'dateformat': 'DD/MM/YY'}, {'locale': 'en_NZ', 'dateformat': 'D/MM/YY'}, {'locale': 'en_PL', 'dateformat': 'DD/MM/YY'}, +{'locale': 'en_SE', 'dateformat': 'YYYY-MM-DD'}, {'locale': 'en_US', 'dateformat': 'MM/DD/YY'}, {'locale': 'en_ZA', 'dateformat': 'YYYY/MM/DD'}, {'locale': 'es_MX', 'dateformat': 'D/MM/YY'}, @@ -16,6 +18,7 @@ var dateformats = [ {'locale': 'ko_KR', 'dateformat': 'YY. M. D'}, {'locale': 'mn', 'dateformat': 'M/D/YY'}, {'locale': 'nl_NL', 'dateformat': 'D-M-YY'}, +{'locale': 'pl_PL', 'dateformat': 'DD/MM/YY'}, {'locale': 'pt_BR', 'dateformat': 'DD/MM/YY'}, {'locale': 'pt_PT', 'dateformat': 'DD-MM-YYYY'}, {'locale': 'ru_RU', 'dateformat': 'DD.MM.YY'}, diff --git a/vh_cron.sh b/vh_cron.sh index e6a5258..8aafa71 100644 --- a/vh_cron.sh +++ b/vh_cron.sh @@ -6,7 +6,7 @@ # - if the battery is too low or too hot # Work in progress to control CHIP / Pi with VirtualHere # @LittleDMatt -# V0.2 14th April 2016 +# V0.21 15th April 2016 ################################ # Run as root / as cron job - */5 * * * * /bin/bash -lc /root/vh_cron.sh will run every five minutes @@ -34,13 +34,25 @@ echo '/usr/sbin/vhusbdarm -b' > /root/vh_action.log fi ################################ -# Check if we've lost the Bayer Stick... +# Check if we've lost the Bayer Stick from the OS... +lsusb > /root/vh_lsusb.log +grep 'Bayer' /root/vh_lsusb.log > /root/vh_usb.log +# Bayer will be listed - "Bayer Health Care LLC" +# Action (if required): reboot (ffs, got to be a better way :o ) +if [ ! -s /root/vh_usb.log ] +then +echo 'reboot - USB Loss' > /root/vh_action.log +/sbin/reboot +fi + +################################ +# Check if we've lost the Bayer Stick from VirtualHere... grep 'Unmanaging device' /root/vh.log | tail -1 > /root/vh_disconnect.log # last line of vh.log will have Unmanaging device if we're stuck # Action (if required): reboot (ffs, got to be a better way :o ) if [ -s /root/vh_disconnect.log ] then -echo 'reboot' > /root/vh_action.log +echo 'reboot - VH Loss' > /root/vh_action.log /sbin/reboot fi @@ -160,8 +172,8 @@ echo 'Low Battery' > /root/vh_action.log /sbin/shutdown fi -# Heat Action -if [ ${TEMP_C%.*} -gt 65 ] +# Heat Action - this is temp of AXP209 power management chip, not the battery, which rests ~5mm above it. R8 chip is on reverse of PCB. +if [ ${TEMP_C%.*} -gt 75 ] then echo 'Overheat' > /root/vh_action.log /sbin/shutdown From 2f3b8d396a3a662482847e4e8ea930c9eab21291 Mon Sep 17 00:00:00 2001 From: LittleDMatt Date: Wed, 12 Oct 2016 00:00:19 +0100 Subject: [PATCH 15/15] check for manual upload and uploader update for CareLink changes --- mmcsv640g.sh | 11 +++++------ uploader/CareLinkUploader.exe | Bin 696320 -> 702976 bytes 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/mmcsv640g.sh b/mmcsv640g.sh index 1a219e7..731bad3 100644 --- a/mmcsv640g.sh +++ b/mmcsv640g.sh @@ -9,7 +9,7 @@ echo '*Only Use If You Accept This*' echo '* Started 12th November 2015*' echo '*** Thanks - @LittleDMatt ***' echo '*****************************' -VERSION='V0.86 5th May 2016' +VERSION='V0.87 11th October 2016' echo $VERSION # # Indebted to Ben West for mmcsv - these js are tweaks and additions to his original parsing options @@ -40,10 +40,9 @@ source "$1"/config.sh # Let's go... # **************************************************************************************** -echo Clearing Up CSV Download Directory in ten seconds... +echo Looking for CSV File in Download Directory... echo $DownloadPath -sleep 10s -rm -f "$DownloadPath"/*.csv +echo e.g. for manual upload # Get to the right place locally... export PATH=$PATH:$NodejsPath @@ -65,13 +64,13 @@ COUNT=0 MAXCNT=2880 until [ $COUNT -gt $MAXCNT ]; do echo -echo Clearing Up CSV Download Directory... -rm -f "$DownloadPath"/*.csv # Splits here - Firefox or CareLink Uploader module) if [ $uploader -eq 0 ] then echo "Using Firefox and Selenium..." +echo "Clearing Up CSV Download Directory..." +rm -f "$DownloadPath"/*.csv echo "Waiting for CareLink upload page..." # Extract minutes past each hours and start at preset time (10# forces base ten to avoid errors with leading 0 in returned value, eg at 08 mins) while [ $((10#$(date +'%M') % $gap_mins)) -ne 0 ] ; diff --git a/uploader/CareLinkUploader.exe b/uploader/CareLinkUploader.exe index be26cb034da9d9272f63ee7a673d2f3e2430a9e9..700fa11ca6766e5f270920b7f3c897fd09351be3 100644 GIT binary patch delta 43839 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 KCFh~|DgFS9$vk2J delta 37162 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