From 17d4f3e8ce25283285f4a22760028e66c0953bca Mon Sep 17 00:00:00 2001 From: Andrei Vereha Date: Tue, 31 May 2022 09:52:10 +0200 Subject: [PATCH 01/71] try to fix disconnects --- .../pump/omnipod/dash/driver/comm/callbacks/BleCommCallbacks.kt | 2 +- .../plugins/pump/omnipod/dash/driver/comm/session/Connection.kt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/callbacks/BleCommCallbacks.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/callbacks/BleCommCallbacks.kt index 83ee2346b4..3724341c89 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/callbacks/BleCommCallbacks.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/callbacks/BleCommCallbacks.kt @@ -40,7 +40,7 @@ class BleCommCallbacks( if (newState == BluetoothProfile.STATE_CONNECTED && status == BluetoothGatt.GATT_SUCCESS) { connected.countDown() } - if (newState == BluetoothProfile.STATE_DISCONNECTED && status != BluetoothGatt.GATT_SUCCESS) { + if (newState == BluetoothProfile.STATE_DISCONNECTED) { // If status == SUCCESS, it means that we initiated the disconnect. disconnectHandler.onConnectionLost(status) } diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt index b403cb7af2..3b934510ed 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt @@ -61,6 +61,7 @@ class Connection( @Volatile var msgIO: MessageIO? = null + @Synchronized fun connect(connectionWaitCond: ConnectionWaitCondition) { aapsLogger.debug("Connecting connectionWaitCond=$connectionWaitCond") podState.connectionAttempts++ @@ -117,6 +118,7 @@ class Connection( dataBleIO.readyToRead() } + @Synchronized fun disconnect(closeGatt: Boolean) { aapsLogger.debug(LTag.PUMPBTCOMM, "Disconnecting closeGatt=$closeGatt") podState.bluetoothConnectionState = OmnipodDashPodStateManager.BluetoothConnectionState.DISCONNECTED From 4e9202651fdf8fe3342d9daebf211fa709beceb2 Mon Sep 17 00:00:00 2001 From: Andy Rozman Date: Sat, 11 Jun 2022 23:04:32 +0100 Subject: [PATCH 02/71] - small fix for bolus date, that might fix the problem --- .../androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt index a4e660fe4c..bf01175866 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt @@ -640,6 +640,8 @@ class MedtronicPumpPlugin @Inject constructor( } val now = System.currentTimeMillis() + detailedBolusInfo.timestamp = now + pumpSyncStorage.addBolusWithTempId(detailedBolusInfo, true, this) // we subtract insulin, exact amount will be visible with next remainingInsulin update. From 5fec1ccc552188d1990815b189bd578e13c275f1 Mon Sep 17 00:00:00 2001 From: Andy Rozman Date: Sun, 12 Jun 2022 14:24:25 +0100 Subject: [PATCH 03/71] - changed version number --- medtronic/Changelog.txt | 3 ++- .../androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/medtronic/Changelog.txt b/medtronic/Changelog.txt index fc0b934b1c..ddea9b2ba0 100644 --- a/medtronic/Changelog.txt +++ b/medtronic/Changelog.txt @@ -8,4 +8,5 @@ V2 - Rewrite into kotlin, new database (for v3.0) 0002 - some fixes 0003 - SMB fix (798) 0004 - Zero TBR Duration fix (798), refactoring of TempBasalProcessDTO -0005 - fixes to MedtronicHistoryEntry lateinit problem \ No newline at end of file +0005 - fixes to MedtronicHistoryEntry lateinit problem +0006 - when bolus is placed, we adjust detailedBolusInfo with current timestamp \ No newline at end of file diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt index bf01175866..9752d1ef42 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt @@ -116,7 +116,7 @@ class MedtronicPumpPlugin @Inject constructor( private var isBusy = false override fun onStart() { - aapsLogger.debug(LTag.PUMP, deviceID() + " started. (V2.0005)") + aapsLogger.debug(LTag.PUMP, deviceID() + " started. (V2.0006)") serviceConnection = object : ServiceConnection { override fun onServiceDisconnected(name: ComponentName) { aapsLogger.debug(LTag.PUMP, "RileyLinkMedtronicService is disconnected") From 9eebf60610bb8c5a380869e19110d3edcf98053b Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 12:15:27 +0200 Subject: [PATCH 04/71] libs update --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 1be193e49d..f7aeaacda4 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { gson_version = '2.9.0' nav_version = '2.4.2' appcompat_version = '1.4.2' - material_version = '1.6.0' + material_version = '1.6.1' constraintlayout_version = '2.1.4' preferencektx_version = '1.2.0' commonslang3_version = '3.12.0' @@ -40,7 +40,7 @@ buildscript { wearable_version = '2.9.0' play_services_wearable_version = '17.1.0' - play_services_location_version = '19.0.1' + play_services_location_version = '20.0.0' } repositories { google() From f887043aff9abccf3106112af667669e21e374b2 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 12:18:30 +0200 Subject: [PATCH 05/71] DanaR: disconnect on occlusion --- .../main/java/info/nightscout/androidaps/danar/comm/MsgError.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt index b2c5c0924b..fbbc7600f8 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt +++ b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt @@ -29,6 +29,8 @@ class MsgError( danaPump.bolusStopped = true bolusingEvent.status = errorString rxBus.send(bolusingEvent) + // at least on Occlusion pump stops communication. Try to force reconnecting + activePlugin.activePump.disconnect("Error from pump received") failed = true } else { failed = false From 0ff69f869668581d1d712ac02470cc92139c2d50 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 12:23:57 +0200 Subject: [PATCH 06/71] New Crowdin updates (#1822) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (French) * Update source file strings.xml * New translations strings.xml (Hebrew) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Spanish) * New translations strings.xml (French) * New translations strings.xml (Turkish) * New translations strings.xml (Norwegian) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Norwegian) * New translations strings.xml (Turkish) * New translations strings.xml (Czech) * New translations strings.xml (Hebrew) * New translations strings.xml (Dutch) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Irish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Norwegian) * New translations strings.xml (Czech) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Danish) * New translations strings.xml (Catalan) * New translations strings.xml (Bulgarian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Croatian) * New translations strings.xml (Romanian) * New translations strings.xml (Korean) * New translations strings.xml (German) * New translations strings.xml (Irish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Lithuanian) * New translations strings.xml (Bulgarian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Swedish) * New translations strings.xml (Catalan) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Portuguese) * New translations strings.xml (Swedish) * New translations strings.xml (Polish) * New translations strings.xml (German) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Lithuanian) * New translations strings.xml (Greek) * New translations strings.xml (Irish) * New translations strings.xml (Hungarian) * New translations strings.xml (Korean) * New translations strings.xml (Croatian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (German) * New translations strings.xml (Romanian) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Romanian) * New translations strings.xml (Irish) * New translations strings.xml (Hungarian) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Irish) * New translations strings.xml (Italian) * New translations strings.xml (Bulgarian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Catalan) * New translations strings.xml (Afrikaans) * New translations strings.xml (Portuguese) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Spanish) * New translations strings.xml (Polish) * New translations strings.xml (French) * New translations strings.xml (Swedish) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-af-rZA/strings.xml | 1 + app/src/main/res/values-bg-rBG/strings.xml | 1 + app/src/main/res/values-ca-rES/strings.xml | 2 + app/src/main/res/values-de-rDE/strings.xml | 3 ++ app/src/main/res/values-ga-rIE/strings.xml | 1 + app/src/main/res/values-ko-rKR/strings.xml | 2 + app/src/main/res/values-lt-rLT/strings.xml | 2 + app/src/main/res/values-pl-rPL/strings.xml | 6 +++ app/src/main/res/values-pt-rPT/strings.xml | 2 + app/src/main/res/values-ro-rRO/strings.xml | 4 ++ app/src/main/res/values-sv-rSE/strings.xml | 2 + .../src/main/res/values-de-rDE/strings.xml | 1 + .../src/main/res/values-ru-rRU/strings.xml | 3 ++ core/src/main/res/values-af-rZA/strings.xml | 3 ++ core/src/main/res/values-bg-rBG/strings.xml | 3 ++ core/src/main/res/values-ca-rES/strings.xml | 3 ++ core/src/main/res/values-cs-rCZ/strings.xml | 4 +- core/src/main/res/values-da-rDK/strings.xml | 2 - core/src/main/res/values-de-rDE/strings.xml | 4 ++ core/src/main/res/values-el-rGR/strings.xml | 3 ++ core/src/main/res/values-es-rES/strings.xml | 2 - core/src/main/res/values-fr-rFR/strings.xml | 4 +- core/src/main/res/values-ga-rIE/strings.xml | 2 + core/src/main/res/values-hr-rHR/strings.xml | 2 + core/src/main/res/values-hu-rHU/strings.xml | 1 + core/src/main/res/values-iw-rIL/strings.xml | 4 +- core/src/main/res/values-ko-rKR/strings.xml | 3 ++ core/src/main/res/values-lt-rLT/strings.xml | 3 ++ core/src/main/res/values-no-rNO/strings.xml | 4 +- core/src/main/res/values-pl-rPL/strings.xml | 5 +++ core/src/main/res/values-pt-rPT/strings.xml | 3 ++ core/src/main/res/values-ro-rRO/strings.xml | 4 ++ core/src/main/res/values-ru-rRU/strings.xml | 27 +++++++++++++ core/src/main/res/values-sk-rSK/strings.xml | 2 - core/src/main/res/values-sv-rSE/strings.xml | 3 ++ core/src/main/res/values-tr-rTR/strings.xml | 4 +- core/src/main/res/values-zh-rCN/strings.xml | 1 + .../src/main/res/values-ru-rRU/strings.xml | 2 + .../src/main/res/values-ru-rRU/strings.xml | 2 + .../src/main/res/values-af-rZA/strings.xml | 5 ++- .../src/main/res/values-bg-rBG/strings.xml | 3 ++ .../src/main/res/values-ca-rES/strings.xml | 3 ++ .../src/main/res/values-da-rDK/strings.xml | 2 + .../src/main/res/values-de-rDE/strings.xml | 3 ++ .../src/main/res/values-el-rGR/strings.xml | 5 ++- .../src/main/res/values-ga-rIE/strings.xml | 5 ++- .../src/main/res/values-ko-rKR/strings.xml | 3 ++ .../src/main/res/values-lt-rLT/strings.xml | 3 ++ .../src/main/res/values-pl-rPL/strings.xml | 3 ++ .../src/main/res/values-pt-rBR/strings.xml | 5 ++- .../src/main/res/values-pt-rPT/strings.xml | 3 ++ .../src/main/res/values-ro-rRO/strings.xml | 3 ++ .../src/main/res/values-ru-rRU/strings.xml | 38 +++++++++++++++++++ .../src/main/res/values-sv-rSE/strings.xml | 3 ++ shared/src/main/res/values-af-rZA/strings.xml | 19 ++++++++++ shared/src/main/res/values-bg-rBG/strings.xml | 21 ++++++++++ shared/src/main/res/values-ca-rES/strings.xml | 21 ++++++++++ shared/src/main/res/values-cs-rCZ/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-da-rDK/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-de-rDE/strings.xml | 22 +++++++++++ shared/src/main/res/values-el-rGR/strings.xml | 18 +++++++++ shared/src/main/res/values-es-rES/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-fr-rFR/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-ga-rIE/strings.xml | 21 ++++++++++ shared/src/main/res/values-hr-rHR/strings.xml | 4 ++ shared/src/main/res/values-hu-rHU/strings.xml | 6 +++ shared/src/main/res/values-it-rIT/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-iw-rIL/strings.xml | 4 ++ shared/src/main/res/values-ko-rKR/strings.xml | 21 ++++++++++ shared/src/main/res/values-lt-rLT/strings.xml | 21 ++++++++++ shared/src/main/res/values-nl-rNL/strings.xml | 4 ++ shared/src/main/res/values-no-rNO/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-pl-rPL/strings.xml | 29 ++++++++++++++ shared/src/main/res/values-pt-rBR/strings.xml | 22 +++++++++++ shared/src/main/res/values-pt-rPT/strings.xml | 21 ++++++++++ shared/src/main/res/values-ro-rRO/strings.xml | 21 ++++++++++ shared/src/main/res/values-ru-rRU/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-sk-rSK/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-sv-rSE/strings.xml | 22 +++++++++++ shared/src/main/res/values-tr-rTR/strings.xml | 30 +++++++++++++++ shared/src/main/res/values-zh-rCN/strings.xml | 30 +++++++++++++++ wear/src/main/res/values-fr-rFR/strings.xml | 3 ++ 82 files changed, 797 insertions(+), 20 deletions(-) create mode 100644 shared/src/main/res/values-af-rZA/strings.xml create mode 100644 shared/src/main/res/values-bg-rBG/strings.xml create mode 100644 shared/src/main/res/values-ca-rES/strings.xml create mode 100644 shared/src/main/res/values-cs-rCZ/strings.xml create mode 100644 shared/src/main/res/values-da-rDK/strings.xml create mode 100644 shared/src/main/res/values-de-rDE/strings.xml create mode 100644 shared/src/main/res/values-el-rGR/strings.xml create mode 100644 shared/src/main/res/values-es-rES/strings.xml create mode 100644 shared/src/main/res/values-fr-rFR/strings.xml create mode 100644 shared/src/main/res/values-ga-rIE/strings.xml create mode 100644 shared/src/main/res/values-hr-rHR/strings.xml create mode 100644 shared/src/main/res/values-hu-rHU/strings.xml create mode 100644 shared/src/main/res/values-it-rIT/strings.xml create mode 100644 shared/src/main/res/values-iw-rIL/strings.xml create mode 100644 shared/src/main/res/values-ko-rKR/strings.xml create mode 100644 shared/src/main/res/values-lt-rLT/strings.xml create mode 100644 shared/src/main/res/values-nl-rNL/strings.xml create mode 100644 shared/src/main/res/values-no-rNO/strings.xml create mode 100644 shared/src/main/res/values-pl-rPL/strings.xml create mode 100644 shared/src/main/res/values-pt-rBR/strings.xml create mode 100644 shared/src/main/res/values-pt-rPT/strings.xml create mode 100644 shared/src/main/res/values-ro-rRO/strings.xml create mode 100644 shared/src/main/res/values-ru-rRU/strings.xml create mode 100644 shared/src/main/res/values-sk-rSK/strings.xml create mode 100644 shared/src/main/res/values-sv-rSE/strings.xml create mode 100644 shared/src/main/res/values-tr-rTR/strings.xml create mode 100644 shared/src/main/res/values-zh-rCN/strings.xml diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index e7235fd739..809877af52 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -127,6 +127,7 @@ Eindverbruiker Lisensie Ooreenkoms MOET NIE GEBRUIK WORD OM MEDIESE BESLUITE TE MAAK NIE. DAAR IS GEEN WAARBORG DAT DIE PROGRAM, ONDERWORPE AAN TOEPASSELIKE WETTE EN WETGEWING. TENSY ANDERS GEMELD IN TEKS VOORSIEN DIE KOPIEREG-HOUERS EN / OF ANDER PARTYE DIE PROGRAM \"AS IS\" SONDER ËNIGE WAARBORG VAN ENIGE ORDE, UITDRUKKELIK OF IMPLISIET, INKLUSIEF, MAAR NIE BEPERK TOT DIE IMPLISIETE WAARBORG VAN TOEPAASBAARHEID OF NUT VIR EEN SPESIFIEKE DOEL. DIE TOTALE EN ALLE RISIKOVIR DIE KWALITEIT EN PRESTASIE VAN DIE PROGRAM RUS MET JOUSELF. VIR ENIGE PROGRAM DEFEKTIEWE OF FALINGS MOET JY PERSOONLIK DIE KOSTE EN REGSAANSPREEKLIKHEID DRA VAN ALLE NODIGE AKSIES, DIENS, REPARASIES OF KORREKSIES VIR USELF OF ENIGE DERDE PARTYE EN/OF AKSIES, DIENS, REPARASIES OF KORREKSIES WAT DEUR DIE PROGRAM GEDOEN WAS. EK VERSTAAN en STEM IN + Stoor Herlaai profiel SMS Communicator Toegelate telefoon nommers diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 4210714b25..0cd5f28707 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -879,5 +879,6 @@ Недостъпно + Вход diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 34b622bacc..7319244844 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -154,6 +154,7 @@ Acord de llicència per a l\'usuari final NO S\'HA D\'UTILITZAR PER A PRENDRE DECISIONS MÈDIQUES. EL PROGRAMA NO TÉ GARANTIA, EN LA MESURA QUE HO PERMET LA LLEI APLICABLE. EXCEPTE QUAN S\'INDIQUI EL CONTRARI PER ESCRIT, ELS PROPIETARIS DEL COPYRIGHT I/O ALTRES PARTS PROPORCIONEN EL PROGRAMA \"TAL QUAL\" SENSE CAP MENA DE GARANTIA, NI IMPLÍCITA NI EXPLÍCITA, INCLOENT, PERÒ SENSE ESTAR LIMITADES A, LES GARANTIES IMPLÍCITES DE COMERCIALITZACIÓ I ADEQUACIÓ A UN OBJECTIU PARTICULAR. US FEU RESPONSABLES TOTALMENT DELS RISCOS EN QUANT A LA QUALITAT I EL RENDIMENT DEL PROGRAMA. SI EL PROGRAMA FOS DEFECTUÓS, VOSALTRES ASSUMIU EL COST DE TOT SERVEI, REPARACIÓ O CORRECCIÓ. ENTENC I ACCEPTO + Desar Recarregar perfil Comunicador SMS Nrs. de telèfon permesos @@ -314,5 +315,6 @@ + Iniciar sessió diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 80200d30ee..0ccb861169 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -159,6 +159,7 @@ Endbenutzervereinbarung DAS PROGRAMM DARF NICHT FÜR MEDIZINISCHE ENTSCHEIDUNGEN BENUTZT WERDEN. ES GIBT IN DIESEM PROJEKT KEINE GEWÄHRLEISTUNG ODER GARANTIERTE UNTERSTÜTZUNG IN IRGENDEINER ART. WENN DU DICH ENTSCHEIDEST, ES ZU NUTZEN, HÄNGT DIE QUALITÄT UND LEISTUNGSFÄHIGKEIT DIESES PROJEKTES VON DIR SELBST AB. ES WIRD \"WIE BESEHEN\" ZUR VERFÜGUNG GESTELLT. SOLLTE SICH DAS PROGRAMM ALS FEHLERHAFT ERWEISEN, ÜBERNIMMST DU ALLE NOTWENDIGEN KRANKHEITSKOSTEN, SERVICELEISTUNGEN, REPARATUREN ODER KORREKTUREN. Ich verstehe und stimme zu. + Speichern Profil neuladen SMS-Kommunikator Erlaubte Telefonnummern @@ -939,5 +940,7 @@ Unerwartetes Verhalten. Kohlenhydrate & Bolus Sind Sie sicher, dass Sie diese(s) %1$d Element(e) löschen möchten? %1$d ausgewählt + Sortieren + Login diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml index 908b6b148b..115e43452f 100644 --- a/app/src/main/res/values-ga-rIE/strings.xml +++ b/app/src/main/res/values-ga-rIE/strings.xml @@ -59,6 +59,7 @@ Socruithe Easpórtáil Socruithe Iompórtáil Iompórtáil + Sábháil Athlódáil próifíl Is lúb díchumasaithe Is lúb cumasaithe diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 0f14db4df7..90652a8a7a 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -155,6 +155,7 @@ 최종 사용자 라이선스 동의서 이 프로그램을 의학적 결정을 내리는 데 사용해서는 안되며, 여기에 대한 어떠한 보증도 없습니다. 이 프로그램의 품질과 성능에 관한 모든 위험은 사용자에게 있습니다.\nMUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 모두 이해하였고 동의합니다. + 저장 프로파일 새로고침 SMS 통신기 허가된 전화번호 @@ -849,5 +850,6 @@ 계산 진행 중 + 로그인 diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index fb0d0f2b08..211286d69f 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -159,6 +159,7 @@ Licencinė sutartis su vartotoju PROGRAMA NEGALI BŪTI NAUDOJAMA GYDYMO SPRENDIMAMS PRIIMTI. PAGAL GALIOJANČIUS ĮSTATYMUS PROGRAMA NESUTEIKIA JOKIŲ GARANTIJŲ VARTOTOJUI. JEI RAŠTU NENURODYTA KITAIP, PROGRAMOS AUTORINIŲ TEISIŲ TURĖTOJAS IR/AR KITOS ŠALYS PATEIKIA PROGRAMĄ \"KAIP YRA\" BE JOKIŲ GARANTIJŲ, TIEK AKIVAIZDŽIŲ, TIEK NUMANOMŲ, ĮSKAITANT, BET NEAPSIRIBOJANT GALIMYBĘ NAUDOTI PROGRAMĄ KOMERCINIAMS AR KITOKIEMS DALINIAMS TIKSLAMS. RIZIKĄ, KYLANČIĄ NAUDOJANT PROGRAMĄ PRISIIMA PATS VARTOTOJAS. JEI PROGRAMA VEIKIA NETINKAMAI, IŠLAIDOS, SUSIJUSIOS SU PROGRAMOS SERVISU, TAISYMU AR KOREGAVIMU, TENKA VARTOTOJUI. SUPRATAU IR SUTINKU + Išsaugoti Atnaujinti profilį SMS komunikatorius Leidžiami telefono numeriai @@ -893,5 +894,6 @@ Negalimas + Prisijungti diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 06f2e32c76..716f005083 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -159,6 +159,7 @@ Umowa licencyjna użytkownika końcowego NIE MOŻE BY WYKORZYSTYWANY DO PODEJMOWANIA DECYZJI MEDYCZNYCH. NIE MA ŻADNEJ GWARANCJI NA PROGRAM, W ZAKRESIE DOZWOLONYM PRZEZ OBOWIĄZUJĄCE PRAWO. Z WYJĄTKIEM PRZYPADKÓW, GDY W INNY SPOSÓB PISMO OŚWIADCZENIA PRAW AUTORSKICH I / LUB INNYCH STRON, PRZEDSTAWIAĆ PROGRAM \"W STANIE TAKIM, W JAKIM SIĘ ZNAJDUJE\" BEZ JAKIEJKOLWIEK GWARANCJI, WYRAŹNEJ LUB DOMNIEMANEJ, W TYM MIĘDZY INNYMI DOMNIEMANYCH GWARANCJI PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU. CAŁKOWITE RYZYKO ZWIĄZANE Z JAKOŚCIĄ I WYNIKIEM PROGRAMU JEST PO PAŃSTWA STRONIE. W PRZYPADKU USZKODZENIA PROGRAMU UŻYTKOWNIK PONOSI KOSZT CAŁEGO NIEZBĘDNEGO SERWISU, NAPRAWY LUB POPRAWEK. W PRZYPADKU NIEPOROZUMIEŃ ZASTOSOWANIE PRAWNE MA UMOWA W ANGIELSKIEJ WERSJI JĘZYKOWEJ!!! ROZUMIEM I WYRAŻAM ZGODĘ + ZACHOWAJ Załaduj profil ponownie Komunikator SMS Dozwolone numery telefonów @@ -893,5 +894,10 @@ Niedostępne + Usuń wybrane pozycje + Czy na pewno chcesz usunąć %1$d pozycji + Wybrany %1$d + Sortuj + Zaloguj się diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 0c41fd2511..1049c0380e 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -159,6 +159,7 @@ Condições de Utilização NÃO DEVE SER USADO PARA FAZER DECISÕES MÉDICAS. NÃO HÁ NENHUMA GARANTIA PARA O PROGRAMA, NA EXTENSÃO PERMITIDA PELA LEGISLAÇÃO APLICÁVEL. EXCEPTO QUANDO DE OUTRA FORMA, POR ESCRITO, OS TITULARES DOS DIREITOS DE AUTOR E / OU OUTRAS PARTES FORNECEM O PROGRAMA “TAL COMO ESTÁ”, SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO, ÀS GARANTIAS IMPLÍCITAS DE COMERCIALIZAÇÃO E ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. TODO O RISCO QUANTO À QUALIDADE E DESEMPENHO DO PROGRAMA É CONSIGO. CASO O PROGRAMA SEJA DEFEITUOSO, ASSUME O CUSTO DE TODOS OS SERVIÇOS, REPAROS OU CORREÇÕES NECESSÁRIOS. EU ENTENDO E CONCORDO + Guardar Recarregar perfil Comunicador SMS Número de telefones permitidos @@ -894,5 +895,6 @@ Indisponível + Login diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index c9501b704f..2d55df640a 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -159,6 +159,7 @@ Licență utilizator final NU FOLOSIȚI PENTRU LUAREA DE DECIZII MEDICALE. NU EXISTĂ RĂSPUNDERE LEGALĂ SAU GARANȚIE PENTRU ACEST PROGRAM, ÎN LIMITA APLICABILĂ A LEGII. CU EXCEPTIA CAZURILOR SPECIAL MENȚIONATE, AUTORUL ȘI/SAU ALTE PERSOANE IMPLICATE PUN LA DISPOZIȚIE ACEST PROGRAM FĂRĂ NICIO GARANȚIE, IMPLICITĂ SAU EXPLICITĂ, INCLUZÂND, DAR FĂRĂ A SE LIMITA LA, GARANȚIILE LEGATE DE VĂNZAREA SAU POTRIVIREA PENTRU UN ANUME SCOP. ÎNTREGUL RISC LEGAT DE CALITATEA ȘI PERFORMANȚA ACESTUI PROGRAM CAD ÎN RESPONSABILITATEA DUMNEAVOASTRĂ. DACĂ PROGRAMUL SE DOVEDEȘTE A FI DEFECT, DUMNEAVOASTRĂ VĂ ASUMAȚI ÎNTREAGA RĂSPUNDERE, PRECUM ȘI TOATE COSTURILE LEGATE DE SERVICE, REPARAȚII SAU CORECȚII. ÎNȚELEG ȘI SUNT DE ACORD + Salvează Reîncarcă profilul Comunicator SMS Numere de telefon permise @@ -894,5 +895,8 @@ Nu este disponibil + Sigur vrei să elimini %1$d element(e) + Sortează + Autentificare diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 5a373efad3..ee5c7d8905 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -161,6 +161,7 @@ Eversense-appen. Licensavtal för slutanvändare FÅR INTE ANVÄNDAS FÖR ATT FATTA MEDICINSKA BESLUT. DET FINNS INGEN GARANTI FÖR PROGRAMMET I DEN UTSTRÄCKNING SOM TILLÅTS AV GÄLLANDE LAG. FÖRUTOM NÄR ANNAT ANGES SKRIFTLIGEN LEVERERAS APPLIKATIONEN SOM DEN ÄR HELT UTAN GARANTIER I NÅGON SOM HELST FORM, VARKEN UTTRYCKTA ELLER UNDERFÖRSTÅDDA, INKLUSIVE MEN INTE BEGRÄNSAT TILL SÄLJBARHET OCH LÄMPLIGHET FÖR ETT VISST ÄNDAMÅL. HELA RISKEN VAD GÄLLER KVALITET OCH PRESTANDA AV PROGRAMMET ÅLIGGER ANVÄNDAREN. OM PROGRAMMET VISAR SIG VARA DEFEKT ANTAR ANVÄNDAREN DEN FULLA FÖR KOSTNADEN FÖR ALL NÖDVÄNDIG SERVICE, REPARATION ELLER KORRIGERING. JAG FÖRSTÅR OCH GODKÄNNER + Spara Ladda om profil SMS-tjänst Godkända telefonnummer @@ -962,5 +963,6 @@ Eversense-appen. Okänt kommando: Procent Appens standardinställning + Logga in diff --git a/automation/src/main/res/values-de-rDE/strings.xml b/automation/src/main/res/values-de-rDE/strings.xml index 3cb46b8eaa..4fdf548bc7 100644 --- a/automation/src/main/res/values-de-rDE/strings.xml +++ b/automation/src/main/res/values-de-rDE/strings.xml @@ -113,4 +113,5 @@ Automatisierungs-Ereignis Umsortieren Benutzeraktion + Sind Sie sicher, dass Sie diese(s) %1$d Element(e) löschen möchten? diff --git a/automation/src/main/res/values-ru-rRU/strings.xml b/automation/src/main/res/values-ru-rRU/strings.xml index 2caaa73c95..181d25930f 100644 --- a/automation/src/main/res/values-ru-rRU/strings.xml +++ b/automation/src/main/res/values-ru-rRU/strings.xml @@ -120,4 +120,7 @@ Вы уверены, что хотите удалить %1$d элемент Сортировать Автоматизация системы + Запустить автоматизацию + Добавить правило + Удаление/сортировка diff --git a/core/src/main/res/values-af-rZA/strings.xml b/core/src/main/res/values-af-rZA/strings.xml index e16a8775f0..0b6a6abc84 100644 --- a/core/src/main/res/values-af-rZA/strings.xml +++ b/core/src/main/res/values-af-rZA/strings.xml @@ -2,7 +2,9 @@ + Stoor %1$.2f U/h + ]]> Ja Nee LOOP UIT AKSIE GESTEL DEUR BEPERKINGS @@ -60,5 +62,6 @@ %1$.2f beperk tot %2$.2f + Basale diff --git a/core/src/main/res/values-bg-rBG/strings.xml b/core/src/main/res/values-bg-rBG/strings.xml index 9eada62db6..183980600d 100644 --- a/core/src/main/res/values-bg-rBG/strings.xml +++ b/core/src/main/res/values-bg-rBG/strings.xml @@ -4,6 +4,7 @@ Обнови Грешка + Съхрани Не е зададен Неуспешно обновяване на базалния профил Профила на помпата е обновен @@ -41,6 +42,7 @@ въглехидрати Грешен профил !!! НЕ Е АКТИВИРАН ПРОФИЛ + ]]> Дата Единици DIA (Време на действие на инсулина): @@ -285,6 +287,7 @@ %1$.2f ограничен до %2$.2f SMS + Базал %1$d дeн diff --git a/core/src/main/res/values-ca-rES/strings.xml b/core/src/main/res/values-ca-rES/strings.xml index 16ce76713d..1eb5f978ea 100644 --- a/core/src/main/res/values-ca-rES/strings.xml +++ b/core/src/main/res/values-ca-rES/strings.xml @@ -2,6 +2,8 @@ + Desar + ]]> @@ -66,5 +68,6 @@ %1$.2f limitat a %2$.2f »%1$s« supera els límits + Basal diff --git a/core/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml index 7867c85bf7..8f03f86ea7 100644 --- a/core/src/main/res/values-cs-rCZ/strings.xml +++ b/core/src/main/res/values-cs-rCZ/strings.xml @@ -464,8 +464,8 @@ Poslední spuštění : Varování : Vyberte profil pro ladění - Autotune funguje pouze s jedinou hodnotou IC, váš profil má %1$d hodnot. Průměrná hodnota je %2$.2fg/U - Autotune funguje pouze s jedinou hodnotou ISF, váš profil má %1$d hodnot. Průměrná hodnota je %2$.1f%3$s/U + Vybraný profil má %1$d hodnot IC. Autotune bude používat %2$.2f g/U + Vybraný profil má %1$d hodnot ISF. Autotune bude používat %2$.1f %3$s/U Chyba vstupních dat, zkuste autotune spustit znovu nebo snížit počet dní Autotune spuštěno, prosím buďte trpěliví Před použitím výsledky pečlivě zkontrolujte! diff --git a/core/src/main/res/values-da-rDK/strings.xml b/core/src/main/res/values-da-rDK/strings.xml index 8f64c75dee..d446162c2f 100644 --- a/core/src/main/res/values-da-rDK/strings.xml +++ b/core/src/main/res/values-da-rDK/strings.xml @@ -461,8 +461,6 @@ Sidst kørt : Advarsel : Vælg profil, der skal justeres - Autotune fungerer med kun én IC-værdi, din profil har %1$d værdier. Gennemsnitsværdi er %2$.2fg/E - Autotune virker med kun én ISF-værdi, din profil har %1$d værdier. Gennemsnitlig værdi er %2$.1f%3$s/E Automatisk beregning startet, vær venligst tålmodig Kontrollér resultaterne omhyggeligt, før du bruger dem! Delvis resultat dag %1$d / %2$d justeret diff --git a/core/src/main/res/values-de-rDE/strings.xml b/core/src/main/res/values-de-rDE/strings.xml index 0c2664a530..5b12029067 100644 --- a/core/src/main/res/values-de-rDE/strings.xml +++ b/core/src/main/res/values-de-rDE/strings.xml @@ -42,6 +42,7 @@ Kohlenhydrate Ungültiges oder defektes Profil! KEIN PROFIL GESETZT + ]]> Datum Einheiten DIA @@ -428,6 +429,9 @@ Insight Refresh Button abnehmend %1$s mit %2$s zunehmend %1$s mit %2$s + Basal + %1$d ausgewählt + Sortieren %1$d Tag diff --git a/core/src/main/res/values-el-rGR/strings.xml b/core/src/main/res/values-el-rGR/strings.xml index 730d941711..68de2b7014 100644 --- a/core/src/main/res/values-el-rGR/strings.xml +++ b/core/src/main/res/values-el-rGR/strings.xml @@ -2,7 +2,9 @@ + Αποθήκευση %1$.2f U/h + ]]> Ναι Όχι ΤΟ ΚΥΚΛΩΜΑ ΑΠΕΝΕΡΓΟΠΟΙΗΘΗΚΕ ΑΠΟ ΠΕΡΙΟΡΙΣΜΟΥΣ @@ -60,5 +62,6 @@ Το %1$.2f περιορίζεται σε %2$.2f + Βασικός Ρυθμός diff --git a/core/src/main/res/values-es-rES/strings.xml b/core/src/main/res/values-es-rES/strings.xml index 936daa643a..19f888b736 100644 --- a/core/src/main/res/values-es-rES/strings.xml +++ b/core/src/main/res/values-es-rES/strings.xml @@ -464,8 +464,6 @@ Última ejecución : Advertencia : Selecciona el perfil para a ajustar - Autotune sólo funciona con un valor de IC. Tu perfil tiene %1$d valores. El valor promedio es %2$.2fg/U - Autotune sólo funciona con un valor de ISF. Tu perfil tiene %1$d valores. El valor promedio es %2$.1f%3$s/U Error en los datos de entrada, intenta ejecutar de nuevo autotune o reducir el número de días Cálculo de autototune iniciado, por favor ten paciencia ¡Comprueba los resultados cuidadosamente antes de usarlos! diff --git a/core/src/main/res/values-fr-rFR/strings.xml b/core/src/main/res/values-fr-rFR/strings.xml index 042e41d62c..2170468b20 100644 --- a/core/src/main/res/values-fr-rFR/strings.xml +++ b/core/src/main/res/values-fr-rFR/strings.xml @@ -464,8 +464,8 @@ Dernier run : Avertissement : Sélectionnez le profil à optimiser - Autotune ne fonctionne qu\'avec une seule valeur G/I, votre profil a %1$d valeurs. La valeur moyenne est de %2$.2f g/U - Autotune ne calcule qu\'une seule valeur de SI, votre profil a %1$d valeurs. La valeur moyenne est de %2$.1f %3$s/U + Le profil sélectionné %1$d valeurs de G/I. Autotune va utiliser la moyenne %2$.2f g/U + Le profil sélectionné a %1$d valeurs de SI. Autotune va utiliser la moyenne %2$.1f %3$s/U Erreur dans les données d\'entrée, essayez de relancer le calcul ou réduire le nombre de jours Le calcul Autotune a commencé, veuillez patienter Vérifiez attentivement les résultats avant de les utiliser! diff --git a/core/src/main/res/values-ga-rIE/strings.xml b/core/src/main/res/values-ga-rIE/strings.xml index 57edab2df3..0ab0b703fd 100644 --- a/core/src/main/res/values-ga-rIE/strings.xml +++ b/core/src/main/res/values-ga-rIE/strings.xml @@ -3,6 +3,7 @@ Earráid + Sábháil Ag fanacht do caidéil Ag nascadh le %1$d s Ag seachadadh %1$.2f A @@ -114,5 +115,6 @@ + Bunaidh diff --git a/core/src/main/res/values-hr-rHR/strings.xml b/core/src/main/res/values-hr-rHR/strings.xml index 6f676893c7..57579e20e0 100644 --- a/core/src/main/res/values-hr-rHR/strings.xml +++ b/core/src/main/res/values-hr-rHR/strings.xml @@ -2,8 +2,10 @@ + Zatvori + Otkaži diff --git a/core/src/main/res/values-hu-rHU/strings.xml b/core/src/main/res/values-hu-rHU/strings.xml index cb08528112..8d7d288e7b 100644 --- a/core/src/main/res/values-hu-rHU/strings.xml +++ b/core/src/main/res/values-hu-rHU/strings.xml @@ -26,5 +26,6 @@ + Bázis diff --git a/core/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml index bf525d5731..700387ef45 100644 --- a/core/src/main/res/values-iw-rIL/strings.xml +++ b/core/src/main/res/values-iw-rIL/strings.xml @@ -464,8 +464,8 @@ הפעלה אחרונה : אזהרה : בחרו פרופיל לכוונון - כוונון אוטומטי עובד עם ערך IC אחד בלבד, לפרופיל שלכם יש %1$d ערכים. הערך הממוצע הוא %2$.2f גר\'\\יח\' - כוונון אוטומטי עובד עם ערך ISF אחד בלבד, לפרופיל שלכם יש %1$d ערכים. הערך הממוצע הוא %2$.1f %3$s\\יח\' + בפרופיל הנבחר יש %1$d ערכי יחס פחמימות. הכיוונון האוטומטי ישתמש ב-%2$.2f גר\'\\יח\' + בפרופיל הנבחר יש %1$d ערכי יחס תיקון. הכיוונון האוטומטי ישתמש ב-%2$.1f %3$s\\יח\' שגיאה בנתוני הקלט, נסו להפעיל בשנית או שנסו לצמצם את מספר הימים חישוב הכוונון האוטומטי התחיל, אנא התאזרו בסבלנות בדקו היטב את התוצאות לפני השימוש בהן! diff --git a/core/src/main/res/values-ko-rKR/strings.xml b/core/src/main/res/values-ko-rKR/strings.xml index 59b3617bea..c04e9ec5b3 100644 --- a/core/src/main/res/values-ko-rKR/strings.xml +++ b/core/src/main/res/values-ko-rKR/strings.xml @@ -4,6 +4,7 @@ 새로고침 에러 + 저장 설정되지 않음 Basal 프로파일 갱신 실패 Basal 프로파일이 펌프에 업데이트 되었습니다 @@ -40,6 +41,7 @@ 탄수화물 프로파일이 유효하지 않습니다!!! 프로파일이 설정되지 않았습니다. + ]]> 날짜 단위 인슐린활동시간(DIA): @@ -376,6 +378,7 @@ »%1$s« %2$.2f이 \'고정된 한계값\'을 벗어났습니다. Basal 값 + Basal %1$d 일 diff --git a/core/src/main/res/values-lt-rLT/strings.xml b/core/src/main/res/values-lt-rLT/strings.xml index 976c5a496f..c834cbf768 100644 --- a/core/src/main/res/values-lt-rLT/strings.xml +++ b/core/src/main/res/values-lt-rLT/strings.xml @@ -4,6 +4,7 @@ Atnaujinti Klaida + Išsaugoti Nenustatyta Nepavyko atnaujinti bazės profilio Bazės profilis pompoje atnaujintas @@ -41,6 +42,7 @@ AV Netinkamas profilis!!! Nenustatytas profilis + ]]> Data Vienetai IVT @@ -418,6 +420,7 @@ Bolusas OK Pompa suporuota Insight Mygtukas Naujinti + Valandinė bazė %1$d d. diff --git a/core/src/main/res/values-no-rNO/strings.xml b/core/src/main/res/values-no-rNO/strings.xml index dfbe711045..d8b19182c7 100644 --- a/core/src/main/res/values-no-rNO/strings.xml +++ b/core/src/main/res/values-no-rNO/strings.xml @@ -464,8 +464,8 @@ Siste beregning : Varsel: Velg profil du vil justere - Autotune fungerer bare med én IC-verdi, og din profil har %1$d verdier. Gjennomsnittlig verdi er %2$.2fg/E - Autotune fungerer med bare én ISF verdi, og din profil har %1$d verdier. Gjennomsnittsverdi er %2$.1f%3$s/E + Valgt profil har %1$d IK verdier. Autotune vil bruke %2$.2f g/E + Valgte profil har %1$d ISF-verdier. Autotune vil bruke %2$.1f %3$s/E Feil i innleste datasett, prøv å kjør Autotune en gang til eller reduser antall dager Har startet Autotune beregning, vennligst vent Kontroller resultatene nøye før du bruker dem! diff --git a/core/src/main/res/values-pl-rPL/strings.xml b/core/src/main/res/values-pl-rPL/strings.xml index 76332f8fbf..eba2bf6385 100644 --- a/core/src/main/res/values-pl-rPL/strings.xml +++ b/core/src/main/res/values-pl-rPL/strings.xml @@ -4,6 +4,7 @@ Odśwież Błąd + ZACHOWAJ Nie ustawiono Nieudane uaktualnienie profilu bazy Profil bazowy w pompie uaktualniony @@ -41,6 +42,7 @@ Węglowodany Nieprawidłowy profil !!! NIE USTAWIONO PROFILU + ]]> Data Jednostki DIA @@ -418,6 +420,9 @@ Bolus OK Pompa sparowana Przycisk Odświeżania Insight + Baza + Wybrany %1$d + Sortuj %1$d dzień diff --git a/core/src/main/res/values-pt-rPT/strings.xml b/core/src/main/res/values-pt-rPT/strings.xml index ffbe00bc75..29c658270c 100644 --- a/core/src/main/res/values-pt-rPT/strings.xml +++ b/core/src/main/res/values-pt-rPT/strings.xml @@ -4,6 +4,7 @@ Actualizar Erro + Guardar Não definido Falha a actualizar perfil da basal Perfil Basal actualizado na bomba @@ -40,6 +41,7 @@ Hidratos Perfil inválido !!! SEM PERFIL DEFINIDO + ]]> Data Unidades DIA @@ -337,6 +339,7 @@ %1$.2f limitado a %2$.2f »%1$s« está fora dos limites máximos + Basal %1$d dia diff --git a/core/src/main/res/values-ro-rRO/strings.xml b/core/src/main/res/values-ro-rRO/strings.xml index 1ef70c3e8f..dc4b4b01f3 100644 --- a/core/src/main/res/values-ro-rRO/strings.xml +++ b/core/src/main/res/values-ro-rRO/strings.xml @@ -4,6 +4,7 @@ Actualizează Eroare + Salvează Nesetată Actualizarea profilului bazalei a eșuat Profilul bazalei a fost modificat în pompă @@ -41,6 +42,7 @@ Carbohidrați Profil invalid!!! NICIUN PROFIL SETAT + ]]> Data Unități DIA @@ -419,6 +421,8 @@ Bolus OK Pompă împerecheată Buton Reîmprospătare Insight + Rate bazale + Sortează %1$d zi diff --git a/core/src/main/res/values-ru-rRU/strings.xml b/core/src/main/res/values-ru-rRU/strings.xml index 02f52a4a7c..86d074832f 100644 --- a/core/src/main/res/values-ru-rRU/strings.xml +++ b/core/src/main/res/values-ru-rRU/strings.xml @@ -456,9 +456,36 @@ Применить усредненный суточный IC/ISF Autotune не настраивает суточные вариации, эта опция только применяет усредненные коэффициенты IC и ISF к суточному профилю Включить больше информации логов для отладки + Включите только если разработчик просит отправить больше информации о логах для отладки плагина Autotune Количество дней обработки данных Autotune по умолчанию (до 30) + Настроено + Профиль: + Настроено дней: + Последнее выполнение: + Внимание: + Выберите профиль для изменения Ошибка ввода данных, попробуйте запустить снова autotune или уменьшить количество дней + Идет настройка автоматизации, ждите + Перед использованием внимательно проверьте результаты! + Частичный результат дня %1$d / %2$d с отладкой + Результат: %1$s + Парам + % + Отсутствует + Профиль авто тюн + Выполнить Autotune + Проверьте профиль ввода + Сравнить профили + Копировать в локальный профиль + Обновить профиль ввода + Вернуть профиль ввода + Создать новый локальный профиль из этого профиля Autotune? + Обновить профиль %1$s профилем Autotune? + Восстановить профиль %1$s с помощью входного профиля? Неверный профиль + Autotune выполнен без переключения профиля + Autotune выполнен и профиль переключён автоматически + Ошибка во время последнего выполнения Autotune %1$d день %1$d дня diff --git a/core/src/main/res/values-sk-rSK/strings.xml b/core/src/main/res/values-sk-rSK/strings.xml index 780625bd0a..cbd101e11e 100644 --- a/core/src/main/res/values-sk-rSK/strings.xml +++ b/core/src/main/res/values-sk-rSK/strings.xml @@ -464,8 +464,6 @@ Posledné spustenie : Upozornenie : Vyberte profil pre ladenie - Autotune funguje iba s jedinou hodnotou IC, váš profil má %1$d hodnôt. Priemerná hodnota je %2$.2fg/JI - Autotune funguje iba s jedinou hodnotou IC, váš profil má %1$d hodnôt. Priemerná hodnota je %2$.1fg/JI Chyba vstupných dát, skúste znova spustiť Autotune, alebo znížte počet dní Autotune spustený, prosím buďte trpezliví Pred použitím výsledky starostlivo skontrolujte! diff --git a/core/src/main/res/values-sv-rSE/strings.xml b/core/src/main/res/values-sv-rSE/strings.xml index eb3759fb8d..86d9f25d0c 100644 --- a/core/src/main/res/values-sv-rSE/strings.xml +++ b/core/src/main/res/values-sv-rSE/strings.xml @@ -4,6 +4,7 @@ Uppdatera Fel + Spara Ej vald Lyckades inte uppdatera basalprofilen Basalprofilen uppdaterad i pumpen @@ -41,6 +42,7 @@ Kolhydrater Ogiltig profil! INGEN PROFIL VALD + ]]> Datum Enheter DIA @@ -426,6 +428,7 @@ Uppdat. knapp för Insight minska %1$s med %2$s öka %1$s med %2$s + Basal %1$d dag diff --git a/core/src/main/res/values-tr-rTR/strings.xml b/core/src/main/res/values-tr-rTR/strings.xml index db7b65151d..07bb349882 100644 --- a/core/src/main/res/values-tr-rTR/strings.xml +++ b/core/src/main/res/values-tr-rTR/strings.xml @@ -464,8 +464,8 @@ Son Çalıştırma : Uyarı : Ayarlanacak profili seçin - OtoAyar yalnızca bir IC değeriyle çalışır, profilinizde %1$d değer mevcut. Ortalama değer: %2$.2fg/Ü - OtoAyar yalnızca bir İDF değeriyle çalışır, profilinizde %1$d değer mevcut. Ortalama değer: %2$.1f%3$s/Ü + Seçilen profilde %1$d KİO değeri var. OtoAyar %2$.2f g/Ü kullanacak + Seçilen profilde %1$d İDF değeri var. OtoAyar %2$.1f %3$s/Ü kullanacak Giriş verilerinde hata, otoayarı tekrar çalıştırmayı deneyin veya gün sayısını azaltın OtoAyar hesaplaması başladı, lütfen sabırlı olun Kullanmadan önce sonuçları dikkatlice kontrol edin! diff --git a/core/src/main/res/values-zh-rCN/strings.xml b/core/src/main/res/values-zh-rCN/strings.xml index d0f3e1844a..d64d0e7d41 100644 --- a/core/src/main/res/values-zh-rCN/strings.xml +++ b/core/src/main/res/values-zh-rCN/strings.xml @@ -42,6 +42,7 @@ 碳水化合物 无效的配置文件!!! 没有设置配置文件 + ]]> 日期 单位 DIA diff --git a/diaconn/src/main/res/values-ru-rRU/strings.xml b/diaconn/src/main/res/values-ru-rRU/strings.xml index f3fd8c04f3..126ce64c5c 100644 --- a/diaconn/src/main/res/values-ru-rRU/strings.xml +++ b/diaconn/src/main/res/values-ru-rRU/strings.xml @@ -152,4 +152,6 @@ Приостановка на низких отключена, команда ВЫКЛ отклонена. Запуск временного базала отклоняется при работе tempbasal Остановка временного базала отклоняется при неработающем tempbasal + Отправить лог помпы в Diaconn Cloud. + Синхронизация с Diaconn Cloud diff --git a/medtronic/src/main/res/values-ru-rRU/strings.xml b/medtronic/src/main/res/values-ru-rRU/strings.xml index 30c3a6af52..71e7be8ba3 100644 --- a/medtronic/src/main/res/values-ru-rRU/strings.xml +++ b/medtronic/src/main/res/values-ru-rRU/strings.xml @@ -91,4 +91,6 @@ Если эта опция включена, то она отменяет временный базал до конца каждого часа. Такой метод помогает прекратить почасовую вибрацию некоторых помп. %1$.1fед/ч(%2$d мин осталось) Обнаружены недопустимые данные истории помпы. Создайте запись о новой проблеме и предоставьте журналы. + Статистика RL + Тип: diff --git a/openhumans/src/main/res/values-af-rZA/strings.xml b/openhumans/src/main/res/values-af-rZA/strings.xml index 3ea04e700d..a2a8d91107 100644 --- a/openhumans/src/main/res/values-af-rZA/strings.xml +++ b/openhumans/src/main/res/values-af-rZA/strings.xml @@ -1,2 +1,5 @@ - + + Kanselleer + Maak toe + diff --git a/openhumans/src/main/res/values-bg-rBG/strings.xml b/openhumans/src/main/res/values-bg-rBG/strings.xml index 80e2ef9000..6aee856ee4 100644 --- a/openhumans/src/main/res/values-bg-rBG/strings.xml +++ b/openhumans/src/main/res/values-bg-rBG/strings.xml @@ -16,4 +16,7 @@ Излязохте от \"Open Humans\". Натиснете тук за да влезете отново, ако това не е било нарочно. Качи сега + Условия за ползване + Откажи + Затвори diff --git a/openhumans/src/main/res/values-ca-rES/strings.xml b/openhumans/src/main/res/values-ca-rES/strings.xml index 9868d0e25d..7eac6702e2 100644 --- a/openhumans/src/main/res/values-ca-rES/strings.xml +++ b/openhumans/src/main/res/values-ca-rES/strings.xml @@ -7,4 +7,7 @@ Enviar només si carregant Heu tancat la sessió amb Open Humans Cliqueu aquí si no era la intenció. + Condicions d\'ús + Cancel·lar + Tancar diff --git a/openhumans/src/main/res/values-da-rDK/strings.xml b/openhumans/src/main/res/values-da-rDK/strings.xml index e58df734fe..dd505c8935 100644 --- a/openhumans/src/main/res/values-da-rDK/strings.xml +++ b/openhumans/src/main/res/values-da-rDK/strings.xml @@ -16,4 +16,6 @@ Du er blevet logget ud af Open Humans Klik her for at logge ind igen, hvis dette ikke var meningen. Upload nu + Annuller + Luk diff --git a/openhumans/src/main/res/values-de-rDE/strings.xml b/openhumans/src/main/res/values-de-rDE/strings.xml index f31bb0cf22..19a6178baa 100644 --- a/openhumans/src/main/res/values-de-rDE/strings.xml +++ b/openhumans/src/main/res/values-de-rDE/strings.xml @@ -16,4 +16,7 @@ Du wurdest von Open Humans abgemeldet. Klicke hier, um Dich erneut anzumelden, falls dies versehentlich passiert ist. Jetzt hochladen + Nutzungsbedingungen + Abbrechen + Schließen diff --git a/openhumans/src/main/res/values-el-rGR/strings.xml b/openhumans/src/main/res/values-el-rGR/strings.xml index 3ea04e700d..e963aa86ba 100644 --- a/openhumans/src/main/res/values-el-rGR/strings.xml +++ b/openhumans/src/main/res/values-el-rGR/strings.xml @@ -1,2 +1,5 @@ - + + Ακύρωση + Κλείσιμο + diff --git a/openhumans/src/main/res/values-ga-rIE/strings.xml b/openhumans/src/main/res/values-ga-rIE/strings.xml index 3ea04e700d..d1e993eb08 100644 --- a/openhumans/src/main/res/values-ga-rIE/strings.xml +++ b/openhumans/src/main/res/values-ga-rIE/strings.xml @@ -1,2 +1,5 @@ - + + Cuir ar ceal + Dún + diff --git a/openhumans/src/main/res/values-ko-rKR/strings.xml b/openhumans/src/main/res/values-ko-rKR/strings.xml index 969971395d..5be117d4e8 100644 --- a/openhumans/src/main/res/values-ko-rKR/strings.xml +++ b/openhumans/src/main/res/values-ko-rKR/strings.xml @@ -16,4 +16,7 @@ Open Humans에 접속 종료되었습니다. 의도한 것이 아닌 경우 \"여기\"를 클릭하여 다시 접속하십시오. 지금 업로드하기 + 이용 약관 + 취소 + 닫기 diff --git a/openhumans/src/main/res/values-lt-rLT/strings.xml b/openhumans/src/main/res/values-lt-rLT/strings.xml index 202491c0c3..59d9291c26 100644 --- a/openhumans/src/main/res/values-lt-rLT/strings.xml +++ b/openhumans/src/main/res/values-lt-rLT/strings.xml @@ -16,4 +16,7 @@ Jūs buvote atjungtas iš Open Humans Spustelėkite čia, kad prisijungtumėte dar kartą, jei tai atsitiko netyčia. Įkelti dabar + Naudojimosi sąlygos + Atšaukti + Uždaryti diff --git a/openhumans/src/main/res/values-pl-rPL/strings.xml b/openhumans/src/main/res/values-pl-rPL/strings.xml index 0138f625ca..09615b828e 100644 --- a/openhumans/src/main/res/values-pl-rPL/strings.xml +++ b/openhumans/src/main/res/values-pl-rPL/strings.xml @@ -16,4 +16,7 @@ Zostałeś wylogowany z Open Humans Kliknij tutaj, aby zalogować się ponownie, jeśli wylogowanie nie było celowe. Prześlij teraz + Warunki użytkowania + Anuluj + Zamknij diff --git a/openhumans/src/main/res/values-pt-rBR/strings.xml b/openhumans/src/main/res/values-pt-rBR/strings.xml index 3ea04e700d..604c5d915b 100644 --- a/openhumans/src/main/res/values-pt-rBR/strings.xml +++ b/openhumans/src/main/res/values-pt-rBR/strings.xml @@ -1,2 +1,5 @@ - + + Cancelar + Fechar + diff --git a/openhumans/src/main/res/values-pt-rPT/strings.xml b/openhumans/src/main/res/values-pt-rPT/strings.xml index 778e45ca27..03076d75a5 100644 --- a/openhumans/src/main/res/values-pt-rPT/strings.xml +++ b/openhumans/src/main/res/values-pt-rPT/strings.xml @@ -16,4 +16,7 @@ Sessão do Open Humans foi encerrada Clique aqui para entrar novamente, se não foi de propósito. Fazer o upload agora + Termos de Utilização + Cancelar + Fechar diff --git a/openhumans/src/main/res/values-ro-rRO/strings.xml b/openhumans/src/main/res/values-ro-rRO/strings.xml index 0f1261b783..47f2c88863 100644 --- a/openhumans/src/main/res/values-ro-rRO/strings.xml +++ b/openhumans/src/main/res/values-ro-rRO/strings.xml @@ -16,4 +16,7 @@ Ai fost deconectat de la Open Humans Dați click aici pentru a vă conecta din nou, dacă a fost din greșeală. Încarcă acum + Condiții de utilizare + Renunță + Închide diff --git a/openhumans/src/main/res/values-ru-rRU/strings.xml b/openhumans/src/main/res/values-ru-rRU/strings.xml index 8827371bc6..2d277cae07 100644 --- a/openhumans/src/main/res/values-ru-rRU/strings.xml +++ b/openhumans/src/main/res/values-ru-rRU/strings.xml @@ -16,4 +16,42 @@ Вы вышли из Open Humans Нажмите здесь, чтобы снова войти в систему, если выход произошел случайно. Начать передачу данных + Далее + Добро пожаловать в Open Humans + Для настройки загрузки данных нажмите \'Далее\'. + Согласие + Условия пользования + Внимательно ознакомьтесь со следующей информацией и примите условия использования. + Это проект с открытым исходным кодом, который будет копировать ваши данные на Open Humans. Мы не будем обмениваться вашими данными с третьими лицами без вашего явного разрешения. Данные, отправляемые на проект и приложение, идентифицируются с помощью случайного идентификатора и будут безопасно передаваться на учетную запись Open Humans при вашем одобрении этого процесса. Вы можете остановить загрузку и удалить загруженные данные в любое время здесь: www.openhumans.org. + Данные загружены + Гликемия + Болюсы + Пролонгированные болюсы + Углеводы + События портала терапии (кроме примечаний) + Переключения профиля + Суммарные суточные дозы + Временные базальные скорости + Временные целевые значения + Настройки + Версия приложения + Модель устройства + Размеры экрана + Данные отладки алгоритма + Данные НЕ загружены + Пароли + URL-адрес Nightscout + Секретный ключ Nightscout API + Поля свободного текста + Я понимаю и соглашаюсь. + Войти в Open Humans + Финальные настройки + Вы в одном шаге от передачи данных в Open Humans. Продолжить? + Отменить + Продолжить + Завершение... + Может занять несколько секунд. + Готово! + С этого момента ваш телефон будет иногда загружать данные в фоновом режиме. + Закрыть diff --git a/openhumans/src/main/res/values-sv-rSE/strings.xml b/openhumans/src/main/res/values-sv-rSE/strings.xml index 039bd031f8..0323a8edd8 100644 --- a/openhumans/src/main/res/values-sv-rSE/strings.xml +++ b/openhumans/src/main/res/values-sv-rSE/strings.xml @@ -16,4 +16,7 @@ Du har loggats ut från Open Humans Klicka här om du vill logga in igen. Ladda upp nu + Användarvillkor + Avbryt + Stäng diff --git a/shared/src/main/res/values-af-rZA/strings.xml b/shared/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 0000000000..875daa124a --- /dev/null +++ b/shared/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,19 @@ + + + + h + dae + ure + sekonde + minuut + uur + dag + week + sekondes + minute + ure + dae + weke + m + d + diff --git a/shared/src/main/res/values-bg-rBG/strings.xml b/shared/src/main/res/values-bg-rBG/strings.xml new file mode 100644 index 0000000000..56da387b4b --- /dev/null +++ b/shared/src/main/res/values-bg-rBG/strings.xml @@ -0,0 +1,21 @@ + + + + преди %1$d мин + преди %1$.1fч + ч. + дни + часа + секунда + минута + час + ден + седмица + секунди + минути + часове + дни + седмици + мин. + д + diff --git a/shared/src/main/res/values-ca-rES/strings.xml b/shared/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 0000000000..9735814c77 --- /dev/null +++ b/shared/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,21 @@ + + + + Fa %1$d m + Fa %1$.1f h + h + dies + hores + segon + minut + hora + dia + setmana + segons + minuts + hores + dies + setmanes + m + d + diff --git a/shared/src/main/res/values-cs-rCZ/strings.xml b/shared/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 0000000000..a05fa45757 --- /dev/null +++ b/shared/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,30 @@ + + + + před %1$d min + před %1$d minutamí + před %1$.1f h + Před %1$.1f dny + Před %1$.0f dny + za %1$.0f dní + za %1$.0f dní + h + dnů + hodin + sekund + minut + hodina + den + týden + sekund + minut + hodin + dní + týdnů + m + d + Později během dneška + Zítra + Dnes + Včera + diff --git a/shared/src/main/res/values-da-rDK/strings.xml b/shared/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 0000000000..d46c0c97a2 --- /dev/null +++ b/shared/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,30 @@ + + + + %1$d min. siden + %1$d minutter siden + %1$.1f t siden + %1$.1f dage siden + %1$.0f dage siden + om %1$.0f dage + om %1$.0f dage + t + dage + timer + sekund + minut + time + dag + uge + sekunder + minutter + timer + dage + uger + min + d + Senere i dag + I morgen + I dag + I går + diff --git a/shared/src/main/res/values-de-rDE/strings.xml b/shared/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 0000000000..8c95db789a --- /dev/null +++ b/shared/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,22 @@ + + + + vor %1$d Min. + vor %1$d Minuten + vor %1$.1f Stunde + Std + Tage + Stunden + Sekunde + Minute + Stunde + Tag + Woche + Sekunden + Minuten + Stunden + Tage + Wochen + min + d + diff --git a/shared/src/main/res/values-el-rGR/strings.xml b/shared/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 0000000000..960d69de0d --- /dev/null +++ b/shared/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,18 @@ + + + + h + ημέρες + ώρες + δευτερόλεπτο + λεπτό + ώρα + ημέρα + εβδομάδα + δευτερόλεπτα + λεπτά + ώρες + ημέρες + εβδομάδες + m + diff --git a/shared/src/main/res/values-es-rES/strings.xml b/shared/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..a0f0767587 --- /dev/null +++ b/shared/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,30 @@ + + + + hace %1$d m + Hace %1$d minutos + hace %1$.1f h + Hace %1$.1f día + Hace %1$.0f días + en %1$.0f días + en %1$.0f días + h + días + horas + segundo + minuto + hora + día + semana + segundos + minutos + horas + días + semanas + m + d + Más tarde hoy + Mañana + Hoy + Ayer + diff --git a/shared/src/main/res/values-fr-rFR/strings.xml b/shared/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000000..67db8a5129 --- /dev/null +++ b/shared/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,30 @@ + + + + il y a %1$d m + Il y a %1$d minutes + il y a %1$.1f h + Il y a %1$.1f jours + Il y a %1$.0f jours + en %1$.0f jours + en %1$.0f jours + h + jours + heures + seconde + minute + heure + jour + semaine + secondes + minutes + heures + jours + semaines + m + j + Plus tard aujourd\'hui + Demain + Aujourd’hui + Hier + diff --git a/shared/src/main/res/values-ga-rIE/strings.xml b/shared/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..8d4df752e5 --- /dev/null +++ b/shared/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,21 @@ + + + + %1$d nóim ó shin + %1$.1f u ó shin + u + + uair + soicind + nóiméad + uair + + seachtain + soicind + nóiméad + uair + + seachtaine + n + + diff --git a/shared/src/main/res/values-hr-rHR/strings.xml b/shared/src/main/res/values-hr-rHR/strings.xml new file mode 100644 index 0000000000..554d7a16e3 --- /dev/null +++ b/shared/src/main/res/values-hr-rHR/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/shared/src/main/res/values-hu-rHU/strings.xml b/shared/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 0000000000..875ac03d58 --- /dev/null +++ b/shared/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,6 @@ + + + + p + n + diff --git a/shared/src/main/res/values-it-rIT/strings.xml b/shared/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 0000000000..28f5292504 --- /dev/null +++ b/shared/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,30 @@ + + + + %1$d m fa + %1$d minuti fa + %1$.1f h fa + %1$.1f giorni fa + %1$.0f giorni fa + in %1$.0f giorni + in %1$.0f giorni + h + giorni + ore + secondi + minuti + ora + giorno + settimana + secondi + minuti + ore + giorni + settimane + m + d + Più tardì oggi + Domani + Oggi + Ieri + diff --git a/shared/src/main/res/values-iw-rIL/strings.xml b/shared/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 0000000000..554d7a16e3 --- /dev/null +++ b/shared/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/shared/src/main/res/values-ko-rKR/strings.xml b/shared/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 0000000000..be3ce93a16 --- /dev/null +++ b/shared/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,21 @@ + + + + %1$d 분 전 + %1$.1f 시간 전 + 시간 + + 시간 + + + + + + + + + + + + + diff --git a/shared/src/main/res/values-lt-rLT/strings.xml b/shared/src/main/res/values-lt-rLT/strings.xml new file mode 100644 index 0000000000..bb053b1723 --- /dev/null +++ b/shared/src/main/res/values-lt-rLT/strings.xml @@ -0,0 +1,21 @@ + + + + prieš %1$d min + Prieš %1$.1f val. + val + d. + val. + sek. + min. + val. + d. + savaitė + sekundės + min. + val. + d. + savaičių + min. + d + diff --git a/shared/src/main/res/values-nl-rNL/strings.xml b/shared/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 0000000000..554d7a16e3 --- /dev/null +++ b/shared/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/shared/src/main/res/values-no-rNO/strings.xml b/shared/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 0000000000..6cdad44084 --- /dev/null +++ b/shared/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,30 @@ + + + + %1$d min siden + %1$d minutter siden + %1$.1f timer siden + %1$.1f dager siden + %1$.0f dager siden + om %1$.0f dager + om %1$.0f dager + t + dager + timer + sekund + minutt + time + dag + uke + sekunder + minutter + timer + dager + uker + m + d + Senere i dag + I morgen + Idag + I går + diff --git a/shared/src/main/res/values-pl-rPL/strings.xml b/shared/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 0000000000..52ab7af39b --- /dev/null +++ b/shared/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,29 @@ + + + + %1$d min temu + %1$.1f godz. temu + %1$.1f dni temu + %1$.0f dni temu + za %1$.0f dni + za %1$.0f dni + h + dni + godzin + sekunda + minuta + godzina + dzień + tydzień + sekund + minut + godzin + dni + tygodni + m + d + Dzisiaj, później + Jutro + Dziś + Wczoraj + diff --git a/shared/src/main/res/values-pt-rBR/strings.xml b/shared/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..91d8dc0119 --- /dev/null +++ b/shared/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,22 @@ + + + + %1$d min atrás + %1$d minutos atrás + %1$.1fh atrás + %1$d dias atrás + h + dias + horas + segundo + minuto + hora + dia + semana + segundos + minutos + horas + dias + semanas + m + diff --git a/shared/src/main/res/values-pt-rPT/strings.xml b/shared/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..b6194783ad --- /dev/null +++ b/shared/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,21 @@ + + + + %1$d m atrás + %1$.1f h atrás + h + dias + horas + segundo + minuto + hora + dia + semana + segundos + minutos + horas + dias + semanas + m + d + diff --git a/shared/src/main/res/values-ro-rRO/strings.xml b/shared/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 0000000000..025c5d22c6 --- /dev/null +++ b/shared/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,21 @@ + + + + %1$d min în urmă + %1$.1f ore în urmă + h + zile + ore + secundă + minut + oră + zi + săptămână + secunde + minute + ore + zile + săptămâni + min + z + diff --git a/shared/src/main/res/values-ru-rRU/strings.xml b/shared/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 0000000000..823285bb86 --- /dev/null +++ b/shared/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,30 @@ + + + + %1$d мин. назад + %1$d минут назад + %1$.1fч. назад + %1$s дн назад + %1$s дн назад + через %1$.0f дн + через %1$.0f дн + ч + дн + час + сек + мин + час + дн + нед + сек + мин + час + дн + нед + мин + дн + Позднее сегодня + Завтра + Cегодня + Вчера + diff --git a/shared/src/main/res/values-sk-rSK/strings.xml b/shared/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 0000000000..3371a5e805 --- /dev/null +++ b/shared/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,30 @@ + + + + pred %1$d min + pred %1$d minútami + pred %1$.1f h + Pred %1$.1f dňami + Pred %1$.0f dňami + za %1$.0f dní + za %1$.0f dní + h + dní + hodín + sekunda + minúta + hodina + deň + týždeň + sekúnd + minút + hodín + dní + týždňov + m + d + Neskôr počas dňa + Zajtra + Dnes + včera + diff --git a/shared/src/main/res/values-sv-rSE/strings.xml b/shared/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..df1d98aae8 --- /dev/null +++ b/shared/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,22 @@ + + + + %1$dm sedan + %1$d minuter sedan + %1$.1f tim sedan + h + dagar + timmar + sekund + minut + timme + dag + vecka + sekunder + minuter + timmar + dagar + veckor + m + d + diff --git a/shared/src/main/res/values-tr-rTR/strings.xml b/shared/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 0000000000..b457090d83 --- /dev/null +++ b/shared/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,30 @@ + + + + %1$d dak önce + %1$d dakika önce + %1$.1f s önce + %1$.1f gün önce + %1$.0f gün önce + %1$.0f gün içinde + %1$.0f gün içinde + s + gün + saat + saniye + dakika + saat + gün + hafta + saniye + dakika + saat + gün + hafta + dk + g + Bugünden sonra + Yarın + Bugün + Dün + diff --git a/shared/src/main/res/values-zh-rCN/strings.xml b/shared/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..2619d4b612 --- /dev/null +++ b/shared/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,30 @@ + + + + %1$d 分钟前 + %1$d 分钟前 + %1$.1f 小时前 + %1$.1f 天前 + %1$.0f 天前 + 在 %1$.0f 天内 + 在 %1$.0f 天内 + h + + 小时 + + 分钟 + 小时 + + + + 分钟 + 小时 + + + m + d + 今天稍后 + 明天 + 今天 + 昨天 + diff --git a/wear/src/main/res/values-fr-rFR/strings.xml b/wear/src/main/res/values-fr-rFR/strings.xml index 9073bec2ef..645f5d699b 100644 --- a/wear/src/main/res/values-fr-rFR/strings.xml +++ b/wear/src/main/res/values-fr-rFR/strings.xml @@ -168,6 +168,8 @@ Aucune configuration disponible Contrôles Wear désactivés Aucune donnée disponible + augmenter + diminuer H B moy @@ -175,6 +177,7 @@ --g -.-- U/h Téléchargement : ---% + aucun statut Il y a -- minutes --- mg/dl Aucun statut de la boucle From 1bbb779d254a988b6fb4208e47b77afc3a082e3a Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Mon, 13 Jun 2022 13:28:44 +0200 Subject: [PATCH 07/71] translation add missing modules --- crowdin.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crowdin.yml b/crowdin.yml index ec9551d875..61f98bf0b8 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -19,6 +19,8 @@ files: translation: /combo/src/main/res/values-%android_code%/strings.xml - source: /dana/src/main/res/values/strings.xml translation: /dana/src/main/res/values-%android_code%/strings.xml + - source: /danar/src/main/res/values/strings.xml + translation: /danar/src/main/res/values-%android_code%/strings.xml - source: /medtronic/src/main/res/values/strings.xml translation: /medtronic/src/main/res/values-%android_code%/strings.xml - source: /omnipod-common/src/main/res/values/strings.xml @@ -43,6 +45,8 @@ files: translation: /automation/src/main/res/values-%android_code%/strings.xml - source: /diaconn/src/main/res/values/strings.xml translation: /diaconn/src/main/res/values-%android_code%/strings.xml + - source: /pump-common/src/main/res/values/strings.xml + translation: /pump-common/src/main/res/values-%android_code%/strings.xml - source: /openhumans/src/main/res/values/strings.xml translation: /openhumans/src/main/res/values-%android_code%/strings.xml translate_attributes: 0 From ee717ff36fea419c406a331048b3758308ffc563 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Mon, 13 Jun 2022 14:06:07 +0200 Subject: [PATCH 08/71] fix: status light text color --- .../androidaps/plugins/general/overview/StatusLightHandler.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt index 11de792fbd..04095b64a8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/StatusLightHandler.kt @@ -1,6 +1,5 @@ package info.nightscout.androidaps.plugins.general.overview -import android.graphics.Color import android.widget.TextView import androidx.annotation.StringRes import info.nightscout.androidaps.R @@ -97,7 +96,7 @@ class StatusLightHandler @Inject constructor( if (level > OmnipodConstants.MAX_RESERVOIR_READING) { @Suppress("SetTextI18n") view?.text = " 50+$units" - view?.setTextColor(Color.WHITE) + view?.setTextColor(rh.gac(view.context, R.attr.defaultTextColor)) } else { handleLevel(view, criticalSetting, criticalDefaultValue, warnSetting, warnDefaultValue, level, units) } From 6afd2678f1c7900c0ff160af426047205a53ca11 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 15:35:09 +0200 Subject: [PATCH 09/71] move test code --- .../versionChecker/AllowedVersionsTest.kt | 53 ++++++++++++++++--- .../versionChecker/AllowedVersions.kt | 34 ------------ 2 files changed, 45 insertions(+), 42 deletions(-) diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersionsTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersionsTest.kt index 1b14ba64d0..37fe08b20a 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersionsTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersionsTest.kt @@ -1,16 +1,52 @@ package info.nightscout.androidaps.plugins.constraints.versionChecker -import org.joda.time.DateTime import org.joda.time.LocalDate -import org.junit.Assert -import org.junit.Assert.* +import org.json.JSONArray +import org.json.JSONObject +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue import org.junit.Test class AllowedVersionsTest { + fun generateSupportedVersions(): String = + JSONArray() + // Android API versions + .put(JSONObject().apply { + put("minAndroid", 1) // 1.0 + put("maxAndroid", 23) // 6.0.1 + }) + .put(JSONObject().apply { + put("minAndroid", 24) // 7.0 + put("maxAndroid", 25) // 7.1.2 + put("supported", "2.6.2") + }) + .put(JSONObject().apply { + put("minAndroid", 26) // 8.0 + put("maxAndroid", 27) // 8.1 + put("supported", "2.8.2") + }) + .put(JSONObject().apply { + put("minAndroid", 28) // 9.0 + put("maxAndroid", 99) + put("supported", "2.8.2") + }) + // Version time limitation + .put(JSONObject().apply { + put("endDate", "2021-11-07") + put("version", "2.9.0-beta1") + }) + .put(JSONObject().apply { + put("endDate", "2021-11-07") + put("version", "3.0-beta1") + }) + .toString() + @Test fun generateSupportedVersionsTest() { - val definition = AllowedVersions().generateSupportedVersions() + val definition = generateSupportedVersions() assertNull(AllowedVersions().findByApi(definition, 0)) assertFalse(AllowedVersions().findByApi(definition, 1)?.has("supported") ?: true) assertFalse(AllowedVersions().findByApi(definition, 23)?.has("supported") ?: true) @@ -24,9 +60,10 @@ class AllowedVersionsTest { @Test fun findByVersionTest() { //val definition = AllowedVersions().generateSupportedVersions() - val definition = "[{\"minAndroid\":1,\"maxAndroid\":23},{\"minAndroid\":24,\"maxAndroid\":25,\"supported\":\"2.6.2\"},{\"minAndroid\":26,\"maxAndroid\":27,\"supported\":\"2.8.2\"},{\"minAndroid\":28,\"maxAndroid\":99,\"supported\":\"2.8.2\"},{\"endDate\":\"2021-11-07\",\"version\":\"2.9.0-beta1\"},{\"endDate\":\"2021-11-02\",\"version\":\"3.0-beta1\"},{\"endDate\":\"2021-11-04\",\"version\":\"3.0-beta2\"},{\"endDate\":\"2021-11-10\",\"version\":\"3.0-beta3\"},{\"endDate\":\"2021-11-14\",\"version\":\"3.0-beta4\"}\n" + - " ,{\"endDate\":\"2021-11-16\",\"version\":\"3.0-beta5\"}\n" + - "]" + val definition = + "[{\"minAndroid\":1,\"maxAndroid\":23},{\"minAndroid\":24,\"maxAndroid\":25,\"supported\":\"2.6.2\"},{\"minAndroid\":26,\"maxAndroid\":27,\"supported\":\"2.8.2\"},{\"minAndroid\":28,\"maxAndroid\":99,\"supported\":\"2.8.2\"},{\"endDate\":\"2021-11-07\",\"version\":\"2.9.0-beta1\"},{\"endDate\":\"2021-11-02\",\"version\":\"3.0-beta1\"},{\"endDate\":\"2021-11-04\",\"version\":\"3.0-beta2\"},{\"endDate\":\"2021-11-10\",\"version\":\"3.0-beta3\"},{\"endDate\":\"2021-11-14\",\"version\":\"3.0-beta4\"}\n" + + " ,{\"endDate\":\"2021-11-16\",\"version\":\"3.0-beta5\"}\n" + + "]" assertNull(AllowedVersions().findByVersion(definition, "2.6.0")) assertTrue(AllowedVersions().findByVersion(definition, "2.9.0-beta1")?.has("endDate") ?: false) assertEquals("2021-11-07", AllowedVersions().findByVersion(definition, "2.9.0-beta1")?.getString("endDate")) @@ -34,7 +71,7 @@ class AllowedVersionsTest { @Test fun endDateToMilliseconds() { - val definition = AllowedVersions().generateSupportedVersions() + val definition = generateSupportedVersions() val endDate = AllowedVersions().endDateToMilliseconds(AllowedVersions().findByVersion(definition, "2.9.0-beta1")?.getString("endDate") ?: "1000/01/01") val dateTime = LocalDate(endDate) assertEquals(2021, dateTime.year) diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersions.kt b/core/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersions.kt index 6d6c1e945a..9cf779cfe2 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersions.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/AllowedVersions.kt @@ -4,43 +4,9 @@ import org.joda.time.LocalDate import org.json.JSONArray import org.json.JSONException import org.json.JSONObject -import java.lang.Exception class AllowedVersions { - fun generateSupportedVersions(): String = - JSONArray() - // Android API versions - .put(JSONObject().apply { - put("minAndroid", 1) // 1.0 - put("maxAndroid", 23) // 6.0.1 - }) - .put(JSONObject().apply { - put("minAndroid", 24) // 7.0 - put("maxAndroid", 25) // 7.1.2 - put("supported", "2.6.2") - }) - .put(JSONObject().apply { - put("minAndroid", 26) // 8.0 - put("maxAndroid", 27) // 8.1 - put("supported", "2.8.2") - }) - .put(JSONObject().apply { - put("minAndroid", 28) // 9.0 - put("maxAndroid", 99) - put("supported", "2.8.2") - }) - // Version time limitation - .put(JSONObject().apply { - put("endDate", "2021-11-07") - put("version", "2.9.0-beta1") - }) - .put(JSONObject().apply { - put("endDate", "2021-11-07") - put("version", "3.0-beta1") - }) - .toString() - fun findByApi(definition: String?, api: Int): JSONObject? { if (definition == null) return null try { From a3fb086912f5a07717b3989c3d0c8a406b6b9423 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 15:58:39 +0200 Subject: [PATCH 10/71] Data: fir threading --- .../nightscout/androidaps/queue/CommandQueueImplementation.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt index 918643c8ce..bbfbd91d31 100644 --- a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt +++ b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt @@ -327,7 +327,7 @@ class CommandQueueImplementation @Inject constructor( } removeAll(CommandType.BOLUS) removeAll(CommandType.SMB_BOLUS) - Thread { activePlugin.activePump.stopBolusDelivering() }.run() + Thread { activePlugin.activePump.stopBolusDelivering() }.start() } // returns true if command is queued From 9995be702cda1448c0837e3aa6c74e13cc3d075e Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 17:17:54 +0200 Subject: [PATCH 11/71] WizardDialog: move calculation out of main thread --- .../androidaps/dialogs/WizardDialog.kt | 65 +++++++++++-------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt index 5b5d56f93e..c234ef63a2 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt @@ -3,6 +3,8 @@ package info.nightscout.androidaps.dialogs import android.annotation.SuppressLint import android.content.Context import android.os.Bundle +import android.os.Handler +import android.os.HandlerThread import android.text.Editable import android.text.TextWatcher import android.view.LayoutInflater @@ -24,6 +26,7 @@ import info.nightscout.androidaps.database.ValueWrapper import info.nightscout.androidaps.databinding.DialogWizardBinding import info.nightscout.androidaps.events.EventAutosensCalculationFinished import info.nightscout.androidaps.extensions.formatColor +import info.nightscout.androidaps.extensions.runOnUiThread import info.nightscout.androidaps.extensions.toVisibility import info.nightscout.androidaps.extensions.valueToUnits import info.nightscout.androidaps.interfaces.* @@ -63,6 +66,8 @@ class WizardDialog : DaggerDialogFragment() { @Inject lateinit var dateUtil: DateUtil @Inject lateinit var protectionCheck: ProtectionCheck + private val handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) + private var queryingProtection = false private var wizard: BolusWizard? = null private var calculatedPercentage = 100.0 @@ -168,7 +173,7 @@ class WizardDialog : DaggerDialogFragment() { savedInstanceState?.getDouble("carb_time_input") ?: 0.0, -60.0, 60.0, 5.0, DecimalFormat("0"), false, binding.okcancel.ok, timeTextWatcher ) - initDialog() + handler.post { initDialog() } calculatedPercentage = sp.getInt(R.string.key_boluswizard_percentage, 100).toDouble() binding.percentUsed.text = rh.gs(R.string.format_percent, sp.getInt(R.string.key_boluswizard_percentage, 100)) // ok button @@ -257,6 +262,7 @@ class WizardDialog : DaggerDialogFragment() { override fun onDestroyView() { super.onDestroyView() disposable.clear() + handler.removeCallbacksAndMessages(null) _binding = null } @@ -323,14 +329,9 @@ class WizardDialog : DaggerDialogFragment() { else DecimalFormatter.to1Decimal(value * Constants.MGDL_TO_MMOLL) private fun initDialog() { - if (carbsPassedIntoWizard != 0.0) { - binding.carbsInput.value = carbsPassedIntoWizard - } - if (notesPassedIntoWizard.isNotBlank()) { - binding.notesLayout.notes.setText(notesPassedIntoWizard) - } val profile = profileFunction.getProfile() val profileStore = activePlugin.activeProfileSource.profile + val tempTarget = repository.getTemporaryTargetActiveAt(dateUtil.now()).blockingGet() if (profile == null || profileStore == null) { ToastUtils.showToastInUiThread(ctx, rh.gs(R.string.noprofile)) @@ -338,32 +339,40 @@ class WizardDialog : DaggerDialogFragment() { return } - val profileList: ArrayList = profileStore.getProfileList() - profileList.add(0, rh.gs(R.string.active)) - context?.let { context -> - binding.profileList.setAdapter(ArrayAdapter(context, R.layout.spinner_centered, profileList)) - binding.profileList.setText(profileList[0], false) - } - - val units = profileFunction.getUnits() - binding.bgUnits.text = units.asText - binding.bgInput.step = if (units == GlucoseUnit.MGDL) 1.0 else 0.1 - - // Set BG if not old - binding.bgInput.value = iobCobCalculator.ads.actualBg()?.valueToUnits(units) ?: 0.0 - - binding.ttCheckbox.isEnabled = repository.getTemporaryTargetActiveAt(dateUtil.now()).blockingGet() is ValueWrapper.Existing - binding.ttCheckboxIcon.visibility = binding.ttCheckbox.isEnabled.toVisibility() - // IOB calculation val bolusIob = iobCobCalculator.calculateIobFromBolus().round() val basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round() - binding.iobInsulin.text = rh.gs(R.string.formatinsulinunits, -bolusIob.iob - basalIob.basaliob) + runOnUiThread { + if (carbsPassedIntoWizard != 0.0) { + binding.carbsInput.value = carbsPassedIntoWizard + } + if (notesPassedIntoWizard.isNotBlank()) { + binding.notesLayout.notes.setText(notesPassedIntoWizard) + } - calculateInsulin() + val profileList: ArrayList = profileStore.getProfileList() + profileList.add(0, rh.gs(R.string.active)) + context?.let { context -> + binding.profileList.setAdapter(ArrayAdapter(context, R.layout.spinner_centered, profileList)) + binding.profileList.setText(profileList[0], false) + } - binding.percentUsed.visibility = (sp.getInt(R.string.key_boluswizard_percentage, 100) != 100 || correctionPercent).toVisibility() + val units = profileFunction.getUnits() + binding.bgUnits.text = units.asText + binding.bgInput.step = if (units == GlucoseUnit.MGDL) 1.0 else 0.1 + + // Set BG if not old + binding.bgInput.value = iobCobCalculator.ads.actualBg()?.valueToUnits(units) ?: 0.0 + + binding.ttCheckbox.isEnabled = tempTarget is ValueWrapper.Existing + binding.ttCheckboxIcon.visibility = binding.ttCheckbox.isEnabled.toVisibility() + binding.iobInsulin.text = rh.gs(R.string.formatinsulinunits, -bolusIob.iob - basalIob.basaliob) + + calculateInsulin() + + binding.percentUsed.visibility = (sp.getInt(R.string.key_boluswizard_percentage, 100) != 100 || correctionPercent).toVisibility() + } } @SuppressLint("SetTextI18n") @@ -496,7 +505,7 @@ class WizardDialog : DaggerDialogFragment() { override fun onResume() { super.onResume() - if(!queryingProtection) { + if (!queryingProtection) { queryingProtection = true activity?.let { activity -> val cancelFail = { From 1932966a637042e57c3ccbaee25cb17d9e991f59 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 17:50:31 +0200 Subject: [PATCH 12/71] do not export activities --- app/src/main/AndroidManifest.xml | 102 ++++++++++++++-------- core/src/main/AndroidManifest.xml | 9 +- dana/src/main/AndroidManifest.xml | 5 +- danars/src/main/AndroidManifest.xml | 6 +- diaconn/src/main/AndroidManifest.xml | 9 +- insight/src/main/AndroidManifest.xml | 6 +- medtronic/src/main/AndroidManifest.xml | 12 ++- omnipod-dash/src/main/AndroidManifest.xml | 19 ++-- omnipod-eros/src/main/AndroidManifest.xml | 19 ++-- rileylink/src/main/AndroidManifest.xml | 12 +-- 10 files changed, 129 insertions(+), 70 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8cb2f771fb..8fb0dea2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + @@ -47,7 +46,7 @@ android:restoreAnyVersion="true" android:roundIcon="${appIconRound}" android:supportsRtl="true" - android:theme="@style/AppTheme.Launcher" > + android:theme="@style/AppTheme.Launcher"> + android:exported="true"> @@ -82,69 +81,86 @@ android:name="com.google.android.gms.car.application" android:resource="@xml/automotive_app_desc" /> - + + - - + + - - - - - - + android:name=".receivers.DataReceiver" + android:enabled="true" + android:exported="true"> - + - + - + - + - + - + - + + android:name=".receivers.SmsReceiver" + android:enabled="true" + android:exported="true" + android:permission="android.permission.BROADCAST_SMS"> - + @@ -211,15 +227,23 @@ + android:exported="false" + android:label="@string/title_activity_setup_wizard" + android:theme="@style/AppTheme" /> - - - + + + @@ -227,7 +251,9 @@ - + diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 6cd58651e5..0f37944ddb 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -8,14 +8,17 @@ - - + + diff --git a/dana/src/main/AndroidManifest.xml b/dana/src/main/AndroidManifest.xml index af4b1f4b1e..3960154ebf 100644 --- a/dana/src/main/AndroidManifest.xml +++ b/dana/src/main/AndroidManifest.xml @@ -1,12 +1,13 @@ - + diff --git a/danars/src/main/AndroidManifest.xml b/danars/src/main/AndroidManifest.xml index c0a4377e25..c3ef8bc727 100644 --- a/danars/src/main/AndroidManifest.xml +++ b/danars/src/main/AndroidManifest.xml @@ -6,7 +6,9 @@ - + @@ -14,9 +16,11 @@ - + + android:exported="false" + android:theme="@style/AppTheme"> diff --git a/insight/src/main/AndroidManifest.xml b/insight/src/main/AndroidManifest.xml index d8d973e0b3..d125d192f6 100644 --- a/insight/src/main/AndroidManifest.xml +++ b/insight/src/main/AndroidManifest.xml @@ -6,19 +6,23 @@ + diff --git a/medtronic/src/main/AndroidManifest.xml b/medtronic/src/main/AndroidManifest.xml index 6c2ac78309..935c304195 100644 --- a/medtronic/src/main/AndroidManifest.xml +++ b/medtronic/src/main/AndroidManifest.xml @@ -1,15 +1,19 @@ - + - + - + diff --git a/omnipod-dash/src/main/AndroidManifest.xml b/omnipod-dash/src/main/AndroidManifest.xml index ee32e26eea..0408c54440 100644 --- a/omnipod-dash/src/main/AndroidManifest.xml +++ b/omnipod-dash/src/main/AndroidManifest.xml @@ -7,11 +7,18 @@ - - - - - + + + + + \ No newline at end of file diff --git a/omnipod-eros/src/main/AndroidManifest.xml b/omnipod-eros/src/main/AndroidManifest.xml index 02eb4fc2fa..b036e15038 100644 --- a/omnipod-eros/src/main/AndroidManifest.xml +++ b/omnipod-eros/src/main/AndroidManifest.xml @@ -1,15 +1,22 @@ - + - - - - + + + + \ No newline at end of file diff --git a/rileylink/src/main/AndroidManifest.xml b/rileylink/src/main/AndroidManifest.xml index 17c2a20a5e..684a90fcf6 100644 --- a/rileylink/src/main/AndroidManifest.xml +++ b/rileylink/src/main/AndroidManifest.xml @@ -12,9 +12,10 @@ - + @@ -23,8 +24,9 @@ + android:exported="false" + android:label="@string/title_activity_rileylink_settings" + android:theme="@style/AppTheme" /> From f980d2f73c27c7e2a7cb84123a733a490c086851 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 13 Jun 2022 18:56:13 +0200 Subject: [PATCH 13/71] SMS: set TT type correctly --- .../general/smsCommunicator/SmsCommunicatorPlugin.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt index 61021d55bc..311b1999fa 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt @@ -966,6 +966,7 @@ class SmsCommunicatorPlugin @Inject constructor( var keyTarget = 0 var defaultTargetMMOL = 0.0 var defaultTargetMGDL = 0.0 + var reason = TemporaryTarget.Reason.EATING_SOON when { isMeal -> { keyDuration = R.string.key_eatingsoon_duration @@ -973,6 +974,7 @@ class SmsCommunicatorPlugin @Inject constructor( keyTarget = R.string.key_eatingsoon_target defaultTargetMMOL = Constants.defaultEatingSoonTTmmol defaultTargetMGDL = Constants.defaultEatingSoonTTmgdl + reason = TemporaryTarget.Reason.EATING_SOON } isActivity -> { @@ -981,6 +983,7 @@ class SmsCommunicatorPlugin @Inject constructor( keyTarget = R.string.key_activity_target defaultTargetMMOL = Constants.defaultActivityTTmmol defaultTargetMGDL = Constants.defaultActivityTTmgdl + reason = TemporaryTarget.Reason.ACTIVITY } isHypo -> { @@ -989,6 +992,7 @@ class SmsCommunicatorPlugin @Inject constructor( keyTarget = R.string.key_hypo_target defaultTargetMMOL = Constants.defaultHypoTTmmol defaultTargetMGDL = Constants.defaultHypoTTmgdl + reason = TemporaryTarget.Reason.HYPOGLYCEMIA } } var ttDuration = sp.getInt(keyDuration, defaultTargetDuration) @@ -999,7 +1003,7 @@ class SmsCommunicatorPlugin @Inject constructor( disposable += repository.runTransactionForResult(InsertAndCancelCurrentTemporaryTargetTransaction( timestamp = dateUtil.now(), duration = TimeUnit.MINUTES.toMillis(ttDuration.toLong()), - reason = TemporaryTarget.Reason.EATING_SOON, + reason = reason, lowTarget = Profile.toMgdl(tt, profileFunction.getUnits()), highTarget = Profile.toMgdl(tt, profileFunction.getUnits()) )).subscribe({ result -> From c233f9ba1282a0a5f3c2d23ee06010955cd39693 Mon Sep 17 00:00:00 2001 From: t_j_s Date: Mon, 13 Jun 2022 20:35:08 +0100 Subject: [PATCH 14/71] Prep for Nightscout Dev upload. 1. DYnamic ISF Plugin uses combination of 8 hour weighted average, last full day and 7 day average TDDs. 2. Model is the reworked 1800 rule using log values and insulin peak. LGS Threshold moved in preferences to the DynamicISF prefs module and only available in the Dynamic ISF plugin. --- .../OpenAPSSMBDynamicISF/determine-basal.js | 112 ++++++++++++------ .../DetermineBasalAdapterSMBDynamicISFJS.kt | 15 ++- .../androidaps/utils/stats/TddCalculator.kt | 96 +++++++++++++++ app/src/main/res/values/strings.xml | 8 +- .../res/xml/pref_openapssmbdynamicisf.xml | 10 ++ 5 files changed, 204 insertions(+), 37 deletions(-) diff --git a/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js b/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js index adaa126a8c..8a6c00917c 100644 --- a/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js +++ b/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js @@ -218,7 +218,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ //********************************************************************************* console.error("---------------------------------------------------------"); - console.error( " Dynamic ISF version Beta 1.5 "); + console.error( " Dynamic ISF version Beta 1.6.4 "); console.error("---------------------------------------------------------"); @@ -247,39 +247,48 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ /*var tdd_pump_now = meal_data.TDDPUMP; var tdd_pump = ( tdd_pump_now / (now / 24));*/ - var TDD = (tdd7 * 0.4) + (tdd_pump * 0.6); + //var TDD = (tdd7 * 0.4) + (tdd_pump * 0.6); - console.error("Pump extrapolated TDD = "+tdd_pump+"; "); - //if (tdd7 > 0){ - if ( tdd_pump > tdd7 && now < 5 || now < 7 && TDD < ( 0.8 * tdd7 ) ){ - TDD = ( 0.8 * tdd7 ); - console.log("Excess or too low insulin from pump so TDD set to "+TDD+" based on 75% of TDD7; "); - rT.reason += "TDD: " +TDD+ " due to low or high tdd from pump; "; - } + var tdd1 = meal_data.TDDAIMI1; + var tdd_4 = meal_data.TDDLast4; + var tdd8to4 = meal_data.TDD4to8; + var tdd_last8_wt = ( ( ( 1.4 * tdd_4) + ( 0.6 * tdd8to4) ) * 3 ); - else if (tdd_pump > (1.75 * tdd7)){ - TDD = tdd7; - console.error("TDD set to TDD7 due to high pump usage reported. TDD = "+TDD+"; "); - rT.reason += "TDD set to TDD7 due to high pump usage reported. TDD = "+TDD+"; "; - } + console.error("Rolling 8 hours weight average: "+tdd_last8_wt+"; "); + console.error("1-day average TDD is: "+tdd1+"; "); + console.error("7-day average TDD is: " +tdd7+ "; "); + + //TDD = ( tdd_last8_wt * 0.6) + ( tdd7 * 0.4 ); + + var TDD = ( tdd_last8_wt * 0.33 ) + ( tdd7 * 0.34 ) + (tdd1 * 0.33); + console.log("TDD = " +TDD+ " using average of 7-day, 1-day and weighted 8hr average"); - else if (tdd_pump < (0.33 * tdd7)){ - TDD = (tdd7 * 0.25) + (tdd_pump * 0.75); - console.error("TDD weighted to pump due to low insulin usage. TDD = "+TDD+"; "); - rT.reason += "TDD weighted to pump due to low insulin usage. TDD = "+TDD+"; "; - } + //var ins_val = 75; + var insulin = profile.insulinType; + console.log("Insulin Peak = "+profile.insulinPeak+"; "); + //console.log("Initial insulin value for ISF: "+ins_val+"; "); + //console.log("Current value for insulin: "+insulin+"; "); - else { - console.log("TDD = " +TDD+ " based on standard pump 60/tdd7 40 split; "); - rT.reason += "TDD: " +TDD+ " based on standard pump 60/tdd7 40 split; "; - } + var ins_val = 75; // Lyumjev peak: 75 + if (profile.insulinPeak > 65) { // lyumjev peak: 45 + ins_val = 55; + } else if (profile.insulinPeak > 50 ){ // ultra rapid peak: 55 + ins_val = 65; + } + console.log("For "+profile.insulinType+" (insulin peak: "+profile.insulinPeak+") divisor is: "+ins_val+"; "); + + console.log("Insulin value for ISF based on profile: "+ins_val+"; "); var dynISFadjust = profile.DynISFAdjust; - var dynISFadjust = ( dynISFadjust / 100 ); - var TDD = (dynISFadjust * TDD); - var variable_sens = (277700 / ( TDD * bg)); + dynISFadjust = ( dynISFadjust / 100 ); + TDD = ( dynISFadjust * TDD ); + + var variable_sens = 1800 / ( TDD * (Math.log(( bg / ins_val ) + 1 ) ) ); + variable_sens = round(variable_sens,1); + + if (dynISFadjust > 1 ) { console.log("TDD adjustment factor is: " +dynISFadjust+"; "); console.log("TDD adjusted to "+TDD+" using adjustment factor of "+dynISFadjust+"; "); @@ -314,7 +323,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ console.log("ISF from "+variable_sens+" to "+sens+ "due to temp target; "); } else { - sensitivityRatio = ( tdd_24 / tdd7 ); + sensitivityRatio = ( meal_data.TDD24 / tdd7 ); } if (sensitivityRatio > 1) { sensitivityRatio = Math.min(sensitivityRatio, profile.autosens_max); @@ -501,9 +510,41 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ return rT; } - // min_bg of 90 -> threshold of 65, 100 -> 70 110 -> 75, and 130 -> 85 - var threshold = min_bg - 0.5*(min_bg-40); + // min_bg of 90 -> threshold of 65, 100 -> 70 110 -> 75, and 130 -> 85, or if specified by user, take that value + var lgsThreshold = profile.lgsThreshold; + console.error("Profile LGS Threshold set to"+lgsThreshold+"; "); + //if(lgsThreshold < 5.6) + if(lgsThreshold > 3.2 && lgsThreshold < 5.6){ + lgsThreshold = (18 * lgsThreshold); + lgsThreshold = round(lgsThreshold, 2); + console.error("LGS Threshold converted to"+lgsThreshold+"; "); + }else{ + lgsThreshold; + } + var threshold = min_bg - 0.5*(min_bg-40); + var oldThreshold = threshold; + if(lgsThreshold < 65 || lgsThreshold > 120) { + threshold; + } + else if( lgsThreshold < threshold){ + threshold; + } + else { + threshold = lgsThreshold; + } + console.error("Threshold set from " + convert_bg(oldThreshold, profile) + " to " + convert_bg(threshold, profile) + "; "); + /*var oldThreshold = threshold; + + if(lgsThreshold < 65 || lgsThreshold > 120) { + lgsThreshold = threshold; + } + else{ + threshold = Math.max(threshold, lgsThreshold); + } + if( threshold === lgsThreshold ) { + console.log("Threshold set from " + convert_bg(oldThreshold, profile) + " to " + convert_bg(threshold, profile) + "; ") + }*/ //console.error(reservoir_data); rT = { @@ -808,19 +849,22 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ console.log("EventualBG is" +eventualBG+" ;"); if (bg > target_bg && glucose_status.delta < 3 && glucose_status.delta > -3 && glucose_status.short_avgdelta > -3 && glucose_status.short_avgdelta < 3 && eventualBG > target_bg && eventualBG < bg ) { - var future_sens = ( 277700 / (TDD * ((eventualBG * 0.5) + (bg * 0.5) ) ) ); + var future_sens = ( 1800 / (Math.log((((eventualBG * 0.5) + (bg * 0.5))/ins_val)+1)*TDD)); + var future_sens_old = ( 277700 / (TDD * ((bg * 0.5) + (eventualBG * 0.5 )))); console.log("Future state sensitivity is " +future_sens+" based on eventual and current bg due to flat glucose level above target"); rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;"; } else if( glucose_status.delta > 0 && eventualBG > target_bg ) { - var future_sens = ( 277700 / (TDD * bg) ); + var future_sens = ( 1800 / (Math.log((bg/ins_val)+1)*TDD)); + var future_sens_old = ( 277700 / (TDD * bg)); console.log("Future state sensitivity is " +future_sens+" using current bg due to small delta or variation"); rT.reason += "Dosing sensitivity: " +future_sens+" using current BG;"; } else { - var future_sens = ( 277700 / (TDD * eventualBG) ); + var future_sens = ( 1800 / (Math.log((eventualBG/ins_val)+1)*TDD)); + var future_sens_old = ( 277700 / (TDD * eventualBG)); console.log("Future state sensitivity is " +future_sens+" based on eventual bg due to -ve delta"); rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;"; } @@ -1085,7 +1129,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ return tempBasalFunctions.setTempBasal(rate, 30, profile, rT, currenttemp); } if (typeof currenttemp.rate !== 'undefined' && (currenttemp.duration > 5 && rate >= currenttemp.rate * 0.8)) { - rT.reason += ", temp " + currenttemp.rate + " ~< req " + rate + "U/hr. "; + rT.reason += ", temp " + currenttemp.rate + " ~< req " + round(rate, 2) + "U/hr. "; return rT; } else { // calculate a long enough zero temp to eventually correct back up to target @@ -1106,7 +1150,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ return tempBasalFunctions.setTempBasal(rate, durationReq, profile, rT, currenttemp); } } else { - rT.reason += ", setting " + rate + "U/hr. "; + rT.reason += ", setting " + round(rate, 2) + "U/hr. "; } return tempBasalFunctions.setTempBasal(rate, 30, profile, rT, currenttemp); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt index c1cf1994d3..f2b8916721 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt @@ -192,6 +192,11 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri this.profile.put("sens", profile.getIsfMgdl()) this.profile.put("max_daily_safety_multiplier", sp.getInt(R.string.key_openapsama_max_daily_safety_multiplier, 3)) this.profile.put("current_basal_safety_multiplier", sp.getDouble(R.string.key_openapsama_current_basal_safety_multiplier, 4.0)) + this.profile.put("lgsThreshold", sp.getDouble(R.string.key_treatmentssafety_lgsThreshold, 60.0)) + + val insulin = activePlugin.activeInsulin + val insulinType = insulin.friendlyName + val insulinPeak = insulin.peak //mProfile.put("high_temptarget_raises_sensitivity", SP.getBoolean(R.string.key_high_temptarget_raises_sensitivity, SMBDefaults.high_temptarget_raises_sensitivity)); this.profile.put("high_temptarget_raises_sensitivity", sp.getBoolean(R.string.key_high_temptarget_raises_sensitivity, SMBDefaults.high_temptarget_raises_sensitivity)) @@ -223,6 +228,8 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri this.profile.put("maxSMBBasalMinutes", sp.getInt(R.string.key_smbmaxminutes, SMBDefaults.maxSMBBasalMinutes)) this.profile.put("maxUAMSMBBasalMinutes", sp.getInt(R.string.key_uamsmbmaxminutes, SMBDefaults.maxUAMSMBBasalMinutes)) this.profile.put("DynISFAdjust", SafeParse.stringToDouble(sp.getString(R.string.key_DynISFAdjust,"100"))) + this.profile.put("insulinType", insulinType) + this.profile.put("insulinPeak", insulinPeak) this.profile.put("maxUAMSMBBasalMinutes", sp.getInt(R.string.key_uamsmbmaxminutes, SMBDefaults.maxUAMSMBBasalMinutes)) //set the min SMB amount to be the amount set by the pump. this.profile.put("bolus_increment", pumpBolusStep) @@ -263,9 +270,13 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri this.mealData.put("lastBolusTime", mealData.lastBolusTime) this.mealData.put("lastCarbTime", mealData.lastCarbTime) + this.mealData.put("TDDAIMI1", tddCalculator.averageTDD(tddCalculator.calculate(1))?.totalAmount) this.mealData.put("TDDAIMI7", tddCalculator.averageTDD(tddCalculator.calculate(7))?.totalAmount) - this.mealData.put("TDDPUMP", tddCalculator.calculateDaily().totalAmount) - this.mealData.put("TDDLast24", tddCalculator.calculate24Daily().totalAmount) + this.mealData.put("TDDLast4", tddCalculator.calculate4Daily().totalAmount) + this.mealData.put("TDD4to8", tddCalculator.calculate8Gap().totalAmount) + this.mealData.put("TDD24", tddCalculator.calculate24Daily().totalAmount) + + if (constraintChecker.isAutosensModeEnabled().value()) { autosensData.put("ratio", autosensDataRatio) diff --git a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt index 91ef25a1f8..821668a3db 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt @@ -172,6 +172,102 @@ class TddCalculator @Inject constructor( tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount //} + aapsLogger.debug(LTag.CORE, tdd.toString()) + return tdd + } + fun calculate4Daily():TotalDailyDose { + val startTime = dateUtil.now() - T.hours(hour = 4).msecs() + val endTime = dateUtil.now() + val tdd = TotalDailyDose(timestamp = startTime) + //val result = TotalDailyDose() + repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() + .filter { it.type != Bolus.Type.PRIMING } + .forEach { t -> + //val midnight = MidnightTime.calc(t.timestamp) + //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) + tdd.bolusAmount += t.amount + //result.put(midnight, tdd) + } + repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t -> + //val midnight = MidnightTime.calc(t.timestamp) + //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) + tdd.carbs += t.amount + //result.put(midnight, tdd) + } + val calculationStep = T.mins(5).msecs() + val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep) + for (t in startTime until endTime step calculationStep) { + + //val midnight = MidnightTime.calc(t) + //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) + val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t) + val profile = profileFunction.getProfile(t) ?: continue + val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t) + tdd.basalAmount += absoluteRate / 60.0 * 5.0 + + if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) { + // they are not included in TBRs + val eb = iobCobCalculator.getExtendedBolus(t) + val absoluteEbRate = eb?.rate ?: 0.0 + tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0 + } + //result.put(midnight, tdd) + } + //for (i in 0 until tdd.size()) { + //val tdd = result.valueAt(i) + tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount + //} + + + aapsLogger.debug(LTag.CORE, tdd.toString()) + return tdd + } + + + fun calculate8Gap():TotalDailyDose { + val startTime = dateUtil.now() - T.hours(hour = 8).msecs() + val endTime = dateUtil.now() - T.hours(hour = 4).msecs() + val tdd = TotalDailyDose(timestamp = startTime) + //val result = TotalDailyDose() + repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() + .filter { it.type != Bolus.Type.PRIMING } + .forEach { t -> + //val midnight = MidnightTime.calc(t.timestamp) + //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) + tdd.bolusAmount += t.amount + //result.put(midnight, tdd) + } + repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t -> + //val midnight = MidnightTime.calc(t.timestamp) + //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) + tdd.carbs += t.amount + //result.put(midnight, tdd) + } + val calculationStep = T.mins(5).msecs() + val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep) + for (t in startTime until endTime step calculationStep) { + + //val midnight = MidnightTime.calc(t) + //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) + val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t) + val profile = profileFunction.getProfile(t) ?: continue + val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t) + tdd.basalAmount += absoluteRate / 60.0 * 5.0 + + if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) { + // they are not included in TBRs + val eb = iobCobCalculator.getExtendedBolus(t) + val absoluteEbRate = eb?.rate ?: 0.0 + tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0 + } + //result.put(midnight, tdd) + } + //for (i in 0 until tdd.size()) { + //val tdd = result.valueAt(i) + tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount + //} + + aapsLogger.debug(LTag.CORE, tdd.toString()) return tdd } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f60b454a22..662224ae11 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -58,6 +58,7 @@ Treatments safety Max allowed bolus [U] Max allowed carbs [g] + BG level below which low glucose suspend occurs %1$s Preferences Preferences Refresh treatments from NS @@ -162,7 +163,10 @@ APS Mode Closed Loop Open Loop - Low Glucose Suspend + Low Glucose Suspend + Humalog/Novolog + Fiasp + Lyumjev Loop Disabled New suggestion available Carbs Suggestion @@ -701,6 +705,7 @@ A bolus was delivered within the last 3 minutes, skipping SMB Basal set correctly treatmentssafety_maxbolus + lgsThreshold Limiting extended bolus to %1$.1f U because of %2$s Limiting carbs to %1$d g because of %2$s Limiting IOB to %1$.1f U because of %2$s @@ -720,6 +725,7 @@ This value is called Max IOB in OpenAPS context\nOpenAPS will not add more insulin if current IOB is greater than this value Meal max absorption time [h] Time at which any meal is considered absorbed. Remaining carbs will be cut off. + BG value below which insulin is suspended. Default value uses standard target model. User can set value between 60mg/dl (3.3mmol/l) and 100mg/dl(5.5mmol/l). Values below 65/3.6 result in use of default model Show notes field in treatment dialogs SetupWizardActivity Next diff --git a/app/src/main/res/xml/pref_openapssmbdynamicisf.xml b/app/src/main/res/xml/pref_openapssmbdynamicisf.xml index 135771f768..03feac98ed 100644 --- a/app/src/main/res/xml/pref_openapssmbdynamicisf.xml +++ b/app/src/main/res/xml/pref_openapssmbdynamicisf.xml @@ -39,6 +39,16 @@ validate:floatminNumber="1" validate:testType="floatNumericRange" /> + + Date: Tue, 14 Jun 2022 11:56:43 +0200 Subject: [PATCH 15/71] DynISF cleanup --- .../OpenAPSSMBDynamicISF/determine-basal.js | 40 +----- .../DetermineBasalAdapterSMBDynamicISFJS.kt | 14 +- .../androidaps/utils/stats/TddCalculator.kt | 134 +----------------- app/src/main/res/values/strings.xml | 2 +- .../res/xml/pref_openapssmbdynamicisf.xml | 10 +- .../androidaps/interfaces/Profile.kt | 3 + 6 files changed, 26 insertions(+), 177 deletions(-) diff --git a/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js b/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js index 8a9e08b15d..321f3a4871 100644 --- a/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js +++ b/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js @@ -511,40 +511,14 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ } // min_bg of 90 -> threshold of 65, 100 -> 70 110 -> 75, and 130 -> 85, or if specified by user, take that value - var lgsThreshold = profile.lgsThreshold; - console.error("Profile LGS Threshold set to"+lgsThreshold+"; "); - //if(lgsThreshold < 5.6) - if(lgsThreshold > 3.2 && lgsThreshold < 5.6){ - lgsThreshold = (18 * lgsThreshold); - lgsThreshold = round(lgsThreshold, 2); - console.error("LGS Threshold converted to"+lgsThreshold+"; "); - }else{ - lgsThreshold; - } - var threshold = min_bg - 0.5*(min_bg-40); - var oldThreshold = threshold; - if(lgsThreshold < 65 || lgsThreshold > 120) { - threshold; - } - else if( lgsThreshold < threshold){ - threshold; - } - else { - threshold = lgsThreshold; - } - console.error("Threshold set from " + convert_bg(oldThreshold, profile) + " to " + convert_bg(threshold, profile) + "; "); + var lgsThreshold = profile.lgsThreshold; + var threshold = min_bg - 0.5*(min_bg-40); + var oldThreshold = threshold; + if (lgsThreshold >= 65 && lgsThreshold <= 120 && lgsThreshold > threshold) { + threshold = lgsThreshold; + } + console.error("Threshold set from " + convert_bg(oldThreshold, profile) + " to " + convert_bg(threshold, profile) + "; "); - /*var oldThreshold = threshold; - - if(lgsThreshold < 65 || lgsThreshold > 120) { - lgsThreshold = threshold; - } - else{ - threshold = Math.max(threshold, lgsThreshold); - } - if( threshold === lgsThreshold ) { - console.log("Threshold set from " + convert_bg(oldThreshold, profile) + " to " + convert_bg(threshold, profile) + "; ") - }*/ //console.error(reservoir_data); rT = { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt index f2b8916721..d5a33606eb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/openAPSSMBDynamicISF/DetermineBasalAdapterSMBDynamicISFJS.kt @@ -192,11 +192,11 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri this.profile.put("sens", profile.getIsfMgdl()) this.profile.put("max_daily_safety_multiplier", sp.getInt(R.string.key_openapsama_max_daily_safety_multiplier, 3)) this.profile.put("current_basal_safety_multiplier", sp.getDouble(R.string.key_openapsama_current_basal_safety_multiplier, 4.0)) - this.profile.put("lgsThreshold", sp.getDouble(R.string.key_treatmentssafety_lgsThreshold, 60.0)) + this.profile.put("lgsThreshold", Profile.toMgdl(sp.getDouble(R.string.key_lgs_threshold, 65.0))) val insulin = activePlugin.activeInsulin - val insulinType = insulin.friendlyName - val insulinPeak = insulin.peak + val insulinType = insulin.friendlyName + val insulinPeak = insulin.peak //mProfile.put("high_temptarget_raises_sensitivity", SP.getBoolean(R.string.key_high_temptarget_raises_sensitivity, SMBDefaults.high_temptarget_raises_sensitivity)); this.profile.put("high_temptarget_raises_sensitivity", sp.getBoolean(R.string.key_high_temptarget_raises_sensitivity, SMBDefaults.high_temptarget_raises_sensitivity)) @@ -227,7 +227,7 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri this.profile.put("enableSMB_after_carbs", smbEnabled && sp.getBoolean(R.string.key_enableSMB_after_carbs, false) && advancedFiltering) this.profile.put("maxSMBBasalMinutes", sp.getInt(R.string.key_smbmaxminutes, SMBDefaults.maxSMBBasalMinutes)) this.profile.put("maxUAMSMBBasalMinutes", sp.getInt(R.string.key_uamsmbmaxminutes, SMBDefaults.maxUAMSMBBasalMinutes)) - this.profile.put("DynISFAdjust", SafeParse.stringToDouble(sp.getString(R.string.key_DynISFAdjust,"100"))) + this.profile.put("DynISFAdjust", SafeParse.stringToDouble(sp.getString(R.string.key_DynISFAdjust, "100"))) this.profile.put("insulinType", insulinType) this.profile.put("insulinPeak", insulinPeak) this.profile.put("maxUAMSMBBasalMinutes", sp.getInt(R.string.key_uamsmbmaxminutes, SMBDefaults.maxUAMSMBBasalMinutes)) @@ -272,9 +272,9 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri this.mealData.put("TDDAIMI1", tddCalculator.averageTDD(tddCalculator.calculate(1))?.totalAmount) this.mealData.put("TDDAIMI7", tddCalculator.averageTDD(tddCalculator.calculate(7))?.totalAmount) - this.mealData.put("TDDLast4", tddCalculator.calculate4Daily().totalAmount) - this.mealData.put("TDD4to8", tddCalculator.calculate8Gap().totalAmount) - this.mealData.put("TDD24", tddCalculator.calculate24Daily().totalAmount) + this.mealData.put("TDDLast4", tddCalculator.calculateDaily(-4, 0).totalAmount) + this.mealData.put("TDD4to8", tddCalculator.calculateDaily(-8, -4).totalAmount) + this.mealData.put("TDD24", tddCalculator.calculateDaily(-24, 0).totalAmount) diff --git a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt index 87c702911a..e07e492e9a 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt @@ -99,41 +99,9 @@ class TddCalculator @Inject constructor( return result } - fun calculateDaily(): TotalDailyDose { - val startTime = MidnightTime.calc(dateUtil.now()) - val endTime = dateUtil.now() - val tdd = TotalDailyDose(timestamp = startTime) - //val result = TotalDailyDose() - repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() - .filter { it.type != Bolus.Type.PRIMING } - .forEach { t -> - tdd.bolusAmount += t.amount - } - repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t -> - tdd.carbs += t.amount - } - val calculationStep = T.mins(5).msecs() - for (t in startTime until endTime step calculationStep) { - val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t) - val profile = profileFunction.getProfile(t) ?: continue - val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t) - tdd.basalAmount += absoluteRate / 60.0 * 5.0 - - if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) { - // they are not included in TBRs - val eb = iobCobCalculator.getExtendedBolus(t) - val absoluteEbRate = eb?.rate ?: 0.0 - tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0 - } - } - tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount - aapsLogger.debug(LTag.CORE, tdd.toString()) - return tdd - } - - fun calculate24Daily(): TotalDailyDose { - val startTime = dateUtil.now() - T.hours(hour = 24).msecs() - val endTime = dateUtil.now() + fun calculateDaily(startHours: Long, endHours: Long): TotalDailyDose { + val startTime = dateUtil.now() + T.hours(hour = startHours).msecs() + val endTime = dateUtil.now() + T.hours(hour = endHours).msecs() val tdd = TotalDailyDose(timestamp = startTime) repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() .filter { it.type != Bolus.Type.PRIMING } @@ -161,102 +129,6 @@ class TddCalculator @Inject constructor( aapsLogger.debug(LTag.CORE, tdd.toString()) return tdd } - fun calculate4Daily():TotalDailyDose { - val startTime = dateUtil.now() - T.hours(hour = 4).msecs() - val endTime = dateUtil.now() - val tdd = TotalDailyDose(timestamp = startTime) - //val result = TotalDailyDose() - repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() - .filter { it.type != Bolus.Type.PRIMING } - .forEach { t -> - //val midnight = MidnightTime.calc(t.timestamp) - //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - tdd.bolusAmount += t.amount - //result.put(midnight, tdd) - } - repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t -> - //val midnight = MidnightTime.calc(t.timestamp) - //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - tdd.carbs += t.amount - //result.put(midnight, tdd) - } - val calculationStep = T.mins(5).msecs() - val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep) - for (t in startTime until endTime step calculationStep) { - - //val midnight = MidnightTime.calc(t) - //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t) - val profile = profileFunction.getProfile(t) ?: continue - val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t) - tdd.basalAmount += absoluteRate / 60.0 * 5.0 - - if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) { - // they are not included in TBRs - val eb = iobCobCalculator.getExtendedBolus(t) - val absoluteEbRate = eb?.rate ?: 0.0 - tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0 - } - //result.put(midnight, tdd) - } - //for (i in 0 until tdd.size()) { - //val tdd = result.valueAt(i) - tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount - //} - - - aapsLogger.debug(LTag.CORE, tdd.toString()) - return tdd - } - - - fun calculate8Gap():TotalDailyDose { - val startTime = dateUtil.now() - T.hours(hour = 8).msecs() - val endTime = dateUtil.now() - T.hours(hour = 4).msecs() - val tdd = TotalDailyDose(timestamp = startTime) - //val result = TotalDailyDose() - repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() - .filter { it.type != Bolus.Type.PRIMING } - .forEach { t -> - //val midnight = MidnightTime.calc(t.timestamp) - //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - tdd.bolusAmount += t.amount - //result.put(midnight, tdd) - } - repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t -> - //val midnight = MidnightTime.calc(t.timestamp) - //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - tdd.carbs += t.amount - //result.put(midnight, tdd) - } - val calculationStep = T.mins(5).msecs() - val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep) - for (t in startTime until endTime step calculationStep) { - - //val midnight = MidnightTime.calc(t) - //val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t) - val profile = profileFunction.getProfile(t) ?: continue - val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t) - tdd.basalAmount += absoluteRate / 60.0 * 5.0 - - if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) { - // they are not included in TBRs - val eb = iobCobCalculator.getExtendedBolus(t) - val absoluteEbRate = eb?.rate ?: 0.0 - tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0 - } - //result.put(midnight, tdd) - } - //for (i in 0 until tdd.size()) { - //val tdd = result.valueAt(i) - tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount - //} - - - aapsLogger.debug(LTag.CORE, tdd.toString()) - return tdd - } fun averageTDD(tdds: LongSparseArray): TotalDailyDose? { val totalTdd = TotalDailyDose(timestamp = dateUtil.now()) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 662224ae11..e34436ac85 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -705,7 +705,7 @@ A bolus was delivered within the last 3 minutes, skipping SMB Basal set correctly treatmentssafety_maxbolus - lgsThreshold + lgsThreshold Limiting extended bolus to %1$.1f U because of %2$s Limiting carbs to %1$d g because of %2$s Limiting IOB to %1$.1f U because of %2$s diff --git a/app/src/main/res/xml/pref_openapssmbdynamicisf.xml b/app/src/main/res/xml/pref_openapssmbdynamicisf.xml index 03feac98ed..c1267c75ef 100644 --- a/app/src/main/res/xml/pref_openapssmbdynamicisf.xml +++ b/app/src/main/res/xml/pref_openapssmbdynamicisf.xml @@ -40,14 +40,14 @@ validate:testType="floatNumericRange" /> + validate:floatmaxNumber="120" + validate:floatminNumber="65" + validate:testType="bgRange" /> Date: Fri, 17 Jun 2022 11:24:51 +0200 Subject: [PATCH 16/71] resolve deadlock in Objective 7 --- .../objectives/objectives/Objective6.kt | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective6.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective6.kt index edcdf54bd5..dd10f4a33d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective6.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective6.kt @@ -2,7 +2,9 @@ package info.nightscout.androidaps.plugins.constraints.objectives.objectives import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R +import info.nightscout.androidaps.interfaces.Constraint import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker +import info.nightscout.androidaps.plugins.constraints.safety.SafetyPlugin import info.nightscout.androidaps.utils.T import javax.inject.Inject @@ -10,14 +12,21 @@ import javax.inject.Inject class Objective6(injector: HasAndroidInjector) : Objective(injector, "maxiob", R.string.objectives_maxiob_objective, R.string.objectives_maxiob_gate) { @Inject lateinit var constraintChecker: ConstraintChecker + @Inject lateinit var safetyPlugin: SafetyPlugin init { tasks.add(MinimumDurationTask(this, T.days(1).msecs())) - tasks.add(object : Task(this, R.string.maxiobset) { - override fun isCompleted(): Boolean { - val maxIOB = constraintChecker.getMaxIOBAllowed().value() - return maxIOB > 0 - } - }) + tasks.add( + object : Task(this, R.string.closedmodeenabled) { + override fun isCompleted(): Boolean = sp.getString(R.string.key_aps_mode, "open") == "closed" + }) + tasks.add( + object : Task(this, R.string.maxiobset) { + + override fun isCompleted(): Boolean { + val maxIOB = constraintChecker.getMaxIOBAllowed().value() + return maxIOB > 0 + } + }) } } \ No newline at end of file From 8f36b4a0dc23039fb01a0c8ebb72403516ee43e1 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 17 Jun 2022 11:38:00 +0200 Subject: [PATCH 17/71] Cleanup #2 --- .../OpenAPSSMBDynamicISF/determine-basal.js | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js b/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js index 321f3a4871..2944f6077f 100644 --- a/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js +++ b/app/src/main/assets/OpenAPSSMBDynamicISF/determine-basal.js @@ -270,13 +270,15 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ //console.log("Initial insulin value for ISF: "+ins_val+"; "); //console.log("Current value for insulin: "+insulin+"; "); - var ins_val = 75; // Lyumjev peak: 75 - if (profile.insulinPeak > 65) { // lyumjev peak: 45 - ins_val = 55; - } else if (profile.insulinPeak > 50 ){ // ultra rapid peak: 55 - ins_val = 65; - } - console.log("For "+profile.insulinType+" (insulin peak: "+profile.insulinPeak+") divisor is: "+ins_val+"; "); + var ins_val; + if (profile.insulinPeak > 65) { // lyumjev peak: 45 + ins_val = 55; + } else if (profile.insulinPeak > 50 ){ // ultra rapid peak: 55 + ins_val = 65; + } else { + ins_val = 75; // rapid peak: 75 + } + console.log("For "+profile.insulinType+" (insulin peak: "+profile.insulinPeak+") divisor is: "+ins_val+"; "); console.log("Insulin value for ISF based on profile: "+ins_val+"; "); @@ -824,25 +826,25 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_ if (bg > target_bg && glucose_status.delta < 3 && glucose_status.delta > -3 && glucose_status.short_avgdelta > -3 && glucose_status.short_avgdelta < 3 && eventualBG > target_bg && eventualBG < bg ) { var future_sens = ( 1800 / (Math.log((((eventualBG * 0.5) + (bg * 0.5))/ins_val)+1)*TDD)); - var future_sens_old = ( 277700 / (TDD * ((bg * 0.5) + (eventualBG * 0.5 )))); - console.log("Future state sensitivity is " +future_sens+" based on eventual and current bg due to flat glucose level above target"); - rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;"; + //var future_sens_old = ( 277700 / (TDD * ((bg * 0.5) + (eventualBG * 0.5 )))); + console.log("Future state sensitivity is " +future_sens+" based on eventual and current bg due to flat glucose level above target"); + rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;"; } else if( glucose_status.delta > 0 && eventualBG > target_bg ) { var future_sens = ( 1800 / (Math.log((bg/ins_val)+1)*TDD)); - var future_sens_old = ( 277700 / (TDD * bg)); + //var future_sens_old = ( 277700 / (TDD * bg)); console.log("Future state sensitivity is " +future_sens+" using current bg due to small delta or variation"); rT.reason += "Dosing sensitivity: " +future_sens+" using current BG;"; } else { - var future_sens = ( 1800 / (Math.log((eventualBG/ins_val)+1)*TDD)); - var future_sens_old = ( 277700 / (TDD * eventualBG)); - console.log("Future state sensitivity is " +future_sens+" based on eventual bg due to -ve delta"); - rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;"; + var future_sens = ( 1800 / (Math.log((eventualBG/ins_val)+1)*TDD)); + //var future_sens_old = ( 277700 / (TDD * eventualBG)); + console.log("Future state sensitivity is " +future_sens+" based on eventual bg due to -ve delta"); + rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;"; } - var future_sens = round(future_sens,1); + future_sens = round(future_sens,1); From ac0a58bad4b06bf87af5c79a0c540333d8bf2187 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 17 Jun 2022 11:42:06 +0200 Subject: [PATCH 18/71] New Crowdin updates (#1828) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Bulgarian) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Lithuanian) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Irish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Bulgarian) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Catalan) * New translations strings.xml (Afrikaans) * New translations strings.xml (Danish) * New translations strings.xml (Norwegian) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Irish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Korean) * New translations strings.xml (Lithuanian) * New translations strings.xml (Dutch) * New translations strings.xml (Polish) * New translations strings.xml (Spanish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Croatian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Croatian) * New translations strings.xml (French) * New translations strings.xml (Turkish) * New translations strings.xml (French) * New translations strings.xml (Turkish) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Hebrew) * New translations strings.xml (Slovak) * New translations strings.xml (Hebrew) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Turkish) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Turkish) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) --- app/src/main/res/values-tr-rTR/strings.xml | 2 +- core/src/main/res/values-ru-rRU/strings.xml | 2 ++ core/src/main/res/values-sk-rSK/strings.xml | 2 ++ danar/src/main/res/values-af-rZA/strings.xml | 2 ++ danar/src/main/res/values-bg-rBG/strings.xml | 2 ++ danar/src/main/res/values-ca-rES/strings.xml | 2 ++ danar/src/main/res/values-cs-rCZ/strings.xml | 4 +++ danar/src/main/res/values-da-rDK/strings.xml | 2 ++ danar/src/main/res/values-de-rDE/strings.xml | 2 ++ danar/src/main/res/values-el-rGR/strings.xml | 2 ++ danar/src/main/res/values-es-rES/strings.xml | 4 +++ danar/src/main/res/values-fr-rFR/strings.xml | 4 +++ danar/src/main/res/values-ga-rIE/strings.xml | 2 ++ danar/src/main/res/values-hr-rHR/strings.xml | 2 ++ danar/src/main/res/values-hu-rHU/strings.xml | 2 ++ danar/src/main/res/values-it-rIT/strings.xml | 2 ++ danar/src/main/res/values-iw-rIL/strings.xml | 4 +++ danar/src/main/res/values-ko-rKR/strings.xml | 2 ++ danar/src/main/res/values-lt-rLT/strings.xml | 2 ++ danar/src/main/res/values-nl-rNL/strings.xml | 2 ++ danar/src/main/res/values-no-rNO/strings.xml | 4 +++ danar/src/main/res/values-pl-rPL/strings.xml | 2 ++ danar/src/main/res/values-pt-rBR/strings.xml | 2 ++ danar/src/main/res/values-pt-rPT/strings.xml | 2 ++ danar/src/main/res/values-ro-rRO/strings.xml | 2 ++ danar/src/main/res/values-ru-rRU/strings.xml | 4 +++ danar/src/main/res/values-sk-rSK/strings.xml | 4 +++ danar/src/main/res/values-sv-rSE/strings.xml | 2 ++ danar/src/main/res/values-tr-rTR/strings.xml | 4 +++ danar/src/main/res/values-zh-rCN/strings.xml | 2 ++ .../src/main/res/values-af-rZA/strings.xml | 6 +++++ .../src/main/res/values-bg-rBG/strings.xml | 6 +++++ .../src/main/res/values-ca-rES/strings.xml | 6 +++++ .../src/main/res/values-cs-rCZ/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values-da-rDK/strings.xml | 6 +++++ .../src/main/res/values-de-rDE/strings.xml | 6 +++++ .../src/main/res/values-el-rGR/strings.xml | 6 +++++ .../src/main/res/values-es-rES/strings.xml | 22 +++++++++++++++ .../src/main/res/values-fr-rFR/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values-ga-rIE/strings.xml | 6 +++++ .../src/main/res/values-hr-rHR/strings.xml | 6 +++++ .../src/main/res/values-hu-rHU/strings.xml | 6 +++++ .../src/main/res/values-it-rIT/strings.xml | 6 +++++ .../src/main/res/values-iw-rIL/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values-ko-rKR/strings.xml | 6 +++++ .../src/main/res/values-lt-rLT/strings.xml | 6 +++++ .../src/main/res/values-nl-rNL/strings.xml | 6 +++++ .../src/main/res/values-no-rNO/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values-pl-rPL/strings.xml | 6 +++++ .../src/main/res/values-pt-rBR/strings.xml | 6 +++++ .../src/main/res/values-pt-rPT/strings.xml | 6 +++++ .../src/main/res/values-ro-rRO/strings.xml | 6 +++++ .../src/main/res/values-ru-rRU/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values-sk-rSK/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values-sv-rSE/strings.xml | 6 +++++ .../src/main/res/values-tr-rTR/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values-zh-rCN/strings.xml | 6 +++++ wear/src/main/res/values-sk-rSK/strings.xml | 1 + 58 files changed, 401 insertions(+), 1 deletion(-) create mode 100644 danar/src/main/res/values-af-rZA/strings.xml create mode 100644 danar/src/main/res/values-bg-rBG/strings.xml create mode 100644 danar/src/main/res/values-ca-rES/strings.xml create mode 100644 danar/src/main/res/values-cs-rCZ/strings.xml create mode 100644 danar/src/main/res/values-da-rDK/strings.xml create mode 100644 danar/src/main/res/values-de-rDE/strings.xml create mode 100644 danar/src/main/res/values-el-rGR/strings.xml create mode 100644 danar/src/main/res/values-es-rES/strings.xml create mode 100644 danar/src/main/res/values-fr-rFR/strings.xml create mode 100644 danar/src/main/res/values-ga-rIE/strings.xml create mode 100644 danar/src/main/res/values-hr-rHR/strings.xml create mode 100644 danar/src/main/res/values-hu-rHU/strings.xml create mode 100644 danar/src/main/res/values-it-rIT/strings.xml create mode 100644 danar/src/main/res/values-iw-rIL/strings.xml create mode 100644 danar/src/main/res/values-ko-rKR/strings.xml create mode 100644 danar/src/main/res/values-lt-rLT/strings.xml create mode 100644 danar/src/main/res/values-nl-rNL/strings.xml create mode 100644 danar/src/main/res/values-no-rNO/strings.xml create mode 100644 danar/src/main/res/values-pl-rPL/strings.xml create mode 100644 danar/src/main/res/values-pt-rBR/strings.xml create mode 100644 danar/src/main/res/values-pt-rPT/strings.xml create mode 100644 danar/src/main/res/values-ro-rRO/strings.xml create mode 100644 danar/src/main/res/values-ru-rRU/strings.xml create mode 100644 danar/src/main/res/values-sk-rSK/strings.xml create mode 100644 danar/src/main/res/values-sv-rSE/strings.xml create mode 100644 danar/src/main/res/values-tr-rTR/strings.xml create mode 100644 danar/src/main/res/values-zh-rCN/strings.xml create mode 100644 pump-common/src/main/res/values-af-rZA/strings.xml create mode 100644 pump-common/src/main/res/values-bg-rBG/strings.xml create mode 100644 pump-common/src/main/res/values-ca-rES/strings.xml create mode 100644 pump-common/src/main/res/values-cs-rCZ/strings.xml create mode 100644 pump-common/src/main/res/values-da-rDK/strings.xml create mode 100644 pump-common/src/main/res/values-de-rDE/strings.xml create mode 100644 pump-common/src/main/res/values-el-rGR/strings.xml create mode 100644 pump-common/src/main/res/values-es-rES/strings.xml create mode 100644 pump-common/src/main/res/values-fr-rFR/strings.xml create mode 100644 pump-common/src/main/res/values-ga-rIE/strings.xml create mode 100644 pump-common/src/main/res/values-hr-rHR/strings.xml create mode 100644 pump-common/src/main/res/values-hu-rHU/strings.xml create mode 100644 pump-common/src/main/res/values-it-rIT/strings.xml create mode 100644 pump-common/src/main/res/values-iw-rIL/strings.xml create mode 100644 pump-common/src/main/res/values-ko-rKR/strings.xml create mode 100644 pump-common/src/main/res/values-lt-rLT/strings.xml create mode 100644 pump-common/src/main/res/values-nl-rNL/strings.xml create mode 100644 pump-common/src/main/res/values-no-rNO/strings.xml create mode 100644 pump-common/src/main/res/values-pl-rPL/strings.xml create mode 100644 pump-common/src/main/res/values-pt-rBR/strings.xml create mode 100644 pump-common/src/main/res/values-pt-rPT/strings.xml create mode 100644 pump-common/src/main/res/values-ro-rRO/strings.xml create mode 100644 pump-common/src/main/res/values-ru-rRU/strings.xml create mode 100644 pump-common/src/main/res/values-sk-rSK/strings.xml create mode 100644 pump-common/src/main/res/values-sv-rSE/strings.xml create mode 100644 pump-common/src/main/res/values-tr-rTR/strings.xml create mode 100644 pump-common/src/main/res/values-zh-rCN/strings.xml diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index fcf6eccb0b..510535d53d 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -140,7 +140,7 @@ Maks Ü/s geçici Bazal ayarlanabilir Bu değer OpenAPS\'te \"maksimum bazal\" olarak adlandırılır OpenAPS\'nin vermesine izin verilen maksimum bazal IOB (Aktif insülin) [U] - Bu değere OpenAPS bağlamında Max IOB denir.\nAPS\'de bir kerede verilebilen maksimum insülin [U] ü. + Bu değere OpenAPS bağlamında Maks IOB denir.\nAPS\'de bir kerede verilebilen maksimum insülin [U] ü. Dışa aktarılan tercihleri şifrelemek için kullanılacak ana parola sorulacaktır. İçe aktarılan tercihlerin şifresini çözmek için gerekli olan ana parola sorulacaktır. Aktarım iptal edildi! Tercihler dışa aktarılmadı! diff --git a/core/src/main/res/values-ru-rRU/strings.xml b/core/src/main/res/values-ru-rRU/strings.xml index 86d074832f..6cd340ae38 100644 --- a/core/src/main/res/values-ru-rRU/strings.xml +++ b/core/src/main/res/values-ru-rRU/strings.xml @@ -464,6 +464,8 @@ Последнее выполнение: Внимание: Выберите профиль для изменения + Выбранный профиль имеет %1$d значений IC. Автоматически будет использоваться %2$.2f г/ед + Выбранный профиль имеет %1$d значений ISF. Автоматически будет использоваться %2$.1f%3$s/ед Ошибка ввода данных, попробуйте запустить снова autotune или уменьшить количество дней Идет настройка автоматизации, ждите Перед использованием внимательно проверьте результаты! diff --git a/core/src/main/res/values-sk-rSK/strings.xml b/core/src/main/res/values-sk-rSK/strings.xml index cbd101e11e..485f80b80d 100644 --- a/core/src/main/res/values-sk-rSK/strings.xml +++ b/core/src/main/res/values-sk-rSK/strings.xml @@ -464,6 +464,8 @@ Posledné spustenie : Upozornenie : Vyberte profil pre ladenie + Vybraný profil má %1$d hodnôt IC. Autotune bude používať %2$.2f g/JI + Vybraný profil má %1$d hodnôt ISF. Autotune bude používať %2$.1f %3$s/JI Chyba vstupných dát, skúste znova spustiť Autotune, alebo znížte počet dní Autotune spustený, prosím buďte trpezliví Pred použitím výsledky starostlivo skontrolujte! diff --git a/danar/src/main/res/values-af-rZA/strings.xml b/danar/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-bg-rBG/strings.xml b/danar/src/main/res/values-bg-rBG/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-bg-rBG/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-ca-rES/strings.xml b/danar/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-cs-rCZ/strings.xml b/danar/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 0000000000..d6f6dec21a --- /dev/null +++ b/danar/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,4 @@ + + + Nepodporovaná akce v pumpě. Používejte pouze rozhraní AndroidAPS! + diff --git a/danar/src/main/res/values-da-rDK/strings.xml b/danar/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-de-rDE/strings.xml b/danar/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-el-rGR/strings.xml b/danar/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-es-rES/strings.xml b/danar/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..953c1b9b26 --- /dev/null +++ b/danar/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,4 @@ + + + Acción no soportada en la bomba. Usa sólo la interfaz de AndroidAPS + diff --git a/danar/src/main/res/values-fr-rFR/strings.xml b/danar/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000000..cacbde8ef7 --- /dev/null +++ b/danar/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,4 @@ + + + Action non prise en charge par la pompe. Utilisez uniquement l’interface AndroidAPS! + diff --git a/danar/src/main/res/values-ga-rIE/strings.xml b/danar/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-hr-rHR/strings.xml b/danar/src/main/res/values-hr-rHR/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-hr-rHR/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-hu-rHU/strings.xml b/danar/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-it-rIT/strings.xml b/danar/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-iw-rIL/strings.xml b/danar/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 0000000000..089df8d969 --- /dev/null +++ b/danar/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,4 @@ + + + פעולה שאינה נתמכת ע\"י המשאבה. נא להשתמש בממשק AndroidAPS בלבד! + diff --git a/danar/src/main/res/values-ko-rKR/strings.xml b/danar/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-lt-rLT/strings.xml b/danar/src/main/res/values-lt-rLT/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-lt-rLT/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-nl-rNL/strings.xml b/danar/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-no-rNO/strings.xml b/danar/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 0000000000..1d5e4c4238 --- /dev/null +++ b/danar/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,4 @@ + + + Kommando ikke støttet i pumpen. Bruk kun AndroidAPS brukergrensesnittet! + diff --git a/danar/src/main/res/values-pl-rPL/strings.xml b/danar/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-pt-rBR/strings.xml b/danar/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-pt-rPT/strings.xml b/danar/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-ro-rRO/strings.xml b/danar/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-ru-rRU/strings.xml b/danar/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 0000000000..50ac352ff3 --- /dev/null +++ b/danar/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,4 @@ + + + Неподдерживаемое действие в помпе. Пользуйтесь только интерфейсом AndroidAPS! + diff --git a/danar/src/main/res/values-sk-rSK/strings.xml b/danar/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 0000000000..8fe7511096 --- /dev/null +++ b/danar/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,4 @@ + + + Nepodporovaná akcia v pumpe. Používajte iba užívateľské rozhranie AndroidAPS! + diff --git a/danar/src/main/res/values-sv-rSE/strings.xml b/danar/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/danar/src/main/res/values-tr-rTR/strings.xml b/danar/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 0000000000..733236e044 --- /dev/null +++ b/danar/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,4 @@ + + + Pompada desteklenmeyen eylem. Yalnızca AndroidAPS kullanıcı arayüzünü kullanın! + diff --git a/danar/src/main/res/values-zh-rCN/strings.xml b/danar/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..3ea04e700d --- /dev/null +++ b/danar/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/pump-common/src/main/res/values-af-rZA/strings.xml b/pump-common/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-bg-rBG/strings.xml b/pump-common/src/main/res/values-bg-rBG/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-bg-rBG/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-ca-rES/strings.xml b/pump-common/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-cs-rCZ/strings.xml b/pump-common/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 0000000000..a61e7b356c --- /dev/null +++ b/pump-common/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,27 @@ + + + + Operace není podporována pumpou a/nebo ovladačem. + Operace prozatím pumpou nepodporována. + OK + + Nikdy nekontaktováno + Probouzení + Chyba komunikace + Vypršel časový limit komunikace + Pumpa nedostupná + Neplatná konfigurace + Aktivní + Spící + + Bazály + Konfigurace + Oznámení + Statistika + Neznámé + Vše + Bolusy + Doplňování + Alarmy + Glykémie + diff --git a/pump-common/src/main/res/values-da-rDK/strings.xml b/pump-common/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-de-rDE/strings.xml b/pump-common/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-el-rGR/strings.xml b/pump-common/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-es-rES/strings.xml b/pump-common/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..2dedba62c8 --- /dev/null +++ b/pump-common/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,22 @@ + + + + Operación no soportada por la bomba y/o por el controlador. + Operación no soportada todavía por la bomba. + + Nunca contactado + Error con la comunicación + Tiempo de espera en la comunicación + Bomba no alcanzable + Configuración inválida + Activo + + Basales + Notificaciones + Estadísticas + Todo + Bolos + Cebado + Alarmas + Glucosa + diff --git a/pump-common/src/main/res/values-fr-rFR/strings.xml b/pump-common/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000000..6d050ec761 --- /dev/null +++ b/pump-common/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,27 @@ + + + + Opération non prise en charge par la pompe et/ou le pilote. + Opération PAS ENCORE supportée par la pompe. + OK + + Jamais contacté + Réveil en cours + Erreur de communication + Expiration du délai d\'attente de la communication + Pompe hors de portée + Configuration invalide + Actif + En veille + + Basales + Configurations + Notifications + Statistiques + Inconnus + Tous + Bolus + Amorcer + Alarmes + Glycémie + diff --git a/pump-common/src/main/res/values-ga-rIE/strings.xml b/pump-common/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-hr-rHR/strings.xml b/pump-common/src/main/res/values-hr-rHR/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-hr-rHR/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-hu-rHU/strings.xml b/pump-common/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-it-rIT/strings.xml b/pump-common/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-iw-rIL/strings.xml b/pump-common/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 0000000000..2e156137a1 --- /dev/null +++ b/pump-common/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,27 @@ + + + + הפעולה לא נתמכת ע\"י המשאבה ו\\או מנהל ההתקן. + הפעולה עוד לא נתמכת על ידי המשאבה. + אישור + + מעולם לא נוצר קשר + מתעורר + שגיאת תקשורת + חריגה ממגבלת הזמן לתקשורת + המשאבה לא זמינה + תצורה לא חוקית + פעיל + שינה + + בזאלים + תצורות + התראות + סטטיסטיקה + לא ידועים + הכול + בולוסים + תיחול + התראות + גלוקוז + diff --git a/pump-common/src/main/res/values-ko-rKR/strings.xml b/pump-common/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-lt-rLT/strings.xml b/pump-common/src/main/res/values-lt-rLT/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-lt-rLT/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-nl-rNL/strings.xml b/pump-common/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-no-rNO/strings.xml b/pump-common/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 0000000000..e4c5f1ab5b --- /dev/null +++ b/pump-common/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,27 @@ + + + + Operasjonen støttes ikke av pumpen og/eller driveren. + Operasjonen støttes ikke av pumpen ennå. + OK + + Aldri kontaktet + Våkner opp + Feil med kommunikasjonen + Tidsavbrudd ved kommunikasjonen + Pumpe er utilgjengelig + Ugyldig oppsett av pumpe + Aktiv + Hvilemodus + + Basaldoser + Konfigurasjoner + Varsler + Statistikker + Ukjente + Alle + Boluser + Prime + Alarmer + Blodsukker + diff --git a/pump-common/src/main/res/values-pl-rPL/strings.xml b/pump-common/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-pt-rBR/strings.xml b/pump-common/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-pt-rPT/strings.xml b/pump-common/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-ro-rRO/strings.xml b/pump-common/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-ru-rRU/strings.xml b/pump-common/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 0000000000..6eee027b2a --- /dev/null +++ b/pump-common/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,27 @@ + + + + Операция не поддерживается помпой и/или драйвером. + Операция ЕЩЕ не поддерживается помпой. + OK + + Никогда не подключалась + Пробуждение + Ошибка связи + Таймаут связи + Помпа недоступна + Недопустимая конфигурация + Работает + Спящий режим + + Базалы + Конфигурации + Уведомления + Статистика + Неизвестные + Все + Болюсы + Заполнение + Оповещения + Гликемия + diff --git a/pump-common/src/main/res/values-sk-rSK/strings.xml b/pump-common/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 0000000000..cacd5482e8 --- /dev/null +++ b/pump-common/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,27 @@ + + + + Operácia nepodporovaná pumpou a/alebo ovládačom. + Operácia zatiaľ nepodporovaná pumpou. + OK + + Nikdy nepripojené + Prebúdzanie + Chyba komunikácie + Uplynul časový limit komunikácie + Pumpa nedostupná + Neplatná konfigurácia + Aktívna + Spiaca + + Bazály + Konfigurácie + Notifikácie + Štatistiky + Neznáme + Všetko + Bolusy + Plnenie + Alarmy + Glykémia + diff --git a/pump-common/src/main/res/values-sv-rSE/strings.xml b/pump-common/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/pump-common/src/main/res/values-tr-rTR/strings.xml b/pump-common/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 0000000000..8b2fb96986 --- /dev/null +++ b/pump-common/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,27 @@ + + + + Pompa ve/veya sürücü tarafından desteklenmeyen işlem. + İşlem HENÜZ pompa tarafından desteklenmiyor. + Tamam + + Hiç bağlantı yapılmadı + Uyanıyor + İletişim hatası + İletişimde zaman aşımı + Pompa ulaşılamıyor + Geçersiz yapılandırma + Aktif + Uyuyor + + Bazallar + Konfigürasyon + Bildirimler + İstatistikler + Bilinmeyenler + Tümü + Boluslar + Dolumlar + Alarmlar + Glikoz + diff --git a/pump-common/src/main/res/values-zh-rCN/strings.xml b/pump-common/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..55baa3f071 --- /dev/null +++ b/pump-common/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/wear/src/main/res/values-sk-rSK/strings.xml b/wear/src/main/res/values-sk-rSK/strings.xml index 08dde6af7b..49db0a922f 100644 --- a/wear/src/main/res/values-sk-rSK/strings.xml +++ b/wear/src/main/res/values-sk-rSK/strings.xml @@ -176,6 +176,7 @@ --JI --g -.--JI/h + Uploader: ---% S: žiadny stav Pred -- minútami --- mg/dl From 7ba4c19298db1a48c5e4adcf82d24fdd502e91d1 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 17 Jun 2022 12:47:40 +0200 Subject: [PATCH 19/71] sync BolusCalculatorResult in full mode --- .../nsclient/NSClientAddUpdateWorker.kt | 158 ++++++++++-------- 1 file changed, 92 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt index 5707cd439c..5abed9f9f2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt @@ -85,14 +85,16 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { - uel.log(Action.BOLUS, Sources.NSClient, + uel.log( + Action.BOLUS, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Insulin(it.amount) ) aapsLogger.debug(LTag.DATABASE, "Inserted bolus $it") } result.invalidated.forEach { - uel.log(Action.BOLUS_REMOVED, Sources.NSClient, + uel.log( + Action.BOLUS_REMOVED, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Insulin(it.amount) ) @@ -119,21 +121,24 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { - uel.log(Action.CARBS, Sources.NSClient, + uel.log( + Action.CARBS, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Gram(it.amount.toInt()) ) aapsLogger.debug(LTag.DATABASE, "Inserted carbs $it") } result.invalidated.forEach { - uel.log(Action.CARBS_REMOVED, Sources.NSClient, + uel.log( + Action.CARBS_REMOVED, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Gram(it.amount.toInt()) ) aapsLogger.debug(LTag.DATABASE, "Invalidated carbs $it") } result.updated.forEach { - uel.log(Action.CARBS, Sources.NSClient, + uel.log( + Action.CARBS, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Gram(it.amount.toInt()) ) @@ -157,8 +162,8 @@ class NSClientAddUpdateWorker( virtualPumpPlugin.fakeDataDetected = true } when { - insulin > 0 || carbs > 0 -> Any() - eventType == TherapyEvent.Type.TEMPORARY_TARGET.text -> + insulin > 0 || carbs > 0 -> Any() + eventType == TherapyEvent.Type.TEMPORARY_TARGET.text -> if (sp.getBoolean(R.string.key_ns_receive_temp_target, false) || config.NSCLIENT) { temporaryTargetFromJson(json)?.let { temporaryTarget -> repository.runTransactionForResult(SyncNsTemporaryTargetTransaction(temporaryTarget)) @@ -169,7 +174,8 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { tt -> - uel.log(Action.TT, Sources.NSClient, + uel.log( + Action.TT, Sources.NSClient, ValueWithUnit.TherapyEventTTReason(tt.reason), ValueWithUnit.fromGlucoseUnit(tt.lowTarget, Constants.MGDL), ValueWithUnit.fromGlucoseUnit(tt.highTarget, Constants.MGDL).takeIf { tt.lowTarget != tt.highTarget }, @@ -178,7 +184,8 @@ class NSClientAddUpdateWorker( aapsLogger.debug(LTag.DATABASE, "Inserted TemporaryTarget $tt") } result.invalidated.forEach { tt -> - uel.log(Action.TT_REMOVED, Sources.NSClient, + uel.log( + Action.TT_REMOVED, Sources.NSClient, ValueWithUnit.TherapyEventTTReason(tt.reason), ValueWithUnit.Mgdl(tt.lowTarget), ValueWithUnit.Mgdl(tt.highTarget).takeIf { tt.lowTarget != tt.highTarget }, @@ -187,7 +194,8 @@ class NSClientAddUpdateWorker( aapsLogger.debug(LTag.DATABASE, "Invalidated TemporaryTarget $tt") } result.ended.forEach { tt -> - uel.log(Action.CANCEL_TT, Sources.NSClient, + uel.log( + Action.CANCEL_TT, Sources.NSClient, ValueWithUnit.TherapyEventTTReason(tt.reason), ValueWithUnit.Mgdl(tt.lowTarget), ValueWithUnit.Mgdl(tt.highTarget).takeIf { tt.lowTarget != tt.highTarget }, @@ -204,7 +212,7 @@ class NSClientAddUpdateWorker( } } ?: aapsLogger.error("Error parsing TT json $json") } - eventType == TherapyEvent.Type.NOTE.text && json.isEffectiveProfileSwitch() -> // replace this by new Type when available in NS + eventType == TherapyEvent.Type.NOTE.text && json.isEffectiveProfileSwitch() -> // replace this by new Type when available in NS if (sp.getBoolean(R.string.key_ns_receive_profile_switch, false) || config.NSCLIENT) { effectiveProfileSwitchFromJson(json, dateUtil)?.let { effectiveProfileSwitch -> repository.runTransactionForResult(SyncNsEffectiveProfileSwitchTransaction(effectiveProfileSwitch)) @@ -215,13 +223,17 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { - uel.log(Action.PROFILE_SWITCH, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp)) + uel.log( + Action.PROFILE_SWITCH, Sources.NSClient, + ValueWithUnit.Timestamp(it.timestamp) + ) aapsLogger.debug(LTag.DATABASE, "Inserted EffectiveProfileSwitch $it") } result.invalidated.forEach { - uel.log(Action.PROFILE_SWITCH_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp)) + uel.log( + Action.PROFILE_SWITCH_REMOVED, Sources.NSClient, + ValueWithUnit.Timestamp(it.timestamp) + ) aapsLogger.debug(LTag.DATABASE, "Invalidated EffectiveProfileSwitch $it") } result.updatedNsId.forEach { @@ -230,34 +242,34 @@ class NSClientAddUpdateWorker( } } ?: aapsLogger.error("Error parsing EffectiveProfileSwitch json $json") } - eventType == TherapyEvent.Type.BOLUS_WIZARD.text -> - if (config.NSCLIENT) { - bolusCalculatorResultFromJson(json)?.let { bolusCalculatorResult -> - repository.runTransactionForResult(SyncNsBolusCalculatorResultTransaction(bolusCalculatorResult)) - .doOnError { - aapsLogger.error(LTag.DATABASE, "Error while saving BolusCalculatorResult", it) - ret = Result.failure(workDataOf("Error" to it.toString())) + eventType == TherapyEvent.Type.BOLUS_WIZARD.text -> + bolusCalculatorResultFromJson(json)?.let { bolusCalculatorResult -> + repository.runTransactionForResult(SyncNsBolusCalculatorResultTransaction(bolusCalculatorResult)) + .doOnError { + aapsLogger.error(LTag.DATABASE, "Error while saving BolusCalculatorResult", it) + ret = Result.failure(workDataOf("Error" to it.toString())) + } + .blockingGet() + .also { result -> + result.inserted.forEach { + uel.log( + Action.BOLUS_CALCULATOR_RESULT, Sources.NSClient, + ValueWithUnit.Timestamp(it.timestamp), + ) + aapsLogger.debug(LTag.DATABASE, "Inserted BolusCalculatorResult $it") } - .blockingGet() - .also { result -> - result.inserted.forEach { - uel.log(Action.BOLUS_CALCULATOR_RESULT, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp), - ) - aapsLogger.debug(LTag.DATABASE, "Inserted BolusCalculatorResult $it") - } - result.invalidated.forEach { - uel.log(Action.BOLUS_CALCULATOR_RESULT_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp), - ) - aapsLogger.debug(LTag.DATABASE, "Invalidated BolusCalculatorResult $it") - } - result.updatedNsId.forEach { - aapsLogger.debug(LTag.DATABASE, "Updated nsId BolusCalculatorResult $it") - } + result.invalidated.forEach { + uel.log( + Action.BOLUS_CALCULATOR_RESULT_REMOVED, Sources.NSClient, + ValueWithUnit.Timestamp(it.timestamp), + ) + aapsLogger.debug(LTag.DATABASE, "Invalidated BolusCalculatorResult $it") } - } ?: aapsLogger.error("Error parsing BolusCalculatorResult json $json") - } + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId BolusCalculatorResult $it") + } + } + } ?: aapsLogger.error("Error parsing BolusCalculatorResult json $json") eventType == TherapyEvent.Type.CANNULA_CHANGE.text || eventType == TherapyEvent.Type.INSULIN_CHANGE.text || eventType == TherapyEvent.Type.SENSOR_CHANGE.text || @@ -267,7 +279,7 @@ class NSClientAddUpdateWorker( eventType == TherapyEvent.Type.QUESTION.text || eventType == TherapyEvent.Type.EXERCISE.text || eventType == TherapyEvent.Type.NOTE.text || - eventType == TherapyEvent.Type.PUMP_BATTERY_CHANGE.text -> + eventType == TherapyEvent.Type.PUMP_BATTERY_CHANGE.text -> if (sp.getBoolean(R.string.key_ns_receive_therapy_events, false) || config.NSCLIENT) { therapyEventFromJson(json)?.let { therapyEvent -> repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEvent)) @@ -285,18 +297,18 @@ class NSClientAddUpdateWorker( result.inserted.forEach { therapyEvent -> uel.log(action, Sources.NSClient, therapyEvent.note ?: "", - ValueWithUnit.Timestamp(therapyEvent.timestamp), - ValueWithUnit.TherapyEventType(therapyEvent.type), - ValueWithUnit.fromGlucoseUnit(therapyEvent.glucose ?:0.0,therapyEvent.glucoseUnit.toString).takeIf { therapyEvent.glucose != null } + ValueWithUnit.Timestamp(therapyEvent.timestamp), + ValueWithUnit.TherapyEventType(therapyEvent.type), + ValueWithUnit.fromGlucoseUnit(therapyEvent.glucose ?: 0.0, therapyEvent.glucoseUnit.toString).takeIf { therapyEvent.glucose != null } ) aapsLogger.debug(LTag.DATABASE, "Inserted TherapyEvent $therapyEvent") } result.invalidated.forEach { therapyEvent -> uel.log(Action.CAREPORTAL_REMOVED, Sources.NSClient, therapyEvent.note ?: "", - ValueWithUnit.Timestamp(therapyEvent.timestamp), - ValueWithUnit.TherapyEventType(therapyEvent.type), - ValueWithUnit.fromGlucoseUnit(therapyEvent.glucose ?:0.0, therapyEvent.glucoseUnit.toString).takeIf { therapyEvent.glucose != null } + ValueWithUnit.Timestamp(therapyEvent.timestamp), + ValueWithUnit.TherapyEventType(therapyEvent.type), + ValueWithUnit.fromGlucoseUnit(therapyEvent.glucose ?: 0.0, therapyEvent.glucoseUnit.toString).takeIf { therapyEvent.glucose != null } ) aapsLogger.debug(LTag.DATABASE, "Invalidated TherapyEvent $therapyEvent") } @@ -309,7 +321,7 @@ class NSClientAddUpdateWorker( } } ?: aapsLogger.error("Error parsing TherapyEvent json $json") } - eventType == TherapyEvent.Type.COMBO_BOLUS.text -> + eventType == TherapyEvent.Type.COMBO_BOLUS.text -> if (buildHelper.isEngineeringMode() && sp.getBoolean(R.string.key_ns_receive_tbr_eb, false) || config.NSCLIENT) { extendedBolusFromJson(json)?.let { extendedBolus -> repository.runTransactionForResult(SyncNsExtendedBolusTransaction(extendedBolus)) @@ -320,7 +332,8 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { - uel.log(Action.EXTENDED_BOLUS, Sources.NSClient, + uel.log( + Action.EXTENDED_BOLUS, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Insulin(it.amount), ValueWithUnit.UnitPerHour(it.rate), @@ -329,7 +342,8 @@ class NSClientAddUpdateWorker( aapsLogger.debug(LTag.DATABASE, "Inserted ExtendedBolus $it") } result.invalidated.forEach { - uel.log(Action.EXTENDED_BOLUS_REMOVED, Sources.NSClient, + uel.log( + Action.EXTENDED_BOLUS_REMOVED, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Insulin(it.amount), ValueWithUnit.UnitPerHour(it.rate), @@ -338,7 +352,8 @@ class NSClientAddUpdateWorker( aapsLogger.debug(LTag.DATABASE, "Invalidated ExtendedBolus $it") } result.ended.forEach { - uel.log(Action.CANCEL_EXTENDED_BOLUS, Sources.NSClient, + uel.log( + Action.CANCEL_EXTENDED_BOLUS, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), ValueWithUnit.Insulin(it.amount), ValueWithUnit.UnitPerHour(it.rate), @@ -355,7 +370,7 @@ class NSClientAddUpdateWorker( } } ?: aapsLogger.error("Error parsing ExtendedBolus json $json") } - eventType == TherapyEvent.Type.TEMPORARY_BASAL.text -> + eventType == TherapyEvent.Type.TEMPORARY_BASAL.text -> if (buildHelper.isEngineeringMode() && sp.getBoolean(R.string.key_ns_receive_tbr_eb, false) || config.NSCLIENT) { temporaryBasalFromJson(json)?.let { temporaryBasal -> repository.runTransactionForResult(SyncNsTemporaryBasalTransaction(temporaryBasal)) @@ -366,7 +381,8 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { - uel.log(Action.TEMP_BASAL, Sources.NSClient, + uel.log( + Action.TEMP_BASAL, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), if (it.isAbsolute) ValueWithUnit.UnitPerHour(it.rate) else ValueWithUnit.Percent(it.rate.toInt()), ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(it.duration).toInt()) @@ -374,7 +390,8 @@ class NSClientAddUpdateWorker( aapsLogger.debug(LTag.DATABASE, "Inserted TemporaryBasal $it") } result.invalidated.forEach { - uel.log(Action.TEMP_BASAL_REMOVED, Sources.NSClient, + uel.log( + Action.TEMP_BASAL_REMOVED, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), if (it.isAbsolute) ValueWithUnit.UnitPerHour(it.rate) else ValueWithUnit.Percent(it.rate.toInt()), ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(it.duration).toInt()) @@ -382,7 +399,8 @@ class NSClientAddUpdateWorker( aapsLogger.debug(LTag.DATABASE, "Invalidated TemporaryBasal $it") } result.ended.forEach { - uel.log(Action.CANCEL_TEMP_BASAL, Sources.NSClient, + uel.log( + Action.CANCEL_TEMP_BASAL, Sources.NSClient, ValueWithUnit.Timestamp(it.timestamp), if (it.isAbsolute) ValueWithUnit.UnitPerHour(it.rate) else ValueWithUnit.Percent(it.rate.toInt()), ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(it.duration).toInt()) @@ -398,7 +416,7 @@ class NSClientAddUpdateWorker( } } ?: aapsLogger.error("Error parsing TemporaryBasal json $json") } - eventType == TherapyEvent.Type.PROFILE_SWITCH.text -> + eventType == TherapyEvent.Type.PROFILE_SWITCH.text -> if (sp.getBoolean(R.string.key_ns_receive_profile_switch, false) || config.NSCLIENT) { profileSwitchFromJson(json, dateUtil, activePlugin)?.let { profileSwitch -> repository.runTransactionForResult(SyncNsProfileSwitchTransaction(profileSwitch)) @@ -409,13 +427,17 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { - uel.log(Action.PROFILE_SWITCH, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp)) + uel.log( + Action.PROFILE_SWITCH, Sources.NSClient, + ValueWithUnit.Timestamp(it.timestamp) + ) aapsLogger.debug(LTag.DATABASE, "Inserted ProfileSwitch $it") } result.invalidated.forEach { - uel.log(Action.PROFILE_SWITCH_REMOVED, Sources.NSClient, - ValueWithUnit.Timestamp(it.timestamp)) + uel.log( + Action.PROFILE_SWITCH_REMOVED, Sources.NSClient, + ValueWithUnit.Timestamp(it.timestamp) + ) aapsLogger.debug(LTag.DATABASE, "Invalidated ProfileSwitch $it") } result.updatedNsId.forEach { @@ -424,7 +446,7 @@ class NSClientAddUpdateWorker( } } ?: aapsLogger.error("Error parsing ProfileSwitch json $json") } - eventType == TherapyEvent.Type.APS_OFFLINE.text -> + eventType == TherapyEvent.Type.APS_OFFLINE.text -> if (sp.getBoolean(R.string.key_ns_receive_offline_event, false) && buildHelper.isEngineeringMode() || config.NSCLIENT) { offlineEventFromJson(json)?.let { offlineEvent -> repository.runTransactionForResult(SyncNsOfflineEventTransaction(offlineEvent)) @@ -435,21 +457,24 @@ class NSClientAddUpdateWorker( .blockingGet() .also { result -> result.inserted.forEach { oe -> - uel.log(Action.LOOP_CHANGE, Sources.NSClient, + uel.log( + Action.LOOP_CHANGE, Sources.NSClient, ValueWithUnit.OfflineEventReason(oe.reason), ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(oe.duration).toInt()) ) aapsLogger.debug(LTag.DATABASE, "Inserted OfflineEvent $oe") } result.invalidated.forEach { oe -> - uel.log(Action.LOOP_REMOVED, Sources.NSClient, + uel.log( + Action.LOOP_REMOVED, Sources.NSClient, ValueWithUnit.OfflineEventReason(oe.reason), ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(oe.duration).toInt()) ) aapsLogger.debug(LTag.DATABASE, "Invalidated OfflineEvent $oe") } result.ended.forEach { oe -> - uel.log(Action.LOOP_CHANGE, Sources.NSClient, + uel.log( + Action.LOOP_CHANGE, Sources.NSClient, ValueWithUnit.OfflineEventReason(oe.reason), ValueWithUnit.Minute(TimeUnit.MILLISECONDS.toMinutes(oe.duration).toInt()) ) @@ -472,7 +497,8 @@ class NSClientAddUpdateWorker( val enteredBy = JsonHelper.safeGetString(json, "enteredBy", "") val notes = JsonHelper.safeGetString(json, "notes", "") if (date > now - 15 * 60 * 1000L && notes.isNotEmpty() - && enteredBy != sp.getString("careportal_enteredby", "AndroidAPS")) { + && enteredBy != sp.getString("careportal_enteredby", "AndroidAPS") + ) { val defaultVal = config.NSCLIENT if (sp.getBoolean(R.string.key_ns_announcements, defaultVal)) { val announcement = Notification(Notification.NS_ANNOUNCEMENT, notes, Notification.ANNOUNCEMENT, 60) From 1eb7cd69d926716943458371224e02d7479ca054 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 17 Jun 2022 12:53:22 +0200 Subject: [PATCH 20/71] remove unused strings --- app/src/main/res/values/strings.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e34436ac85..269dd9a883 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -164,9 +164,6 @@ Closed Loop Open Loop Low Glucose Suspend - Humalog/Novolog - Fiasp - Lyumjev Loop Disabled New suggestion available Carbs Suggestion From bf889793f0de9dcd91a028a013f91dba20bbf4e8 Mon Sep 17 00:00:00 2001 From: Andrei Vereha Date: Fri, 17 Jun 2022 17:58:21 +0200 Subject: [PATCH 21/71] make it compile --- .../pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt index cd35a45bdb..ca371fafac 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt @@ -27,9 +27,13 @@ class ServiceDiscoverer( fun discoverServices(connectionWaitCond: ConnectionWaitCondition): Map { logger.debug(LTag.PUMPBTCOMM, "Discovering services") bleCallbacks.startServiceDiscovery() - val discover = gatt.discoverServices() - if (!discover) { - throw ConnectException("Could not start discovering services`") + try { + val discover = gatt.discoverServices() + if (!discover) { + throw ConnectException("Could not start discovering services`") + } + } catch (ex: SecurityException) { + throw ConnectException("Missing bluetooth permission") } connectionWaitCond.timeoutMs?.let { bleCallbacks.waitForServiceDiscovery(it) From 44abb7b31b2b66780c0439765c32ce61ea24aa86 Mon Sep 17 00:00:00 2001 From: Philoul Date: Fri, 17 Jun 2022 21:53:30 +0200 Subject: [PATCH 22/71] Add PreppedGlucoseTest (correct Load of OpenAPS categorization from external json file) --- .../plugins/general/autotune/data/BGDatum.kt | 11 + .../plugins/general/autotune/data/CRDatum.kt | 13 + .../general/autotune/PreppedGlucoseTest.kt | 36 ++ .../aapsorefautotune_recommendations.log | 53 +++ .../test1/aapsorefprofile.2022-05-21.json | 147 ++++++ .../res/autotune/test1/aapsorefprofile.json | 181 ++++++++ .../autotune/test1/autotune.2022-05-21.json | 1 + .../test1/autotune.2022-06-17-212314.log | 425 ++++++++++++++++++ .../test1/newaapsorefprofile.2022-05-21.json | 181 ++++++++ .../test/res/autotune/test1/profile.pump.json | 147 ++++++ 10 files changed, 1195 insertions(+) create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt create mode 100644 app/src/test/res/autotune/test1/aapsorefautotune_recommendations.log create mode 100644 app/src/test/res/autotune/test1/aapsorefprofile.2022-05-21.json create mode 100644 app/src/test/res/autotune/test1/aapsorefprofile.json create mode 100644 app/src/test/res/autotune/test1/autotune.2022-05-21.json create mode 100644 app/src/test/res/autotune/test1/autotune.2022-06-17-212314.log create mode 100644 app/src/test/res/autotune/test1/newaapsorefprofile.2022-05-21.json create mode 100644 app/src/test/res/autotune/test1/profile.pump.json diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt index 42c7c88deb..2d019a410a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt @@ -77,4 +77,15 @@ class BGDatum { } return bgjson } + + fun equals(obj: BGDatum): Boolean { + var isEqual = true + if (date / 1000 != obj.date / 1000) isEqual = false + if (deviation != obj.deviation) isEqual = false + if (avgDelta != obj.avgDelta) isEqual = false + if (bgi != obj.bgi) isEqual = false + if (mealAbsorption != obj.mealAbsorption) isEqual = false + if (mealCarbs != obj.mealCarbs) isEqual = false + return isEqual + } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt index 14796081b4..5cd9c1ef65 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt @@ -51,4 +51,17 @@ class CRDatum { } return crjson } + + fun equals(obj: CRDatum): Boolean { + var isEqual = true + if (crInitialIOB != obj.crInitialIOB) isEqual = false + if (crInitialBG != obj.crInitialBG) isEqual = false + //if (crInitialCarbTime / 1000 != obj.crInitialCarbTime / 1000) isEqual = false + if (crEndIOB != obj.crEndIOB) isEqual = false + if (crEndBG != obj.crEndBG) isEqual = false + //if (crEndTime / 1000 != obj.crEndTime / 1000) isEqual = false + if (crCarbs != obj.crCarbs) isEqual = false + if (crInsulin != obj.crInsulin) isEqual = false + return isEqual + } } \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt new file mode 100644 index 0000000000..b6274ffcfd --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt @@ -0,0 +1,36 @@ +package info.nightscout.androidaps.plugins.general.autotune + +import info.nightscout.androidaps.TestBase +import info.nightscout.androidaps.plugins.general.autotune.data.* +import info.nightscout.androidaps.utils.DateUtil +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import java.io.File + +class PreppedGlucoseTest : TestBase() { + @Mock lateinit var dateUtil: DateUtil + lateinit var prep1: PreppedGlucose + lateinit var prepjson1: String + + @Before + fun initData() { + prepjson1 = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() + prep1 = PreppedGlucose(JSONObject(prepjson1), dateUtil) + } + + @Test + fun preppedGlucoseLoadTest() { // Test if load from file of OpenAPS categorisation is Ok + val crData0 = CRDatum(JSONObject("{\"CRInitialIOB\":13.594,\"CRInitialBG\":123,\"CRInitialCarbTime\":\"2022-05-21T07:54:09.000Z\",\"CREndIOB\":-0.155,\"CREndBG\":98,\"CREndTime\":\"2022-05-21T11:19:08.000Z\",\"CRCarbs\":70,\"CRInsulin\":-2.13}"), dateUtil) + val csfDataEnd = BGDatum(JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653176050000,\"dateString\":\"2022-05-21T23:34:10.000Z\",\"isValid\":true,\"sgv\":127,\"direction\":\"Flat\",\"type\":\"sgv\",\"_id\":\"6289771371a363000480abc1\",\"glucose\":127,\"avgDelta\":\"2.50\",\"BGI\":-2.93,\"deviation\":\"5.43\",\"mealCarbs\":0,\"mealAbsorption\":\"end\"}"), dateUtil) + val isfData0 = BGDatum(JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653108249000,\"dateString\":\"2022-05-21T04:44:09.000Z\",\"isValid\":true,\"sgv\":123,\"direction\":\"FortyFiveDown\",\"type\":\"sgv\",\"_id\":\"62886e2919e2e60004989bba\",\"glucose\":123,\"avgDelta\":\"-7.50\",\"BGI\":-7.59,\"deviation\":\"0.09\"}"), dateUtil) + val basalDataEnd = BGDatum(JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653180549000,\"dateString\":\"2022-05-22T00:49:09.000Z\",\"isValid\":true,\"sgv\":121,\"direction\":\"FortyFiveDown\",\"type\":\"sgv\",\"_id\":\"628988a3da46aa0004d1e0f5\",\"glucose\":121,\"avgDelta\":\"-5.25\",\"BGI\":-3.32,\"deviation\":\"-1.93\"}"), dateUtil) + Assert.assertEquals(3, prep1.crData.size) + Assert.assertTrue(crData0.equals(prep1.crData[0])) + Assert.assertTrue(csfDataEnd.equals(prep1.csfGlucoseData[prep1.csfGlucoseData.size - 1])) + Assert.assertTrue(isfData0.equals(prep1.isfGlucoseData[0])) + Assert.assertTrue(basalDataEnd.equals(prep1.basalGlucoseData[prep1.basalGlucoseData.size - 1])) + } +} diff --git a/app/src/test/res/autotune/test1/aapsorefautotune_recommendations.log b/app/src/test/res/autotune/test1/aapsorefautotune_recommendations.log new file mode 100644 index 0000000000..912b7b5ed4 --- /dev/null +++ b/app/src/test/res/autotune/test1/aapsorefautotune_recommendations.log @@ -0,0 +1,53 @@ +Parameter | Pump | Autotune | Days Missing +--------------------------------------------------------- +ISF [mg/dL/U] | 86.200 | 85.993 | +Carb Ratio[g/U]| 5.750 | 5.817 | +Basals [U/hr] | - | | + 00:00 | 0.966 | 1.002 | 0 + 00:30 | | | + 01:00 | 0.977 | 1.091 | 0 + 01:30 | | | + 02:00 | 0.971 | 1.118 | 0 + 02:30 | | | + 03:00 | 1.111 | 1.321 | 0 + 03:30 | | | + 04:00 | 0.974 | 1.091 | 0 + 04:30 | | | + 05:00 | 0.923 | 0.965 | 0 + 05:30 | | | + 06:00 | 0.823 | 0.825 | 0 + 06:30 | | | + 07:00 | 0.855 | 0.849 | 0 + 07:30 | | | + 08:00 | 0.902 | 0.909 | 0 + 08:30 | | | + 09:00 | 0.934 | 0.903 | 1 + 09:30 | | | + 10:00 | 0.938 | 0.906 | 1 + 10:30 | | | + 11:00 | 0.903 | 0.878 | 1 + 11:30 | | | + 12:00 | 0.882 | 0.861 | 1 + 12:30 | | | + 13:00 | 0.874 | 0.855 | 1 + 13:30 | | | + 14:00 | 0.866 | 0.848 | 1 + 14:30 | | | + 15:00 | 0.848 | 0.834 | 1 + 15:30 | | | + 16:00 | 0.758 | 0.762 | 1 + 16:30 | | | + 17:00 | 0.650 | 0.647 | 0 + 17:30 | | | + 18:00 | 0.648 | 0.631 | 0 + 18:30 | | | + 19:00 | 0.738 | 0.728 | 0 + 19:30 | | | + 20:00 | 0.847 | 0.838 | 0 + 20:30 | | | + 21:00 | 0.861 | 0.871 | 0 + 21:30 | | | + 22:00 | 0.863 | 0.886 | 0 + 22:30 | | | + 23:00 | 0.843 | 0.893 | 0 + 23:30 | | | diff --git a/app/src/test/res/autotune/test1/aapsorefprofile.2022-05-21.json b/app/src/test/res/autotune/test1/aapsorefprofile.2022-05-21.json new file mode 100644 index 0000000000..eefadabacb --- /dev/null +++ b/app/src/test/res/autotune/test1/aapsorefprofile.2022-05-21.json @@ -0,0 +1,147 @@ +{ + "name": "Tuned Dyn2", + "min_5m_carbimpact": 8, + "dia": 6, + "curve": "ultra-rapid", + "useCustomPeakTime": true, + "insulinPeakTime": 45, + "basalprofile": [ + { + "start": "00:00:00", + "minutes": 0, + "rate": 0.966 + }, + { + "start": "01:00:00", + "minutes": 60, + "rate": 0.977 + }, + { + "start": "02:00:00", + "minutes": 120, + "rate": 0.971 + }, + { + "start": "03:00:00", + "minutes": 180, + "rate": 1.111 + }, + { + "start": "04:00:00", + "minutes": 240, + "rate": 0.974 + }, + { + "start": "05:00:00", + "minutes": 300, + "rate": 0.923 + }, + { + "start": "06:00:00", + "minutes": 360, + "rate": 0.823 + }, + { + "start": "07:00:00", + "minutes": 420, + "rate": 0.855 + }, + { + "start": "08:00:00", + "minutes": 480, + "rate": 0.902 + }, + { + "start": "09:00:00", + "minutes": 540, + "rate": 0.934 + }, + { + "start": "10:00:00", + "minutes": 600, + "rate": 0.938 + }, + { + "start": "11:00:00", + "minutes": 660, + "rate": 0.903 + }, + { + "start": "12:00:00", + "minutes": 720, + "rate": 0.882 + }, + { + "start": "13:00:00", + "minutes": 780, + "rate": 0.874 + }, + { + "start": "14:00:00", + "minutes": 840, + "rate": 0.866 + }, + { + "start": "15:00:00", + "minutes": 900, + "rate": 0.848 + }, + { + "start": "16:00:00", + "minutes": 960, + "rate": 0.758 + }, + { + "start": "17:00:00", + "minutes": 1020, + "rate": 0.65 + }, + { + "start": "18:00:00", + "minutes": 1080, + "rate": 0.648 + }, + { + "start": "19:00:00", + "minutes": 1140, + "rate": 0.738 + }, + { + "start": "20:00:00", + "minutes": 1200, + "rate": 0.847 + }, + { + "start": "21:00:00", + "minutes": 1260, + "rate": 0.861 + }, + { + "start": "22:00:00", + "minutes": 1320, + "rate": 0.863 + }, + { + "start": "23:00:00", + "minutes": 1380, + "rate": 0.843 + } + ], + "isfProfile": { + "sensitivities": [ + { + "i": 0, + "start": "00:00:00", + "sensitivity": 86.2, + "offset": 0, + "x": 0, + "endoffset": 1440 + } + ] + }, + "carb_ratio": 5.75, + "autosens_max": 1.3, + "autosens_min": 0.7, + "units": "mg/dl", + "timezone": "Europe/Paris" +} diff --git a/app/src/test/res/autotune/test1/aapsorefprofile.json b/app/src/test/res/autotune/test1/aapsorefprofile.json new file mode 100644 index 0000000000..80bf4e3925 --- /dev/null +++ b/app/src/test/res/autotune/test1/aapsorefprofile.json @@ -0,0 +1,181 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 1.002, + "start": "00:00:00" + }, + { + "i": 1, + "minutes": 60, + "rate": 1.091, + "start": "01:00:00" + }, + { + "i": 2, + "minutes": 120, + "rate": 1.118, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.321, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 1.091, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.965, + "start": "05:00:00" + }, + { + "i": 6, + "minutes": 360, + "rate": 0.825, + "start": "06:00:00" + }, + { + "i": 7, + "minutes": 420, + "rate": 0.849, + "start": "07:00:00" + }, + { + "i": 8, + "minutes": 480, + "rate": 0.909, + "start": "08:00:00" + }, + { + "i": 9, + "minutes": 540, + "rate": 0.903, + "start": "09:00:00", + "untuned": 1 + }, + { + "i": 10, + "minutes": 600, + "rate": 0.906, + "start": "10:00:00", + "untuned": 1 + }, + { + "i": 11, + "minutes": 660, + "rate": 0.878, + "start": "11:00:00", + "untuned": 1 + }, + { + "i": 12, + "minutes": 720, + "rate": 0.861, + "start": "12:00:00", + "untuned": 1 + }, + { + "i": 13, + "minutes": 780, + "rate": 0.855, + "start": "13:00:00", + "untuned": 1 + }, + { + "i": 14, + "minutes": 840, + "rate": 0.848, + "start": "14:00:00", + "untuned": 1 + }, + { + "i": 15, + "minutes": 900, + "rate": 0.834, + "start": "15:00:00", + "untuned": 1 + }, + { + "i": 16, + "minutes": 960, + "rate": 0.762, + "start": "16:00:00", + "untuned": 1 + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.647, + "start": "17:00:00" + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.631, + "start": "18:00:00" + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.728, + "start": "19:00:00" + }, + { + "i": 20, + "minutes": 1200, + "rate": 0.838, + "start": "20:00:00" + }, + { + "i": 21, + "minutes": 1260, + "rate": 0.871, + "start": "21:00:00" + }, + { + "i": 22, + "minutes": 1320, + "rate": 0.886, + "start": "22:00:00" + }, + { + "i": 23, + "minutes": 1380, + "rate": 0.893, + "start": "23:00:00" + } + ], + "carb_ratio": 5.817, + "csf": 16.025, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 85.993, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 85.993, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test1/autotune.2022-05-21.json b/app/src/test/res/autotune/test1/autotune.2022-05-21.json new file mode 100644 index 0000000000..1c887a4c74 --- /dev/null +++ b/app/src/test/res/autotune/test1/autotune.2022-05-21.json @@ -0,0 +1 @@ +{"CRData":[{"CRInitialIOB":13.594,"CRInitialBG":123,"CRInitialCarbTime":"2022-05-21T07:54:09.000Z","CREndIOB":-0.155,"CREndBG":98,"CREndTime":"2022-05-21T11:19:08.000Z","CRCarbs":70,"CRInsulin":-2.13},{"CRInitialIOB":8.11,"CRInitialBG":109,"CRInitialCarbTime":"2022-05-21T11:24:09.000Z","CREndIOB":-0.073,"CREndBG":104,"CREndTime":"2022-05-21T18:34:09.000Z","CRCarbs":80,"CRInsulin":5.22},{"CRInitialIOB":9.296,"CRInitialBG":133,"CRInitialCarbTime":"2022-05-21T20:24:09.000Z","CREndIOB":0.304,"CREndBG":127,"CREndTime":"2022-05-21T23:34:10.000Z","CRCarbs":50,"CRInsulin":-0.81}],"CSFGlucoseData":[{"device":"AndroidAPS-DexcomG6","date":1653119649000,"dateString":"2022-05-21T07:54:09.000Z","isValid":true,"sgv":123,"direction":"FortyFiveUp","type":"sgv","_id":"62889ac27ff1e700040f17dc","glucose":123,"avgDelta":"7.75","BGI":-0.99,"deviation":"8.74","mealAbsorption":"start","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653119949000,"dateString":"2022-05-21T07:59:09.000Z","isValid":true,"sgv":132,"direction":"FortyFiveUp","type":"sgv","_id":"62889be4a4cc860004a251c7","glucose":132,"avgDelta":"8.75","BGI":-14.27,"deviation":"23.02","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653120249000,"dateString":"2022-05-21T08:04:09.000Z","isValid":true,"sgv":141,"direction":"FortyFiveUp","type":"sgv","_id":"62889d13a4cc860004a251c9","glucose":141,"avgDelta":"9.00","BGI":-24.7,"deviation":"33.70","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653120548000,"dateString":"2022-05-21T08:09:08.000Z","isValid":true,"sgv":146,"direction":"FortyFiveUp","type":"sgv","_id":"62889e41a4cc860004a251cb","glucose":146,"avgDelta":"8.00","BGI":-32.76,"deviation":"40.76","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653120849000,"dateString":"2022-05-21T08:14:09.000Z","isValid":true,"sgv":148,"direction":"FortyFiveUp","type":"sgv","_id":"62889f6fa4cc860004a251cc","glucose":148,"avgDelta":"6.25","BGI":-38.79,"deviation":"45.04","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653121149000,"dateString":"2022-05-21T08:19:09.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"6288a09fa4cc860004a251ce","glucose":147,"avgDelta":"3.75","BGI":-43.14,"deviation":"46.89","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653121449000,"dateString":"2022-05-21T08:24:09.000Z","isValid":true,"sgv":145,"direction":"Flat","type":"sgv","_id":"6288a1cda4cc860004a251d1","glucose":145,"avgDelta":"1.00","BGI":-46.03,"deviation":"47.03","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653121749000,"dateString":"2022-05-21T08:29:09.000Z","isValid":true,"sgv":138,"direction":"Flat","type":"sgv","_id":"6288a2fca4cc860004a251d2","glucose":138,"avgDelta":"-2.00","BGI":-47.84,"deviation":"45.84","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653122049000,"dateString":"2022-05-21T08:34:09.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","_id":"6288a42099fc930004d6bde8","glucose":128,"avgDelta":"-5.00","BGI":-48.66,"deviation":"43.66","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653122349000,"dateString":"2022-05-21T08:39:09.000Z","isValid":true,"sgv":118,"direction":"FortyFiveDown","type":"sgv","_id":"6288a55199fc930004d6bdeb","glucose":118,"avgDelta":"-7.25","BGI":-48.66,"deviation":"41.41","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653122649000,"dateString":"2022-05-21T08:44:09.000Z","isValid":true,"sgv":111,"direction":"FortyFiveDown","type":"sgv","_id":"6288a73099fc930004d6bded","glucose":111,"avgDelta":"-8.50","BGI":-48.01,"deviation":"39.51","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653122949000,"dateString":"2022-05-21T08:49:09.000Z","isValid":true,"sgv":108,"direction":"FortyFiveDown","type":"sgv","_id":"6288a7ad99fc930004d6bdef","glucose":108,"avgDelta":"-7.50","BGI":-46.89,"deviation":"39.39","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653123248000,"dateString":"2022-05-21T08:54:08.000Z","isValid":true,"sgv":107,"direction":"Flat","type":"sgv","_id":"6288a8db99fc930004d6bdf1","glucose":107,"avgDelta":"-5.25","BGI":-45.38,"deviation":"40.13","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653123549000,"dateString":"2022-05-21T08:59:09.000Z","isValid":true,"sgv":109,"direction":"Flat","type":"sgv","_id":"6288a9f099fc930004d6bdf4","glucose":109,"avgDelta":"-2.25","BGI":-43.62,"deviation":"41.37","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653123849000,"dateString":"2022-05-21T09:04:09.000Z","isValid":true,"sgv":113,"direction":"Flat","type":"sgv","_id":"6288ab1d99fc930004d6bdf6","glucose":113,"avgDelta":"0.50","BGI":-41.85,"deviation":"42.35","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653124149000,"dateString":"2022-05-21T09:09:09.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"6288ac4b99fc930004d6bdf8","glucose":119,"avgDelta":"2.75","BGI":-39.95,"deviation":"42.70","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653124448000,"dateString":"2022-05-21T09:14:08.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"6288ad7999fc930004d6bdfa","glucose":124,"avgDelta":"4.25","BGI":-37.84,"deviation":"42.09","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653124749000,"dateString":"2022-05-21T09:19:09.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","_id":"6288aea799fc930004d6bdfb","glucose":125,"avgDelta":"4.00","BGI":-35.69,"deviation":"39.69","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653125048000,"dateString":"2022-05-21T09:24:08.000Z","isValid":true,"sgv":122,"direction":"Flat","type":"sgv","_id":"6288afd5c9c02c00041f7ef8","glucose":122,"avgDelta":"2.25","BGI":-33.4,"deviation":"35.65","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653125349000,"dateString":"2022-05-21T09:29:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"6288b103c9c02c00041f7efc","glucose":120,"avgDelta":"0.25","BGI":-31.2,"deviation":"31.45","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653125649000,"dateString":"2022-05-21T09:34:09.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b231c9c02c00041f7efe","glucose":118,"avgDelta":"-1.50","BGI":-28.96,"deviation":"27.46","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653125948000,"dateString":"2022-05-21T09:39:08.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b35fc9c02c00041f7f00","glucose":118,"avgDelta":"-1.75","BGI":-26.77,"deviation":"25.02","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653126249000,"dateString":"2022-05-21T09:44:09.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b48dc9c02c00041f7f02","glucose":118,"avgDelta":"-1.00","BGI":-24.61,"deviation":"23.61","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653126549000,"dateString":"2022-05-21T09:49:09.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6288b5bbc9c02c00041f7f04","glucose":117,"avgDelta":"-0.75","BGI":-22.5,"deviation":"21.75","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653126849000,"dateString":"2022-05-21T09:54:09.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b6e9c9c02c00041f7f06","glucose":118,"avgDelta":"0.00","BGI":-20.52,"deviation":"20.52","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653127149000,"dateString":"2022-05-21T09:59:09.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"6288b813abbef90004616ceb","glucose":119,"avgDelta":"0.25","BGI":-18.58,"deviation":"18.83","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653127449000,"dateString":"2022-05-21T10:04:09.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"6288b941abbef90004616cf0","glucose":119,"avgDelta":"0.25","BGI":-16.72,"deviation":"16.97","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653127748000,"dateString":"2022-05-21T10:09:08.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","_id":"6288ba56abbef90004616cf2","glucose":115,"avgDelta":"-0.50","BGI":-14.96,"deviation":"14.46","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653128049000,"dateString":"2022-05-21T10:14:09.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"6288bb84abbef90004616cf4","glucose":110,"avgDelta":"-2.00","BGI":-13.32,"deviation":"11.32","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653128349000,"dateString":"2022-05-21T10:19:09.000Z","isValid":true,"sgv":104,"direction":"Flat","type":"sgv","_id":"6288bcb2abbef90004616cf6","glucose":104,"avgDelta":"-3.75","BGI":-11.72,"deviation":"7.97","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653128649000,"dateString":"2022-05-21T10:24:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6288bde0abbef90004616cf8","glucose":101,"avgDelta":"-4.50","BGI":-10.3,"deviation":"5.80","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653128948000,"dateString":"2022-05-21T10:29:08.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"6288bf061991280004dce457","glucose":99,"avgDelta":"-4.00","BGI":-8.88,"deviation":"4.88","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653129249000,"dateString":"2022-05-21T10:34:09.000Z","isValid":true,"sgv":96,"direction":"Flat","type":"sgv","_id":"6288c0341991280004dce459","glucose":96,"avgDelta":"-3.50","BGI":-7.59,"deviation":"4.09","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653129548000,"dateString":"2022-05-21T10:39:08.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288c1631991280004dce45b","glucose":94,"avgDelta":"-2.50","BGI":-6.38,"deviation":"3.88","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653129848000,"dateString":"2022-05-21T10:44:08.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"6288c2911991280004dce45e","glucose":93,"avgDelta":"-2.00","BGI":-5.26,"deviation":"3.26","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653130149000,"dateString":"2022-05-21T10:49:09.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"6288c3be1991280004dce461","glucose":91,"avgDelta":"-2.00","BGI":-4.27,"deviation":"2.27","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653130448000,"dateString":"2022-05-21T10:54:08.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","_id":"6288c4ec1991280004dce464","glucose":88,"avgDelta":"-2.00","BGI":-3.36,"deviation":"1.36","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653130748000,"dateString":"2022-05-21T10:59:08.000Z","isValid":true,"sgv":84,"direction":"Flat","type":"sgv","_id":"6288c61a1991280004dce468","glucose":84,"avgDelta":"-2.50","BGI":-2.59,"deviation":"0.09","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653131049000,"dateString":"2022-05-21T11:04:09.000Z","isValid":true,"sgv":81,"direction":"Flat","type":"sgv","_id":"6288c7418e9ed800049b39e3","glucose":81,"avgDelta":"-3.00","BGI":-1.9,"deviation":"-1.10","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653131349000,"dateString":"2022-05-21T11:09:09.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","_id":"6288c86f8e9ed800049b39e5","glucose":82,"avgDelta":"-2.25","BGI":-1.25,"deviation":"-1.00","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653131649000,"dateString":"2022-05-21T11:14:09.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"6288c99e8e9ed800049b39e8","glucose":89,"avgDelta":"0.25","BGI":-0.65,"deviation":"0.90","mealCarbs":70},{"device":"AndroidAPS-DexcomG6","date":1653131948000,"dateString":"2022-05-21T11:19:08.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"6288cacb8e9ed800049b39ec","glucose":98,"avgDelta":"3.50","BGI":-0.3,"deviation":"3.80","mealCarbs":0},{"device":"AndroidAPS-DexcomG6","date":1653132249000,"dateString":"2022-05-21T11:24:09.000Z","isValid":true,"sgv":109,"direction":"FortyFiveUp","type":"sgv","_id":"6288cbf98e9ed800049b39f2","glucose":109,"avgDelta":"7.00","BGI":-1.94,"deviation":"8.94","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653132549000,"dateString":"2022-05-21T11:29:09.000Z","isValid":true,"sgv":118,"direction":"FortyFiveUp","type":"sgv","_id":"6288cd278e9ed800049b39f5","glucose":118,"avgDelta":"9.00","BGI":-9.57,"deviation":"18.57","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653132849000,"dateString":"2022-05-21T11:34:09.000Z","isValid":true,"sgv":121,"direction":"FortyFiveUp","type":"sgv","_id":"6288ce548e9ed800049b39f7","glucose":121,"avgDelta":"8.00","BGI":-15.47,"deviation":"23.47","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653133149000,"dateString":"2022-05-21T11:39:09.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"6288cf770f1be700041e59c8","glucose":114,"avgDelta":"4.00","BGI":-20.04,"deviation":"24.04","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653133449000,"dateString":"2022-05-21T11:44:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6288d0a80f1be700041e59cb","glucose":101,"avgDelta":"-2.00","BGI":-23.32,"deviation":"21.32","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653133749000,"dateString":"2022-05-21T11:49:09.000Z","isValid":true,"sgv":87,"direction":"FortyFiveDown","type":"sgv","_id":"6288d1d80f1be700041e59cf","glucose":87,"avgDelta":"-7.75","BGI":-25.69,"deviation":"17.94","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653134049000,"dateString":"2022-05-21T11:54:09.000Z","isValid":true,"sgv":79,"direction":"FortyFiveDown","type":"sgv","_id":"6288d3060f1be700041e59d2","glucose":79,"avgDelta":"-10.50","BGI":-27.28,"deviation":"0.00","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653134349000,"dateString":"2022-05-21T11:59:09.000Z","isValid":true,"sgv":76,"direction":"FortyFiveDown","type":"sgv","_id":"6288d4220f1be700041e59d5","glucose":76,"avgDelta":"-9.50","BGI":-28.06,"deviation":"0.00","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653134649000,"dateString":"2022-05-21T12:04:09.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","_id":"6288d5500f1be700041e59d7","glucose":77,"avgDelta":"-6.00","BGI":-28.32,"deviation":"0.00","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653134949000,"dateString":"2022-05-21T12:09:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d67f0f1be700041e59da","glucose":78,"avgDelta":"-2.25","BGI":-28.14,"deviation":"0.00","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653135249000,"dateString":"2022-05-21T12:14:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288d7ae0f1be700041e59de","glucose":79,"avgDelta":"0.00","BGI":-27.76,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653135549000,"dateString":"2022-05-21T12:19:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d8e00f1be700041e59e0","glucose":78,"avgDelta":"0.50","BGI":-27.02,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653135849000,"dateString":"2022-05-21T12:24:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6288d9fb0f1be700041e59e2","glucose":76,"avgDelta":"-0.25","BGI":-26.12,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653136149000,"dateString":"2022-05-21T12:29:09.000Z","isValid":true,"sgv":73,"direction":"Flat","type":"sgv","_id":"6288db8a0f1be700041e59e5","glucose":73,"avgDelta":"-1.25","BGI":-25,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653136449000,"dateString":"2022-05-21T12:34:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"6288dd270f1be700041e59e8","glucose":70,"avgDelta":"-2.25","BGI":-23.7,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653136749000,"dateString":"2022-05-21T12:39:09.000Z","isValid":true,"sgv":68,"direction":"Flat","type":"sgv","_id":"6288de580f1be700041e59ea","glucose":68,"avgDelta":"-2.50","BGI":-22.37,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653137049000,"dateString":"2022-05-21T12:44:09.000Z","isValid":true,"sgv":69,"direction":"Flat","type":"sgv","_id":"6288df8a0f1be700041e59ec","glucose":69,"avgDelta":"-1.75","BGI":-20.95,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653137350000,"dateString":"2022-05-21T12:49:10.000Z","isValid":true,"sgv":72,"direction":"Flat","type":"sgv","_id":"6288dfd60f1be700041e59ee","glucose":72,"avgDelta":"-0.25","BGI":-19.52,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653137649000,"dateString":"2022-05-21T12:54:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288e1040f1be700041e59f0","glucose":79,"avgDelta":"2.25","BGI":-18.02,"deviation":"0.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653137949000,"dateString":"2022-05-21T12:59:09.000Z","isValid":true,"sgv":86,"direction":"Flat","type":"sgv","_id":"6288e24c0f1be700041e59f3","glucose":86,"avgDelta":"4.50","BGI":-17.54,"deviation":"22.04","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653138249000,"dateString":"2022-05-21T13:04:09.000Z","isValid":true,"sgv":93,"direction":"FortyFiveUp","type":"sgv","_id":"6288e3610f1be700041e59f6","glucose":93,"avgDelta":"6.00","BGI":-17.8,"deviation":"23.80","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653138549000,"dateString":"2022-05-21T13:09:09.000Z","isValid":true,"sgv":95,"direction":"FortyFiveUp","type":"sgv","_id":"6288e4900f1be700041e59f8","glucose":95,"avgDelta":"5.75","BGI":-18.1,"deviation":"23.85","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653138849000,"dateString":"2022-05-21T13:14:09.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288e5d00f1be700041e59fb","glucose":94,"avgDelta":"3.75","BGI":-18.53,"deviation":"22.28","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653139150000,"dateString":"2022-05-21T13:19:10.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"6288e7030f1be700041e59fd","glucose":93,"avgDelta":"1.75","BGI":-18.83,"deviation":"20.58","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653139450000,"dateString":"2022-05-21T13:24:10.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288e82c0f1be700041e5a00","glucose":94,"avgDelta":"0.25","BGI":-18.83,"deviation":"19.08","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653139749000,"dateString":"2022-05-21T13:29:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"6288e9410f1be700041e5a03","glucose":98,"avgDelta":"0.75","BGI":-18.58,"deviation":"19.33","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653140049000,"dateString":"2022-05-21T13:34:09.000Z","isValid":true,"sgv":105,"direction":"Flat","type":"sgv","_id":"6288ea6e0f1be700041e5a06","glucose":105,"avgDelta":"2.75","BGI":-18.45,"deviation":"21.20","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653140349000,"dateString":"2022-05-21T13:39:09.000Z","isValid":true,"sgv":114,"direction":"FortyFiveUp","type":"sgv","_id":"6288eb9d0f1be700041e5a09","glucose":114,"avgDelta":"5.25","BGI":-18.58,"deviation":"23.83","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653140648000,"dateString":"2022-05-21T13:44:08.000Z","isValid":true,"sgv":121,"direction":"FortyFiveUp","type":"sgv","_id":"6288ecca0f1be700041e5a0b","glucose":121,"avgDelta":"6.75","BGI":-18.71,"deviation":"25.46","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653140949000,"dateString":"2022-05-21T13:49:09.000Z","isValid":true,"sgv":126,"direction":"FortyFiveUp","type":"sgv","_id":"6288edfc2634cd0004296065","glucose":126,"avgDelta":"7.00","BGI":-19.05,"deviation":"26.05","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653141249000,"dateString":"2022-05-21T13:54:09.000Z","isValid":true,"sgv":131,"direction":"FortyFiveUp","type":"sgv","_id":"6288ef2a2634cd0004296067","glucose":131,"avgDelta":"6.50","BGI":-19.48,"deviation":"25.98","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653141548000,"dateString":"2022-05-21T13:59:08.000Z","isValid":true,"sgv":139,"direction":"FortyFiveUp","type":"sgv","_id":"6288f03f2634cd000429606a","glucose":139,"avgDelta":"6.25","BGI":-19.91,"deviation":"26.16","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653141849000,"dateString":"2022-05-21T14:04:09.000Z","isValid":true,"sgv":147,"direction":"FortyFiveUp","type":"sgv","_id":"6288f16d2634cd000429606c","glucose":147,"avgDelta":"6.50","BGI":-20.17,"deviation":"26.67","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653142149000,"dateString":"2022-05-21T14:09:09.000Z","isValid":true,"sgv":155,"direction":"FortyFiveUp","type":"sgv","_id":"6288f29b2634cd000429606f","glucose":155,"avgDelta":"7.25","BGI":-20.73,"deviation":"27.98","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653142449000,"dateString":"2022-05-21T14:14:09.000Z","isValid":true,"sgv":160,"direction":"FortyFiveUp","type":"sgv","_id":"6288f3c92634cd0004296071","glucose":160,"avgDelta":"7.25","BGI":-21.08,"deviation":"28.33","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653142749000,"dateString":"2022-05-21T14:19:09.000Z","isValid":true,"sgv":166,"direction":"FortyFiveUp","type":"sgv","_id":"6288f4f72634cd0004296074","glucose":166,"avgDelta":"6.75","BGI":-21.55,"deviation":"28.30","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653143049000,"dateString":"2022-05-21T14:24:09.000Z","isValid":true,"sgv":174,"direction":"FortyFiveUp","type":"sgv","_id":"6288f62c0e0c880004d58dd8","glucose":174,"avgDelta":"6.75","BGI":-21.89,"deviation":"28.64","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653143349000,"dateString":"2022-05-21T14:29:09.000Z","isValid":true,"sgv":182,"direction":"FortyFiveUp","type":"sgv","_id":"6288f75a0e0c880004d58ddb","glucose":182,"avgDelta":"6.75","BGI":-21.98,"deviation":"28.73","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653143650000,"dateString":"2022-05-21T14:34:10.000Z","isValid":true,"sgv":185,"direction":"FortyFiveUp","type":"sgv","_id":"6288f8880e0c880004d58dde","glucose":185,"avgDelta":"6.25","BGI":-21.85,"deviation":"28.10","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653143949000,"dateString":"2022-05-21T14:39:09.000Z","isValid":true,"sgv":184,"direction":"Flat","type":"sgv","_id":"6288f9b60e0c880004d58de0","glucose":184,"avgDelta":"4.50","BGI":-21.46,"deviation":"25.96","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653144249000,"dateString":"2022-05-21T14:44:09.000Z","isValid":true,"sgv":180,"direction":"Flat","type":"sgv","_id":"6288facb0e0c880004d58de3","glucose":180,"avgDelta":"1.50","BGI":-20.82,"deviation":"22.32","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653144550000,"dateString":"2022-05-21T14:49:10.000Z","isValid":true,"sgv":178,"direction":"Flat","type":"sgv","_id":"6288fbf90e0c880004d58de5","glucose":178,"avgDelta":"-1.00","BGI":-20,"deviation":"19.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653144849000,"dateString":"2022-05-21T14:54:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6288fd270e0c880004d58de7","glucose":177,"avgDelta":"-2.00","BGI":-19.01,"deviation":"17.01","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653145149000,"dateString":"2022-05-21T14:59:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"6288fe56c9346b0004863359","glucose":176,"avgDelta":"-2.00","BGI":-17.97,"deviation":"15.97","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653145449000,"dateString":"2022-05-21T15:04:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6288ff9ec9346b000486335b","glucose":177,"avgDelta":"-0.75","BGI":-16.85,"deviation":"16.10","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653145750000,"dateString":"2022-05-21T15:09:10.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"628900b2c9346b000486335d","glucose":177,"avgDelta":"-0.25","BGI":-15.73,"deviation":"15.48","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653146050000,"dateString":"2022-05-21T15:14:10.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"628901e0c9346b000486335f","glucose":177,"avgDelta":"0.00","BGI":-14.57,"deviation":"14.57","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653146349000,"dateString":"2022-05-21T15:19:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6289030ec9346b0004863361","glucose":177,"avgDelta":"0.25","BGI":-13.45,"deviation":"13.70","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653146650000,"dateString":"2022-05-21T15:24:10.000Z","isValid":true,"sgv":178,"direction":"Flat","type":"sgv","_id":"6289043cc9346b0004863363","glucose":178,"avgDelta":"0.25","BGI":-12.33,"deviation":"12.58","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653146949000,"dateString":"2022-05-21T15:29:09.000Z","isValid":true,"sgv":178,"direction":"Flat","type":"sgv","_id":"6289056ac9346b0004863366","glucose":178,"avgDelta":"0.25","BGI":-11.29,"deviation":"11.54","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653147249000,"dateString":"2022-05-21T15:34:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6289067fc9346b0004863369","glucose":177,"avgDelta":"0.00","BGI":-10.17,"deviation":"10.17","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653147549000,"dateString":"2022-05-21T15:39:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"628907c5cf7ee10004a2b1ce","glucose":176,"avgDelta":"-0.25","BGI":-9.27,"deviation":"9.02","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653147849000,"dateString":"2022-05-21T15:44:09.000Z","isValid":true,"sgv":175,"direction":"Flat","type":"sgv","_id":"628908f3cf7ee10004a2b1d1","glucose":175,"avgDelta":"-0.75","BGI":-8.49,"deviation":"7.74","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653148149000,"dateString":"2022-05-21T15:49:09.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","_id":"62890a21cf7ee10004a2b1d3","glucose":174,"avgDelta":"-1.00","BGI":-7.89,"deviation":"6.89","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653148450000,"dateString":"2022-05-21T15:54:10.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890b36cf7ee10004a2b1d7","glucose":176,"avgDelta":"-0.25","BGI":-7.37,"deviation":"7.12","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653148749000,"dateString":"2022-05-21T15:59:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890c64cf7ee10004a2b1da","glucose":176,"avgDelta":"0.00","BGI":-6.94,"deviation":"6.94","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653149049000,"dateString":"2022-05-21T16:04:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890daccf7ee10004a2b1de","glucose":176,"avgDelta":"0.25","BGI":-6.72,"deviation":"6.97","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653149349000,"dateString":"2022-05-21T16:09:09.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","_id":"62890edacf7ee10004a2b1e2","glucose":174,"avgDelta":"0.00","BGI":-6.64,"deviation":"6.64","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653149650000,"dateString":"2022-05-21T16:14:10.000Z","isValid":true,"sgv":173,"direction":"Flat","type":"sgv","_id":"62890fff1090500004ca46fd","glucose":173,"avgDelta":"-0.75","BGI":-6.42,"deviation":"5.67","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653149949000,"dateString":"2022-05-21T16:19:09.000Z","isValid":true,"sgv":172,"direction":"Flat","type":"sgv","_id":"6289130f1090500004ca46ff","glucose":172,"avgDelta":"-1.00","BGI":-6.12,"deviation":"5.12","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653150249000,"dateString":"2022-05-21T16:24:09.000Z","isValid":true,"sgv":170,"direction":"Flat","type":"sgv","_id":"628913111090500004ca4704","glucose":170,"avgDelta":"-1.50","BGI":-5.95,"deviation":"4.45","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653150549000,"dateString":"2022-05-21T16:29:09.000Z","isValid":true,"sgv":165,"direction":"Flat","type":"sgv","_id":"628913731090500004ca4706","glucose":165,"avgDelta":"-2.25","BGI":-5.73,"deviation":"3.48","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653150849000,"dateString":"2022-05-21T16:34:09.000Z","isValid":true,"sgv":161,"direction":"Flat","type":"sgv","_id":"628914d01090500004ca4709","glucose":161,"avgDelta":"-3.00","BGI":-5.47,"deviation":"2.47","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653151149000,"dateString":"2022-05-21T16:39:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628915ce1090500004ca470c","glucose":158,"avgDelta":"-3.50","BGI":-5.09,"deviation":"1.59","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653151449000,"dateString":"2022-05-21T16:44:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628916f81090500004ca4710","glucose":158,"avgDelta":"-3.00","BGI":-4.74,"deviation":"1.74","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653151749000,"dateString":"2022-05-21T16:49:09.000Z","isValid":true,"sgv":159,"direction":"Flat","type":"sgv","_id":"628918261090500004ca4714","glucose":159,"avgDelta":"-1.50","BGI":-4.53,"deviation":"3.03","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653152049000,"dateString":"2022-05-21T16:54:09.000Z","isValid":true,"sgv":160,"direction":"Flat","type":"sgv","_id":"628919531090500004ca4717","glucose":160,"avgDelta":"-0.25","BGI":-4.35,"deviation":"4.10","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653152349000,"dateString":"2022-05-21T16:59:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"62891a811090500004ca471a","glucose":158,"avgDelta":"0.00","BGI":-4.35,"deviation":"4.35","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653152649000,"dateString":"2022-05-21T17:04:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62891ba31090500004ca471d","glucose":149,"avgDelta":"-2.25","BGI":-4.35,"deviation":"2.10","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653152949000,"dateString":"2022-05-21T17:09:09.000Z","isValid":true,"sgv":138,"direction":"FortyFiveDown","type":"sgv","_id":"62891cd01090500004ca471f","glucose":138,"avgDelta":"-5.25","BGI":-4.22,"deviation":"-1.03","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653153249000,"dateString":"2022-05-21T17:14:09.000Z","isValid":true,"sgv":124,"direction":"FortyFiveDown","type":"sgv","_id":"62891dfd1090500004ca4722","glucose":124,"avgDelta":"-9.00","BGI":-4.05,"deviation":"-4.95","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653153549000,"dateString":"2022-05-21T17:19:09.000Z","isValid":true,"sgv":110,"direction":"SingleDown","type":"sgv","_id":"62891f2b1090500004ca4724","glucose":110,"avgDelta":"-12.00","BGI":-3.79,"deviation":"-8.21","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653153849000,"dateString":"2022-05-21T17:24:09.000Z","isValid":true,"sgv":96,"direction":"SingleDown","type":"sgv","_id":"628920591090500004ca4727","glucose":96,"avgDelta":"-13.25","BGI":-3.49,"deviation":"-9.76","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653154149000,"dateString":"2022-05-21T17:29:09.000Z","isValid":true,"sgv":93,"direction":"SingleDown","type":"sgv","_id":"628921861090500004ca472b","glucose":93,"avgDelta":"-11.25","BGI":-3.19,"deviation":"-8.06","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653154449000,"dateString":"2022-05-21T17:34:09.000Z","isValid":true,"sgv":97,"direction":"FortyFiveDown","type":"sgv","_id":"628922b18809e60004c644d6","glucose":97,"avgDelta":"-6.75","BGI":-2.84,"deviation":"-3.91","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653154749000,"dateString":"2022-05-21T17:39:09.000Z","isValid":true,"sgv":108,"direction":"NONE","type":"sgv","_id":"628923df8809e60004c644d9","glucose":108,"avgDelta":"-0.50","BGI":-2.5,"deviation":"2.00","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653155049000,"dateString":"2022-05-21T17:44:09.000Z","isValid":true,"sgv":116,"direction":"NONE","type":"sgv","_id":"6289250d8809e60004c644dd","glucose":116,"avgDelta":"5.00","BGI":-2.16,"deviation":"7.16","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653155349000,"dateString":"2022-05-21T17:49:09.000Z","isValid":true,"sgv":123,"direction":"NONE","type":"sgv","_id":"6289263c8809e60004c644e1","glucose":123,"avgDelta":"7.50","BGI":-2.07,"deviation":"9.57","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653155649000,"dateString":"2022-05-21T17:54:09.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"6289276a8809e60004c644e3","glucose":124,"avgDelta":"6.75","BGI":-2.11,"deviation":"8.86","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653155950000,"dateString":"2022-05-21T17:59:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"6289287e8809e60004c644e6","glucose":123,"avgDelta":"3.75","BGI":-2.16,"deviation":"5.91","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653156250000,"dateString":"2022-05-21T18:04:10.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"628929ac8809e60004c644e9","glucose":119,"avgDelta":"0.75","BGI":-2.07,"deviation":"2.82","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653156549000,"dateString":"2022-05-21T18:09:09.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"62892af2840d8d0004a20bf0","glucose":114,"avgDelta":"-2.25","BGI":-1.9,"deviation":"-0.35","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653156849000,"dateString":"2022-05-21T18:14:09.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"62892c06840d8d0004a20bf2","glucose":110,"avgDelta":"-3.50","BGI":-1.72,"deviation":"-1.78","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653157149000,"dateString":"2022-05-21T18:19:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"62892d34840d8d0004a20bf5","glucose":108,"avgDelta":"-3.75","BGI":-1.47,"deviation":"-2.28","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653157449000,"dateString":"2022-05-21T18:24:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"62892e62840d8d0004a20bf8","glucose":108,"avgDelta":"-2.75","BGI":-1.21,"deviation":"-1.54","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653157750000,"dateString":"2022-05-21T18:29:10.000Z","isValid":true,"sgv":106,"direction":"Flat","type":"sgv","_id":"62892f8f840d8d0004a20bfa","glucose":106,"avgDelta":"-2.00","BGI":-0.95,"deviation":"-1.05","mealCarbs":80},{"device":"AndroidAPS-DexcomG6","date":1653158049000,"dateString":"2022-05-21T18:34:09.000Z","isValid":true,"sgv":104,"direction":"Flat","type":"sgv","_id":"628930bc840d8d0004a20bfd","glucose":104,"avgDelta":"-1.50","BGI":-0.69,"deviation":"-0.81","mealCarbs":0,"mealAbsorption":"end"},{"device":"AndroidAPS-DexcomG6","date":1653164649000,"dateString":"2022-05-21T20:24:09.000Z","isValid":true,"sgv":133,"direction":"FortyFiveUp","type":"sgv","_id":"62894a7e4493460004e63a38","glucose":133,"avgDelta":"9.50","BGI":-6.46,"deviation":"15.96","mealAbsorption":"start","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653164950000,"dateString":"2022-05-21T20:29:10.000Z","isValid":true,"sgv":143,"direction":"SingleUp","type":"sgv","_id":"62894bab80fc7e00041b229b","glucose":143,"avgDelta":"10.75","BGI":-14.31,"deviation":"25.06","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653165249000,"dateString":"2022-05-21T20:34:09.000Z","isValid":true,"sgv":145,"direction":"FortyFiveUp","type":"sgv","_id":"62894cdb80fc7e00041b229e","glucose":145,"avgDelta":"9.00","BGI":-20.43,"deviation":"29.43","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653165550000,"dateString":"2022-05-21T20:39:10.000Z","isValid":true,"sgv":139,"direction":"Flat","type":"sgv","_id":"62894e0980fc7e00041b22a0","glucose":139,"avgDelta":"4.75","BGI":-25.17,"deviation":"29.92","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653165850000,"dateString":"2022-05-21T20:44:10.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","_id":"62894f3880fc7e00041b22a3","glucose":128,"avgDelta":"-1.25","BGI":-28.62,"deviation":"27.37","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653166149000,"dateString":"2022-05-21T20:49:09.000Z","isValid":true,"sgv":118,"direction":"FortyFiveDown","type":"sgv","_id":"6289506680fc7e00041b22a5","glucose":118,"avgDelta":"-6.25","BGI":-30.95,"deviation":"24.70","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653166450000,"dateString":"2022-05-21T20:54:10.000Z","isValid":true,"sgv":110,"direction":"FortyFiveDown","type":"sgv","_id":"6289519580fc7e00041b22a7","glucose":110,"avgDelta":"-8.75","BGI":-32.45,"deviation":"23.70","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653166749000,"dateString":"2022-05-21T20:59:09.000Z","isValid":true,"sgv":104,"direction":"FortyFiveDown","type":"sgv","_id":"628952c680fc7e00041b22a9","glucose":104,"avgDelta":"-8.75","BGI":-33.27,"deviation":"24.52","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653167049000,"dateString":"2022-05-21T21:04:09.000Z","isValid":true,"sgv":101,"direction":"FortyFiveDown","type":"sgv","_id":"628953e79bf1e6000482ff90","glucose":101,"avgDelta":"-6.75","BGI":-33.45,"deviation":"26.70","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653167350000,"dateString":"2022-05-21T21:09:10.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"628955179bf1e6000482ff92","glucose":99,"avgDelta":"-4.75","BGI":-33.14,"deviation":"28.39","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653167650000,"dateString":"2022-05-21T21:14:10.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628956919bf1e6000482ff96","glucose":98,"avgDelta":"-3.00","BGI":-32.5,"deviation":"29.50","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653167949000,"dateString":"2022-05-21T21:19:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"6289583f9bf1e6000482ff9b","glucose":98,"avgDelta":"-1.50","BGI":-31.64,"deviation":"30.14","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653168250000,"dateString":"2022-05-21T21:24:10.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628959ed9bf1e6000482ff9e","glucose":98,"avgDelta":"-0.75","BGI":-30.69,"deviation":"29.94","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653168549000,"dateString":"2022-05-21T21:29:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"62895b9a9bf1e6000482ffa1","glucose":98,"avgDelta":"-0.25","BGI":-29.74,"deviation":"29.49","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653168849000,"dateString":"2022-05-21T21:34:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"62895d98fb144900043c34e5","glucose":100,"avgDelta":"0.50","BGI":-28.58,"deviation":"29.08","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653169150000,"dateString":"2022-05-21T21:39:10.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62895f5ffb144900043c34e8","glucose":102,"avgDelta":"1.00","BGI":-27.28,"deviation":"28.28","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653169449000,"dateString":"2022-05-21T21:44:09.000Z","isValid":true,"sgv":105,"direction":"Flat","type":"sgv","_id":"628961a4fb144900043c34ea","glucose":105,"avgDelta":"1.75","BGI":-25.82,"deviation":"27.57","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653169749000,"dateString":"2022-05-21T21:49:09.000Z","isValid":true,"sgv":107,"direction":"Flat","type":"sgv","_id":"628964906a5ecf00042d546b","glucose":107,"avgDelta":"2.25","BGI":-24.39,"deviation":"26.64","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653170049000,"dateString":"2022-05-21T21:54:09.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"628967a06a5ecf00042d546e","glucose":110,"avgDelta":"2.50","BGI":-22.84,"deviation":"25.34","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653170350000,"dateString":"2022-05-21T21:59:10.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","_id":"628969016a5ecf00042d5470","glucose":112,"avgDelta":"2.50","BGI":-21.29,"deviation":"23.79","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653170650000,"dateString":"2022-05-21T22:04:10.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","_id":"628969fd6a5ecf00042d5471","glucose":115,"avgDelta":"2.50","BGI":-19.7,"deviation":"22.20","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653170950000,"dateString":"2022-05-21T22:09:10.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"62896ac76a5ecf00042d5472","glucose":117,"avgDelta":"2.50","BGI":-18.15,"deviation":"20.65","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653171250000,"dateString":"2022-05-21T22:14:10.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"62896b5f6a5ecf00042d5474","glucose":118,"avgDelta":"2.00","BGI":-16.59,"deviation":"18.59","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653171549000,"dateString":"2022-05-21T22:19:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"62896c1037d09a00043f2b13","glucose":120,"avgDelta":"2.00","BGI":-15.13,"deviation":"17.13","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653171849000,"dateString":"2022-05-21T22:24:09.000Z","isValid":true,"sgv":122,"direction":"Flat","type":"sgv","_id":"62896c7537d09a00043f2b14","glucose":122,"avgDelta":"1.75","BGI":-13.75,"deviation":"15.50","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653172150000,"dateString":"2022-05-21T22:29:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"62896cda37d09a00043f2b16","glucose":124,"avgDelta":"1.75","BGI":-12.41,"deviation":"14.16","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653172450000,"dateString":"2022-05-21T22:34:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"62896d8b37d09a00043f2b17","glucose":124,"avgDelta":"1.50","BGI":-11.21,"deviation":"12.71","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653172749000,"dateString":"2022-05-21T22:39:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"62896e8937d09a00043f2b19","glucose":120,"avgDelta":"0.00","BGI":-10.13,"deviation":"10.13","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653173050000,"dateString":"2022-05-21T22:44:10.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","_id":"62896f8537d09a00043f2b1a","glucose":115,"avgDelta":"-1.75","BGI":-9.05,"deviation":"7.30","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653173350000,"dateString":"2022-05-21T22:49:10.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"62896fb837d09a00043f2b1b","glucose":110,"avgDelta":"-3.50","BGI":-8.15,"deviation":"4.65","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653173650000,"dateString":"2022-05-21T22:54:10.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289717d37d09a00043f2b1e","glucose":108,"avgDelta":"-4.00","BGI":-7.28,"deviation":"3.28","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653173949000,"dateString":"2022-05-21T22:59:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289721437d09a00043f2b1f","glucose":108,"avgDelta":"-3.00","BGI":-6.42,"deviation":"3.42","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653174249000,"dateString":"2022-05-21T23:04:09.000Z","isValid":true,"sgv":111,"direction":"Flat","type":"sgv","_id":"6289726037d09a00043f2b20","glucose":111,"avgDelta":"-1.00","BGI":-5.69,"deviation":"4.69","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653174550000,"dateString":"2022-05-21T23:09:10.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"6289727937d09a00043f2b21","glucose":114,"avgDelta":"1.00","BGI":-4.96,"deviation":"5.96","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653174850000,"dateString":"2022-05-21T23:14:10.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6289727a37d09a00043f2b22","glucose":117,"avgDelta":"2.25","BGI":-4.35,"deviation":"6.60","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653175149000,"dateString":"2022-05-21T23:19:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"6289738f37d09a00043f2b26","glucose":120,"avgDelta":"3.00","BGI":-3.84,"deviation":"6.84","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653175450000,"dateString":"2022-05-21T23:24:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"628974b671a363000480abbc","glucose":123,"avgDelta":"3.00","BGI":-3.4,"deviation":"6.40","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653175750000,"dateString":"2022-05-21T23:29:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"628975e471a363000480abbe","glucose":124,"avgDelta":"2.50","BGI":-3.19,"deviation":"5.69","mealCarbs":50},{"device":"AndroidAPS-DexcomG6","date":1653176050000,"dateString":"2022-05-21T23:34:10.000Z","isValid":true,"sgv":127,"direction":"Flat","type":"sgv","_id":"6289771371a363000480abc1","glucose":127,"avgDelta":"2.50","BGI":-2.93,"deviation":"5.43","mealCarbs":0,"mealAbsorption":"end"}],"ISFGlucoseData":[{"device":"AndroidAPS-DexcomG6","date":1653108249000,"dateString":"2022-05-21T04:44:09.000Z","isValid":true,"sgv":123,"direction":"FortyFiveDown","type":"sgv","_id":"62886e2919e2e60004989bba","glucose":123,"avgDelta":"-7.50","BGI":-7.59,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653108548000,"dateString":"2022-05-21T04:49:08.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","_id":"62886f5719e2e60004989bbc","glucose":128,"avgDelta":"-4.00","BGI":-7.2,"deviation":"3.20"},{"device":"AndroidAPS-DexcomG6","date":1653110649000,"dateString":"2022-05-21T05:24:09.000Z","isValid":true,"sgv":98,"direction":"FortyFiveDown","type":"sgv","_id":"628877a5363e6c0004f710e0","glucose":98,"avgDelta":"-6.75","BGI":-4.44,"deviation":"-2.31"},{"device":"AndroidAPS-DexcomG6","date":1653110949000,"dateString":"2022-05-21T05:29:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628878bbe964810004aa5655","glucose":97,"avgDelta":"-5.00","BGI":-3.92,"deviation":"-1.08"},{"device":"AndroidAPS-DexcomG6","date":1653111249000,"dateString":"2022-05-21T05:34:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628879e9e964810004aa5657","glucose":97,"avgDelta":"-3.00","BGI":-3.45,"deviation":"0.45"},{"device":"AndroidAPS-DexcomG6","date":1653111549000,"dateString":"2022-05-21T05:39:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"62887b17e964810004aa565a","glucose":100,"avgDelta":"-0.50","BGI":-2.84,"deviation":"2.34"},{"device":"AndroidAPS-DexcomG6","date":1653111849000,"dateString":"2022-05-21T05:44:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62887c44e964810004aa565d","glucose":102,"avgDelta":"1.00","BGI":-2.37,"deviation":"3.37"},{"device":"AndroidAPS-DexcomG6","date":1653112148000,"dateString":"2022-05-21T05:49:08.000Z","isValid":true,"sgv":103,"direction":"Flat","type":"sgv","_id":"62887d72e964810004aa5661","glucose":103,"avgDelta":"1.50","BGI":-2.07,"deviation":"3.57"},{"device":"AndroidAPS-DexcomG6","date":1653112449000,"dateString":"2022-05-21T05:54:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62887ea1e964810004aa5664","glucose":102,"avgDelta":"1.25","BGI":-2.28,"deviation":"3.53"},{"device":"AndroidAPS-DexcomG6","date":1653112749000,"dateString":"2022-05-21T05:59:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"62887fcee964810004aa5666","glucose":101,"avgDelta":"0.25","BGI":-2.46,"deviation":"2.71"},{"device":"AndroidAPS-DexcomG6","date":1653113049000,"dateString":"2022-05-21T06:04:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628880ee8ff3530004dc6060","glucose":98,"avgDelta":"-1.00","BGI":-2.5,"deviation":"1.50"},{"device":"AndroidAPS-DexcomG6","date":1653113349000,"dateString":"2022-05-21T06:09:09.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288821b8ff3530004dc6062","glucose":94,"avgDelta":"-2.25","BGI":-2.46,"deviation":"0.21"},{"device":"AndroidAPS-DexcomG6","date":1653113649000,"dateString":"2022-05-21T06:14:09.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"6288834a8ff3530004dc6065","glucose":91,"avgDelta":"-2.75","BGI":-2.28,"deviation":"-0.47"},{"device":"AndroidAPS-DexcomG6","date":1653113949000,"dateString":"2022-05-21T06:19:09.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"628884778ff3530004dc6067","glucose":89,"avgDelta":"-3.00","BGI":-2.07,"deviation":"-0.93"},{"device":"AndroidAPS-DexcomG6","date":1653114249000,"dateString":"2022-05-21T06:24:09.000Z","isValid":true,"sgv":85,"direction":"Flat","type":"sgv","_id":"628885a48ff3530004dc6069","glucose":85,"avgDelta":"-3.25","BGI":-1.77,"deviation":"-1.48"},{"device":"AndroidAPS-DexcomG6","date":1653176350000,"dateString":"2022-05-21T23:39:10.000Z","isValid":true,"sgv":132,"direction":"Flat","type":"sgv","_id":"6289784271a363000480abc3","glucose":132,"avgDelta":"3.00","BGI":-2.67,"deviation":"5.67"},{"device":"AndroidAPS-DexcomG6","date":1653180849000,"dateString":"2022-05-22T00:54:09.000Z","isValid":true,"sgv":105,"direction":"SingleDown","type":"sgv","_id":"628989d2da46aa0004d1e0f8","glucose":105,"avgDelta":"-9.50","BGI":-3.1,"deviation":"-6.40"},{"device":"AndroidAPS-DexcomG6","date":1653181150000,"dateString":"2022-05-22T00:59:10.000Z","isValid":true,"sgv":97,"direction":"SingleDown","type":"sgv","_id":"62898b01da46aa0004d1e0fa","glucose":97,"avgDelta":"-11.50","BGI":-2.84,"deviation":"-8.66"},{"device":"AndroidAPS-DexcomG6","date":1653181450000,"dateString":"2022-05-22T01:04:10.000Z","isValid":true,"sgv":92,"direction":"FortyFiveDown","type":"sgv","_id":"62898c2fda46aa0004d1e0fc","glucose":92,"avgDelta":"-10.75","BGI":-2.5,"deviation":"-8.25"},{"device":"AndroidAPS-DexcomG6","date":1653181750000,"dateString":"2022-05-22T01:09:10.000Z","isValid":true,"sgv":87,"direction":"FortyFiveDown","type":"sgv","_id":"62898d4750e51d0004429e5f","glucose":87,"avgDelta":"-8.50","BGI":-2.11,"deviation":"-6.39"}],"basalGlucoseData":[{"device":"AndroidAPS-DexcomG6","date":1653114549000,"dateString":"2022-05-21T06:29:09.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628886d28ff3530004dc606b","glucose":80,"avgDelta":"-3.50","BGI":-1.47,"deviation":"-2.03"},{"device":"AndroidAPS-DexcomG6","date":1653114849000,"dateString":"2022-05-21T06:34:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"628888018ff3530004dc6070","glucose":78,"avgDelta":"-3.25","BGI":-1.12,"deviation":"-2.13"},{"device":"AndroidAPS-DexcomG6","date":1653115149000,"dateString":"2022-05-21T06:39:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6288892a149196000412bf49","glucose":76,"avgDelta":"-3.25","BGI":-0.78,"deviation":"-2.47"},{"device":"AndroidAPS-DexcomG6","date":1653115449000,"dateString":"2022-05-21T06:44:09.000Z","isValid":true,"sgv":74,"direction":"Flat","type":"sgv","_id":"62888a57149196000412bf4b","glucose":74,"avgDelta":"-2.75","BGI":-0.34,"deviation":"-2.41"},{"device":"AndroidAPS-DexcomG6","date":1653115749000,"dateString":"2022-05-21T06:49:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"62888b85149196000412bf4d","glucose":70,"avgDelta":"-2.50","BGI":0,"deviation":"-2.50"},{"device":"AndroidAPS-DexcomG6","date":1653116049000,"dateString":"2022-05-21T06:54:09.000Z","isValid":true,"sgv":69,"direction":"Flat","type":"sgv","_id":"62888ccc149196000412bf4f","glucose":69,"avgDelta":"-2.25","BGI":0.43,"deviation":"-2.68"},{"device":"AndroidAPS-DexcomG6","date":1653116349000,"dateString":"2022-05-21T06:59:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"62888de2149196000412bf51","glucose":70,"avgDelta":"-1.50","BGI":0.78,"deviation":"-2.28"},{"device":"AndroidAPS-DexcomG6","date":1653116649000,"dateString":"2022-05-21T07:04:09.000Z","isValid":true,"sgv":74,"direction":"Flat","type":"sgv","_id":"62888f0f149196000412bf54","glucose":74,"avgDelta":"0.00","BGI":1.12,"deviation":"-1.12"},{"device":"AndroidAPS-DexcomG6","date":1653116949000,"dateString":"2022-05-21T07:09:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"62889024149196000412bf57","glucose":76,"avgDelta":"1.50","BGI":1.47,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653117249000,"dateString":"2022-05-21T07:14:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"628891627ff1e700040f17c6","glucose":79,"avgDelta":"2.50","BGI":1.77,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653117549000,"dateString":"2022-05-21T07:19:09.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628892907ff1e700040f17c7","glucose":80,"avgDelta":"2.50","BGI":2.11,"deviation":"0.39"},{"device":"AndroidAPS-DexcomG6","date":1653117848000,"dateString":"2022-05-21T07:24:08.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","_id":"628893bd7ff1e700040f17c9","glucose":82,"avgDelta":"2.00","BGI":2.37,"deviation":"-0.37"},{"device":"AndroidAPS-DexcomG6","date":1653118149000,"dateString":"2022-05-21T07:29:09.000Z","isValid":true,"sgv":86,"direction":"Flat","type":"sgv","_id":"628894d37ff1e700040f17cd","glucose":86,"avgDelta":"2.50","BGI":2.63,"deviation":"-0.13"},{"device":"AndroidAPS-DexcomG6","date":1653118449000,"dateString":"2022-05-21T07:34:09.000Z","isValid":true,"sgv":92,"direction":"Flat","type":"sgv","_id":"6288961d7ff1e700040f17ce","glucose":92,"avgDelta":"3.25","BGI":2.84,"deviation":"0.41"},{"device":"AndroidAPS-DexcomG6","date":1653118748000,"dateString":"2022-05-21T07:39:08.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628897357ff1e700040f17d3","glucose":97,"avgDelta":"4.25","BGI":3.06,"deviation":"1.19"},{"device":"AndroidAPS-DexcomG6","date":1653119049000,"dateString":"2022-05-21T07:44:09.000Z","isValid":true,"sgv":105,"direction":"FortyFiveUp","type":"sgv","_id":"628898627ff1e700040f17d5","glucose":105,"avgDelta":"5.75","BGI":2.76,"deviation":"2.99"},{"device":"AndroidAPS-DexcomG6","date":1653119349000,"dateString":"2022-05-21T07:49:09.000Z","isValid":true,"sgv":114,"direction":"FortyFiveUp","type":"sgv","_id":"628899957ff1e700040f17d7","glucose":114,"avgDelta":"7.00","BGI":2.37,"deviation":"4.63"},{"device":"AndroidAPS-DexcomG6","date":1653158349000,"dateString":"2022-05-21T18:39:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"628931e9840d8d0004a20bff","glucose":102,"avgDelta":"-1.50","BGI":-0.47,"deviation":"-1.03"},{"device":"AndroidAPS-DexcomG6","date":1653158649000,"dateString":"2022-05-21T18:44:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6289331c22fbc8000495b813","glucose":101,"avgDelta":"-1.75","BGI":-0.3,"deviation":"-1.45"},{"device":"AndroidAPS-DexcomG6","date":1653158949000,"dateString":"2022-05-21T18:49:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"6289344a22fbc8000495b815","glucose":100,"avgDelta":"-1.50","BGI":-0.17,"deviation":"-1.33"},{"device":"AndroidAPS-DexcomG6","date":1653159249000,"dateString":"2022-05-21T18:54:09.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"6289357622fbc8000495b818","glucose":99,"avgDelta":"-1.25","BGI":-0.04,"deviation":"-1.21"},{"device":"AndroidAPS-DexcomG6","date":1653159549000,"dateString":"2022-05-21T18:59:09.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"628936a422fbc8000495b81a","glucose":99,"avgDelta":"-0.75","BGI":0.04,"deviation":"-0.79"},{"device":"AndroidAPS-DexcomG6","date":1653159849000,"dateString":"2022-05-21T19:04:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628937b822fbc8000495b81d","glucose":98,"avgDelta":"-0.75","BGI":0.17,"deviation":"-0.92"},{"device":"AndroidAPS-DexcomG6","date":1653160150000,"dateString":"2022-05-21T19:09:10.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628938fe22fbc8000495b81f","glucose":98,"avgDelta":"-0.50","BGI":0.3,"deviation":"-0.80"},{"device":"AndroidAPS-DexcomG6","date":1653160449000,"dateString":"2022-05-21T19:14:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"62893a1222fbc8000495b822","glucose":98,"avgDelta":"-0.25","BGI":0.43,"deviation":"-0.68"},{"device":"AndroidAPS-DexcomG6","date":1653160749000,"dateString":"2022-05-21T19:19:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"62893b4f598f780004bb3b22","glucose":97,"avgDelta":"-0.50","BGI":0.52,"deviation":"-1.02"},{"device":"AndroidAPS-DexcomG6","date":1653161049000,"dateString":"2022-05-21T19:24:09.000Z","isValid":true,"sgv":95,"direction":"Flat","type":"sgv","_id":"62893c7d598f780004bb3b24","glucose":95,"avgDelta":"-0.75","BGI":0.6,"deviation":"-1.35"},{"device":"AndroidAPS-DexcomG6","date":1653161350000,"dateString":"2022-05-21T19:29:10.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"62893daa598f780004bb3b27","glucose":94,"avgDelta":"-1.00","BGI":0.65,"deviation":"-1.65"},{"device":"AndroidAPS-DexcomG6","date":1653161649000,"dateString":"2022-05-21T19:34:09.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"62893ed7598f780004bb3b29","glucose":93,"avgDelta":"-1.25","BGI":0.73,"deviation":"-1.98"},{"device":"AndroidAPS-DexcomG6","date":1653161950000,"dateString":"2022-05-21T19:39:10.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"62893feb598f780004bb3b2b","glucose":91,"avgDelta":"-1.50","BGI":0.86,"deviation":"-2.36"},{"device":"AndroidAPS-DexcomG6","date":1653162250000,"dateString":"2022-05-21T19:44:10.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"62894118598f780004bb3b2d","glucose":89,"avgDelta":"-1.50","BGI":0.99,"deviation":"-2.49"},{"device":"AndroidAPS-DexcomG6","date":1653162549000,"dateString":"2022-05-21T19:49:09.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","_id":"6289425f598f780004bb3b30","glucose":88,"avgDelta":"-1.50","BGI":1.12,"deviation":"-2.62"},{"device":"AndroidAPS-DexcomG6","date":1653162850000,"dateString":"2022-05-21T19:54:10.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"6289437f4493460004e63a25","glucose":89,"avgDelta":"-1.00","BGI":1.25,"deviation":"-2.25"},{"device":"AndroidAPS-DexcomG6","date":1653163150000,"dateString":"2022-05-21T19:59:10.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"628944ae4493460004e63a27","glucose":91,"avgDelta":"0.00","BGI":1.38,"deviation":"-1.38"},{"device":"AndroidAPS-DexcomG6","date":1653163449000,"dateString":"2022-05-21T20:04:09.000Z","isValid":true,"sgv":95,"direction":"Flat","type":"sgv","_id":"628945dc4493460004e63a2a","glucose":95,"avgDelta":"1.50","BGI":1.51,"deviation":"-0.01"},{"device":"AndroidAPS-DexcomG6","date":1653163749000,"dateString":"2022-05-21T20:09:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"6289470c4493460004e63a2d","glucose":100,"avgDelta":"3.00","BGI":1.55,"deviation":"1.45"},{"device":"AndroidAPS-DexcomG6","date":1653164049000,"dateString":"2022-05-21T20:14:09.000Z","isValid":true,"sgv":109,"direction":"Flat","type":"sgv","_id":"628948214493460004e63a31","glucose":109,"avgDelta":"5.00","BGI":1.51,"deviation":"3.49"},{"device":"AndroidAPS-DexcomG6","date":1653164350000,"dateString":"2022-05-21T20:19:10.000Z","isValid":true,"sgv":120,"direction":"FortyFiveUp","type":"sgv","_id":"6289496a4493460004e63a34","glucose":120,"avgDelta":"7.25","BGI":1.34,"deviation":"5.91"},{"device":"AndroidAPS-DexcomG6","date":1653182050000,"dateString":"2022-05-22T01:14:10.000Z","isValid":true,"sgv":81,"direction":"FortyFiveDown","type":"sgv","_id":"62898e7650e51d0004429e63","glucose":81,"avgDelta":"-6.00","BGI":-1.68,"deviation":"-4.32"},{"device":"AndroidAPS-DexcomG6","date":1653182349000,"dateString":"2022-05-22T01:19:09.000Z","isValid":true,"sgv":77,"direction":"FortyFiveDown","type":"sgv","_id":"62898fa550e51d0004429e65","glucose":77,"avgDelta":"-5.00","BGI":-1.25,"deviation":"-3.75"},{"device":"AndroidAPS-DexcomG6","date":1653182650000,"dateString":"2022-05-22T01:24:10.000Z","isValid":true,"sgv":74,"direction":"FortyFiveDown","type":"sgv","_id":"628990d350e51d0004429e67","glucose":74,"avgDelta":"-4.50","BGI":-0.78,"deviation":"-3.72"},{"device":"AndroidAPS-DexcomG6","date":1653182949000,"dateString":"2022-05-22T01:29:09.000Z","isValid":true,"sgv":72,"direction":"Flat","type":"sgv","_id":"6289920150e51d0004429e69","glucose":72,"avgDelta":"-3.75","BGI":-0.3,"deviation":"-3.45"},{"device":"AndroidAPS-DexcomG6","date":1653183249000,"dateString":"2022-05-22T01:34:09.000Z","isValid":true,"sgv":73,"direction":"Flat","type":"sgv","_id":"6289933050e51d0004429e6b","glucose":73,"avgDelta":"-2.00","BGI":0.22,"deviation":"-2.22"},{"device":"AndroidAPS-DexcomG6","date":1653183550000,"dateString":"2022-05-22T01:39:10.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6289945f50e51d0004429e6d","glucose":76,"avgDelta":"-0.25","BGI":0.69,"deviation":"-0.94"},{"device":"AndroidAPS-DexcomG6","date":1653183850000,"dateString":"2022-05-22T01:44:10.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6289957b61a829000474037f","glucose":79,"avgDelta":"1.25","BGI":1.12,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653184150000,"dateString":"2022-05-22T01:49:10.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628996a961a8290004740382","glucose":80,"avgDelta":"2.00","BGI":1.55,"deviation":"0.45"},{"device":"AndroidAPS-DexcomG6","date":1653184450000,"dateString":"2022-05-22T01:54:10.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628997d861a8290004740385","glucose":80,"avgDelta":"1.75","BGI":1.9,"deviation":"-0.15"},{"device":"AndroidAPS-DexcomG6","date":1653099848000,"dateString":"2022-05-21T02:24:08.000Z","isValid":true,"sgv":308,"direction":"FortyFiveUp","type":"sgv","_id":"62884d6793668c0004a30514","glucose":308,"avgDelta":"9.25","BGI":-16.85,"deviation":"26.10","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653100148000,"dateString":"2022-05-21T02:29:08.000Z","isValid":true,"sgv":307,"direction":"FortyFiveUp","type":"sgv","_id":"62884e9493668c0004a30517","glucose":307,"avgDelta":"9.00","BGI":-18.88,"deviation":"27.88"},{"device":"AndroidAPS-DexcomG6","date":1653100449000,"dateString":"2022-05-21T02:34:09.000Z","isValid":true,"sgv":297,"direction":"Flat","type":"sgv","_id":"62884fb05151b5000462a1dc","glucose":297,"avgDelta":"3.75","BGI":-20.26,"deviation":"24.01"},{"device":"AndroidAPS-DexcomG6","date":1653100748000,"dateString":"2022-05-21T02:39:08.000Z","isValid":true,"sgv":283,"direction":"Flat","type":"sgv","_id":"628850de5151b5000462a1df","glucose":283,"avgDelta":"-3.25","BGI":-21.08,"deviation":"17.83"},{"device":"AndroidAPS-DexcomG6","date":1653101048000,"dateString":"2022-05-21T02:44:08.000Z","isValid":true,"sgv":267,"direction":"FortyFiveDown","type":"sgv","_id":"6288520b5151b5000462a1e2","glucose":267,"avgDelta":"-10.25","BGI":-21.46,"deviation":"11.21"},{"device":"AndroidAPS-DexcomG6","date":1653101348000,"dateString":"2022-05-21T02:49:08.000Z","isValid":true,"sgv":253,"direction":"SingleDown","type":"sgv","_id":"628853395151b5000462a1e4","glucose":253,"avgDelta":"-13.50","BGI":-21.46,"deviation":"7.96"},{"device":"AndroidAPS-DexcomG6","date":1653101648000,"dateString":"2022-05-21T02:54:08.000Z","isValid":true,"sgv":241,"direction":"SingleDown","type":"sgv","_id":"6288547f5151b5000462a1e6","glucose":241,"avgDelta":"-14.00","BGI":-21.16,"deviation":"7.16"},{"device":"AndroidAPS-DexcomG6","date":1653101948000,"dateString":"2022-05-21T02:59:08.000Z","isValid":true,"sgv":228,"direction":"SingleDown","type":"sgv","_id":"628855935151b5000462a1e8","glucose":228,"avgDelta":"-13.75","BGI":-20.52,"deviation":"6.77"},{"device":"AndroidAPS-DexcomG6","date":1653102249000,"dateString":"2022-05-21T03:04:09.000Z","isValid":true,"sgv":216,"direction":"SingleDown","type":"sgv","_id":"628856da5151b5000462a1ea","glucose":216,"avgDelta":"-12.75","BGI":-19.7,"deviation":"6.95"},{"device":"AndroidAPS-DexcomG6","date":1653102548000,"dateString":"2022-05-21T03:09:08.000Z","isValid":true,"sgv":204,"direction":"SingleDown","type":"sgv","_id":"628857f7293f3e00042c31d3","glucose":204,"avgDelta":"-12.25","BGI":-18.79,"deviation":"6.54"},{"device":"AndroidAPS-DexcomG6","date":1653102848000,"dateString":"2022-05-21T03:14:08.000Z","isValid":true,"sgv":193,"direction":"SingleDown","type":"sgv","_id":"62885924293f3e00042c31d5","glucose":193,"avgDelta":"-12.00","BGI":-17.71,"deviation":"5.71"},{"device":"AndroidAPS-DexcomG6","date":1653103149000,"dateString":"2022-05-21T03:19:09.000Z","isValid":true,"sgv":182,"direction":"SingleDown","type":"sgv","_id":"62885a52293f3e00042c31d7","glucose":182,"avgDelta":"-11.50","BGI":-16.64,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653103448000,"dateString":"2022-05-21T03:24:08.000Z","isValid":true,"sgv":174,"direction":"SingleDown","type":"sgv","_id":"62885b81293f3e00042c31d9","glucose":174,"avgDelta":"-10.50","BGI":-15.43,"deviation":"4.93"},{"device":"AndroidAPS-DexcomG6","date":1653103748000,"dateString":"2022-05-21T03:29:08.000Z","isValid":true,"sgv":171,"direction":"FortyFiveDown","type":"sgv","_id":"62885c95293f3e00042c31db","glucose":171,"avgDelta":"-8.25","BGI":-14.31,"deviation":"6.06"},{"device":"AndroidAPS-DexcomG6","date":1653104049000,"dateString":"2022-05-21T03:34:09.000Z","isValid":true,"sgv":170,"direction":"FortyFiveDown","type":"sgv","_id":"62885dc3293f3e00042c31de","glucose":170,"avgDelta":"-5.75","BGI":-13.1,"deviation":"7.35"},{"device":"AndroidAPS-DexcomG6","date":1653104349000,"dateString":"2022-05-21T03:39:09.000Z","isValid":true,"sgv":167,"direction":"Flat","type":"sgv","_id":"62885ef1293f3e00042c31e2","glucose":167,"avgDelta":"-3.75","BGI":-12.07,"deviation":"8.32"},{"device":"AndroidAPS-DexcomG6","date":1653104648000,"dateString":"2022-05-21T03:44:08.000Z","isValid":true,"sgv":162,"direction":"Flat","type":"sgv","_id":"6288601b42c1220004f95729","glucose":162,"avgDelta":"-3.00","BGI":-11.64,"deviation":"8.64"},{"device":"AndroidAPS-DexcomG6","date":1653104949000,"dateString":"2022-05-21T03:49:09.000Z","isValid":true,"sgv":155,"direction":"FortyFiveDown","type":"sgv","_id":"6288614942c1220004f9572c","glucose":155,"avgDelta":"-4.00","BGI":-11.12,"deviation":"7.12"},{"device":"AndroidAPS-DexcomG6","date":1653105248000,"dateString":"2022-05-21T03:54:08.000Z","isValid":true,"sgv":149,"direction":"FortyFiveDown","type":"sgv","_id":"6288629042c1220004f9572e","glucose":149,"avgDelta":"-5.25","BGI":-10.56,"deviation":"5.31"},{"device":"AndroidAPS-DexcomG6","date":1653105549000,"dateString":"2022-05-21T03:59:09.000Z","isValid":true,"sgv":146,"direction":"FortyFiveDown","type":"sgv","_id":"628863a542c1220004f95730","glucose":146,"avgDelta":"-5.25","BGI":-9.87,"deviation":"4.62"},{"device":"AndroidAPS-DexcomG6","date":1653105848000,"dateString":"2022-05-21T04:04:08.000Z","isValid":true,"sgv":146,"direction":"Flat","type":"sgv","_id":"628864d342c1220004f95733","glucose":146,"avgDelta":"-4.00","BGI":-9.14,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653106149000,"dateString":"2022-05-21T04:09:09.000Z","isValid":true,"sgv":151,"direction":"Flat","type":"sgv","_id":"6288660142c1220004f95736","glucose":151,"avgDelta":"-1.00","BGI":-8.36,"deviation":"7.36"},{"device":"AndroidAPS-DexcomG6","date":1653106449000,"dateString":"2022-05-21T04:14:09.000Z","isValid":true,"sgv":155,"direction":"Flat","type":"sgv","_id":"6288672f42c1220004f9573a","glucose":155,"avgDelta":"1.50","BGI":-7.8,"deviation":"9.30"},{"device":"AndroidAPS-DexcomG6","date":1653106749000,"dateString":"2022-05-21T04:19:09.000Z","isValid":true,"sgv":157,"direction":"Flat","type":"sgv","_id":"6288685d19e2e60004989bac","glucose":157,"avgDelta":"2.75","BGI":-7.93,"deviation":"10.68"},{"device":"AndroidAPS-DexcomG6","date":1653107048000,"dateString":"2022-05-21T04:24:08.000Z","isValid":true,"sgv":153,"direction":"Flat","type":"sgv","_id":"6288698b19e2e60004989bb0","glucose":153,"avgDelta":"1.75","BGI":-8.06,"deviation":"9.81"},{"device":"AndroidAPS-DexcomG6","date":1653107348000,"dateString":"2022-05-21T04:29:08.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"62886ab919e2e60004989bb3","glucose":144,"avgDelta":"-1.75","BGI":-8.19,"deviation":"6.44"},{"device":"AndroidAPS-DexcomG6","date":1653107648000,"dateString":"2022-05-21T04:34:08.000Z","isValid":true,"sgv":132,"direction":"FortyFiveDown","type":"sgv","_id":"62886be719e2e60004989bb5","glucose":132,"avgDelta":"-5.75","BGI":-8.1,"deviation":"2.35"},{"device":"AndroidAPS-DexcomG6","date":1653107948000,"dateString":"2022-05-21T04:39:08.000Z","isValid":true,"sgv":124,"direction":"FortyFiveDown","type":"sgv","_id":"62886cfc19e2e60004989bb8","glucose":124,"avgDelta":"-8.25","BGI":-7.89,"deviation":"-0.36"},{"device":"AndroidAPS-DexcomG6","date":1653108848000,"dateString":"2022-05-21T04:54:08.000Z","isValid":true,"sgv":130,"direction":"Flat","type":"sgv","_id":"62887093363e6c0004f710cf","glucose":130,"avgDelta":"-0.50","BGI":-6.72,"deviation":"6.22","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653109148000,"dateString":"2022-05-21T04:59:08.000Z","isValid":true,"sgv":129,"direction":"Flat","type":"sgv","_id":"628871c1363e6c0004f710d3","glucose":129,"avgDelta":"1.25","BGI":-6.34,"deviation":"7.59"},{"device":"AndroidAPS-DexcomG6","date":1653109448000,"dateString":"2022-05-21T05:04:08.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","_id":"628872ef363e6c0004f710d6","glucose":125,"avgDelta":"0.50","BGI":-6.08,"deviation":"6.58"},{"device":"AndroidAPS-DexcomG6","date":1653109748000,"dateString":"2022-05-21T05:09:08.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6288741c363e6c0004f710d9","glucose":117,"avgDelta":"-2.75","BGI":-5.73,"deviation":"2.98"},{"device":"AndroidAPS-DexcomG6","date":1653110049000,"dateString":"2022-05-21T05:14:09.000Z","isValid":true,"sgv":109,"direction":"FortyFiveDown","type":"sgv","_id":"62887549363e6c0004f710dc","glucose":109,"avgDelta":"-5.25","BGI":-5.34,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653110348000,"dateString":"2022-05-21T05:19:08.000Z","isValid":true,"sgv":102,"direction":"FortyFiveDown","type":"sgv","_id":"62887677363e6c0004f710de","glucose":102,"avgDelta":"-6.75","BGI":-4.91,"deviation":"-1.84"},{"device":"AndroidAPS-DexcomG6","date":1653176650000,"dateString":"2022-05-21T23:44:10.000Z","isValid":true,"sgv":139,"direction":"Flat","type":"sgv","_id":"6289797071a363000480abc7","glucose":139,"avgDelta":"4.00","BGI":-2.59,"deviation":"6.59","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653176950000,"dateString":"2022-05-21T23:49:10.000Z","isValid":true,"sgv":143,"direction":"FortyFiveUp","type":"sgv","_id":"62897a8771a363000480abca","glucose":143,"avgDelta":"4.75","BGI":-2.63,"deviation":"7.38"},{"device":"AndroidAPS-DexcomG6","date":1653177250000,"dateString":"2022-05-21T23:54:10.000Z","isValid":true,"sgv":146,"direction":"Flat","type":"sgv","_id":"62897bc89d6f1800047cd0c9","glucose":146,"avgDelta":"4.75","BGI":-3.23,"deviation":"7.98"},{"device":"AndroidAPS-DexcomG6","date":1653177550000,"dateString":"2022-05-21T23:59:10.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"62897cde9d6f1800047cd0cc","glucose":147,"avgDelta":"3.75","BGI":-3.79,"deviation":"7.54"},{"device":"AndroidAPS-DexcomG6","date":1653177850000,"dateString":"2022-05-22T00:04:10.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62897e0c9d6f1800047cd0d0","glucose":149,"avgDelta":"2.50","BGI":-4.22,"deviation":"6.72"},{"device":"AndroidAPS-DexcomG6","date":1653178149000,"dateString":"2022-05-22T00:09:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62897f3b9d6f1800047cd0d3","glucose":149,"avgDelta":"1.50","BGI":-4.48,"deviation":"5.98"},{"device":"AndroidAPS-DexcomG6","date":1653178449000,"dateString":"2022-05-22T00:14:09.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"6289806a9d6f1800047cd0d6","glucose":147,"avgDelta":"0.25","BGI":-4.61,"deviation":"4.86"},{"device":"AndroidAPS-DexcomG6","date":1653178750000,"dateString":"2022-05-22T00:19:10.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"628981999d6f1800047cd0d8","glucose":144,"avgDelta":"-0.75","BGI":-4.57,"deviation":"3.82"},{"device":"AndroidAPS-DexcomG6","date":1653179050000,"dateString":"2022-05-22T00:24:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628982c89d6f1800047cd0db","glucose":142,"avgDelta":"-1.75","BGI":-4.48,"deviation":"2.73"},{"device":"AndroidAPS-DexcomG6","date":1653179350000,"dateString":"2022-05-22T00:29:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628983f69d6f1800047cd0dd","glucose":142,"avgDelta":"-1.75","BGI":-4.27,"deviation":"2.52"},{"device":"AndroidAPS-DexcomG6","date":1653179649000,"dateString":"2022-05-22T00:34:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898517da46aa0004d1e0ea","glucose":143,"avgDelta":"-1.00","BGI":-4.01,"deviation":"3.01"},{"device":"AndroidAPS-DexcomG6","date":1653179949000,"dateString":"2022-05-22T00:39:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898645da46aa0004d1e0ee","glucose":143,"avgDelta":"-0.25","BGI":-3.75,"deviation":"3.50"},{"device":"AndroidAPS-DexcomG6","date":1653180250000,"dateString":"2022-05-22T00:44:10.000Z","isValid":true,"sgv":135,"direction":"Flat","type":"sgv","_id":"62898774da46aa0004d1e0f1","glucose":135,"avgDelta":"-1.75","BGI":-3.49,"deviation":"1.74"},{"device":"AndroidAPS-DexcomG6","date":1653180549000,"dateString":"2022-05-22T00:49:09.000Z","isValid":true,"sgv":121,"direction":"FortyFiveDown","type":"sgv","_id":"628988a3da46aa0004d1e0f5","glucose":121,"avgDelta":"-5.25","BGI":-3.32,"deviation":"-1.93"}]} diff --git a/app/src/test/res/autotune/test1/autotune.2022-06-17-212314.log b/app/src/test/res/autotune/test1/autotune.2022-06-17-212314.log new file mode 100644 index 0000000000..8d7e7f3c4e --- /dev/null +++ b/app/src/test/res/autotune/test1/autotune.2022-06-17-212314.log @@ -0,0 +1,425 @@ +Autotune disk usage: +388K . +Overall disk used/avail: +Filesystem Size Used Avail Use% Mounted on +rootfs 930G 434G 497G 47% / +Grabbing AAPS treatments.json and entries/sgv.json for date range... +oref0-autotune-prep ns-treatments.2022-05-21.json profile.json ns-entries.2022-05-21.json profile.pump.json > autotune.2022-05-21.json +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -16.9 IOB: 5.249 Activity: 0.0391 at 04:24:08 dev: 26.10 avgDelta: 9.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -18.9 IOB: 5.292 Activity: 0.0438 at 04:29:08 dev: 27.88 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -20.3 IOB: 4.964 Activity: 0.047 at 04:34:09 dev: 24.01 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.1 IOB: 4.674 Activity: 0.0489 at 04:39:08 dev: 17.83 avgDelta: -3.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.5 IOB: 4.377 Activity: 0.0498 at 04:44:08 dev: 11.21 avgDelta: -10.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.5 IOB: 4.077 Activity: 0.0498 at 04:49:08 dev: 7.96 avgDelta: -13.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.2 IOB: 3.73 Activity: 0.0491 at 04:54:08 dev: 7.16 avgDelta: -14.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -20.5 IOB: 3.389 Activity: 0.0476 at 04:59:08 dev: 6.77 avgDelta: -13.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -19.7 IOB: 3.055 Activity: 0.0457 at 05:04:09 dev: 6.95 avgDelta: -12.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -18.8 IOB: 2.782 Activity: 0.0436 at 05:09:08 dev: 6.54 avgDelta: -12.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -17.7 IOB: 2.47 Activity: 0.0411 at 05:14:08 dev: 5.71 avgDelta: -12.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -16.6 IOB: 2.22 Activity: 0.0386 at 05:19:09 dev: 5.14 avgDelta: -11.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -15.4 IOB: 1.935 Activity: 0.0358 at 05:24:08 dev: 4.93 avgDelta: -10.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -14.3 IOB: 1.711 Activity: 0.0332 at 05:29:08 dev: 6.06 avgDelta: -8.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -13.1 IOB: 1.452 Activity: 0.0304 at 05:34:09 dev: 7.35 avgDelta: -5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -12.1 IOB: 1.927 Activity: 0.028 at 05:39:09 dev: 8.32 avgDelta: -3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -11.6 IOB: 1.84 Activity: 0.027 at 05:44:08 dev: 8.64 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -11.1 IOB: 1.658 Activity: 0.0258 at 05:49:09 dev: 7.12 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -10.6 IOB: 1.482 Activity: 0.0245 at 05:54:08 dev: 5.31 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -9.9 IOB: 1.264 Activity: 0.0229 at 05:59:09 dev: 4.62 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -9.1 IOB: 1.104 Activity: 0.0212 at 06:04:08 dev: 5.14 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.4 IOB: 0.952 Activity: 0.0194 at 06:09:09 dev: 7.36 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.8 IOB: 1.619 Activity: 0.0181 at 06:14:09 dev: 9.30 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.9 IOB: 1.678 Activity: 0.0184 at 06:19:09 dev: 10.68 avgDelta: 2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.1 IOB: 1.775 Activity: 0.0187 at 06:24:08 dev: 9.81 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.2 IOB: 1.581 Activity: 0.019 at 06:29:08 dev: 6.44 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.1 IOB: 1.437 Activity: 0.0188 at 06:34:08 dev: 2.35 avgDelta: -5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.9 IOB: 1.294 Activity: 0.0183 at 06:39:08 dev: -0.36 avgDelta: -8.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.6 IOB: 1.153 Activity: 0.0176 at 06:44:09 dev: 0.09 avgDelta: -7.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.2 IOB: 1.017 Activity: 0.0167 at 06:49:08 dev: 3.20 avgDelta: -4.00 ISF +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -6.7 IOB: 0.887 Activity: 0.0156 at 06:54:08 dev: 6.22 avgDelta: -0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -6.3 IOB: 1.011 Activity: 0.0147 at 06:59:08 dev: 7.59 avgDelta: 1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -6.1 IOB: 0.889 Activity: 0.0141 at 07:04:08 dev: 6.58 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -5.7 IOB: 0.771 Activity: 0.0133 at 07:09:08 dev: 2.98 avgDelta: -2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -5.3 IOB: 0.656 Activity: 0.0124 at 07:14:09 dev: 0.09 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -4.9 IOB: 0.547 Activity: 0.0114 at 07:19:08 dev: -1.84 avgDelta: -6.75 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -4.4 IOB: 0.392 Activity: 0.0103 at 07:24:09 dev: -2.31 avgDelta: -6.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.9 IOB: 0.294 Activity: 0.0091 at 07:29:09 dev: -1.08 avgDelta: -5.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.5 IOB: 0.2 Activity: 0.008 at 07:34:09 dev: 0.45 avgDelta: -3.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.8 IOB: 0.065 Activity: 0.0066 at 07:39:09 dev: 2.34 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.4 IOB: 0.034 Activity: 0.0055 at 07:44:09 dev: 3.37 avgDelta: 1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.1 IOB: 0.549 Activity: 0.0048 at 07:49:08 dev: 3.57 avgDelta: 1.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.3 IOB: 0.674 Activity: 0.0053 at 07:54:09 dev: 3.53 avgDelta: 1.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.5 IOB: 0.597 Activity: 0.0057 at 07:59:09 dev: 2.71 avgDelta: 0.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.5 IOB: 0.468 Activity: 0.0058 at 08:04:09 dev: 1.50 avgDelta: -1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.5 IOB: 0.389 Activity: 0.0057 at 08:09:09 dev: 0.21 avgDelta: -2.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.3 IOB: 0.262 Activity: 0.0053 at 08:14:09 dev: -0.47 avgDelta: -2.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.1 IOB: 0.186 Activity: 0.0048 at 08:19:09 dev: -0.93 avgDelta: -3.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.8 IOB: 0.064 Activity: 0.0041 at 08:24:09 dev: -1.48 avgDelta: -3.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.5 IOB: -0.005 Activity: 0.0034 at 08:29:09 dev: -2.03 avgDelta: -3.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.1 IOB: -0.12 Activity: 0.0026 at 08:34:09 dev: -2.13 avgDelta: -3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -0.8 IOB: -0.181 Activity: 0.0018 at 08:39:09 dev: -2.47 avgDelta: -3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -0.3 IOB: -0.287 Activity: 0.0008 at 08:44:09 dev: -2.41 avgDelta: -2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.0 IOB: -0.34 Activity: 0 at 08:49:09 dev: -2.50 avgDelta: -2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.4 IOB: -0.436 Activity: -0.001 at 08:54:09 dev: -2.68 avgDelta: -2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.8 IOB: -0.48 Activity: -0.0018 at 08:59:09 dev: -2.28 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.1 IOB: -0.519 Activity: -0.0026 at 09:04:09 dev: -1.12 avgDelta: 0.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.5 IOB: -0.554 Activity: -0.0034 at 09:09:09 dev: 0.00 avgDelta: 1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.8 IOB: -0.585 Activity: -0.0041 at 09:14:09 dev: 0.00 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.1 IOB: -0.662 Activity: -0.0049 at 09:19:09 dev: 0.39 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.4 IOB: -0.687 Activity: -0.0055 at 09:24:08 dev: -0.37 avgDelta: 2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.6 IOB: -0.708 Activity: -0.0061 at 09:29:09 dev: -0.13 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.8 IOB: -0.726 Activity: -0.0066 at 09:34:09 dev: 0.41 avgDelta: 3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 3.1 IOB: -0.351 Activity: -0.0071 at 09:39:08 dev: 1.19 avgDelta: 4.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.8 IOB: -0.218 Activity: -0.0064 at 09:44:09 dev: 2.99 avgDelta: 5.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.4 IOB: -0.088 Activity: -0.0055 at 09:49:09 dev: 4.63 avgDelta: 7.00 basal +CRInitialIOB: 13.594 CRInitialBG: 123 CRInitialCarbTime: 2022-05-21T07:54:09.000Z +start carb absorption +1 mealCOB: 69.4 mealCarbs: 70 basalBGI: 6.7 BGI: -1.0 IOB: 13.594 Activity: 0.0023 at 09:54:09 dev: 8.74 avgDelta: 7.75 csf +1 mealCOB: 67.9 mealCarbs: 70 basalBGI: 6.7 BGI: -14.3 IOB: 13.552 Activity: 0.0331 at 09:59:09 dev: 23.02 avgDelta: 8.75 csf +1 mealCOB: 65.6 mealCarbs: 70 basalBGI: 6.7 BGI: -24.7 IOB: 13.224 Activity: 0.0573 at 10:04:09 dev: 33.70 avgDelta: 9.00 csf +1 mealCOB: 62.9 mealCarbs: 70 basalBGI: 6.7 BGI: -32.8 IOB: 12.838 Activity: 0.076 at 10:09:08 dev: 40.76 avgDelta: 8.00 csf +1 mealCOB: 59.9 mealCarbs: 70 basalBGI: 6.7 BGI: -38.8 IOB: 12.322 Activity: 0.09 at 10:14:09 dev: 45.04 avgDelta: 6.25 csf +1 mealCOB: 56.8 mealCarbs: 70 basalBGI: 6.7 BGI: -43.1 IOB: 11.794 Activity: 0.1001 at 10:19:09 dev: 46.89 avgDelta: 3.75 csf +1 mealCOB: 53.6 mealCarbs: 70 basalBGI: 6.7 BGI: -46.0 IOB: 11.177 Activity: 0.1068 at 10:24:09 dev: 47.03 avgDelta: 1.00 csf +1 mealCOB: 50.6 mealCarbs: 70 basalBGI: 6.7 BGI: -47.8 IOB: 10.58 Activity: 0.111 at 10:29:09 dev: 45.84 avgDelta: -2.00 csf +1 mealCOB: 47.7 mealCarbs: 70 basalBGI: 6.7 BGI: -48.7 IOB: 9.919 Activity: 0.1129 at 10:34:09 dev: 43.66 avgDelta: -5.00 csf +1 mealCOB: 44.9 mealCarbs: 70 basalBGI: 6.7 BGI: -48.7 IOB: 9.254 Activity: 0.1129 at 10:39:09 dev: 41.41 avgDelta: -7.25 csf +1 mealCOB: 42.3 mealCarbs: 70 basalBGI: 6.7 BGI: -48.0 IOB: 8.643 Activity: 0.1114 at 10:44:09 dev: 39.51 avgDelta: -8.50 csf +1 mealCOB: 39.6 mealCarbs: 70 basalBGI: 6.7 BGI: -46.9 IOB: 7.992 Activity: 0.1088 at 10:49:09 dev: 39.39 avgDelta: -7.50 csf +1 mealCOB: 37.0 mealCarbs: 70 basalBGI: 6.7 BGI: -45.4 IOB: 7.406 Activity: 0.1053 at 10:54:08 dev: 40.13 avgDelta: -5.25 csf +1 mealCOB: 34.2 mealCarbs: 70 basalBGI: 6.7 BGI: -43.6 IOB: 7.111 Activity: 0.1012 at 10:59:09 dev: 41.37 avgDelta: -2.25 csf +1 mealCOB: 31.4 mealCarbs: 70 basalBGI: 6.5 BGI: -41.9 IOB: 6.515 Activity: 0.0971 at 11:04:09 dev: 42.35 avgDelta: 0.50 csf +1 mealCOB: 28.5 mealCarbs: 70 basalBGI: 6.5 BGI: -40.0 IOB: 5.99 Activity: 0.0927 at 11:09:09 dev: 42.70 avgDelta: 2.75 csf +1 mealCOB: 25.7 mealCarbs: 70 basalBGI: 6.5 BGI: -37.8 IOB: 5.439 Activity: 0.0878 at 11:14:08 dev: 42.09 avgDelta: 4.25 csf +1 mealCOB: 23.1 mealCarbs: 70 basalBGI: 6.5 BGI: -35.7 IOB: 4.962 Activity: 0.0828 at 11:19:09 dev: 39.69 avgDelta: 4.00 csf +1 mealCOB: 20.7 mealCarbs: 70 basalBGI: 6.5 BGI: -33.4 IOB: 4.462 Activity: 0.0775 at 11:24:08 dev: 35.65 avgDelta: 2.25 csf +1 mealCOB: 18.6 mealCarbs: 70 basalBGI: 6.5 BGI: -31.2 IOB: 4.036 Activity: 0.0724 at 11:29:09 dev: 31.45 avgDelta: 0.25 csf +1 mealCOB: 16.8 mealCarbs: 70 basalBGI: 6.5 BGI: -29.0 IOB: 3.638 Activity: 0.0672 at 11:34:09 dev: 27.46 avgDelta: -1.50 csf +1 mealCOB: 15.1 mealCarbs: 70 basalBGI: 6.5 BGI: -26.8 IOB: 3.214 Activity: 0.0621 at 11:39:08 dev: 25.02 avgDelta: -1.75 csf +1 mealCOB: 13.5 mealCarbs: 70 basalBGI: 6.5 BGI: -24.6 IOB: 2.866 Activity: 0.0571 at 11:44:09 dev: 23.61 avgDelta: -1.00 csf +1 mealCOB: 12.1 mealCarbs: 70 basalBGI: 6.5 BGI: -22.5 IOB: 2.494 Activity: 0.0522 at 11:49:09 dev: 21.75 avgDelta: -0.75 csf +1 mealCOB: 10.7 mealCarbs: 70 basalBGI: 6.5 BGI: -20.5 IOB: 2.193 Activity: 0.0476 at 11:54:09 dev: 20.52 avgDelta: 0.00 csf +1 mealCOB: 9.5 mealCarbs: 70 basalBGI: 6.5 BGI: -18.6 IOB: 1.867 Activity: 0.0431 at 11:59:09 dev: 18.83 avgDelta: 0.25 csf +1 mealCOB: 8.3 mealCarbs: 70 basalBGI: 6.3 BGI: -16.7 IOB: 1.563 Activity: 0.0388 at 12:04:09 dev: 16.97 avgDelta: 0.25 csf +1 mealCOB: 7.4 mealCarbs: 70 basalBGI: 6.3 BGI: -15.0 IOB: 1.329 Activity: 0.0347 at 12:09:08 dev: 14.46 avgDelta: -0.50 csf +1 mealCOB: 6.6 mealCarbs: 70 basalBGI: 6.3 BGI: -13.3 IOB: 1.115 Activity: 0.0309 at 12:14:09 dev: 11.32 avgDelta: -2.00 csf +1 mealCOB: 6.1 mealCarbs: 70 basalBGI: 6.3 BGI: -11.7 IOB: 0.87 Activity: 0.0272 at 12:19:09 dev: 7.97 avgDelta: -3.75 csf +1 mealCOB: 5.5 mealCarbs: 70 basalBGI: 6.3 BGI: -10.3 IOB: 0.692 Activity: 0.0239 at 12:24:09 dev: 5.80 avgDelta: -4.50 csf +1 mealCOB: 5.0 mealCarbs: 70 basalBGI: 6.3 BGI: -8.9 IOB: 0.482 Activity: 0.0206 at 12:29:08 dev: 4.88 avgDelta: -4.00 csf +0 mealCOB: 4.5 mealCarbs: 70 basalBGI: 6.3 BGI: -7.6 IOB: 0.287 Activity: 0.0176 at 12:34:09 dev: 4.09 avgDelta: -3.50 csf +0 mealCOB: 3.9 mealCarbs: 70 basalBGI: 6.3 BGI: -6.4 IOB: 0.156 Activity: 0.0148 at 12:39:08 dev: 3.88 avgDelta: -2.50 csf +0 mealCOB: 3.4 mealCarbs: 70 basalBGI: 6.3 BGI: -5.3 IOB: 0.038 Activity: 0.0122 at 12:44:08 dev: 3.26 avgDelta: -2.00 csf +0 mealCOB: 2.9 mealCarbs: 70 basalBGI: 6.3 BGI: -4.3 IOB: -0.067 Activity: 0.0099 at 12:49:09 dev: 2.27 avgDelta: -2.00 csf +0 mealCOB: 2.3 mealCarbs: 70 basalBGI: 6.3 BGI: -3.4 IOB: -0.161 Activity: 0.0078 at 12:54:08 dev: 1.36 avgDelta: -2.00 csf +0 mealCOB: 1.8 mealCarbs: 70 basalBGI: 6.3 BGI: -2.6 IOB: -0.195 Activity: 0.006 at 12:59:08 dev: 0.09 avgDelta: -2.50 csf +0 mealCOB: 1.3 mealCarbs: 70 basalBGI: 6.3 BGI: -1.9 IOB: -0.271 Activity: 0.0044 at 13:04:09 dev: -1.10 avgDelta: -3.00 csf +0 mealCOB: 0.7 mealCarbs: 70 basalBGI: 6.3 BGI: -1.3 IOB: -0.339 Activity: 0.0029 at 13:09:09 dev: -1.00 avgDelta: -2.25 csf +0 mealCOB: 0.2 mealCarbs: 70 basalBGI: 6.3 BGI: -0.7 IOB: -0.4 Activity: 0.0015 at 13:14:09 dev: 0.90 avgDelta: 0.25 csf +CREndIOB: -0.155 CREndBG: 98 CREndTime: 2022-05-21T11:19:08.000Z +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -0.3 IOB: -0.155 Activity: 0.0007 at 13:19:08 dev: 3.80 avgDelta: 3.50 csf +CRInitialIOB: 8.11 CRInitialBG: 109 CRInitialCarbTime: 2022-05-21T11:24:09.000Z +1 mealCOB: 49.4 mealCarbs: 50 basalBGI: 6.3 BGI: -1.9 IOB: 8.11 Activity: 0.0045 at 13:24:09 dev: 8.94 avgDelta: 7.00 csf +1 mealCOB: 48.2 mealCarbs: 50 basalBGI: 6.3 BGI: -9.6 IOB: 7.992 Activity: 0.0222 at 13:29:09 dev: 18.57 avgDelta: 9.00 csf +1 mealCOB: 46.6 mealCarbs: 50 basalBGI: 6.3 BGI: -15.5 IOB: 7.745 Activity: 0.0359 at 13:34:09 dev: 23.47 avgDelta: 8.00 csf +1 mealCOB: 45.0 mealCarbs: 50 basalBGI: 6.3 BGI: -20.0 IOB: 7.488 Activity: 0.0465 at 13:39:09 dev: 24.04 avgDelta: 4.00 csf +1 mealCOB: 43.6 mealCarbs: 50 basalBGI: 6.3 BGI: -23.3 IOB: 7.136 Activity: 0.0541 at 13:44:09 dev: 21.32 avgDelta: -2.00 csf +1 mealCOB: 42.4 mealCarbs: 50 basalBGI: 6.3 BGI: -25.7 IOB: 6.8 Activity: 0.0596 at 13:49:09 dev: 17.94 avgDelta: -7.75 csf +0 mealCOB: 41.8 mealCarbs: 50 basalBGI: 6.3 BGI: -27.3 IOB: 6.441 Activity: 0.0633 at 13:54:09 dev: 0.00 avgDelta: -10.50 csf +0 mealCOB: 41.3 mealCarbs: 50 basalBGI: 6.3 BGI: -28.1 IOB: 6.022 Activity: 0.0651 at 13:59:09 dev: 0.00 avgDelta: -9.50 csf +0 mealCOB: 40.8 mealCarbs: 50 basalBGI: 6.2 BGI: -28.3 IOB: 5.644 Activity: 0.0657 at 14:04:09 dev: 0.00 avgDelta: -6.00 csf +0 mealCOB: 40.2 mealCarbs: 50 basalBGI: 6.2 BGI: -28.1 IOB: 5.216 Activity: 0.0653 at 14:09:09 dev: 0.00 avgDelta: -2.25 csf +0 mealCOB: 69.7 mealCarbs: 80 basalBGI: 6.2 BGI: -27.8 IOB: 4.962 Activity: 0.0644 at 14:14:09 dev: 0.00 avgDelta: 0.00 csf +0 mealCOB: 69.2 mealCarbs: 80 basalBGI: 6.2 BGI: -27.0 IOB: 4.544 Activity: 0.0627 at 14:19:09 dev: 0.00 avgDelta: 0.50 csf +0 mealCOB: 68.6 mealCarbs: 80 basalBGI: 6.2 BGI: -26.1 IOB: 4.185 Activity: 0.0606 at 14:24:09 dev: 0.00 avgDelta: -0.25 csf +0 mealCOB: 68.1 mealCarbs: 80 basalBGI: 6.2 BGI: -25.0 IOB: 3.839 Activity: 0.058 at 14:29:09 dev: 0.00 avgDelta: -1.25 csf +0 mealCOB: 67.6 mealCarbs: 80 basalBGI: 6.2 BGI: -23.7 IOB: 3.456 Activity: 0.055 at 14:34:09 dev: 0.00 avgDelta: -2.25 csf +0 mealCOB: 67.0 mealCarbs: 80 basalBGI: 6.2 BGI: -22.4 IOB: 3.139 Activity: 0.0519 at 14:39:09 dev: 0.00 avgDelta: -2.50 csf +0 mealCOB: 66.5 mealCarbs: 80 basalBGI: 6.2 BGI: -20.9 IOB: 2.788 Activity: 0.0486 at 14:44:09 dev: 0.00 avgDelta: -1.75 csf +0 mealCOB: 66.0 mealCarbs: 80 basalBGI: 6.2 BGI: -19.5 IOB: 2.503 Activity: 0.0453 at 14:49:10 dev: 0.00 avgDelta: -0.25 csf +0 mealCOB: 65.4 mealCarbs: 80 basalBGI: 6.2 BGI: -18.0 IOB: 2.186 Activity: 0.0418 at 14:54:09 dev: 0.00 avgDelta: 2.25 csf +1 mealCOB: 64.0 mealCarbs: 80 basalBGI: 6.2 BGI: -17.5 IOB: 3.17 Activity: 0.0407 at 14:59:09 dev: 22.04 avgDelta: 4.50 csf +1 mealCOB: 62.4 mealCarbs: 80 basalBGI: 6.1 BGI: -17.8 IOB: 3.956 Activity: 0.0413 at 15:04:09 dev: 23.80 avgDelta: 6.00 csf +1 mealCOB: 60.8 mealCarbs: 80 basalBGI: 6.1 BGI: -18.1 IOB: 3.648 Activity: 0.042 at 15:09:09 dev: 23.85 avgDelta: 5.75 csf +1 mealCOB: 59.3 mealCarbs: 80 basalBGI: 6.1 BGI: -18.5 IOB: 4.126 Activity: 0.043 at 15:14:09 dev: 22.28 avgDelta: 3.75 csf +1 mealCOB: 57.9 mealCarbs: 80 basalBGI: 6.1 BGI: -18.8 IOB: 3.81 Activity: 0.0437 at 15:19:10 dev: 20.58 avgDelta: 1.75 csf +1 mealCOB: 56.7 mealCarbs: 80 basalBGI: 6.1 BGI: -18.8 IOB: 3.541 Activity: 0.0437 at 15:24:10 dev: 19.08 avgDelta: 0.25 csf +1 mealCOB: 55.4 mealCarbs: 80 basalBGI: 6.1 BGI: -18.6 IOB: 3.272 Activity: 0.0431 at 15:29:09 dev: 19.33 avgDelta: 0.75 csf +1 mealCOB: 54.0 mealCarbs: 80 basalBGI: 6.1 BGI: -18.4 IOB: 3.588 Activity: 0.0428 at 15:34:09 dev: 21.20 avgDelta: 2.75 csf +1 mealCOB: 52.4 mealCarbs: 80 basalBGI: 6.1 BGI: -18.6 IOB: 3.875 Activity: 0.0431 at 15:39:09 dev: 23.83 avgDelta: 5.25 csf +1 mealCOB: 50.7 mealCarbs: 80 basalBGI: 6.1 BGI: -18.7 IOB: 3.608 Activity: 0.0434 at 15:44:08 dev: 25.46 avgDelta: 6.75 csf +1 mealCOB: 48.9 mealCarbs: 80 basalBGI: 6.1 BGI: -19.1 IOB: 4.271 Activity: 0.0442 at 15:49:09 dev: 26.05 avgDelta: 7.00 csf +1 mealCOB: 47.2 mealCarbs: 80 basalBGI: 6.1 BGI: -19.5 IOB: 3.996 Activity: 0.0452 at 15:54:09 dev: 25.98 avgDelta: 6.50 csf +1 mealCOB: 45.5 mealCarbs: 80 basalBGI: 6.1 BGI: -19.9 IOB: 4.298 Activity: 0.0462 at 15:59:08 dev: 26.16 avgDelta: 6.25 csf +1 mealCOB: 43.7 mealCarbs: 80 basalBGI: 5.4 BGI: -20.2 IOB: 4.015 Activity: 0.0468 at 16:04:09 dev: 26.67 avgDelta: 6.50 csf +1 mealCOB: 41.8 mealCarbs: 80 basalBGI: 5.4 BGI: -20.7 IOB: 4.538 Activity: 0.0481 at 16:09:09 dev: 27.98 avgDelta: 7.25 csf +1 mealCOB: 39.9 mealCarbs: 80 basalBGI: 5.4 BGI: -21.1 IOB: 4.245 Activity: 0.0489 at 16:14:09 dev: 28.33 avgDelta: 7.25 csf +1 mealCOB: 38.0 mealCarbs: 80 basalBGI: 5.4 BGI: -21.6 IOB: 4.729 Activity: 0.05 at 16:19:09 dev: 28.30 avgDelta: 6.75 csf +1 mealCOB: 36.1 mealCarbs: 80 basalBGI: 5.4 BGI: -21.9 IOB: 4.426 Activity: 0.0508 at 16:24:09 dev: 28.64 avgDelta: 6.75 csf +1 mealCOB: 34.2 mealCarbs: 80 basalBGI: 5.4 BGI: -22.0 IOB: 4.353 Activity: 0.051 at 16:29:09 dev: 28.73 avgDelta: 6.75 csf +1 mealCOB: 32.3 mealCarbs: 80 basalBGI: 5.4 BGI: -21.9 IOB: 4.049 Activity: 0.0507 at 16:34:10 dev: 28.10 avgDelta: 6.25 csf +1 mealCOB: 30.6 mealCarbs: 80 basalBGI: 5.4 BGI: -21.5 IOB: 3.747 Activity: 0.0498 at 16:39:09 dev: 25.96 avgDelta: 4.50 csf +1 mealCOB: 29.1 mealCarbs: 80 basalBGI: 5.4 BGI: -20.8 IOB: 3.402 Activity: 0.0483 at 16:44:09 dev: 22.32 avgDelta: 1.50 csf +1 mealCOB: 27.8 mealCarbs: 80 basalBGI: 5.4 BGI: -20.0 IOB: 3.115 Activity: 0.0464 at 16:49:10 dev: 19.00 avgDelta: -1.00 csf +1 mealCOB: 26.7 mealCarbs: 80 basalBGI: 5.4 BGI: -19.0 IOB: 2.788 Activity: 0.0441 at 16:54:09 dev: 17.01 avgDelta: -2.00 csf +1 mealCOB: 25.6 mealCarbs: 80 basalBGI: 5.4 BGI: -18.0 IOB: 2.524 Activity: 0.0417 at 16:59:09 dev: 15.97 avgDelta: -2.00 csf +1 mealCOB: 24.6 mealCarbs: 80 basalBGI: 4.7 BGI: -16.9 IOB: 2.271 Activity: 0.0391 at 17:04:09 dev: 16.10 avgDelta: -0.75 csf +1 mealCOB: 23.5 mealCarbs: 80 basalBGI: 4.7 BGI: -15.7 IOB: 2.033 Activity: 0.0365 at 17:09:10 dev: 15.48 avgDelta: -0.25 csf +1 mealCOB: 22.6 mealCarbs: 80 basalBGI: 4.7 BGI: -14.6 IOB: 1.807 Activity: 0.0338 at 17:14:10 dev: 14.57 avgDelta: 0.00 csf +1 mealCOB: 21.6 mealCarbs: 80 basalBGI: 4.7 BGI: -13.4 IOB: 1.594 Activity: 0.0312 at 17:19:09 dev: 13.70 avgDelta: 0.25 csf +1 mealCOB: 20.8 mealCarbs: 80 basalBGI: 4.7 BGI: -12.3 IOB: 1.395 Activity: 0.0286 at 17:24:10 dev: 12.58 avgDelta: 0.25 csf +1 mealCOB: 20.0 mealCarbs: 80 basalBGI: 4.7 BGI: -11.3 IOB: 1.258 Activity: 0.0262 at 17:29:09 dev: 11.54 avgDelta: 0.25 csf +1 mealCOB: 19.4 mealCarbs: 80 basalBGI: 4.7 BGI: -10.2 IOB: 1.034 Activity: 0.0236 at 17:34:09 dev: 10.17 avgDelta: 0.00 csf +1 mealCOB: 18.8 mealCarbs: 80 basalBGI: 4.7 BGI: -9.3 IOB: 0.971 Activity: 0.0215 at 17:39:09 dev: 9.02 avgDelta: -0.25 csf +1 mealCOB: 18.2 mealCarbs: 80 basalBGI: 4.7 BGI: -8.5 IOB: 1.008 Activity: 0.0197 at 17:44:09 dev: 7.74 avgDelta: -0.75 csf +1 mealCOB: 17.7 mealCarbs: 80 basalBGI: 4.7 BGI: -7.9 IOB: 0.963 Activity: 0.0183 at 17:49:09 dev: 6.89 avgDelta: -1.00 csf +1 mealCOB: 17.2 mealCarbs: 80 basalBGI: 4.7 BGI: -7.4 IOB: 1.046 Activity: 0.0171 at 17:54:10 dev: 7.12 avgDelta: -0.25 csf +1 mealCOB: 16.6 mealCarbs: 80 basalBGI: 4.7 BGI: -6.9 IOB: 0.912 Activity: 0.0161 at 17:59:09 dev: 6.94 avgDelta: 0.00 csf +1 mealCOB: 16.1 mealCarbs: 80 basalBGI: 4.7 BGI: -6.7 IOB: 1.254 Activity: 0.0156 at 18:04:09 dev: 6.97 avgDelta: 0.25 csf +1 mealCOB: 15.6 mealCarbs: 80 basalBGI: 4.7 BGI: -6.6 IOB: 1.176 Activity: 0.0154 at 18:09:09 dev: 6.64 avgDelta: 0.00 csf +1 mealCOB: 15.0 mealCarbs: 80 basalBGI: 4.7 BGI: -6.4 IOB: 1.051 Activity: 0.0149 at 18:14:10 dev: 5.67 avgDelta: -0.75 csf +1 mealCOB: 14.5 mealCarbs: 80 basalBGI: 4.7 BGI: -6.1 IOB: 0.928 Activity: 0.0142 at 18:19:09 dev: 5.12 avgDelta: -1.00 csf +1 mealCOB: 14.0 mealCarbs: 80 basalBGI: 4.7 BGI: -6.0 IOB: 1.008 Activity: 0.0138 at 18:24:09 dev: 4.45 avgDelta: -1.50 csf +1 mealCOB: 13.4 mealCarbs: 80 basalBGI: 4.7 BGI: -5.7 IOB: 0.89 Activity: 0.0133 at 18:29:09 dev: 3.48 avgDelta: -2.25 csf +1 mealCOB: 12.9 mealCarbs: 80 basalBGI: 4.7 BGI: -5.5 IOB: 0.775 Activity: 0.0127 at 18:34:09 dev: 2.47 avgDelta: -3.00 csf +1 mealCOB: 12.4 mealCarbs: 80 basalBGI: 4.7 BGI: -5.1 IOB: 0.664 Activity: 0.0118 at 18:39:09 dev: 1.59 avgDelta: -3.50 csf +1 mealCOB: 11.8 mealCarbs: 80 basalBGI: 4.7 BGI: -4.7 IOB: 0.606 Activity: 0.011 at 18:44:09 dev: 1.74 avgDelta: -3.00 csf +1 mealCOB: 11.3 mealCarbs: 80 basalBGI: 4.7 BGI: -4.5 IOB: 0.703 Activity: 0.0105 at 18:49:09 dev: 3.03 avgDelta: -1.50 csf +1 mealCOB: 10.8 mealCarbs: 80 basalBGI: 4.7 BGI: -4.3 IOB: 0.702 Activity: 0.0101 at 18:54:09 dev: 4.10 avgDelta: -0.25 csf +1 mealCOB: 10.2 mealCarbs: 80 basalBGI: 4.7 BGI: -4.3 IOB: 0.902 Activity: 0.0101 at 18:59:09 dev: 4.35 avgDelta: 0.00 csf +1 mealCOB: 9.7 mealCarbs: 80 basalBGI: 5.3 BGI: -4.3 IOB: 0.801 Activity: 0.0101 at 19:04:09 dev: 2.10 avgDelta: -2.25 csf +0 mealCOB: 9.2 mealCarbs: 80 basalBGI: 5.3 BGI: -4.2 IOB: 0.701 Activity: 0.0098 at 19:09:09 dev: -1.03 avgDelta: -5.25 csf +0 mealCOB: 8.6 mealCarbs: 80 basalBGI: 5.3 BGI: -4.0 IOB: 0.603 Activity: 0.0094 at 19:14:09 dev: -4.95 avgDelta: -9.00 csf +0 mealCOB: 8.1 mealCarbs: 80 basalBGI: 5.3 BGI: -3.8 IOB: 0.508 Activity: 0.0088 at 19:19:09 dev: -8.21 avgDelta: -12.00 csf +0 mealCOB: 7.6 mealCarbs: 80 basalBGI: 5.3 BGI: -3.5 IOB: 0.415 Activity: 0.0081 at 19:24:09 dev: -9.76 avgDelta: -13.25 csf +0 mealCOB: 7.0 mealCarbs: 80 basalBGI: 5.3 BGI: -3.2 IOB: 0.327 Activity: 0.0074 at 19:29:09 dev: -8.06 avgDelta: -11.25 csf +0 mealCOB: 6.5 mealCarbs: 80 basalBGI: 5.3 BGI: -2.8 IOB: 0.242 Activity: 0.0066 at 19:34:09 dev: -3.91 avgDelta: -6.75 csf +0 mealCOB: 6.0 mealCarbs: 80 basalBGI: 5.3 BGI: -2.5 IOB: 0.161 Activity: 0.0058 at 19:39:09 dev: 2.00 avgDelta: -0.50 csf +0 mealCOB: 5.4 mealCarbs: 80 basalBGI: 5.3 BGI: -2.2 IOB: 0.134 Activity: 0.005 at 19:44:09 dev: 7.16 avgDelta: 5.00 csf +1 mealCOB: 4.8 mealCarbs: 80 basalBGI: 5.3 BGI: -2.1 IOB: 0.4 Activity: 0.0048 at 19:49:09 dev: 9.57 avgDelta: 7.50 csf +1 mealCOB: 4.2 mealCarbs: 80 basalBGI: 5.3 BGI: -2.1 IOB: 0.475 Activity: 0.0049 at 19:54:09 dev: 8.86 avgDelta: 6.75 csf +1 mealCOB: 3.7 mealCarbs: 80 basalBGI: 5.3 BGI: -2.2 IOB: 0.401 Activity: 0.005 at 19:59:10 dev: 5.91 avgDelta: 3.75 csf +0 mealCOB: 3.1 mealCarbs: 80 basalBGI: 6.1 BGI: -2.1 IOB: 0.327 Activity: 0.0048 at 20:04:10 dev: 2.82 avgDelta: 0.75 csf +0 mealCOB: 2.6 mealCarbs: 80 basalBGI: 6.1 BGI: -1.9 IOB: 0.203 Activity: 0.0044 at 20:09:09 dev: -0.35 avgDelta: -2.25 csf +0 mealCOB: 2.1 mealCarbs: 80 basalBGI: 6.1 BGI: -1.7 IOB: 0.132 Activity: 0.004 at 20:14:09 dev: -1.78 avgDelta: -3.50 csf +0 mealCOB: 1.5 mealCarbs: 80 basalBGI: 6.1 BGI: -1.5 IOB: 0.064 Activity: 0.0034 at 20:19:09 dev: -2.28 avgDelta: -3.75 csf +0 mealCOB: 1.0 mealCarbs: 80 basalBGI: 6.1 BGI: -1.2 IOB: -0.002 Activity: 0.0028 at 20:24:09 dev: -1.54 avgDelta: -2.75 csf +0 mealCOB: 0.5 mealCarbs: 80 basalBGI: 6.1 BGI: -0.9 IOB: -0.064 Activity: 0.0022 at 20:29:10 dev: -1.05 avgDelta: -2.00 csf +CREndIOB: -0.073 CREndBG: 104 CREndTime: 2022-05-21T18:34:09.000Z +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.7 IOB: -0.073 Activity: 0.0016 at 20:34:09 dev: -0.81 avgDelta: -1.50 csf +end carb absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.5 IOB: -0.08 Activity: 0.0011 at 20:39:09 dev: -1.03 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.3 IOB: -0.085 Activity: 0.0007 at 20:44:09 dev: -1.45 avgDelta: -1.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.2 IOB: -0.087 Activity: 0.0004 at 20:49:09 dev: -1.33 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.0 IOB: -0.088 Activity: 0.0001 at 20:54:09 dev: -1.21 avgDelta: -1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 0.0 IOB: -0.088 Activity: -0.0001 at 20:59:09 dev: -0.79 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.2 IOB: -0.137 Activity: -0.0004 at 21:04:09 dev: -0.92 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.3 IOB: -0.184 Activity: -0.0007 at 21:09:10 dev: -0.80 avgDelta: -0.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.4 IOB: -0.18 Activity: -0.001 at 21:14:09 dev: -0.68 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.5 IOB: -0.175 Activity: -0.0012 at 21:19:09 dev: -1.02 avgDelta: -0.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.6 IOB: -0.168 Activity: -0.0014 at 21:24:09 dev: -1.35 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.7 IOB: -0.211 Activity: -0.0015 at 21:29:10 dev: -1.65 avgDelta: -1.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.7 IOB: -0.203 Activity: -0.0017 at 21:34:09 dev: -1.98 avgDelta: -1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.9 IOB: -0.243 Activity: -0.002 at 21:39:10 dev: -2.36 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.0 IOB: -0.282 Activity: -0.0023 at 21:44:10 dev: -2.49 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.1 IOB: -0.32 Activity: -0.0026 at 21:49:09 dev: -2.62 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.3 IOB: -0.357 Activity: -0.0029 at 21:54:10 dev: -2.25 avgDelta: -1.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.4 IOB: -0.391 Activity: -0.0032 at 21:59:10 dev: -1.38 avgDelta: 0.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.5 IOB: -0.375 Activity: -0.0035 at 22:04:09 dev: -0.01 avgDelta: 1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.6 IOB: -0.357 Activity: -0.0036 at 22:09:09 dev: 1.45 avgDelta: 3.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.5 IOB: -0.149 Activity: -0.0035 at 22:14:09 dev: 3.49 avgDelta: 5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.3 IOB: -0.132 Activity: -0.0031 at 22:19:10 dev: 5.91 avgDelta: 7.25 basal +CRInitialIOB: 9.296 CRInitialBG: 133 CRInitialCarbTime: 2022-05-21T20:24:09.000Z +start carb absorption +1 mealCOB: 48.9 mealCarbs: 50 basalBGI: 6.2 BGI: -6.5 IOB: 9.296 Activity: 0.015 at 22:24:09 dev: 15.96 avgDelta: 9.50 csf +1 mealCOB: 47.3 mealCarbs: 50 basalBGI: 6.2 BGI: -14.3 IOB: 9.123 Activity: 0.0332 at 22:29:10 dev: 25.06 avgDelta: 10.75 csf +1 mealCOB: 45.3 mealCarbs: 50 basalBGI: 6.2 BGI: -20.4 IOB: 8.96 Activity: 0.0474 at 22:34:09 dev: 29.43 avgDelta: 9.00 csf +1 mealCOB: 43.3 mealCarbs: 50 basalBGI: 6.2 BGI: -25.2 IOB: 8.644 Activity: 0.0584 at 22:39:10 dev: 29.92 avgDelta: 4.75 csf +1 mealCOB: 41.5 mealCarbs: 50 basalBGI: 6.2 BGI: -28.6 IOB: 8.282 Activity: 0.0664 at 22:44:10 dev: 27.37 avgDelta: -1.25 csf +1 mealCOB: 39.8 mealCarbs: 50 basalBGI: 6.2 BGI: -30.9 IOB: 7.835 Activity: 0.0718 at 22:49:09 dev: 24.70 avgDelta: -6.25 csf +1 mealCOB: 38.3 mealCarbs: 50 basalBGI: 6.2 BGI: -32.5 IOB: 7.416 Activity: 0.0753 at 22:54:10 dev: 23.70 avgDelta: -8.75 csf +1 mealCOB: 36.6 mealCarbs: 50 basalBGI: 6.2 BGI: -33.3 IOB: 6.984 Activity: 0.0772 at 22:59:09 dev: 24.52 avgDelta: -8.75 csf +1 mealCOB: 34.8 mealCarbs: 50 basalBGI: 6.1 BGI: -33.5 IOB: 6.547 Activity: 0.0776 at 23:04:09 dev: 26.70 avgDelta: -6.75 csf +1 mealCOB: 32.9 mealCarbs: 50 basalBGI: 6.1 BGI: -33.1 IOB: 6.061 Activity: 0.0769 at 23:09:10 dev: 28.39 avgDelta: -4.75 csf +1 mealCOB: 31.0 mealCarbs: 50 basalBGI: 6.1 BGI: -32.5 IOB: 5.68 Activity: 0.0754 at 23:14:10 dev: 29.50 avgDelta: -3.00 csf +1 mealCOB: 29.0 mealCarbs: 50 basalBGI: 6.1 BGI: -31.6 IOB: 5.458 Activity: 0.0734 at 23:19:09 dev: 30.14 avgDelta: -1.50 csf +1 mealCOB: 27.0 mealCarbs: 50 basalBGI: 6.1 BGI: -30.7 IOB: 5.046 Activity: 0.0712 at 23:24:10 dev: 29.94 avgDelta: -0.75 csf +1 mealCOB: 25.0 mealCarbs: 50 basalBGI: 6.1 BGI: -29.7 IOB: 4.925 Activity: 0.069 at 23:29:09 dev: 29.49 avgDelta: -0.25 csf +1 mealCOB: 23.1 mealCarbs: 50 basalBGI: 6.1 BGI: -28.6 IOB: 4.487 Activity: 0.0663 at 23:34:09 dev: 29.08 avgDelta: 0.50 csf +1 mealCOB: 21.2 mealCarbs: 50 basalBGI: 6.1 BGI: -27.3 IOB: 4.113 Activity: 0.0633 at 23:39:10 dev: 28.28 avgDelta: 1.00 csf +1 mealCOB: 19.3 mealCarbs: 50 basalBGI: 6.1 BGI: -25.8 IOB: 3.706 Activity: 0.0599 at 23:44:09 dev: 27.57 avgDelta: 1.75 csf +1 mealCOB: 17.6 mealCarbs: 50 basalBGI: 6.1 BGI: -24.4 IOB: 3.363 Activity: 0.0566 at 23:49:09 dev: 26.64 avgDelta: 2.25 csf +1 mealCOB: 15.9 mealCarbs: 50 basalBGI: 6.1 BGI: -22.8 IOB: 3.039 Activity: 0.053 at 23:54:09 dev: 25.34 avgDelta: 2.50 csf +1 mealCOB: 14.3 mealCarbs: 50 basalBGI: 6.1 BGI: -21.3 IOB: 2.733 Activity: 0.0494 at 23:59:10 dev: 23.79 avgDelta: 2.50 csf +1 mealCOB: 12.8 mealCarbs: 50 basalBGI: 6.9 BGI: -19.7 IOB: 2.395 Activity: 0.0457 at 00:04:10 dev: 22.20 avgDelta: 2.50 csf +1 mealCOB: 11.4 mealCarbs: 50 basalBGI: 6.9 BGI: -18.1 IOB: 2.126 Activity: 0.0421 at 00:09:10 dev: 20.65 avgDelta: 2.50 csf +1 mealCOB: 10.2 mealCarbs: 50 basalBGI: 6.9 BGI: -16.6 IOB: 1.824 Activity: 0.0385 at 00:14:10 dev: 18.59 avgDelta: 2.00 csf +1 mealCOB: 9.0 mealCarbs: 50 basalBGI: 6.9 BGI: -15.1 IOB: 1.64 Activity: 0.0351 at 00:19:09 dev: 17.13 avgDelta: 2.00 csf +1 mealCOB: 8.0 mealCarbs: 50 basalBGI: 6.9 BGI: -13.8 IOB: 1.473 Activity: 0.0319 at 00:24:09 dev: 15.50 avgDelta: 1.75 csf +1 mealCOB: 7.1 mealCarbs: 50 basalBGI: 6.9 BGI: -12.4 IOB: 1.273 Activity: 0.0288 at 00:29:10 dev: 14.16 avgDelta: 1.75 csf +1 mealCOB: 6.2 mealCarbs: 50 basalBGI: 6.9 BGI: -11.2 IOB: 1.136 Activity: 0.026 at 00:34:10 dev: 12.71 avgDelta: 1.50 csf +1 mealCOB: 5.5 mealCarbs: 50 basalBGI: 6.9 BGI: -10.1 IOB: 1.011 Activity: 0.0235 at 00:39:09 dev: 10.13 avgDelta: 0.00 csf +1 mealCOB: 5.0 mealCarbs: 50 basalBGI: 6.9 BGI: -9.1 IOB: 0.852 Activity: 0.021 at 00:44:10 dev: 7.30 avgDelta: -1.75 csf +1 mealCOB: 4.5 mealCarbs: 50 basalBGI: 6.9 BGI: -8.2 IOB: 0.752 Activity: 0.0189 at 00:49:10 dev: 4.65 avgDelta: -3.50 csf +1 mealCOB: 3.9 mealCarbs: 50 basalBGI: 6.9 BGI: -7.3 IOB: 0.662 Activity: 0.0169 at 00:54:10 dev: 3.28 avgDelta: -4.00 csf +1 mealCOB: 3.4 mealCarbs: 50 basalBGI: 6.9 BGI: -6.4 IOB: 0.534 Activity: 0.0149 at 00:59:09 dev: 3.42 avgDelta: -3.00 csf +0 mealCOB: 2.9 mealCarbs: 50 basalBGI: 7.0 BGI: -5.7 IOB: 0.463 Activity: 0.0132 at 01:04:09 dev: 4.69 avgDelta: -1.00 csf +0 mealCOB: 2.3 mealCarbs: 50 basalBGI: 7.0 BGI: -5.0 IOB: 0.352 Activity: 0.0115 at 01:09:10 dev: 5.96 avgDelta: 1.00 csf +0 mealCOB: 1.8 mealCarbs: 50 basalBGI: 7.0 BGI: -4.3 IOB: 0.298 Activity: 0.0101 at 01:14:10 dev: 6.60 avgDelta: 2.25 csf +0 mealCOB: 1.3 mealCarbs: 50 basalBGI: 7.0 BGI: -3.8 IOB: 0.25 Activity: 0.0089 at 01:19:09 dev: 6.84 avgDelta: 3.00 csf +0 mealCOB: 0.7 mealCarbs: 50 basalBGI: 7.0 BGI: -3.4 IOB: 0.329 Activity: 0.0079 at 01:24:10 dev: 6.40 avgDelta: 3.00 csf +0 mealCOB: 0.2 mealCarbs: 50 basalBGI: 7.0 BGI: -3.2 IOB: 0.34 Activity: 0.0074 at 01:29:10 dev: 5.69 avgDelta: 2.50 csf +CREndIOB: 0.304 CREndBG: 127 CREndTime: 2022-05-21T23:34:10.000Z +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.9 IOB: 0.304 Activity: 0.0068 at 01:34:10 dev: 5.43 avgDelta: 2.50 csf +end carb absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.7 IOB: 0.272 Activity: 0.0062 at 01:39:10 dev: 5.67 avgDelta: 3.00 ISF +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.6 IOB: 0.512 Activity: 0.006 at 01:44:10 dev: 6.59 avgDelta: 4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.6 IOB: 0.581 Activity: 0.0061 at 01:49:10 dev: 7.38 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.2 IOB: 1.238 Activity: 0.0075 at 01:54:10 dev: 7.98 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 1.147 Activity: 0.0088 at 01:59:10 dev: 7.54 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.2 IOB: 1.151 Activity: 0.0098 at 02:04:10 dev: 6.72 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.5 IOB: 1.05 Activity: 0.0104 at 02:09:09 dev: 5.98 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.6 IOB: 0.947 Activity: 0.0107 at 02:14:09 dev: 4.86 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.6 IOB: 0.844 Activity: 0.0106 at 02:19:10 dev: 3.82 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.5 IOB: 0.741 Activity: 0.0104 at 02:24:10 dev: 2.73 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.3 IOB: 0.59 Activity: 0.0099 at 02:29:10 dev: 2.52 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.0 IOB: 0.542 Activity: 0.0093 at 02:34:09 dev: 3.01 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 0.497 Activity: 0.0087 at 02:39:09 dev: 3.50 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.5 IOB: 0.456 Activity: 0.0081 at 02:44:10 dev: 1.74 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.3 IOB: 0.516 Activity: 0.0077 at 02:49:09 dev: -1.93 avgDelta: -5.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.1 IOB: 0.429 Activity: 0.0072 at 02:54:09 dev: -6.40 avgDelta: -9.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.8 IOB: 0.294 Activity: 0.0066 at 02:59:10 dev: -8.66 avgDelta: -11.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -2.5 IOB: 0.163 Activity: 0.0058 at 03:04:10 dev: -8.25 avgDelta: -10.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -2.1 IOB: 0.037 Activity: 0.0049 at 03:09:10 dev: -6.39 avgDelta: -8.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -1.7 IOB: -0.085 Activity: 0.0039 at 03:14:10 dev: -4.32 avgDelta: -6.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -1.3 IOB: -0.153 Activity: 0.0029 at 03:19:09 dev: -3.75 avgDelta: -5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -0.8 IOB: -0.265 Activity: 0.0018 at 03:24:10 dev: -3.72 avgDelta: -4.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -0.3 IOB: -0.371 Activity: 0.0007 at 03:29:09 dev: -3.45 avgDelta: -3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 0.2 IOB: -0.471 Activity: -0.0005 at 03:34:09 dev: -2.22 avgDelta: -2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 0.7 IOB: -0.566 Activity: -0.0016 at 03:39:10 dev: -0.94 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.1 IOB: -0.606 Activity: -0.0026 at 03:44:10 dev: 0.00 avgDelta: 1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.6 IOB: -0.64 Activity: -0.0036 at 03:49:10 dev: 0.45 avgDelta: 2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.9 IOB: -0.67 Activity: -0.0044 at 03:54:10 dev: -0.15 avgDelta: 1.75 basal +Found at least 1h of carb absorption: assuming all meals were announced, and categorizing UAM data as basal. +oref0-autotune-core autotune.2022-05-21.json profile.json profile.pump.json > newprofile.2022-05-21.json +CRTotalCarbs: 200 CRTotalInsulin: 32.862 totalCR: 6.086 +Hour 0 total deviations: 0 mg/dL +Hour 0 basal adjustment needed: 0 U/hr +Hour 1 total deviations: 29.49 mg/dL +Hour 1 basal adjustment needed: 0.07 U/hr +Hour 2 total deviations: 32.95 mg/dL +Hour 2 basal adjustment needed: 0.08 U/hr +Hour 3 total deviations: -18.1 mg/dL +Hour 3 basal adjustment needed: -0.04 U/hr +Hour 4 total deviations: 128.92 mg/dL +Hour 4 basal adjustment needed: 0.3 U/hr +Hour 5 total deviations: 76.69 mg/dL +Hour 5 basal adjustment needed: 0.18 U/hr +Hour 6 total deviations: 64.53 mg/dL +Hour 6 basal adjustment needed: 0.15 U/hr +Hour 7 total deviations: 7.81 mg/dL +Hour 7 basal adjustment needed: 0.02 U/hr +Hour 8 total deviations: -16.5 mg/dL +Hour 8 basal adjustment needed: -0.04 U/hr +Hour 9 total deviations: 7.99 mg/dL +Hour 9 basal adjustment needed: 0.02 U/hr +Hour 10 total deviations: 0 mg/dL +Hour 10 basal adjustment needed: 0 U/hr +Hour 11 total deviations: 0 mg/dL +Hour 11 basal adjustment needed: 0 U/hr +Hour 12 total deviations: 0 mg/dL +Hour 12 basal adjustment needed: 0 U/hr +Hour 13 total deviations: 0 mg/dL +Hour 13 basal adjustment needed: 0 U/hr +Hour 14 total deviations: 0 mg/dL +Hour 14 basal adjustment needed: 0 U/hr +Hour 15 total deviations: 0 mg/dL +Hour 15 basal adjustment needed: 0 U/hr +Hour 16 total deviations: 0 mg/dL +Hour 16 basal adjustment needed: 0 U/hr +Hour 17 total deviations: 0 mg/dL +Hour 17 basal adjustment needed: 0 U/hr +Hour 18 total deviations: 0 mg/dL +Hour 18 basal adjustment needed: 0 U/hr +Hour 19 total deviations: 0 mg/dL +Hour 19 basal adjustment needed: 0 U/hr +Hour 20 total deviations: -5.81 mg/dL +Hour 20 basal adjustment needed: -0.01 U/hr +Hour 21 total deviations: -19.5 mg/dL +Hour 21 basal adjustment needed: -0.05 U/hr +Hour 22 total deviations: 10.84 mg/dL +Hour 22 basal adjustment needed: 0.03 U/hr +Hour 23 total deviations: 0 mg/dL +Hour 23 basal adjustment needed: 0 U/hr +Adjusting hour 9 basal from 0.934 to 0.903 based on hour 8 = 0.909 and hour 17 = 0.647 +Adjusting hour 10 basal from 0.938 to 0.906 based on hour 8 = 0.909 and hour 17 = 0.647 +Adjusting hour 11 basal from 0.903 to 0.878 based on hour 8 = 0.909 and hour 17 = 0.647 +Adjusting hour 12 basal from 0.882 to 0.861 based on hour 8 = 0.909 and hour 17 = 0.647 +Adjusting hour 13 basal from 0.874 to 0.855 based on hour 8 = 0.909 and hour 17 = 0.647 +Adjusting hour 14 basal from 0.866 to 0.848 based on hour 8 = 0.909 and hour 17 = 0.647 +Adjusting hour 15 basal from 0.848 to 0.834 based on hour 8 = 0.909 and hour 17 = 0.647 +Adjusting hour 16 basal from 0.758 to 0.762 based on hour 8 = 0.909 and hour 17 = 0.647 +[ { start: '00:00:00', minutes: 0, rate: 1.002, i: 0 }, + { start: '01:00:00', minutes: 60, rate: 1.091, i: 1 }, + { start: '02:00:00', minutes: 120, rate: 1.118, i: 2 }, + { start: '03:00:00', minutes: 180, rate: 1.321, i: 3 }, + { start: '04:00:00', minutes: 240, rate: 1.091, i: 4 }, + { start: '05:00:00', minutes: 300, rate: 0.965, i: 5 }, + { start: '06:00:00', minutes: 360, rate: 0.825, i: 6 }, + { start: '07:00:00', minutes: 420, rate: 0.849, i: 7 }, + { start: '08:00:00', minutes: 480, rate: 0.909, i: 8 }, + { start: '09:00:00', minutes: 540, rate: 0.903, i: 9, untuned: 1 }, + { start: '10:00:00', minutes: 600, rate: 0.906, i: 10, untuned: 1 }, + { start: '11:00:00', minutes: 660, rate: 0.878, i: 11, untuned: 1 }, + { start: '12:00:00', minutes: 720, rate: 0.861, i: 12, untuned: 1 }, + { start: '13:00:00', minutes: 780, rate: 0.855, i: 13, untuned: 1 }, + { start: '14:00:00', minutes: 840, rate: 0.848, i: 14, untuned: 1 }, + { start: '15:00:00', minutes: 900, rate: 0.834, i: 15, untuned: 1 }, + { start: '16:00:00', minutes: 960, rate: 0.762, i: 16, untuned: 1 }, + { start: '17:00:00', minutes: 1020, rate: 0.647, i: 17 }, + { start: '18:00:00', minutes: 1080, rate: 0.631, i: 18 }, + { start: '19:00:00', minutes: 1140, rate: 0.728, i: 19 }, + { start: '20:00:00', minutes: 1200, rate: 0.838, i: 20 }, + { start: '21:00:00', minutes: 1260, rate: 0.871, i: 21 }, + { start: '22:00:00', minutes: 1320, rate: 0.886, i: 22 }, + { start: '23:00:00', minutes: 1380, rate: 0.893, i: 23 } ] +totalMealCarbs: 130 totalDeviations: 2620.81 oldCSF 14.991 fullNewCSF: 20.16 newCSF: 16.025 +oldCR: 5.75 fullNewCR: 6.086 newCR: 5.817 +p50deviation: 0.21 p50BGI -2.5 p50ratios: 0.988 Old ISF: 86.2 fullNewISF: 85.166 adjustedISF: 85.166 newISF: 85.993 newDIA: 6 newPeak: 45 + +Autotune pump profile recommendations: +--------------------------------------------------------- +Recommendations Log File: /home/titi/aaps/autotune/aapsorefautotune_recommendations.log + +Parameter | Pump | Autotune | Days Missing +--------------------------------------------------------- +ISF [mg/dL/U] | 86.200 | 85.993 | +Carb Ratio[g/U]| 5.750 | 5.817 | + 00:00 | 0.966 | 1.002 | 0 + 01:00 | 0.977 | 1.091 | 0 + 02:00 | 0.971 | 1.118 | 0 + 03:00 | 1.111 | 1.321 | 0 + 04:00 | 0.974 | 1.091 | 0 + 05:00 | 0.923 | 0.965 | 0 + 06:00 | 0.823 | 0.825 | 0 + 07:00 | 0.855 | 0.849 | 0 + 08:00 | 0.902 | 0.909 | 0 + 09:00 | 0.934 | 0.903 | 1 + 10:00 | 0.938 | 0.906 | 1 + 11:00 | 0.903 | 0.878 | 1 + 12:00 | 0.882 | 0.861 | 1 + 13:00 | 0.874 | 0.855 | 1 + 14:00 | 0.866 | 0.848 | 1 + 15:00 | 0.848 | 0.834 | 1 + 16:00 | 0.758 | 0.762 | 1 + 17:00 | 0.650 | 0.647 | 0 + 18:00 | 0.648 | 0.631 | 0 + 19:00 | 0.738 | 0.728 | 0 + 20:00 | 0.847 | 0.838 | 0 + 21:00 | 0.861 | 0.871 | 0 + 22:00 | 0.863 | 0.886 | 0 + 23:00 | 0.843 | 0.893 | 0 diff --git a/app/src/test/res/autotune/test1/newaapsorefprofile.2022-05-21.json b/app/src/test/res/autotune/test1/newaapsorefprofile.2022-05-21.json new file mode 100644 index 0000000000..80bf4e3925 --- /dev/null +++ b/app/src/test/res/autotune/test1/newaapsorefprofile.2022-05-21.json @@ -0,0 +1,181 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 1.002, + "start": "00:00:00" + }, + { + "i": 1, + "minutes": 60, + "rate": 1.091, + "start": "01:00:00" + }, + { + "i": 2, + "minutes": 120, + "rate": 1.118, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.321, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 1.091, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.965, + "start": "05:00:00" + }, + { + "i": 6, + "minutes": 360, + "rate": 0.825, + "start": "06:00:00" + }, + { + "i": 7, + "minutes": 420, + "rate": 0.849, + "start": "07:00:00" + }, + { + "i": 8, + "minutes": 480, + "rate": 0.909, + "start": "08:00:00" + }, + { + "i": 9, + "minutes": 540, + "rate": 0.903, + "start": "09:00:00", + "untuned": 1 + }, + { + "i": 10, + "minutes": 600, + "rate": 0.906, + "start": "10:00:00", + "untuned": 1 + }, + { + "i": 11, + "minutes": 660, + "rate": 0.878, + "start": "11:00:00", + "untuned": 1 + }, + { + "i": 12, + "minutes": 720, + "rate": 0.861, + "start": "12:00:00", + "untuned": 1 + }, + { + "i": 13, + "minutes": 780, + "rate": 0.855, + "start": "13:00:00", + "untuned": 1 + }, + { + "i": 14, + "minutes": 840, + "rate": 0.848, + "start": "14:00:00", + "untuned": 1 + }, + { + "i": 15, + "minutes": 900, + "rate": 0.834, + "start": "15:00:00", + "untuned": 1 + }, + { + "i": 16, + "minutes": 960, + "rate": 0.762, + "start": "16:00:00", + "untuned": 1 + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.647, + "start": "17:00:00" + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.631, + "start": "18:00:00" + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.728, + "start": "19:00:00" + }, + { + "i": 20, + "minutes": 1200, + "rate": 0.838, + "start": "20:00:00" + }, + { + "i": 21, + "minutes": 1260, + "rate": 0.871, + "start": "21:00:00" + }, + { + "i": 22, + "minutes": 1320, + "rate": 0.886, + "start": "22:00:00" + }, + { + "i": 23, + "minutes": 1380, + "rate": 0.893, + "start": "23:00:00" + } + ], + "carb_ratio": 5.817, + "csf": 16.025, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 85.993, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 85.993, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test1/profile.pump.json b/app/src/test/res/autotune/test1/profile.pump.json new file mode 100644 index 0000000000..eefadabacb --- /dev/null +++ b/app/src/test/res/autotune/test1/profile.pump.json @@ -0,0 +1,147 @@ +{ + "name": "Tuned Dyn2", + "min_5m_carbimpact": 8, + "dia": 6, + "curve": "ultra-rapid", + "useCustomPeakTime": true, + "insulinPeakTime": 45, + "basalprofile": [ + { + "start": "00:00:00", + "minutes": 0, + "rate": 0.966 + }, + { + "start": "01:00:00", + "minutes": 60, + "rate": 0.977 + }, + { + "start": "02:00:00", + "minutes": 120, + "rate": 0.971 + }, + { + "start": "03:00:00", + "minutes": 180, + "rate": 1.111 + }, + { + "start": "04:00:00", + "minutes": 240, + "rate": 0.974 + }, + { + "start": "05:00:00", + "minutes": 300, + "rate": 0.923 + }, + { + "start": "06:00:00", + "minutes": 360, + "rate": 0.823 + }, + { + "start": "07:00:00", + "minutes": 420, + "rate": 0.855 + }, + { + "start": "08:00:00", + "minutes": 480, + "rate": 0.902 + }, + { + "start": "09:00:00", + "minutes": 540, + "rate": 0.934 + }, + { + "start": "10:00:00", + "minutes": 600, + "rate": 0.938 + }, + { + "start": "11:00:00", + "minutes": 660, + "rate": 0.903 + }, + { + "start": "12:00:00", + "minutes": 720, + "rate": 0.882 + }, + { + "start": "13:00:00", + "minutes": 780, + "rate": 0.874 + }, + { + "start": "14:00:00", + "minutes": 840, + "rate": 0.866 + }, + { + "start": "15:00:00", + "minutes": 900, + "rate": 0.848 + }, + { + "start": "16:00:00", + "minutes": 960, + "rate": 0.758 + }, + { + "start": "17:00:00", + "minutes": 1020, + "rate": 0.65 + }, + { + "start": "18:00:00", + "minutes": 1080, + "rate": 0.648 + }, + { + "start": "19:00:00", + "minutes": 1140, + "rate": 0.738 + }, + { + "start": "20:00:00", + "minutes": 1200, + "rate": 0.847 + }, + { + "start": "21:00:00", + "minutes": 1260, + "rate": 0.861 + }, + { + "start": "22:00:00", + "minutes": 1320, + "rate": 0.863 + }, + { + "start": "23:00:00", + "minutes": 1380, + "rate": 0.843 + } + ], + "isfProfile": { + "sensitivities": [ + { + "i": 0, + "start": "00:00:00", + "sensitivity": 86.2, + "offset": 0, + "x": 0, + "endoffset": 1440 + } + ] + }, + "carb_ratio": 5.75, + "autosens_max": 1.3, + "autosens_min": 0.7, + "units": "mg/dl", + "timezone": "Europe/Paris" +} From d06d5f6b02cbba401cba3217a66ea5f14eda6d7a Mon Sep 17 00:00:00 2001 From: Philoul Date: Fri, 17 Jun 2022 21:55:23 +0200 Subject: [PATCH 23/71] Fix BGDatum json import ("_id" from aaps are always long but not "_id" from OpenAPS) --- .../androidaps/plugins/general/autotune/data/BGDatum.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt index 2d019a410a..7d2f7b6f8c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/BGDatum.kt @@ -31,7 +31,7 @@ class BGDatum { constructor(json: JSONObject, dateUtil: DateUtil) { this.dateUtil = dateUtil try { - if (json.has("_id")) id = json.getLong("_id") + //if (json.has("_id")) id = json.getLong("_id") if (json.has("date")) date = json.getLong("date") if (json.has("sgv")) value = json.getDouble("sgv") if (json.has("direction")) direction = TrendArrow.fromString(json.getString("direction")) From 73e4933251ff7c91cd57cfb98febfa5cef7779a0 Mon Sep 17 00:00:00 2001 From: Philoul Date: Fri, 17 Jun 2022 22:01:42 +0200 Subject: [PATCH 24/71] Include dateUtil in test --- .../androidaps/plugins/general/autotune/data/CRDatum.kt | 4 ++-- .../plugins/general/autotune/PreppedGlucoseTest.kt | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt index 5cd9c1ef65..5e4c83dc99 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/data/CRDatum.kt @@ -56,10 +56,10 @@ class CRDatum { var isEqual = true if (crInitialIOB != obj.crInitialIOB) isEqual = false if (crInitialBG != obj.crInitialBG) isEqual = false - //if (crInitialCarbTime / 1000 != obj.crInitialCarbTime / 1000) isEqual = false + if (crInitialCarbTime / 1000 != obj.crInitialCarbTime / 1000) isEqual = false if (crEndIOB != obj.crEndIOB) isEqual = false if (crEndBG != obj.crEndBG) isEqual = false - //if (crEndTime / 1000 != obj.crEndTime / 1000) isEqual = false + if (crEndTime / 1000 != obj.crEndTime / 1000) isEqual = false if (crCarbs != obj.crCarbs) isEqual = false if (crInsulin != obj.crInsulin) isEqual = false return isEqual diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt index b6274ffcfd..f769e5af72 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt @@ -1,5 +1,6 @@ package info.nightscout.androidaps.plugins.general.autotune +import android.content.Context import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.plugins.general.autotune.data.* import info.nightscout.androidaps.utils.DateUtil @@ -11,12 +12,14 @@ import org.mockito.Mock import java.io.File class PreppedGlucoseTest : TestBase() { - @Mock lateinit var dateUtil: DateUtil + @Mock lateinit var context: Context + lateinit var dateUtil: DateUtil lateinit var prep1: PreppedGlucose lateinit var prepjson1: String @Before fun initData() { + dateUtil = DateUtil(context) prepjson1 = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() prep1 = PreppedGlucose(JSONObject(prepjson1), dateUtil) } From a7c2dbc85051f804ee3f5989a5a88a74debb7f75 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sun, 19 Jun 2022 00:24:19 +0200 Subject: [PATCH 25/71] Unit test for AutotuneCore --- .../general/autotune/AutotuneCoreTest.kt | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt new file mode 100644 index 0000000000..c567c3298e --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt @@ -0,0 +1,138 @@ +package info.nightscout.androidaps.plugins.general.autotune + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.R +import info.nightscout.androidaps.TestBaseWithProfile +import info.nightscout.androidaps.data.LocalInsulin +import info.nightscout.androidaps.data.ProfileSealed +import info.nightscout.androidaps.data.PureProfile +import info.nightscout.androidaps.database.data.Block +import info.nightscout.androidaps.database.data.TargetBlock +import info.nightscout.androidaps.interfaces.* +import info.nightscout.androidaps.plugins.general.autotune.data.* +import info.nightscout.androidaps.utils.DateUtil +import info.nightscout.androidaps.utils.JsonHelper +import info.nightscout.androidaps.utils.T +import info.nightscout.shared.sharedPreferences.SP +import org.json.JSONArray +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito.`when` +import java.io.File +import java.util.* + +class AutotuneCoreTest : TestBaseWithProfile() { + @Mock lateinit var sp: SP + @Mock lateinit var autotuneFS: AutotuneFS + @Mock lateinit var injector: HasAndroidInjector + @Mock lateinit var activePlugin: ActivePlugin + lateinit var autotuneCore: AutotuneCore + lateinit var prep: PreppedGlucose + lateinit var prepjson: String + lateinit var inputProfile: ATProfile + var min5mCarbImpact = 0.0 + var autotuneMin = 0.0 + var autotuneMax = 0.0 + + @Before + fun initData() { + autotuneCore = AutotuneCore(sp,autotuneFS) + prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() + val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() + inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! + prep = PreppedGlucose(JSONObject(prepjson), dateUtil) + } + + @Test + fun autotuneCoreTest() { // Test if load from file of OpenAPS categorisation is Ok + `when`(sp.getDouble(R.string.key_openapsama_autosens_max, 1.2)).thenReturn(autotuneMax) + `when`(sp.getDouble(R.string.key_openapsama_autosens_min, 0.7)).thenReturn(autotuneMin) + `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) + val OapsOutputProfileJson = File("src/test/res/autotune/test1/aapsorefprofile.json").readText() + val OapsOutputProfile = atProfileFromOapsJson(JSONObject(OapsOutputProfileJson),dateUtil) + val outProfile = autotuneCore.tuneAllTheThings(prep, inputProfile, inputProfile) + OapsOutputProfile?.let { + Assert.assertEquals(OapsOutputProfile.isf, outProfile.isf, 0.0) + Assert.assertEquals(OapsOutputProfile.ic, outProfile.ic, 0.0) + for (i in 0..23) + Assert.assertEquals(OapsOutputProfile.basal[i], outProfile.basal[i], 0.0) + } + ?:Assert.fail() + } + + + + /** + * OpenAPS profile for Autotune only have one ISF value and one IC value + */ + fun atProfileFromOapsJson(jsonObject: JSONObject, dateUtil: DateUtil, defaultUnits: String? = null): ATProfile? { + try { + min5mCarbImpact = JsonHelper.safeGetDoubleAllowNull(jsonObject, "min_5m_carbimpact") ?: return null + autotuneMin = JsonHelper.safeGetDoubleAllowNull(jsonObject, "autosens_min") ?: return null + autotuneMax = JsonHelper.safeGetDoubleAllowNull(jsonObject, "autosens_max") ?: return null + val txtUnits = JsonHelper.safeGetStringAllowNull(jsonObject, "units", defaultUnits) ?: return null + val units = GlucoseUnit.fromText(txtUnits) + val dia = JsonHelper.safeGetDoubleAllowNull(jsonObject, "dia") ?: return null + val peak = JsonHelper.safeGetIntAllowNull(jsonObject, "insulinPeakTime") ?: return null + val localInsulin = LocalInsulin("insulin", peak, dia) + val timezone = TimeZone.getTimeZone(JsonHelper.safeGetString(jsonObject, "timezone", "UTC")) + val isfJson = jsonObject.getJSONObject("isfProfile") + val isfBlocks = ArrayList(1).also { + val isfJsonArray = isfJson.getJSONArray("sensitivities") + val value = isfJsonArray.getJSONObject(0).getDouble("sensitivity") + it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + } + val icBlocks = ArrayList(1).also { + val value = jsonObject.getDouble("carb_ratio") + it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + } + val basalBlocks = blockFromJsonArray(jsonObject.getJSONArray("basalprofile"), dateUtil) + ?: return null + val targetBlocks = ArrayList(1).also { + it.add(0, TargetBlock((T.hours(24).secs()) * 1000L, 100.0, 100.0)) + } + + val pure = PureProfile( + jsonObject = jsonObject, + basalBlocks = basalBlocks, + isfBlocks = isfBlocks, + icBlocks = icBlocks, + targetBlocks = targetBlocks, + glucoseUnit = units, + timeZone = timezone, + dia = dia + ) + return ATProfile(ProfileSealed.Pure(pure), localInsulin, profileInjector).also { it.dateUtil = dateUtil} + } catch (ignored: Exception) { + return null + } + } + + + fun blockFromJsonArray(jsonArray: JSONArray?, dateUtil: DateUtil): List? { + val size = jsonArray?.length() ?: return null + val ret = ArrayList(size) + try { + for (index in 0 until jsonArray.length() - 1) { + val o = jsonArray.getJSONObject(index) + val tas = o.getInt("minutes") * 60 + val next = jsonArray.getJSONObject(index + 1) + val nextTas = next.getInt("minutes") * 60 + val value = o.getDouble("rate") + if (tas % 3600 != 0) return null + if (nextTas % 3600 != 0) return null + ret.add(index, Block((nextTas - tas) * 1000L, value)) + } + val last: JSONObject = jsonArray.getJSONObject(jsonArray.length() - 1) + val lastTas = last.getInt("minutes") * 60 + val value = last.getDouble("rate") + ret.add(jsonArray.length() - 1, Block((T.hours(24).secs() - lastTas) * 1000L, value)) + } catch (e: Exception) { + return null + } + return ret + } +} From 3d3696443100d9595300ec03d35e5ba8dd3b59ad Mon Sep 17 00:00:00 2001 From: Philoul Date: Sun, 19 Jun 2022 00:50:40 +0200 Subject: [PATCH 26/71] Add missing input files from virtual machine and detailed info of oref0 autotune run --- .../autotune/test1/Oref0-Autotune_Command.txt | 16 + .../test1/aaps-entries.2022-05-21.json | 2882 +++++++++++++++ .../test1/aaps-treatments.2022-05-21.json | 3194 +++++++++++++++++ 3 files changed, 6092 insertions(+) create mode 100644 app/src/test/res/autotune/test1/Oref0-Autotune_Command.txt create mode 100644 app/src/test/res/autotune/test1/aaps-entries.2022-05-21.json create mode 100644 app/src/test/res/autotune/test1/aaps-treatments.2022-05-21.json diff --git a/app/src/test/res/autotune/test1/Oref0-Autotune_Command.txt b/app/src/test/res/autotune/test1/Oref0-Autotune_Command.txt new file mode 100644 index 0000000000..98ea1891b6 --- /dev/null +++ b/app/src/test/res/autotune/test1/Oref0-Autotune_Command.txt @@ -0,0 +1,16 @@ +aaps-autotune -d=~/aaps -s=2022-05-21 -e=2022-05-21 -c=false +(note oref0-autotune was modified and rename aaps-autotune to run autotune without NS queries with input files exported from aaps plugin) + +Input files: +- Input profile: profile.pump.json +- aaps-entries.2022-05-21.json (BG values) +- aaps-treatments.2022-05-21.json (all treatments) + +Output files: +- Output profile: aapsorefprofile.json and aapsorefautotune_recommendations.log +- log file: autotune.2022-06-17-212315.log + +Intermediate daily files (also used for unit test) +- categorization: autotune.2022-05-21.json +- aapsorefprofile.2022-05-21.json (intermediate input profile, for run with one day equals input profile) +- newaapsorefprofile.2022-05-21.json (intermediate output profile, for run with one day equals output profile) diff --git a/app/src/test/res/autotune/test1/aaps-entries.2022-05-21.json b/app/src/test/res/autotune/test1/aaps-entries.2022-05-21.json new file mode 100644 index 0000000000..70c349e9d8 --- /dev/null +++ b/app/src/test/res/autotune/test1/aaps-entries.2022-05-21.json @@ -0,0 +1,2882 @@ +[ + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184750000, + "dateString": "2022-05-22T01:59:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "6289990761a8290004740388" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184450000, + "dateString": "2022-05-22T01:54:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628997d861a8290004740385" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184150000, + "dateString": "2022-05-22T01:49:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628996a961a8290004740382" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183850000, + "dateString": "2022-05-22T01:44:10.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6289957b61a829000474037f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183550000, + "dateString": "2022-05-22T01:39:10.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6289945f50e51d0004429e6d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183249000, + "dateString": "2022-05-22T01:34:09.000Z", + "isValid": true, + "sgv": 73, + "direction": "Flat", + "type": "sgv", + "_id": "6289933050e51d0004429e6b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182949000, + "dateString": "2022-05-22T01:29:09.000Z", + "isValid": true, + "sgv": 72, + "direction": "Flat", + "type": "sgv", + "_id": "6289920150e51d0004429e69" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182650000, + "dateString": "2022-05-22T01:24:10.000Z", + "isValid": true, + "sgv": 74, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628990d350e51d0004429e67" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182349000, + "dateString": "2022-05-22T01:19:09.000Z", + "isValid": true, + "sgv": 77, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898fa550e51d0004429e65" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182050000, + "dateString": "2022-05-22T01:14:10.000Z", + "isValid": true, + "sgv": 81, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898e7650e51d0004429e63" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181750000, + "dateString": "2022-05-22T01:09:10.000Z", + "isValid": true, + "sgv": 87, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898d4750e51d0004429e5f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181450000, + "dateString": "2022-05-22T01:04:10.000Z", + "isValid": true, + "sgv": 92, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898c2fda46aa0004d1e0fc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181150000, + "dateString": "2022-05-22T00:59:10.000Z", + "isValid": true, + "sgv": 97, + "direction": "SingleDown", + "type": "sgv", + "_id": "62898b01da46aa0004d1e0fa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180849000, + "dateString": "2022-05-22T00:54:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "SingleDown", + "type": "sgv", + "_id": "628989d2da46aa0004d1e0f8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180549000, + "dateString": "2022-05-22T00:49:09.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628988a3da46aa0004d1e0f5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180250000, + "dateString": "2022-05-22T00:44:10.000Z", + "isValid": true, + "sgv": 135, + "direction": "Flat", + "type": "sgv", + "_id": "62898774da46aa0004d1e0f1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179949000, + "dateString": "2022-05-22T00:39:09.000Z", + "isValid": true, + "sgv": 143, + "direction": "Flat", + "type": "sgv", + "_id": "62898645da46aa0004d1e0ee" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179649000, + "dateString": "2022-05-22T00:34:09.000Z", + "isValid": true, + "sgv": 143, + "direction": "Flat", + "type": "sgv", + "_id": "62898517da46aa0004d1e0ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179350000, + "dateString": "2022-05-22T00:29:10.000Z", + "isValid": true, + "sgv": 142, + "direction": "Flat", + "type": "sgv", + "_id": "628983f69d6f1800047cd0dd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179050000, + "dateString": "2022-05-22T00:24:10.000Z", + "isValid": true, + "sgv": 142, + "direction": "Flat", + "type": "sgv", + "_id": "628982c89d6f1800047cd0db" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178750000, + "dateString": "2022-05-22T00:19:10.000Z", + "isValid": true, + "sgv": 144, + "direction": "Flat", + "type": "sgv", + "_id": "628981999d6f1800047cd0d8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178449000, + "dateString": "2022-05-22T00:14:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "6289806a9d6f1800047cd0d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178149000, + "dateString": "2022-05-22T00:09:09.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62897f3b9d6f1800047cd0d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177850000, + "dateString": "2022-05-22T00:04:10.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62897e0c9d6f1800047cd0d0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177550000, + "dateString": "2022-05-21T23:59:10.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "62897cde9d6f1800047cd0cc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177250000, + "dateString": "2022-05-21T23:54:10.000Z", + "isValid": true, + "sgv": 146, + "direction": "Flat", + "type": "sgv", + "_id": "62897bc89d6f1800047cd0c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176950000, + "dateString": "2022-05-21T23:49:10.000Z", + "isValid": true, + "sgv": 143, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62897a8771a363000480abca" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176650000, + "dateString": "2022-05-21T23:44:10.000Z", + "isValid": true, + "sgv": 139, + "direction": "Flat", + "type": "sgv", + "_id": "6289797071a363000480abc7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176350000, + "dateString": "2022-05-21T23:39:10.000Z", + "isValid": true, + "sgv": 132, + "direction": "Flat", + "type": "sgv", + "_id": "6289784271a363000480abc3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176050000, + "dateString": "2022-05-21T23:34:10.000Z", + "isValid": true, + "sgv": 127, + "direction": "Flat", + "type": "sgv", + "_id": "6289771371a363000480abc1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175750000, + "dateString": "2022-05-21T23:29:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "628975e471a363000480abbe" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175450000, + "dateString": "2022-05-21T23:24:10.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "_id": "628974b671a363000480abbc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175149000, + "dateString": "2022-05-21T23:19:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "6289738f37d09a00043f2b26" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174850000, + "dateString": "2022-05-21T23:14:10.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6289727a37d09a00043f2b22" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174550000, + "dateString": "2022-05-21T23:09:10.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "6289727937d09a00043f2b21" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174249000, + "dateString": "2022-05-21T23:04:09.000Z", + "isValid": true, + "sgv": 111, + "direction": "Flat", + "type": "sgv", + "_id": "6289726037d09a00043f2b20" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173949000, + "dateString": "2022-05-21T22:59:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "6289721437d09a00043f2b1f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173650000, + "dateString": "2022-05-21T22:54:10.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "6289717d37d09a00043f2b1e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173350000, + "dateString": "2022-05-21T22:49:10.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "62896fb837d09a00043f2b1b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173050000, + "dateString": "2022-05-21T22:44:10.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "62896f8537d09a00043f2b1a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172749000, + "dateString": "2022-05-21T22:39:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "62896e8937d09a00043f2b19" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172450000, + "dateString": "2022-05-21T22:34:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "62896d8b37d09a00043f2b17" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172150000, + "dateString": "2022-05-21T22:29:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "62896cda37d09a00043f2b16" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171849000, + "dateString": "2022-05-21T22:24:09.000Z", + "isValid": true, + "sgv": 122, + "direction": "Flat", + "type": "sgv", + "_id": "62896c7537d09a00043f2b14" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171549000, + "dateString": "2022-05-21T22:19:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "62896c1037d09a00043f2b13" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171250000, + "dateString": "2022-05-21T22:14:10.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "62896b5f6a5ecf00042d5474" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170950000, + "dateString": "2022-05-21T22:09:10.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "62896ac76a5ecf00042d5472" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170650000, + "dateString": "2022-05-21T22:04:10.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "628969fd6a5ecf00042d5471" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170350000, + "dateString": "2022-05-21T21:59:10.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "_id": "628969016a5ecf00042d5470" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170049000, + "dateString": "2022-05-21T21:54:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "628967a06a5ecf00042d546e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169749000, + "dateString": "2022-05-21T21:49:09.000Z", + "isValid": true, + "sgv": 107, + "direction": "Flat", + "type": "sgv", + "_id": "628964906a5ecf00042d546b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169449000, + "dateString": "2022-05-21T21:44:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "_id": "628961a4fb144900043c34ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169150000, + "dateString": "2022-05-21T21:39:10.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62895f5ffb144900043c34e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168849000, + "dateString": "2022-05-21T21:34:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "62895d98fb144900043c34e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168549000, + "dateString": "2022-05-21T21:29:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "62895b9a9bf1e6000482ffa1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168250000, + "dateString": "2022-05-21T21:24:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628959ed9bf1e6000482ff9e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167949000, + "dateString": "2022-05-21T21:19:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6289583f9bf1e6000482ff9b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167650000, + "dateString": "2022-05-21T21:14:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628956919bf1e6000482ff96" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167350000, + "dateString": "2022-05-21T21:09:10.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "628955179bf1e6000482ff92" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167049000, + "dateString": "2022-05-21T21:04:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628953e79bf1e6000482ff90" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166749000, + "dateString": "2022-05-21T20:59:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628952c680fc7e00041b22a9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166450000, + "dateString": "2022-05-21T20:54:10.000Z", + "isValid": true, + "sgv": 110, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6289519580fc7e00041b22a7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166149000, + "dateString": "2022-05-21T20:49:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6289506680fc7e00041b22a5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165850000, + "dateString": "2022-05-21T20:44:10.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "62894f3880fc7e00041b22a3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165550000, + "dateString": "2022-05-21T20:39:10.000Z", + "isValid": true, + "sgv": 139, + "direction": "Flat", + "type": "sgv", + "_id": "62894e0980fc7e00041b22a0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165249000, + "dateString": "2022-05-21T20:34:09.000Z", + "isValid": true, + "sgv": 145, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62894cdb80fc7e00041b229e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164950000, + "dateString": "2022-05-21T20:29:10.000Z", + "isValid": true, + "sgv": 143, + "direction": "SingleUp", + "type": "sgv", + "_id": "62894bab80fc7e00041b229b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164649000, + "dateString": "2022-05-21T20:24:09.000Z", + "isValid": true, + "sgv": 133, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62894a7e4493460004e63a38" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164350000, + "dateString": "2022-05-21T20:19:10.000Z", + "isValid": true, + "sgv": 120, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6289496a4493460004e63a34" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164049000, + "dateString": "2022-05-21T20:14:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "Flat", + "type": "sgv", + "_id": "628948214493460004e63a31" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163749000, + "dateString": "2022-05-21T20:09:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "6289470c4493460004e63a2d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163449000, + "dateString": "2022-05-21T20:04:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "Flat", + "type": "sgv", + "_id": "628945dc4493460004e63a2a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163150000, + "dateString": "2022-05-21T19:59:10.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "628944ae4493460004e63a27" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162850000, + "dateString": "2022-05-21T19:54:10.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "6289437f4493460004e63a25" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162549000, + "dateString": "2022-05-21T19:49:09.000Z", + "isValid": true, + "sgv": 88, + "direction": "Flat", + "type": "sgv", + "_id": "6289425f598f780004bb3b30" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162250000, + "dateString": "2022-05-21T19:44:10.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "62894118598f780004bb3b2d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161950000, + "dateString": "2022-05-21T19:39:10.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "62893feb598f780004bb3b2b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161649000, + "dateString": "2022-05-21T19:34:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "62893ed7598f780004bb3b29" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161350000, + "dateString": "2022-05-21T19:29:10.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "62893daa598f780004bb3b27" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161049000, + "dateString": "2022-05-21T19:24:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "Flat", + "type": "sgv", + "_id": "62893c7d598f780004bb3b24" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160749000, + "dateString": "2022-05-21T19:19:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "62893b4f598f780004bb3b22" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160449000, + "dateString": "2022-05-21T19:14:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "62893a1222fbc8000495b822" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160150000, + "dateString": "2022-05-21T19:09:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628938fe22fbc8000495b81f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159849000, + "dateString": "2022-05-21T19:04:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628937b822fbc8000495b81d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159549000, + "dateString": "2022-05-21T18:59:09.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "628936a422fbc8000495b81a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159249000, + "dateString": "2022-05-21T18:54:09.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "6289357622fbc8000495b818" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158949000, + "dateString": "2022-05-21T18:49:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "6289344a22fbc8000495b815" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158649000, + "dateString": "2022-05-21T18:44:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6289331c22fbc8000495b813" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158349000, + "dateString": "2022-05-21T18:39:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "628931e9840d8d0004a20bff" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158049000, + "dateString": "2022-05-21T18:34:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "Flat", + "type": "sgv", + "_id": "628930bc840d8d0004a20bfd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157750000, + "dateString": "2022-05-21T18:29:10.000Z", + "isValid": true, + "sgv": 106, + "direction": "Flat", + "type": "sgv", + "_id": "62892f8f840d8d0004a20bfa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157449000, + "dateString": "2022-05-21T18:24:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "62892e62840d8d0004a20bf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157149000, + "dateString": "2022-05-21T18:19:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "62892d34840d8d0004a20bf5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156849000, + "dateString": "2022-05-21T18:14:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "62892c06840d8d0004a20bf2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156549000, + "dateString": "2022-05-21T18:09:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "62892af2840d8d0004a20bf0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156250000, + "dateString": "2022-05-21T18:04:10.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "628929ac8809e60004c644e9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155950000, + "dateString": "2022-05-21T17:59:10.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "_id": "6289287e8809e60004c644e6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155649000, + "dateString": "2022-05-21T17:54:09.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "6289276a8809e60004c644e3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155349000, + "dateString": "2022-05-21T17:49:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "NONE", + "type": "sgv", + "_id": "6289263c8809e60004c644e1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155049000, + "dateString": "2022-05-21T17:44:09.000Z", + "isValid": true, + "sgv": 116, + "direction": "NONE", + "type": "sgv", + "_id": "6289250d8809e60004c644dd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154749000, + "dateString": "2022-05-21T17:39:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "NONE", + "type": "sgv", + "_id": "628923df8809e60004c644d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154449000, + "dateString": "2022-05-21T17:34:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628922b18809e60004c644d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154149000, + "dateString": "2022-05-21T17:29:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "SingleDown", + "type": "sgv", + "_id": "628921861090500004ca472b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153849000, + "dateString": "2022-05-21T17:24:09.000Z", + "isValid": true, + "sgv": 96, + "direction": "SingleDown", + "type": "sgv", + "_id": "628920591090500004ca4727" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153549000, + "dateString": "2022-05-21T17:19:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "SingleDown", + "type": "sgv", + "_id": "62891f2b1090500004ca4724" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153249000, + "dateString": "2022-05-21T17:14:09.000Z", + "isValid": true, + "sgv": 124, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62891dfd1090500004ca4722" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152949000, + "dateString": "2022-05-21T17:09:09.000Z", + "isValid": true, + "sgv": 138, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62891cd01090500004ca471f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152649000, + "dateString": "2022-05-21T17:04:09.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62891ba31090500004ca471d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152349000, + "dateString": "2022-05-21T16:59:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "62891a811090500004ca471a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152049000, + "dateString": "2022-05-21T16:54:09.000Z", + "isValid": true, + "sgv": 160, + "direction": "Flat", + "type": "sgv", + "_id": "628919531090500004ca4717" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151749000, + "dateString": "2022-05-21T16:49:09.000Z", + "isValid": true, + "sgv": 159, + "direction": "Flat", + "type": "sgv", + "_id": "628918261090500004ca4714" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151449000, + "dateString": "2022-05-21T16:44:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "628916f81090500004ca4710" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151149000, + "dateString": "2022-05-21T16:39:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "628915ce1090500004ca470c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150849000, + "dateString": "2022-05-21T16:34:09.000Z", + "isValid": true, + "sgv": 161, + "direction": "Flat", + "type": "sgv", + "_id": "628914d01090500004ca4709" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150549000, + "dateString": "2022-05-21T16:29:09.000Z", + "isValid": true, + "sgv": 165, + "direction": "Flat", + "type": "sgv", + "_id": "628913731090500004ca4706" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150249000, + "dateString": "2022-05-21T16:24:09.000Z", + "isValid": true, + "sgv": 170, + "direction": "Flat", + "type": "sgv", + "_id": "628913111090500004ca4704" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149949000, + "dateString": "2022-05-21T16:19:09.000Z", + "isValid": true, + "sgv": 172, + "direction": "Flat", + "type": "sgv", + "_id": "6289130f1090500004ca46ff" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149650000, + "dateString": "2022-05-21T16:14:10.000Z", + "isValid": true, + "sgv": 173, + "direction": "Flat", + "type": "sgv", + "_id": "62890fff1090500004ca46fd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149349000, + "dateString": "2022-05-21T16:09:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "_id": "62890edacf7ee10004a2b1e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149049000, + "dateString": "2022-05-21T16:04:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890daccf7ee10004a2b1de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148749000, + "dateString": "2022-05-21T15:59:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890c64cf7ee10004a2b1da" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148450000, + "dateString": "2022-05-21T15:54:10.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890b36cf7ee10004a2b1d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148149000, + "dateString": "2022-05-21T15:49:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "_id": "62890a21cf7ee10004a2b1d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147849000, + "dateString": "2022-05-21T15:44:09.000Z", + "isValid": true, + "sgv": 175, + "direction": "Flat", + "type": "sgv", + "_id": "628908f3cf7ee10004a2b1d1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147549000, + "dateString": "2022-05-21T15:39:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "628907c5cf7ee10004a2b1ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147249000, + "dateString": "2022-05-21T15:34:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6289067fc9346b0004863369" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146949000, + "dateString": "2022-05-21T15:29:09.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6289056ac9346b0004863366" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146650000, + "dateString": "2022-05-21T15:24:10.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6289043cc9346b0004863363" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146349000, + "dateString": "2022-05-21T15:19:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6289030ec9346b0004863361" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146050000, + "dateString": "2022-05-21T15:14:10.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "628901e0c9346b000486335f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145750000, + "dateString": "2022-05-21T15:09:10.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "628900b2c9346b000486335d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145449000, + "dateString": "2022-05-21T15:04:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6288ff9ec9346b000486335b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145149000, + "dateString": "2022-05-21T14:59:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "6288fe56c9346b0004863359" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144849000, + "dateString": "2022-05-21T14:54:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6288fd270e0c880004d58de7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144550000, + "dateString": "2022-05-21T14:49:10.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6288fbf90e0c880004d58de5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144249000, + "dateString": "2022-05-21T14:44:09.000Z", + "isValid": true, + "sgv": 180, + "direction": "Flat", + "type": "sgv", + "_id": "6288facb0e0c880004d58de3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143949000, + "dateString": "2022-05-21T14:39:09.000Z", + "isValid": true, + "sgv": 184, + "direction": "Flat", + "type": "sgv", + "_id": "6288f9b60e0c880004d58de0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143650000, + "dateString": "2022-05-21T14:34:10.000Z", + "isValid": true, + "sgv": 185, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f8880e0c880004d58dde" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143349000, + "dateString": "2022-05-21T14:29:09.000Z", + "isValid": true, + "sgv": 182, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f75a0e0c880004d58ddb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143049000, + "dateString": "2022-05-21T14:24:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f62c0e0c880004d58dd8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142749000, + "dateString": "2022-05-21T14:19:09.000Z", + "isValid": true, + "sgv": 166, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f4f72634cd0004296074" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142449000, + "dateString": "2022-05-21T14:14:09.000Z", + "isValid": true, + "sgv": 160, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f3c92634cd0004296071" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142149000, + "dateString": "2022-05-21T14:09:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f29b2634cd000429606f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141849000, + "dateString": "2022-05-21T14:04:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f16d2634cd000429606c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141548000, + "dateString": "2022-05-21T13:59:08.000Z", + "isValid": true, + "sgv": 139, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f03f2634cd000429606a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141249000, + "dateString": "2022-05-21T13:54:09.000Z", + "isValid": true, + "sgv": 131, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ef2a2634cd0004296067" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140949000, + "dateString": "2022-05-21T13:49:09.000Z", + "isValid": true, + "sgv": 126, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288edfc2634cd0004296065" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140648000, + "dateString": "2022-05-21T13:44:08.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ecca0f1be700041e5a0b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140349000, + "dateString": "2022-05-21T13:39:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288eb9d0f1be700041e5a09" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140049000, + "dateString": "2022-05-21T13:34:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "_id": "6288ea6e0f1be700041e5a06" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139749000, + "dateString": "2022-05-21T13:29:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6288e9410f1be700041e5a03" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139450000, + "dateString": "2022-05-21T13:24:10.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288e82c0f1be700041e5a00" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139150000, + "dateString": "2022-05-21T13:19:10.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "6288e7030f1be700041e59fd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138849000, + "dateString": "2022-05-21T13:14:09.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288e5d00f1be700041e59fb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138549000, + "dateString": "2022-05-21T13:09:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288e4900f1be700041e59f8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138249000, + "dateString": "2022-05-21T13:04:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288e3610f1be700041e59f6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137949000, + "dateString": "2022-05-21T12:59:09.000Z", + "isValid": true, + "sgv": 86, + "direction": "Flat", + "type": "sgv", + "_id": "6288e24c0f1be700041e59f3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137649000, + "dateString": "2022-05-21T12:54:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6288e1040f1be700041e59f0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137350000, + "dateString": "2022-05-21T12:49:10.000Z", + "isValid": true, + "sgv": 72, + "direction": "Flat", + "type": "sgv", + "_id": "6288dfd60f1be700041e59ee" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137049000, + "dateString": "2022-05-21T12:44:09.000Z", + "isValid": true, + "sgv": 69, + "direction": "Flat", + "type": "sgv", + "_id": "6288df8a0f1be700041e59ec" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136749000, + "dateString": "2022-05-21T12:39:09.000Z", + "isValid": true, + "sgv": 68, + "direction": "Flat", + "type": "sgv", + "_id": "6288de580f1be700041e59ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136449000, + "dateString": "2022-05-21T12:34:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "6288dd270f1be700041e59e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136149000, + "dateString": "2022-05-21T12:29:09.000Z", + "isValid": true, + "sgv": 73, + "direction": "Flat", + "type": "sgv", + "_id": "6288db8a0f1be700041e59e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135849000, + "dateString": "2022-05-21T12:24:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6288d9fb0f1be700041e59e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135549000, + "dateString": "2022-05-21T12:19:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "6288d8e00f1be700041e59e0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135249000, + "dateString": "2022-05-21T12:14:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6288d7ae0f1be700041e59de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134949000, + "dateString": "2022-05-21T12:09:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "6288d67f0f1be700041e59da" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134649000, + "dateString": "2022-05-21T12:04:09.000Z", + "isValid": true, + "sgv": 77, + "direction": "Flat", + "type": "sgv", + "_id": "6288d5500f1be700041e59d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134349000, + "dateString": "2022-05-21T11:59:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d4220f1be700041e59d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134049000, + "dateString": "2022-05-21T11:54:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d3060f1be700041e59d2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133749000, + "dateString": "2022-05-21T11:49:09.000Z", + "isValid": true, + "sgv": 87, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d1d80f1be700041e59cf" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133449000, + "dateString": "2022-05-21T11:44:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6288d0a80f1be700041e59cb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133149000, + "dateString": "2022-05-21T11:39:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "6288cf770f1be700041e59c8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132849000, + "dateString": "2022-05-21T11:34:09.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ce548e9ed800049b39f7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132549000, + "dateString": "2022-05-21T11:29:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288cd278e9ed800049b39f5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132249000, + "dateString": "2022-05-21T11:24:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288cbf98e9ed800049b39f2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131948000, + "dateString": "2022-05-21T11:19:08.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6288cacb8e9ed800049b39ec" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131649000, + "dateString": "2022-05-21T11:14:09.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "6288c99e8e9ed800049b39e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131349000, + "dateString": "2022-05-21T11:09:09.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "_id": "6288c86f8e9ed800049b39e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131049000, + "dateString": "2022-05-21T11:04:09.000Z", + "isValid": true, + "sgv": 81, + "direction": "Flat", + "type": "sgv", + "_id": "6288c7418e9ed800049b39e3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130748000, + "dateString": "2022-05-21T10:59:08.000Z", + "isValid": true, + "sgv": 84, + "direction": "Flat", + "type": "sgv", + "_id": "6288c61a1991280004dce468" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130448000, + "dateString": "2022-05-21T10:54:08.000Z", + "isValid": true, + "sgv": 88, + "direction": "Flat", + "type": "sgv", + "_id": "6288c4ec1991280004dce464" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130149000, + "dateString": "2022-05-21T10:49:09.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "6288c3be1991280004dce461" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129848000, + "dateString": "2022-05-21T10:44:08.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "6288c2911991280004dce45e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129548000, + "dateString": "2022-05-21T10:39:08.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288c1631991280004dce45b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129249000, + "dateString": "2022-05-21T10:34:09.000Z", + "isValid": true, + "sgv": 96, + "direction": "Flat", + "type": "sgv", + "_id": "6288c0341991280004dce459" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128948000, + "dateString": "2022-05-21T10:29:08.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "6288bf061991280004dce457" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128649000, + "dateString": "2022-05-21T10:24:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6288bde0abbef90004616cf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128349000, + "dateString": "2022-05-21T10:19:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "Flat", + "type": "sgv", + "_id": "6288bcb2abbef90004616cf6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128049000, + "dateString": "2022-05-21T10:14:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "6288bb84abbef90004616cf4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127748000, + "dateString": "2022-05-21T10:09:08.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "6288ba56abbef90004616cf2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127449000, + "dateString": "2022-05-21T10:04:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288b941abbef90004616cf0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127149000, + "dateString": "2022-05-21T09:59:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288b813abbef90004616ceb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126849000, + "dateString": "2022-05-21T09:54:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b6e9c9c02c00041f7f06" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126549000, + "dateString": "2022-05-21T09:49:09.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6288b5bbc9c02c00041f7f04" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126249000, + "dateString": "2022-05-21T09:44:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b48dc9c02c00041f7f02" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125948000, + "dateString": "2022-05-21T09:39:08.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b35fc9c02c00041f7f00" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125649000, + "dateString": "2022-05-21T09:34:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b231c9c02c00041f7efe" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125349000, + "dateString": "2022-05-21T09:29:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "6288b103c9c02c00041f7efc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125048000, + "dateString": "2022-05-21T09:24:08.000Z", + "isValid": true, + "sgv": 122, + "direction": "Flat", + "type": "sgv", + "_id": "6288afd5c9c02c00041f7ef8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124749000, + "dateString": "2022-05-21T09:19:09.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "_id": "6288aea799fc930004d6bdfb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124448000, + "dateString": "2022-05-21T09:14:08.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "6288ad7999fc930004d6bdfa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124149000, + "dateString": "2022-05-21T09:09:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288ac4b99fc930004d6bdf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123849000, + "dateString": "2022-05-21T09:04:09.000Z", + "isValid": true, + "sgv": 113, + "direction": "Flat", + "type": "sgv", + "_id": "6288ab1d99fc930004d6bdf6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123549000, + "dateString": "2022-05-21T08:59:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "Flat", + "type": "sgv", + "_id": "6288a9f099fc930004d6bdf4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123248000, + "dateString": "2022-05-21T08:54:08.000Z", + "isValid": true, + "sgv": 107, + "direction": "Flat", + "type": "sgv", + "_id": "6288a8db99fc930004d6bdf1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122949000, + "dateString": "2022-05-21T08:49:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a7ad99fc930004d6bdef" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122649000, + "dateString": "2022-05-21T08:44:09.000Z", + "isValid": true, + "sgv": 111, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a73099fc930004d6bded" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122349000, + "dateString": "2022-05-21T08:39:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a55199fc930004d6bdeb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122049000, + "dateString": "2022-05-21T08:34:09.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "6288a42099fc930004d6bde8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121749000, + "dateString": "2022-05-21T08:29:09.000Z", + "isValid": true, + "sgv": 138, + "direction": "Flat", + "type": "sgv", + "_id": "6288a2fca4cc860004a251d2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121449000, + "dateString": "2022-05-21T08:24:09.000Z", + "isValid": true, + "sgv": 145, + "direction": "Flat", + "type": "sgv", + "_id": "6288a1cda4cc860004a251d1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121149000, + "dateString": "2022-05-21T08:19:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "6288a09fa4cc860004a251ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120849000, + "dateString": "2022-05-21T08:14:09.000Z", + "isValid": true, + "sgv": 148, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889f6fa4cc860004a251cc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120548000, + "dateString": "2022-05-21T08:09:08.000Z", + "isValid": true, + "sgv": 146, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889e41a4cc860004a251cb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120249000, + "dateString": "2022-05-21T08:04:09.000Z", + "isValid": true, + "sgv": 141, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889d13a4cc860004a251c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119949000, + "dateString": "2022-05-21T07:59:09.000Z", + "isValid": true, + "sgv": 132, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889be4a4cc860004a251c7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119649000, + "dateString": "2022-05-21T07:54:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889ac27ff1e700040f17dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119349000, + "dateString": "2022-05-21T07:49:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "628899957ff1e700040f17d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119049000, + "dateString": "2022-05-21T07:44:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "628898627ff1e700040f17d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118748000, + "dateString": "2022-05-21T07:39:08.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628897357ff1e700040f17d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118449000, + "dateString": "2022-05-21T07:34:09.000Z", + "isValid": true, + "sgv": 92, + "direction": "Flat", + "type": "sgv", + "_id": "6288961d7ff1e700040f17ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118149000, + "dateString": "2022-05-21T07:29:09.000Z", + "isValid": true, + "sgv": 86, + "direction": "Flat", + "type": "sgv", + "_id": "628894d37ff1e700040f17cd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117848000, + "dateString": "2022-05-21T07:24:08.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "_id": "628893bd7ff1e700040f17c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117549000, + "dateString": "2022-05-21T07:19:09.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628892907ff1e700040f17c7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117249000, + "dateString": "2022-05-21T07:14:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "628891627ff1e700040f17c6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116949000, + "dateString": "2022-05-21T07:09:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "62889024149196000412bf57" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116649000, + "dateString": "2022-05-21T07:04:09.000Z", + "isValid": true, + "sgv": 74, + "direction": "Flat", + "type": "sgv", + "_id": "62888f0f149196000412bf54" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116349000, + "dateString": "2022-05-21T06:59:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "62888de2149196000412bf51" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116049000, + "dateString": "2022-05-21T06:54:09.000Z", + "isValid": true, + "sgv": 69, + "direction": "Flat", + "type": "sgv", + "_id": "62888ccc149196000412bf4f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115749000, + "dateString": "2022-05-21T06:49:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "62888b85149196000412bf4d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115449000, + "dateString": "2022-05-21T06:44:09.000Z", + "isValid": true, + "sgv": 74, + "direction": "Flat", + "type": "sgv", + "_id": "62888a57149196000412bf4b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115149000, + "dateString": "2022-05-21T06:39:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6288892a149196000412bf49" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114849000, + "dateString": "2022-05-21T06:34:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "628888018ff3530004dc6070" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114549000, + "dateString": "2022-05-21T06:29:09.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628886d28ff3530004dc606b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114249000, + "dateString": "2022-05-21T06:24:09.000Z", + "isValid": true, + "sgv": 85, + "direction": "Flat", + "type": "sgv", + "_id": "628885a48ff3530004dc6069" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113949000, + "dateString": "2022-05-21T06:19:09.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "628884778ff3530004dc6067" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113649000, + "dateString": "2022-05-21T06:14:09.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "6288834a8ff3530004dc6065" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113349000, + "dateString": "2022-05-21T06:09:09.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288821b8ff3530004dc6062" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113049000, + "dateString": "2022-05-21T06:04:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628880ee8ff3530004dc6060" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112749000, + "dateString": "2022-05-21T05:59:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "62887fcee964810004aa5666" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112449000, + "dateString": "2022-05-21T05:54:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62887ea1e964810004aa5664" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112148000, + "dateString": "2022-05-21T05:49:08.000Z", + "isValid": true, + "sgv": 103, + "direction": "Flat", + "type": "sgv", + "_id": "62887d72e964810004aa5661" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111849000, + "dateString": "2022-05-21T05:44:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62887c44e964810004aa565d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111549000, + "dateString": "2022-05-21T05:39:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "62887b17e964810004aa565a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111249000, + "dateString": "2022-05-21T05:34:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628879e9e964810004aa5657" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110949000, + "dateString": "2022-05-21T05:29:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628878bbe964810004aa5655" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110649000, + "dateString": "2022-05-21T05:24:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628877a5363e6c0004f710e0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110348000, + "dateString": "2022-05-21T05:19:08.000Z", + "isValid": true, + "sgv": 102, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62887677363e6c0004f710de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110049000, + "dateString": "2022-05-21T05:14:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62887549363e6c0004f710dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109748000, + "dateString": "2022-05-21T05:09:08.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6288741c363e6c0004f710d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109448000, + "dateString": "2022-05-21T05:04:08.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "_id": "628872ef363e6c0004f710d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109148000, + "dateString": "2022-05-21T04:59:08.000Z", + "isValid": true, + "sgv": 129, + "direction": "Flat", + "type": "sgv", + "_id": "628871c1363e6c0004f710d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108848000, + "dateString": "2022-05-21T04:54:08.000Z", + "isValid": true, + "sgv": 130, + "direction": "Flat", + "type": "sgv", + "_id": "62887093363e6c0004f710cf" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108548000, + "dateString": "2022-05-21T04:49:08.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "62886f5719e2e60004989bbc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108249000, + "dateString": "2022-05-21T04:44:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886e2919e2e60004989bba" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107948000, + "dateString": "2022-05-21T04:39:08.000Z", + "isValid": true, + "sgv": 124, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886cfc19e2e60004989bb8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107648000, + "dateString": "2022-05-21T04:34:08.000Z", + "isValid": true, + "sgv": 132, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886be719e2e60004989bb5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107348000, + "dateString": "2022-05-21T04:29:08.000Z", + "isValid": true, + "sgv": 144, + "direction": "Flat", + "type": "sgv", + "_id": "62886ab919e2e60004989bb3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107048000, + "dateString": "2022-05-21T04:24:08.000Z", + "isValid": true, + "sgv": 153, + "direction": "Flat", + "type": "sgv", + "_id": "6288698b19e2e60004989bb0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106749000, + "dateString": "2022-05-21T04:19:09.000Z", + "isValid": true, + "sgv": 157, + "direction": "Flat", + "type": "sgv", + "_id": "6288685d19e2e60004989bac" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106449000, + "dateString": "2022-05-21T04:14:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "Flat", + "type": "sgv", + "_id": "6288672f42c1220004f9573a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106149000, + "dateString": "2022-05-21T04:09:09.000Z", + "isValid": true, + "sgv": 151, + "direction": "Flat", + "type": "sgv", + "_id": "6288660142c1220004f95736" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105848000, + "dateString": "2022-05-21T04:04:08.000Z", + "isValid": true, + "sgv": 146, + "direction": "Flat", + "type": "sgv", + "_id": "628864d342c1220004f95733" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105549000, + "dateString": "2022-05-21T03:59:09.000Z", + "isValid": true, + "sgv": 146, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628863a542c1220004f95730" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105248000, + "dateString": "2022-05-21T03:54:08.000Z", + "isValid": true, + "sgv": 149, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288629042c1220004f9572e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104949000, + "dateString": "2022-05-21T03:49:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288614942c1220004f9572c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104648000, + "dateString": "2022-05-21T03:44:08.000Z", + "isValid": true, + "sgv": 162, + "direction": "Flat", + "type": "sgv", + "_id": "6288601b42c1220004f95729" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104349000, + "dateString": "2022-05-21T03:39:09.000Z", + "isValid": true, + "sgv": 167, + "direction": "Flat", + "type": "sgv", + "_id": "62885ef1293f3e00042c31e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104049000, + "dateString": "2022-05-21T03:34:09.000Z", + "isValid": true, + "sgv": 170, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62885dc3293f3e00042c31de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103748000, + "dateString": "2022-05-21T03:29:08.000Z", + "isValid": true, + "sgv": 171, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62885c95293f3e00042c31db" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103448000, + "dateString": "2022-05-21T03:24:08.000Z", + "isValid": true, + "sgv": 174, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885b81293f3e00042c31d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103149000, + "dateString": "2022-05-21T03:19:09.000Z", + "isValid": true, + "sgv": 182, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885a52293f3e00042c31d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102848000, + "dateString": "2022-05-21T03:14:08.000Z", + "isValid": true, + "sgv": 193, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885924293f3e00042c31d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102548000, + "dateString": "2022-05-21T03:09:08.000Z", + "isValid": true, + "sgv": 204, + "direction": "SingleDown", + "type": "sgv", + "_id": "628857f7293f3e00042c31d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102249000, + "dateString": "2022-05-21T03:04:09.000Z", + "isValid": true, + "sgv": 216, + "direction": "SingleDown", + "type": "sgv", + "_id": "628856da5151b5000462a1ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101948000, + "dateString": "2022-05-21T02:59:08.000Z", + "isValid": true, + "sgv": 228, + "direction": "SingleDown", + "type": "sgv", + "_id": "628855935151b5000462a1e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101648000, + "dateString": "2022-05-21T02:54:08.000Z", + "isValid": true, + "sgv": 241, + "direction": "SingleDown", + "type": "sgv", + "_id": "6288547f5151b5000462a1e6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101348000, + "dateString": "2022-05-21T02:49:08.000Z", + "isValid": true, + "sgv": 253, + "direction": "SingleDown", + "type": "sgv", + "_id": "628853395151b5000462a1e4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101048000, + "dateString": "2022-05-21T02:44:08.000Z", + "isValid": true, + "sgv": 267, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288520b5151b5000462a1e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100748000, + "dateString": "2022-05-21T02:39:08.000Z", + "isValid": true, + "sgv": 283, + "direction": "Flat", + "type": "sgv", + "_id": "628850de5151b5000462a1df" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100449000, + "dateString": "2022-05-21T02:34:09.000Z", + "isValid": true, + "sgv": 297, + "direction": "Flat", + "type": "sgv", + "_id": "62884fb05151b5000462a1dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100148000, + "dateString": "2022-05-21T02:29:08.000Z", + "isValid": true, + "sgv": 307, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884e9493668c0004a30517" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099848000, + "dateString": "2022-05-21T02:24:08.000Z", + "isValid": true, + "sgv": 308, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884d6793668c0004a30514" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099548000, + "dateString": "2022-05-21T02:19:08.000Z", + "isValid": true, + "sgv": 296, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884c3993668c0004a30510" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099249000, + "dateString": "2022-05-21T02:14:09.000Z", + "isValid": true, + "sgv": 282, + "direction": "Flat", + "type": "sgv", + "_id": "62884b0c93668c0004a3050d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653098948000, + "dateString": "2022-05-21T02:09:08.000Z", + "isValid": true, + "sgv": 271, + "direction": "Flat", + "type": "sgv", + "_id": "628849de93668c0004a30508" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653098648000, + "dateString": "2022-05-21T02:04:08.000Z", + "isValid": true, + "sgv": 271, + "direction": "Flat", + "type": "sgv", + "_id": "628848b093668c0004a30504" + } +] diff --git a/app/src/test/res/autotune/test1/aaps-treatments.2022-05-21.json b/app/src/test/res/autotune/test1/aaps-treatments.2022-05-21.json new file mode 100644 index 0000000000..a01a55115c --- /dev/null +++ b/app/src/test/res/autotune/test1/aaps-treatments.2022-05-21.json @@ -0,0 +1,3194 @@ +[ + { + "created_at": "2022-05-22T02:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 635539, + "type": "NORMAL", + "rate": 0.0742, + "percent": -90, + "pumpId": 454016, + "endId": 454021, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289982461a8290004740387" + }, + { + "created_at": "2022-05-22T01:55:40.718Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 259282, + "type": "NORMAL", + "rate": 0.0824, + "percent": -90, + "pumpId": 454016, + "endId": 454021, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289982461a8290004740387" + }, + { + "created_at": "2022-05-22T01:50:36.118Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303106, + "type": "NORMAL", + "rate": 0.1648, + "percent": -80, + "pumpId": 454013, + "endId": 454015, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628996f661a8290004740384" + }, + { + "created_at": "2022-05-22T01:45:35.222Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299405, + "type": "NORMAL", + "rate": 0.49439999999999995, + "percent": -40, + "pumpId": 454010, + "endId": 454012, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628995c761a8290004740381" + }, + { + "created_at": "2022-05-22T01:40:51.929Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 281796, + "type": "NORMAL", + "rate": 0.6592, + "percent": -20, + "pumpId": 454007, + "endId": 454009, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628994ab50e51d0004429e6f" + }, + { + "created_at": "2022-05-22T01:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2449437, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 454003, + "endId": 454006, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628988efda46aa0004d1e0f7" + }, + { + "created_at": "2022-05-22T00:50:32.326Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 567674, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 454003, + "endId": 454006, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628988efda46aa0004d1e0f7" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-22T00:45:47.966Z", + "date": 1653180347966, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21574, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628987c0da46aa0004d1e0f3" + }, + { + "created_at": "2022-05-22T00:45:45.232Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285608, + "type": "NORMAL", + "rate": 1.209, + "percent": 50, + "pumpId": 453998, + "endId": 454002, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628987c0da46aa0004d1e0f4" + }, + { + "created_at": "2022-05-22T00:35:30.702Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 613035, + "type": "NORMAL", + "rate": 1.0478, + "percent": 30, + "pumpId": 453995, + "endId": 453997, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62898563da46aa0004d1e0ec" + }, + { + "created_at": "2022-05-22T00:30:42.142Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 287064, + "type": "NORMAL", + "rate": 0.7254, + "percent": -10, + "pumpId": 453992, + "endId": 453994, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628984439d6f1800047cd0df" + }, + { + "created_at": "2022-05-22T00:20:44.045Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 595609, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453989, + "endId": 453991, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628981e59d6f1800047cd0da" + }, + { + "created_at": "2022-05-22T00:10:28.057Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 614498, + "type": "NORMAL", + "rate": 0.403, + "percent": -50, + "pumpId": 453986, + "endId": 453988, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897f879d6f1800047cd0d5" + }, + { + "created_at": "2022-05-22T00:06:13.096Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 252465, + "type": "NORMAL", + "rate": 0.403, + "percent": -50, + "pumpId": 453983, + "endId": 453985, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897e8b9d6f1800047cd0d2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-22T00:00:34.526Z", + "date": 1653177634526, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21573, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897d299d6f1800047cd0cd" + }, + { + "created_at": "2022-05-22T00:00:31.592Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 340013, + "type": "NORMAL", + "rate": 0.5642, + "percent": -30, + "pumpId": 453978, + "endId": 453982, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897d299d6f1800047cd0cf" + }, + { + "created_at": "2022-05-22T00:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 30096, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453974, + "endId": 453977, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897c139d6f1800047cd0ca" + }, + { + "created_at": "2022-05-21T23:55:56.658Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 243342, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453974, + "endId": 453977, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897c139d6f1800047cd0ca" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.54, + "created_at": "2022-05-21T23:50:30.757Z", + "date": 1653177030757, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21572, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897ad171a363000480abcb" + }, + { + "created_at": "2022-05-21T23:46:13.228Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 573000, + "type": "FAKE_EXTENDED", + "rate": 2.561162303664922, + "absolute": 2.561162303664922, + "pumpId": 21571, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628979d571a363000480abc9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-21T23:40:59.180Z", + "date": 1653176459180, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21570, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289788d71a363000480abc4" + }, + { + "created_at": "2022-05-21T23:40:57.936Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304306, + "type": "NORMAL", + "rate": 1.6842000000000001, + "percent": 110, + "pumpId": 453959, + "endId": 453963, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289788e71a363000480abc6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T23:20:51.857Z", + "date": 1653175251857, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21569, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628973eb71a363000480abba" + }, + { + "created_at": "2022-05-21T23:16:23.121Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1472326, + "type": "NORMAL", + "rate": 1.1228, + "percent": 40, + "pumpId": 453954, + "endId": 453958, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628972de37d09a00043f2b24" + }, + { + "created_at": "2022-05-21T23:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 16, + "durationInMilliseconds": 983121, + "type": "NORMAL", + "rate": 0.802, + "percent": 0, + "_id": "neutral_1653171415806" + }, + { + "created_at": "2022-05-21T22:16:55.806Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 43, + "durationInMilliseconds": 2584194, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653171415806" + }, + { + "created_at": "2022-05-21T22:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 16, + "durationInMilliseconds": 1015806, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453943, + "endId": 453951, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957129bf1e6000482ff9a" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-21T21:24:43.261Z", + "date": 1653168283261, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21568, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628958a49bf1e6000482ff9c" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T21:17:49.628Z", + "date": 1653167869628, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21567, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957109bf1e6000482ff99" + }, + { + "created_at": "2022-05-21T21:17:43.507Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 42, + "durationInMilliseconds": 2536493, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453943, + "endId": 453951, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957129bf1e6000482ff9a" + }, + { + "created_at": "2022-05-21T21:10:55.350Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 406671, + "type": "NORMAL", + "rate": 1.0049000000000001, + "percent": 30, + "pumpId": 453940, + "endId": 453942, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628955629bf1e6000482ff94" + }, + { + "created_at": "2022-05-21T21:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 653862, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453936, + "endId": 453939, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894e5580fc7e00041b22a2" + }, + { + "created_at": "2022-05-21T20:40:34.976Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1165024, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453936, + "endId": 453939, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894e5580fc7e00041b22a2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T20:30:40.892Z", + "date": 1653165040892, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21566, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894bf780fc7e00041b229d" + }, + { + "created_at": "2022-05-21T20:25:40.930Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 891567, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453931, + "endId": 453935, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894aca4493460004e63a3a" + }, + { + "eventType": "Meal Bolus", + "insulin": 9.4, + "created_at": "2022-05-21T20:19:54.209Z", + "date": 1653164394209, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21565, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628949824493460004e63a35" + }, + { + "eventType": "Meal Bolus", + "carbs": 50, + "created_at": "2022-05-21T20:19:34.721Z", + "isValid": true, + "date": 1653164374721, + "_id": "6289499c4493460004e63a36" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T20:11:04.953Z", + "date": 1653163864953, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21564, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628947704493460004e63a30" + }, + { + "created_at": "2022-05-21T20:11:03.814Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 874625, + "type": "NORMAL", + "rate": 1.2563, + "percent": 70, + "pumpId": 453924, + "endId": 453930, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628947574493460004e63a2f" + }, + { + "created_at": "2022-05-21T20:00:37.912Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 623413, + "type": "NORMAL", + "rate": 0.9606999999999999, + "percent": 30, + "pumpId": 453921, + "endId": 453923, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628944fa4493460004e63a29" + }, + { + "created_at": "2022-05-21T20:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 35425, + "type": "NORMAL", + "rate": 0.2956, + "percent": -60, + "pumpId": 453917, + "endId": 453920, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894164598f780004bb3b2f" + }, + { + "created_at": "2022-05-21T19:45:25.759Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 874241, + "type": "NORMAL", + "rate": 0.2888, + "percent": -60, + "pumpId": 453917, + "endId": 453920, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894164598f780004bb3b2f" + }, + { + "created_at": "2022-05-21T19:25:47.539Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1175731, + "type": "NORMAL", + "rate": 0.43320000000000003, + "percent": -40, + "pumpId": 453914, + "endId": 453916, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62893cc8598f780004bb3b25" + }, + { + "created_at": "2022-05-21T19:20:54.174Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293365, + "type": "NORMAL", + "rate": 0.722, + "percent": 0, + "_id": "neutral_1653160854174" + }, + { + "created_at": "2022-05-21T19:10:51.515Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 602659, + "type": "NORMAL", + "rate": 0.7942, + "percent": 10, + "pumpId": 453908, + "endId": 453910, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289394a22fbc8000495b821" + }, + { + "created_at": "2022-05-21T19:01:01.322Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 588703, + "type": "NORMAL", + "rate": 0.2888, + "percent": -60, + "pumpId": 453905, + "endId": 453907, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628936ef22fbc8000495b81c" + }, + { + "created_at": "2022-05-21T19:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 59826, + "type": "NORMAL", + "rate": 0.7942, + "percent": 10, + "pumpId": 453900, + "endId": 453904, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289349522fbc8000495b816" + }, + { + "created_at": "2022-05-21T18:50:58.216Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 541784, + "type": "NORMAL", + "rate": 0.77, + "percent": 10, + "pumpId": 453900, + "endId": 453904, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289349522fbc8000495b816" + }, + { + "created_at": "2022-05-21T18:46:12.499Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285717, + "type": "NORMAL", + "rate": 0.7, + "percent": 0, + "_id": "neutral_1653158772499" + }, + { + "created_at": "2022-05-21T18:30:30.651Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 941848, + "type": "NORMAL", + "rate": 0.91, + "percent": 30, + "pumpId": 453894, + "endId": 453896, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892fda840d8d0004a20bfc" + }, + { + "created_at": "2022-05-21T18:20:44.275Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 584884, + "type": "NORMAL", + "rate": 0.28, + "percent": -60, + "pumpId": 453891, + "endId": 453893, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892d80840d8d0004a20bf7" + }, + { + "created_at": "2022-05-21T18:15:30.389Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 312398, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453888, + "endId": 453890, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892c52840d8d0004a20bf4" + }, + { + "created_at": "2022-05-21T18:00:33.832Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 895066, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453885, + "endId": 453887, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628928ca8809e60004c644e8" + }, + { + "created_at": "2022-05-21T18:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 32345, + "type": "NORMAL", + "rate": 0.35, + "percent": -50, + "pumpId": 453881, + "endId": 453884, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628927b58809e60004c644e5" + }, + { + "created_at": "2022-05-21T17:55:44.739Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 255261, + "type": "NORMAL", + "rate": 0.3295, + "percent": -50, + "pumpId": 453881, + "endId": 453884, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628927b58809e60004c644e5" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-21T17:45:48.032Z", + "date": 1653155148032, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21563, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628925588809e60004c644de" + }, + { + "created_at": "2022-05-21T17:45:45.750Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 597498, + "type": "NORMAL", + "rate": 1.5816, + "percent": 140, + "pumpId": 453876, + "endId": 453880, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628925588809e60004c644e0" + }, + { + "created_at": "2022-05-21T17:40:44.874Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299386, + "type": "NORMAL", + "rate": 0.8567, + "percent": 30, + "pumpId": 453873, + "endId": 453875, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289242b8809e60004c644db" + }, + { + "created_at": "2022-05-21T17:35:46.611Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 295766, + "type": "NORMAL", + "rate": 0.3295, + "percent": -50, + "pumpId": 453870, + "endId": 453872, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628922fe8809e60004c644d8" + }, + { + "created_at": "2022-05-21T17:25:37.912Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 607206, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453867, + "endId": 453869, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628920a41090500004ca4729" + }, + { + "created_at": "2022-05-21T17:20:42.063Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293355, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453864, + "endId": 453866, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891f771090500004ca4726" + }, + { + "created_at": "2022-05-21T17:10:30.971Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 608601, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453861, + "endId": 453863, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891d1b1090500004ca4721" + }, + { + "created_at": "2022-05-21T17:00:45.815Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 582673, + "type": "NORMAL", + "rate": 0.0659, + "percent": -90, + "pumpId": 453858, + "endId": 453860, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891ac01090500004ca471c" + }, + { + "created_at": "2022-05-21T17:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 43325, + "type": "NORMAL", + "rate": 1.4498000000000002, + "percent": 120, + "pumpId": 453852, + "endId": 453857, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628918711090500004ca4716" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T16:55:53.346Z", + "date": 1653152153346, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21562, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289199e1090500004ca4718" + }, + { + "created_at": "2022-05-21T16:50:50.998Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 549002, + "type": "NORMAL", + "rate": 1.4322, + "percent": 120, + "pumpId": 453852, + "endId": 453857, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628918711090500004ca4716" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-21T16:45:50.105Z", + "date": 1653151550105, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21561, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628917431090500004ca4711" + }, + { + "created_at": "2022-05-21T16:45:47.200Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300314, + "type": "NORMAL", + "rate": 1.0415999999999999, + "percent": 60, + "pumpId": 453847, + "endId": 453851, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628917431090500004ca4713" + }, + { + "created_at": "2022-05-21T16:40:54.765Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 290944, + "type": "NORMAL", + "rate": 0.8463, + "percent": 30, + "pumpId": 453844, + "endId": 453846, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289161c1090500004ca470e" + }, + { + "created_at": "2022-05-21T16:35:35.684Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 317593, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453841, + "endId": 453843, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628914eb1090500004ca470b" + }, + { + "created_at": "2022-05-21T16:30:39.072Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 295126, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453838, + "endId": 453840, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913c01090500004ca4708" + }, + { + "created_at": "2022-05-21T16:25:35.342Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 301235, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453835, + "endId": 453837, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913141090500004ca4705" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-21T16:20:30.382Z", + "date": 1653150030382, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21560, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289130f1090500004ca4700" + }, + { + "created_at": "2022-05-21T16:20:27.375Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 306478, + "type": "NORMAL", + "rate": 1.0415999999999999, + "percent": 60, + "pumpId": 453830, + "endId": 453834, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913101090500004ca4702" + }, + { + "created_at": "2022-05-21T16:11:20.186Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 545699, + "type": "NORMAL", + "rate": 0.32550000000000007, + "percent": -50, + "pumpId": 453827, + "endId": 453829, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890f811090500004ca46fc" + }, + { + "created_at": "2022-05-21T16:06:52.798Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 265903, + "type": "NORMAL", + "rate": 0.26039999999999996, + "percent": -60, + "pumpId": 453824, + "endId": 453826, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890e29cf7ee10004a2b1e1" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-21T16:01:01.819Z", + "date": 1653148861819, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21559, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890cc9cf7ee10004a2b1dc" + }, + { + "created_at": "2022-05-21T16:00:58.172Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 344000, + "type": "FAKE_EXTENDED", + "rate": 1.9068139534883721, + "absolute": 1.9068139534883721, + "pumpId": 21558, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890cc9cf7ee10004a2b1dd" + }, + { + "created_at": "2022-05-21T16:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 46830, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453811, + "endId": 453814, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890b82cf7ee10004a2b1d9" + }, + { + "created_at": "2022-05-21T15:55:39.147Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 260853, + "type": "NORMAL", + "rate": 0.0673, + "percent": -90, + "pumpId": 453811, + "endId": 453814, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890b82cf7ee10004a2b1d9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T15:51:00.932Z", + "date": 1653148260932, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21557, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890a6dcf7ee10004a2b1d4" + }, + { + "created_at": "2022-05-21T15:50:58.818Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 278838, + "type": "NORMAL", + "rate": 1.1441000000000001, + "percent": 70, + "pumpId": 453806, + "endId": 453810, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890a6ecf7ee10004a2b1d6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T15:40:59.961Z", + "date": 1653147659961, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21556, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890811cf7ee10004a2b1cf" + }, + { + "created_at": "2022-05-21T15:35:20.343Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 935989, + "type": "NORMAL", + "rate": 1.0095, + "percent": 50, + "pumpId": 453800, + "endId": 453805, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628906e3cf7ee10004a2b1cc" + }, + { + "created_at": "2022-05-21T15:31:00.492Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 258353, + "type": "NORMAL", + "rate": 0.0673, + "percent": -90, + "pumpId": 453797, + "endId": 453799, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628905b6c9346b0004863368" + }, + { + "created_at": "2022-05-21T15:25:55.840Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303154, + "type": "NORMAL", + "rate": 0.3365000000000001, + "percent": -50, + "pumpId": 453794, + "endId": 453796, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890488c9346b0004863365" + }, + { + "created_at": "2022-05-21T15:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1553350, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453790, + "endId": 453793, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288fa1b0e0c880004d58de2" + }, + { + "created_at": "2022-05-21T14:41:07.802Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 18, + "durationInMilliseconds": 1132198, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453790, + "endId": 453793, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288fa1b0e0c880004d58de2" + }, + { + "created_at": "2022-05-21T14:30:59.772Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 605542, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453787, + "endId": 453789, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f7a60e0c880004d58ddd" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-21T14:25:43.954Z", + "date": 1653143143954, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21555, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f6770e0c880004d58dd9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.78, + "created_at": "2022-05-21T14:15:46.926Z", + "date": 1653142546926, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21554, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f4152634cd0004296072" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.86, + "created_at": "2022-05-21T14:05:34.493Z", + "date": 1653141934493, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21553, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f1b82634cd000429606d" + }, + { + "created_at": "2022-05-21T14:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 30, + "durationInMilliseconds": 1857281, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453769, + "endId": 453786, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e8910f1be700041e5a02" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.58, + "created_at": "2022-05-21T13:55:47.615Z", + "date": 1653141347615, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21552, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ef752634cd0004296068" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.98, + "created_at": "2022-05-21T13:45:57.753Z", + "date": 1653140757753, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21551, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ed160f1be700041e5a0c" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.6, + "created_at": "2022-05-21T13:36:02.971Z", + "date": 1653140162971, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21550, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ead30f1be700041e5a08" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.58, + "created_at": "2022-05-21T13:30:42.515Z", + "date": 1653139842515, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21549, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e98c0f1be700041e5a04" + }, + { + "created_at": "2022-05-21T13:26:18.959Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 33, + "durationInMilliseconds": 2021041, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453769, + "endId": 453786, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e8910f1be700041e5a02" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.74, + "created_at": "2022-05-21T13:10:43.719Z", + "date": 1653138643719, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21548, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e5520f1be700041e59f9" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.04, + "created_at": "2022-05-21T13:00:56.399Z", + "date": 1653138056399, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e2970f1be700041e59f4" + }, + { + "created_at": "2022-05-21T13:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 26, + "durationInMilliseconds": 1576482, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453759, + "endId": 453768, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288da470f1be700041e59e4" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.24, + "created_at": "2022-05-21T12:55:30.825Z", + "date": 1653137730825, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21546, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e1500f1be700041e59f1" + }, + { + "created_at": "2022-05-21T12:25:26.042Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 34, + "durationInMilliseconds": 2073958, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453759, + "endId": 453768, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288da470f1be700041e59e4" + }, + { + "eventType": "Meal Bolus", + "carbs": 30, + "created_at": "2022-05-21T12:12:44.000Z", + "isValid": true, + "date": 1653135164000, + "_id": "6288d7570f1be700041e59dd" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T12:10:34.513Z", + "date": 1653135034513, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21545, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288d6ca0f1be700041e59db" + }, + { + "created_at": "2022-05-21T12:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1523557, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453752, + "endId": 453758, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cc5d8e9ed800049b39f4" + }, + { + "created_at": "2022-05-21T11:26:10.112Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 33, + "durationInMilliseconds": 2029888, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453752, + "endId": 453758, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cc5d8e9ed800049b39f4" + }, + { + "eventType": "Meal Bolus", + "insulin": 8.22, + "created_at": "2022-05-21T11:23:36.043Z", + "date": 1653132216043, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21544, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cbc78e9ed800049b39ef" + }, + { + "eventType": "Meal Bolus", + "carbs": 50, + "created_at": "2022-05-21T11:23:33.579Z", + "isValid": true, + "date": 1653132213579, + "_id": "6288cbe08e9ed800049b39f1" + }, + { + "created_at": "2022-05-21T11:21:02.281Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299000, + "type": "FAKE_EXTENDED", + "rate": 1.6932107023411371, + "absolute": 1.6932107023411371, + "pumpId": 21543, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cb308e9ed800049b39ee" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T11:15:45.765Z", + "date": 1653131745765, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21542, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c9e98e9ed800049b39e9" + }, + { + "created_at": "2022-05-21T11:15:43.070Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 308169, + "type": "NORMAL", + "rate": 1.533, + "percent": 110, + "pumpId": 453738, + "endId": 453742, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c9e98e9ed800049b39eb" + }, + { + "created_at": "2022-05-21T11:10:35.181Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 305390, + "type": "NORMAL", + "rate": 0.073, + "percent": -90, + "pumpId": 453735, + "endId": 453737, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c8bb8e9ed800049b39e7" + }, + { + "created_at": "2022-05-21T11:00:50.721Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 582968, + "type": "NORMAL", + "rate": 0.21899999999999997, + "percent": -70, + "pumpId": 453732, + "endId": 453734, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c6661991280004dce46a" + }, + { + "created_at": "2022-05-21T11:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 49281, + "type": "NORMAL", + "rate": 1.022, + "percent": 40, + "pumpId": 453728, + "endId": 453731, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c5381991280004dce466" + }, + { + "created_at": "2022-05-21T10:55:43.162Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 256838, + "type": "NORMAL", + "rate": 1.0248, + "percent": 40, + "pumpId": 453728, + "endId": 453731, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c5381991280004dce466" + }, + { + "created_at": "2022-05-21T10:50:29.463Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 312203, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453725, + "endId": 453727, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c40a1991280004dce463" + }, + { + "created_at": "2022-05-21T10:45:42.010Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285961, + "type": "NORMAL", + "rate": 0.0732, + "percent": -90, + "pumpId": 453722, + "endId": 453724, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c2dd1991280004dce460" + }, + { + "created_at": "2022-05-21T10:40:32.888Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 306629, + "type": "NORMAL", + "rate": 0.2928, + "percent": -60, + "pumpId": 453719, + "endId": 453721, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c1ae1991280004dce45d" + }, + { + "created_at": "2022-05-21T10:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2430396, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453715, + "endId": 453718, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288b09fc9c02c00041f7efb" + }, + { + "created_at": "2022-05-21T09:27:51.738Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 32, + "durationInMilliseconds": 1928262, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453715, + "endId": 453718, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288b09fc9c02c00041f7efb" + }, + { + "created_at": "2022-05-21T09:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 27, + "durationInMilliseconds": 1670246, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453708, + "endId": 453714, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a50699fc930004d6bdea" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-21T08:58:07.216Z", + "date": 1653123487216, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21541, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a9a499fc930004d6bdf2" + }, + { + "created_at": "2022-05-21T08:38:27.621Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 21, + "durationInMilliseconds": 1292379, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453708, + "endId": 453714, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a50699fc930004d6bdea" + }, + { + "created_at": "2022-05-21T08:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 38, + "durationInMilliseconds": 2306129, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453704, + "endId": 453707, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889bb2a4cc860004a251c6" + }, + { + "created_at": "2022-05-21T07:58:04.003Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 1, + "durationInMilliseconds": 115997, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453704, + "endId": 453707, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889bb2a4cc860004a251c6" + }, + { + "eventType": "Meal Bolus", + "insulin": 13.56, + "created_at": "2022-05-21T07:52:52.394Z", + "date": 1653119572394, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21540, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889a5d7ff1e700040f17d9" + }, + { + "eventType": "Meal Bolus", + "carbs": 70, + "created_at": "2022-05-21T07:52:37.930Z", + "isValid": true, + "date": 1653119557930, + "_id": "62889a907ff1e700040f17db" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-21T07:38:42.955Z", + "date": 1653118722955, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21539, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288971c7ff1e700040f17d2" + }, + { + "created_at": "2022-05-21T07:38:40.317Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1153999, + "type": "FAKE_EXTENDED", + "rate": 2.251401644195532, + "absolute": 2.251401644195532, + "pumpId": 21538, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628897027ff1e700040f17d0" + }, + { + "created_at": "2022-05-21T07:28:33.763Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 595482, + "type": "NORMAL", + "rate": 0.377, + "percent": -50, + "pumpId": 453689, + "endId": 453691, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628894a17ff1e700040f17cc" + }, + { + "created_at": "2022-05-21T07:13:06.679Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 924592, + "type": "NORMAL", + "rate": 0.2262, + "percent": -70, + "pumpId": 453686, + "endId": 453688, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889106149196000412bf59" + }, + { + "created_at": "2022-05-21T07:08:35.905Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 269284, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453683, + "endId": 453685, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288900b149196000412bf56" + }, + { + "created_at": "2022-05-21T07:03:41.224Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292184, + "type": "NORMAL", + "rate": 0.0754, + "percent": -90, + "pumpId": 453680, + "endId": 453682, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62888edd149196000412bf53" + }, + { + "created_at": "2022-05-21T07:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 3, + "durationInMilliseconds": 219733, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453676, + "endId": 453679, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628887058ff3530004dc606e" + }, + { + "created_at": "2022-05-21T06:30:07.195Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1792805, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453676, + "endId": 453679, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628887058ff3530004dc606e" + }, + { + "created_at": "2022-05-21T06:12:44.359Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1041347, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453673, + "endId": 453675, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628882e48ff3530004dc6064" + }, + { + "created_at": "2022-05-21T06:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 12, + "durationInMilliseconds": 762867, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453669, + "endId": 453672, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ea0e964810004aa5663" + }, + { + "created_at": "2022-05-21T05:54:16.341Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 343659, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453669, + "endId": 453672, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ea0e964810004aa5663" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.44, + "created_at": "2022-05-21T05:47:59.042Z", + "date": 1653112079042, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21537, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887d27e964810004aa5660" + }, + { + "created_at": "2022-05-21T05:47:56.189Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 371000, + "type": "FAKE_EXTENDED", + "rate": 3.305911051212938, + "absolute": 3.305911051212938, + "pumpId": 21536, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887d0ee964810004aa565f" + }, + { + "created_at": "2022-05-21T05:42:45.087Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299481, + "type": "NORMAL", + "rate": 0.8613000000000001, + "percent": 10, + "pumpId": 453657, + "endId": 453659, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887be0e964810004aa565c" + }, + { + "created_at": "2022-05-21T05:37:33.183Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 309411, + "type": "NORMAL", + "rate": 0.0783, + "percent": -90, + "pumpId": 453654, + "endId": 453656, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ab2e964810004aa5659" + }, + { + "created_at": "2022-05-21T05:12:51.790Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1479904, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453651, + "endId": 453653, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628874e5363e6c0004f710db" + }, + { + "created_at": "2022-05-21T05:07:46.012Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304280, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453648, + "endId": 453650, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628873b8363e6c0004f710d8" + }, + { + "created_at": "2022-05-21T05:02:53.773Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289742, + "type": "NORMAL", + "rate": 0.1566, + "percent": -80, + "pumpId": 453645, + "endId": 453647, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288728a363e6c0004f710d5" + }, + { + "created_at": "2022-05-21T05:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 171279, + "type": "NORMAL", + "rate": 1.5659999999999998, + "percent": 100, + "pumpId": 453639, + "endId": 453644, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715d363e6c0004f710d2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T04:57:53.298Z", + "date": 1653109073298, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21535, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715c363e6c0004f710d1" + }, + { + "created_at": "2022-05-21T04:57:50.147Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 129853, + "type": "NORMAL", + "rate": 1.472, + "percent": 100, + "pumpId": 453639, + "endId": 453644, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715d363e6c0004f710d2" + }, + { + "created_at": "2022-05-21T04:52:45.360Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303299, + "type": "NORMAL", + "rate": 1.0304, + "percent": 40, + "pumpId": 453636, + "endId": 453638, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288702f363e6c0004f710ce" + }, + { + "created_at": "2022-05-21T04:37:34.478Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 909400, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453633, + "endId": 453635, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62886c9719e2e60004989bb7" + }, + { + "created_at": "2022-05-21T04:27:51.392Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 581589, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453630, + "endId": 453632, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62886a5519e2e60004989bb2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T04:23:04.285Z", + "date": 1653106984285, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21534, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288694019e2e60004989baf" + }, + { + "created_at": "2022-05-21T04:23:00.631Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289268, + "type": "NORMAL", + "rate": 0.4416, + "percent": -40, + "pumpId": 453625, + "endId": 453629, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288692719e2e60004989bae" + }, + { + "created_at": "2022-05-21T04:18:00.399Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 291000, + "type": "FAKE_EXTENDED", + "rate": 3.210226804123711, + "absolute": 3.210226804123711, + "pumpId": 21533, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288681219e2e60004989bab" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.66, + "created_at": "2022-05-21T04:13:03.102Z", + "date": 1653106383102, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21532, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628866e342c1220004f95738" + }, + { + "created_at": "2022-05-21T04:13:00.412Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299987, + "type": "FAKE_EXTENDED", + "rate": 3.3759999999999994, + "absolute": 3.3759999999999994, + "pumpId": 21531, + "endId": 21533, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628866e342c1220004f95739" + }, + { + "created_at": "2022-05-21T04:07:39.846Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 307758, + "type": "NORMAL", + "rate": 1.0304, + "percent": 40, + "pumpId": 453609, + "endId": 453611, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288659d42c1220004f95735" + }, + { + "created_at": "2022-05-21T04:02:57.240Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 280112, + "type": "NORMAL", + "rate": 0.368, + "percent": -50, + "pumpId": 453606, + "endId": 453608, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288648842c1220004f95732" + }, + { + "created_at": "2022-05-21T04:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 175749, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453602, + "endId": 453605, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628860fe42c1220004f9572b" + }, + { + "created_at": "2022-05-21T03:47:49.532Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 12, + "durationInMilliseconds": 730468, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453602, + "endId": 453605, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628860fe42c1220004f9572b" + }, + { + "created_at": "2022-05-21T03:43:04.365Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283670, + "type": "NORMAL", + "rate": 0.7001999999999999, + "percent": -10, + "pumpId": 453599, + "endId": 453601, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885fcf42c1220004f95728" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.52, + "created_at": "2022-05-21T03:38:07.812Z", + "date": 1653104287812, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21530, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885ea5293f3e00042c31e0" + }, + { + "created_at": "2022-05-21T03:38:05.030Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 290000, + "type": "FAKE_EXTENDED", + "rate": 3.2607586206896553, + "absolute": 3.2607586206896553, + "pumpId": 21529, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885ea5293f3e00042c31e1" + }, + { + "created_at": "2022-05-21T03:32:50.531Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303634, + "type": "NORMAL", + "rate": 0.2334, + "percent": -70, + "pumpId": 453587, + "endId": 453589, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885d78293f3e00042c31dd" + }, + { + "created_at": "2022-05-21T03:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 32, + "durationInMilliseconds": 1969040, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453583, + "endId": 453586, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628851a75151b5000462a1e1" + }, + { + "created_at": "2022-05-21T02:42:42.383Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1037617, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453583, + "endId": 453586, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628851a75151b5000462a1e1" + }, + { + "created_at": "2022-05-21T02:37:54.170Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 286717, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453580, + "endId": 453582, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628850925151b5000462a1de" + }, + { + "created_at": "2022-05-21T02:32:55.252Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 297423, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453577, + "endId": 453579, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884f645151b5000462a1db" + }, + { + "created_at": "2022-05-21T02:28:10.152Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283605, + "type": "NORMAL", + "rate": 0.2968, + "percent": -60, + "pumpId": 453574, + "endId": 453576, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884e4993668c0004a30516" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.5, + "created_at": "2022-05-21T02:23:08.766Z", + "date": 1653099788766, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21528, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884d1b93668c0004a30512" + }, + { + "created_at": "2022-05-21T02:23:06.229Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294000, + "type": "FAKE_EXTENDED", + "rate": 7.10934693877551, + "absolute": 7.10934693877551, + "pumpId": 21527, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884d1b93668c0004a30513" + }, + { + "created_at": "2022-05-21T02:17:55.333Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299966, + "type": "NORMAL", + "rate": 0.5936, + "percent": -20, + "pumpId": 453562, + "endId": 453564, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884bd493668c0004a3050f" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.92, + "created_at": "2022-05-21T02:13:06.284Z", + "date": 1653099186284, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21526, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884ac093668c0004a3050b" + }, + { + "created_at": "2022-05-21T02:13:03.301Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283000, + "type": "FAKE_EXTENDED", + "rate": 3.0317526501766783, + "absolute": 3.0317526501766783, + "pumpId": 21525, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884ac093668c0004a3050c" + }, + { + "created_at": "2022-05-21T02:02:49.661Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 601864, + "type": "NORMAL", + "rate": 0.5201, + "percent": -30, + "pumpId": 453548, + "endId": 453552, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288484c93668c0004a30503" + }, + { + "created_at": "2022-05-21T02:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 168169, + "type": "NORMAL", + "rate": 0.6687000000000001, + "percent": -10, + "pumpId": 453542, + "endId": 453547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a30500" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-21T01:57:52.501Z", + "date": 1653098272501, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21524, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a304ff" + }, + { + "created_at": "2022-05-21T01:57:50.546Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 129454, + "type": "NORMAL", + "rate": 0.7155, + "percent": -10, + "pumpId": 453542, + "endId": 453547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a30500" + }, + { + "created_at": "2022-05-21T01:52:49.925Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300621, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653097969925" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-21T01:47:59.874Z", + "date": 1653097679874, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21523, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628844e49d7ff00004aaf0c0" + }, + { + "created_at": "2022-05-21T01:47:56.925Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293000, + "type": "FAKE_EXTENDED", + "rate": 3.00660409556314, + "absolute": 3.00660409556314, + "pumpId": 21522, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628844e49d7ff00004aaf0c1" + }, + { + "created_at": "2022-05-21T01:42:53.604Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292860, + "type": "NORMAL", + "rate": 0.3975, + "percent": -50, + "pumpId": 453530, + "endId": 453532, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628843b79d7ff00004aaf0bd" + }, + { + "created_at": "2022-05-21T01:37:38.923Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 313186, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453527, + "endId": 453529, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628842709d7ff00004aaf0ba" + }, + { + "created_at": "2022-05-21T01:32:51.444Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284984, + "type": "NORMAL", + "rate": 0.318, + "percent": -60, + "pumpId": 453524, + "endId": 453526, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288415b9d7ff00004aaf0b7" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.5, + "created_at": "2022-05-21T01:27:52.076Z", + "date": 1653096472076, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21521, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288402d9d7ff00004aaf0b4" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.6, + "created_at": "2022-05-21T01:18:07.619Z", + "date": 1653095887619, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21520, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62883de332ad2e0004b68cca" + }, + { + "created_at": "2022-05-21T01:18:05.464Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 876000, + "type": "FAKE_EXTENDED", + "rate": 5.068972602739726, + "absolute": 5.068972602739726, + "pumpId": 21519, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62883de332ad2e0004b68cc9" + }, + { + "created_at": "2022-05-21T01:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 18, + "durationInMilliseconds": 1085464, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-21T00:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0.76, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T23:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0.738, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T22:37:56.443Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 22, + "durationInMilliseconds": 1323557, + "type": "NORMAL", + "rate": 0.7239999999999999, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T22:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 37, + "durationInMilliseconds": 2276443, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453504, + "endId": 453510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ad" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-20T21:38:36.984Z", + "date": 1653082716984, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21518, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ac" + }, + { + "created_at": "2022-05-20T21:38:35.831Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 21, + "durationInMilliseconds": 1284169, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453504, + "endId": 453510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ad" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-20T21:28:21.755Z", + "date": 1653082101755, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21517, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628807f71664860004cb51a6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.18, + "created_at": "2022-05-20T21:18:34.069Z", + "date": 1653081514069, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21516, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628805b61664860004cb51a2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-20T21:08:33.702Z", + "date": 1653080913702, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21515, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288035c1664860004cb519c" + }, + { + "created_at": "2022-05-20T21:08:31.728Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 30, + "durationInMilliseconds": 1801610, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453495, + "endId": 453503, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288035c1664860004cb519d" + }, + { + "eventType": "Meal Bolus", + "carbs": 20, + "created_at": "2022-05-20T21:00:25.000Z", + "isValid": true, + "date": 1653080425000, + "_id": "6288995e7ff1e700040f17d6" + }, + { + "created_at": "2022-05-20T21:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 8, + "durationInMilliseconds": 510237, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-20T20:53:24.438Z", + "date": 1653080004438, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21514, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ffd41664860004cb5195" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-20T20:43:26.220Z", + "date": 1653079406220, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21513, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287fd7ba2dcb700046b8728" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-20T20:33:38.526Z", + "date": 1653078818526, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21512, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287fb3aa2dcb700046b8724" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-20T20:22:54.311Z", + "date": 1653078174311, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21511, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f8aba2dcb700046b871e" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-20T20:17:40.808Z", + "date": 1653077860808, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f765a2dcb700046b871b" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-20T20:08:27.325Z", + "date": 1653077307325, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21509, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f54db2af570004d8c046" + }, + { + "created_at": "2022-05-20T20:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "created_at": "2022-05-20T19:32:50.116Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 27, + "durationInMilliseconds": 1629884, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "eventType": "Meal Bolus", + "insulin": 9.58, + "created_at": "2022-05-20T19:27:22.747Z", + "date": 1653074842747, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21508, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287eb9d72b1ae0004593fea" + }, + { + "eventType": "Meal Bolus", + "carbs": 50, + "created_at": "2022-05-20T19:27:08.312Z", + "isValid": true, + "date": 1653074828312, + "_id": "6287ebb772b1ae0004593fec" + }, + { + "created_at": "2022-05-20T19:08:06.145Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1481495, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453473, + "endId": 453477, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287e73072b1ae0004593fe2" + }, + { + "created_at": "2022-05-20T19:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 8, + "durationInMilliseconds": 484657, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453469, + "endId": 453472, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287dedc72b1ae0004593fd2" + }, + { + "created_at": "2022-05-20T18:33:00.960Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 26, + "durationInMilliseconds": 1619040, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453469, + "endId": 453472, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287dedc72b1ae0004593fd2" + }, + { + "created_at": "2022-05-20T18:17:39.957Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 918518, + "type": "NORMAL", + "rate": 0.5591999999999999, + "percent": -20, + "pumpId": 453466, + "endId": 453468, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287db4963f1e20004e4e5a7" + }, + { + "created_at": "2022-05-20T18:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1059957, + "type": "NORMAL", + "rate": 0.699, + "percent": 0, + "_id": "neutral_1653069600000" + } +] From 4c690eefd6d0bd3259b89544f8ab0f7862976f07 Mon Sep 17 00:00:00 2001 From: Andrei Vereha Date: Sun, 19 Jun 2022 19:00:19 +0200 Subject: [PATCH 27/71] fix discard pod --- .../pump/omnipod/dash/driver/comm/session/Connection.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt index b403cb7af2..bfb565830c 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt @@ -6,6 +6,7 @@ import android.bluetooth.BluetoothManager import android.bluetooth.BluetoothProfile import android.content.Context import android.os.SystemClock +import info.nightscout.androidaps.Constants import info.nightscout.androidaps.extensions.toHex import info.nightscout.androidaps.plugins.pump.omnipod.dash.BuildConfig import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.Ids @@ -137,11 +138,16 @@ class Connection( connectionWaitCond.timeoutMs?.let { bleCommCallbacks.waitForConnection(it) } + val startWaiting = System.currentTimeMillis() connectionWaitCond.stopConnection?.let { while (!bleCommCallbacks.waitForConnection(STOP_CONNECTING_CHECK_INTERVAL_MS)) { if (it.count == 0L) { throw ConnectException("stopConnecting called") } + val secondsElapsed = (System.currentTimeMillis() - startWaiting) / 1000 + if (secondsElapsed > MAX_WAIT_FOR_CONNECTION_SECONDS) { + throw ConnectException("connection timeout") + } } } } catch (e: InterruptedException) { @@ -199,6 +205,7 @@ class Connection( const val BASE_CONNECT_TIMEOUT_MS = 10000L const val MIN_DISCOVERY_TIMEOUT_MS = 10000L const val STOP_CONNECTING_CHECK_INTERVAL_MS = 500L + const val MAX_WAIT_FOR_CONNECTION_SECONDS = Constants.PUMP_MAX_CONNECTION_TIME_IN_SECONDS + 10 const val SLEEP_WHEN_FAILING_TO_CONNECT_GATT = 10000L } } From dc0b6ac9f7ee1d37825e58df87ff64f976e72bfe Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sun, 19 Jun 2022 22:29:25 +0200 Subject: [PATCH 28/71] New Crowdin updates (#1837) * Update source file strings.xml * New translations strings.xml (French) * New translations strings.xml (Czech) * Update source file strings.xml * New translations strings.xml (Turkish) * New translations strings.xml (Spanish) * New translations strings.xml (Czech) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations strings.xml (Turkish) --- app/src/main/res/values-cs-rCZ/strings.xml | 2 ++ app/src/main/res/values-es-rES/strings.xml | 2 ++ app/src/main/res/values-fr-rFR/strings.xml | 2 ++ app/src/main/res/values-tr-rTR/strings.xml | 3 ++- pump-common/src/main/res/values-es-rES/strings.xml | 5 +++++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index bf56dddb8f..5fbe88be2f 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -6,6 +6,7 @@ Bezpečnost zadání ošetřeni Maximální povolený bolus [U] Maximální počet sacharidů [g] + Hodnota glykémie pro zastavení inzulínu Nastavení pluginu %1$s Nastavení Obnovit ošetření z NS @@ -592,6 +593,7 @@ Tato hodnota je v kontextu OpenAPS nazývána Max IOB.\nOpenAPS nikdy nepřidá inzulín, pokud je současné IOB větší než tato hodnota Maximální doba absorpce sacharidů [h] Doba, po které jsou všechny sacharidy považovány za strávené. Zbylé budou oříznuty. + Hodnota glykémie, při níž bude vydávání inzulinu zastaveno. Výchozí hodnota využívá standardní cílový model. Uživatel může nastavit hodnoty od 3,3 mmol/l do 5,5 mmol/l. Při hodnotách pod 3,6 mmol/l se použije výchozí model. Zobrazovat kolonku poznámky v dialozích ošetření Další Zpět diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index edbe12fdeb..0f21604eb6 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -6,6 +6,7 @@ Seguridad de tratamientos Máximo bolo permitido [U] Máximos carbohidratos permitidos [g] + Nivel de glucosa por debajo de valor LGS (Suspensión por glucosa baja) Preferencias de %1$s Preferencias Actualizar los tratamientos desde Nightscout @@ -592,6 +593,7 @@ Este valor se denomina \"Max IOB\", en el contexto de OpenAPS\nOpenAPS no podrá superar esta cantidad de insulina activa (IOB) Tiempo máximo de absorción de la comida [h] Tiempo en el que cualquier comida se considera absorbida. Los carbohidratos restantes serán cortados. + Valor de glucosa por debajo del cual se suspende la administración de insulina. El valor predeterminado utiliza el modelo de objetivo estándar. El usuario puede establecer un valor entre 60mg/dl (3. mmol/l) y 100mg/dl (5.5mmol/l). Valores por debajo de 65/3.6 usan el modelo predeterminado Mostrar el campo notas en diálogos de tratamientos Siguiente Anterior diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 9e0ec5ebc8..e160225133 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -6,6 +6,7 @@ Traitements de sécurité Maximum Bolus autorisé [U] Maximum de Glucides autorisé [g] + Glycémie au-dessous de laquelle se déclenche l\'Arrêt Glycémie Basse Préférences de %1$s Préférences Actualiser les données depuis NS @@ -593,6 +594,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Cette valeur est appelée Max IA (Insuline Active) dans le contaxte OpenAPS\nOpenAPS n’ajoutera pas plus d’insuline si l\'IA (Insuline Active) actuelle est supérieure à cette valeur Durée maximale d’absorption pour un repas [h] Durée où n’importe quel repas est considéré absorbé. Les glucides restants ne seront pas pris en compte. + Valeur glycémique au-dessous de laquelle l\'injection de l\'insuline est suspendu. La valeur par défaut utilise le modèle standard de la cible. L\'utilisateur peut choisir entre 60mg/dl (3.3mmol/l) et 100mg/dl (5.5mmol/l). Les valeurs au-dessous de 65/3.6 déclenchent l\'utilisation du modèle standard Affiche les notes dans les dialogues Suivant Préc diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 510535d53d..f0383b2d42 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -283,7 +283,7 @@ Varsayılan değer: 0.7\nBu otoduyarlılık için diğer güvenlik önlemidir. Otoduyarlılığın bazal oranlarını ne kadar düşürebileceğini ve İnsülin Duyarlılık Faktörü ve KŞ hedeflerini ne kadar yüksek tutabileceğini gösterir. Otoduyarlılık, hedefleri de ayarlar Varsayılan değer: true\nBu otoduyarlılığın İnsülin Duyarlılık Faktörü ve bazallara ek olarak KŞ hedeflerinin ayarlanmasında kullanılır. - Varsayılan değer: 2\nYemek bolusu yaptıktan sonra bolus erteleme devreye girer, bu nedenle döngü, yeni yemek yediğinizde düşük geçici bazallar-hedefler ile etkileşime girmez. Buradaki örnek ve varsayılan 2\'dir; bu nedenle 3 saatlik bir DIA, bolus ertelemenin kademeli olarak 1,5 saat (3DIA/2) üzerinden aşamalı olarak sonlandırılacağı anlamına gelir. + Varsayılan değer: 2\nYemek bolusu yaptıktan sonra bolus erteleme devreye girer, bu nedenle döngü, yeni yemek yediğinizde düşük geçici bazallar-hedefler ile etkileşime girmez. Buradaki örnek ve varsayılan 2\'dir; bu nedenle 3 saatlik bir İES, bolus ertelemenin kademeli olarak 1,5 saat (3İES/2) üzerinden aşamalı olarak sonlandırılacağı anlamına gelir. Varsayılan değer: 3.0 (AMA) Gelişmiş Yemek Asistanı veya 8.0 (SMB) Super Micro Bolus. Bu 5 dakika başına varsayılan karbonhidrat emilimi için bir ayardır. Standart değer AMA için 3mg/dl/5dk aynı şekilde SMB 8mg/dl/5dk dir. Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden daha fazla düştüğü veya beklenildiği kadar yükselmediği zamanlarda gelecekte yapılacak tahminlerde KŞ\'nin hesaplanmasında ne kadar karbonhidrat emilimi gerçekleşeceğini öngörür. Dikkat!\nNormalde aşağıdaki bu değerleri değiştirmek zorunda değilsiniz. Lütfen burayı TIKLAYIN ve metni OKUYUN ve bu değerlerden herhangi birini değiştirmeden önce ANLADIĞINIZDAN emin olun. @@ -593,6 +593,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Bu değer OpenAPS bağlamında Max IOB (Aktif İnsülin) olarak adlandırılır\nOpenAPS, mevcut IOB bu değerden daha büyükse daha fazla insülin eklemez Besinin maksimum emilim süresi [h] Herhangi bir öğünün emildiği kabul edilen zaman. Kalan karbonhidratlar kesilecek. + Altına düştüğünde insülinin askıya alındığı KŞ değeri. Varsayılan değer, standart hedef modeli kullanır. Kullanıcı değeri 60mg/dl (3,3mmol/l) ile 100mg/dl(5.5mmol/l) arasında ayarlayabilir. 65/3,6\'nın altındaki değerler varsayılan modelin kullanılmasına neden olur Tedavi diyaloglarında not alanını göster İleri Önceki diff --git a/pump-common/src/main/res/values-es-rES/strings.xml b/pump-common/src/main/res/values-es-rES/strings.xml index 2dedba62c8..d2219bdce2 100644 --- a/pump-common/src/main/res/values-es-rES/strings.xml +++ b/pump-common/src/main/res/values-es-rES/strings.xml @@ -3,17 +3,22 @@ Operación no soportada por la bomba y/o por el controlador. Operación no soportada todavía por la bomba. + OK Nunca contactado + En fase de inicio Error con la comunicación Tiempo de espera en la comunicación Bomba no alcanzable Configuración inválida Activo + Suspendida Basales + Configuraciones Notificaciones Estadísticas + Desconocidas Todo Bolos Cebado From 6b6ba15852a0f1487dcae7c352b1a749357327ff Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 20 Jun 2022 11:34:12 +0200 Subject: [PATCH 29/71] Automation: catch instantiation errors --- .../androidaps/dialogs/WizardDialog.kt | 17 ++-- .../general/automation/triggers/Trigger.kt | 93 ++++++++++--------- 2 files changed, 57 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt index c234ef63a2..8af683bcdb 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt @@ -72,7 +72,7 @@ class WizardDialog : DaggerDialogFragment() { private var wizard: BolusWizard? = null private var calculatedPercentage = 100.0 private var calculatedCorrection = 0.0 - private var correctionPercent = false + private var usePercentage = false private var carbsPassedIntoWizard = 0.0 private var notesPassedIntoWizard = "" private var okClicked: Boolean = false // one shot guards @@ -157,7 +157,7 @@ class WizardDialog : DaggerDialogFragment() { ?: 0.0, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher ) - if (correctionPercent) { + if (usePercentage) { calculatedPercentage = sp.getInt(R.string.key_boluswizard_percentage, 100).toDouble() binding.correctionInput.setParams(calculatedPercentage, 10.0, 200.0, 5.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher) binding.correctionInput.value = calculatedPercentage @@ -176,6 +176,7 @@ class WizardDialog : DaggerDialogFragment() { handler.post { initDialog() } calculatedPercentage = sp.getInt(R.string.key_boluswizard_percentage, 100).toDouble() binding.percentUsed.text = rh.gs(R.string.format_percent, sp.getInt(R.string.key_boluswizard_percentage, 100)) + binding.percentUsed.visibility = (sp.getInt(R.string.key_boluswizard_percentage, 100) != 100 || usePercentage).toVisibility() // ok button binding.okcancel.ok.setOnClickListener { if (okClicked) { @@ -227,8 +228,8 @@ class WizardDialog : DaggerDialogFragment() { run { sp.putBoolean(rh.gs(R.string.key_wizard_correction_percent), isChecked) binding.correctionUnit.text = if (isChecked) "%" else rh.gs(R.string.insulin_unit_shortname) - correctionPercent = binding.correctionPercent.isChecked - if (correctionPercent) { + usePercentage = binding.correctionPercent.isChecked + if (usePercentage) { binding.correctionInput.setParams(calculatedPercentage, 10.0, 200.0, 5.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher) binding.correctionInput.customContentDescription = rh.gs(R.string.a11_correction_percentage) } else { @@ -239,7 +240,7 @@ class WizardDialog : DaggerDialogFragment() { binding.correctionInput.customContentDescription = rh.gs(R.string.a11_correction_units) } binding.correctionInput.updateA11yDescription() - binding.correctionInput.value = if (correctionPercent) calculatedPercentage else Round.roundTo(calculatedCorrection, bolusStep) + binding.correctionInput.value = if (usePercentage) calculatedPercentage else Round.roundTo(calculatedCorrection, bolusStep) } } // profile @@ -320,8 +321,8 @@ class WizardDialog : DaggerDialogFragment() { private fun loadCheckedStates() { binding.bgTrendCheckbox.isChecked = sp.getBoolean(R.string.key_wizard_include_trend_bg, false) binding.cobCheckbox.isChecked = sp.getBoolean(R.string.key_wizard_include_cob, false) - correctionPercent = sp.getBoolean(R.string.key_wizard_correction_percent, false) - binding.correctionPercent.isChecked = correctionPercent + usePercentage = sp.getBoolean(R.string.key_wizard_correction_percent, false) + binding.correctionPercent.isChecked = usePercentage } private fun valueToUnitsToString(value: Double, units: String): String = @@ -370,8 +371,6 @@ class WizardDialog : DaggerDialogFragment() { binding.iobInsulin.text = rh.gs(R.string.formatinsulinunits, -bolusIob.iob - basalIob.basaliob) calculateInsulin() - - binding.percentUsed.visibility = (sp.getInt(R.string.key_boluswizard_percentage, 100) != 100 || correctionPercent).toVisibility() } } diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt index c71eb696bd..0ef07dfab2 100644 --- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt +++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt @@ -24,6 +24,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProv import info.nightscout.androidaps.services.LastLocationDataContainer import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.shared.logging.LTag import info.nightscout.shared.sharedPreferences.SP import org.json.JSONObject import javax.inject.Inject @@ -78,50 +79,54 @@ abstract class Trigger(val injector: HasAndroidInjector) { .toString() fun instantiate(obj: JSONObject): Trigger { - val type = obj.getString("type") - val data = obj.getJSONObject("data") - //val clazz = Class.forName(type).kotlin - //return (clazz.primaryConstructor?.call(injector) as Trigger).fromJSON(data?.toString() ?: "") - return when (type) { - TriggerAutosensValue::class.java.name, // backward compatibility - TriggerAutosensValue::class.java.simpleName -> TriggerAutosensValue(injector).fromJSON(data.toString()) - TriggerBg::class.java.name, - TriggerBg::class.java.simpleName -> TriggerBg(injector).fromJSON(data.toString()) - TriggerBolusAgo::class.java.name, - TriggerBolusAgo::class.java.simpleName -> TriggerBolusAgo(injector).fromJSON(data.toString()) - TriggerBTDevice::class.java.name, - TriggerBTDevice::class.java.simpleName -> TriggerBTDevice(injector).fromJSON(data.toString()) - TriggerIob::class.java.name, - TriggerIob::class.java.simpleName -> TriggerIob(injector).fromJSON(data.toString()) - TriggerCOB::class.java.name, - TriggerCOB::class.java.simpleName -> TriggerCOB(injector).fromJSON(data.toString()) - TriggerConnector::class.java.name, - TriggerConnector::class.java.simpleName -> TriggerConnector(injector).fromJSON(data.toString()) - TriggerDelta::class.java.name, - TriggerDelta::class.java.simpleName -> TriggerDelta(injector).fromJSON(data.toString()) - TriggerDummy::class.java.name, - TriggerDummy::class.java.simpleName -> TriggerDummy(injector).fromJSON(data.toString()) - TriggerIob::class.java.name, - TriggerIob::class.java.simpleName -> TriggerIob(injector).fromJSON(data.toString()) - TriggerLocation::class.java.name, - TriggerLocation::class.java.simpleName -> TriggerLocation(injector).fromJSON(data.toString()) - TriggerProfilePercent::class.java.name, - TriggerProfilePercent::class.java.simpleName -> TriggerProfilePercent(injector).fromJSON(data.toString()) - TriggerPumpLastConnection::class.java.name, - TriggerPumpLastConnection::class.java.simpleName -> TriggerPumpLastConnection(injector).fromJSON(data.toString()) - TriggerRecurringTime::class.java.name, - TriggerRecurringTime::class.java.simpleName -> TriggerRecurringTime(injector).fromJSON(data.toString()) - TriggerTempTarget::class.java.name, - TriggerTempTarget::class.java.simpleName -> TriggerTempTarget(injector).fromJSON(data.toString()) - TriggerTempTargetValue::class.java.name, - TriggerTempTargetValue::class.java.simpleName -> TriggerTempTargetValue(injector).fromJSON(data.toString()) - TriggerTime::class.java.name, - TriggerTime::class.java.simpleName -> TriggerTime(injector).fromJSON(data.toString()) - TriggerTimeRange::class.java.name, - TriggerTimeRange::class.java.simpleName -> TriggerTimeRange(injector).fromJSON(data.toString()) - TriggerWifiSsid::class.java.name, - TriggerWifiSsid::class.java.simpleName -> TriggerWifiSsid(injector).fromJSON(data.toString()) - else -> TriggerConnector(injector) + try { + val type = obj.getString("type") + val data = obj.getJSONObject("data") + //val clazz = Class.forName(type).kotlin + //return (clazz.primaryConstructor?.call(injector) as Trigger).fromJSON(data?.toString() ?: "") + return when (type) { + TriggerAutosensValue::class.java.name, // backward compatibility + TriggerAutosensValue::class.java.simpleName -> TriggerAutosensValue(injector).fromJSON(data.toString()) + TriggerBg::class.java.name, + TriggerBg::class.java.simpleName -> TriggerBg(injector).fromJSON(data.toString()) + TriggerBolusAgo::class.java.name, + TriggerBolusAgo::class.java.simpleName -> TriggerBolusAgo(injector).fromJSON(data.toString()) + TriggerBTDevice::class.java.name, + TriggerBTDevice::class.java.simpleName -> TriggerBTDevice(injector).fromJSON(data.toString()) + TriggerIob::class.java.name, + TriggerIob::class.java.simpleName -> TriggerIob(injector).fromJSON(data.toString()) + TriggerCOB::class.java.name, + TriggerCOB::class.java.simpleName -> TriggerCOB(injector).fromJSON(data.toString()) + TriggerConnector::class.java.name, + TriggerConnector::class.java.simpleName -> TriggerConnector(injector).fromJSON(data.toString()) + TriggerDelta::class.java.name, + TriggerDelta::class.java.simpleName -> TriggerDelta(injector).fromJSON(data.toString()) + TriggerDummy::class.java.name, + TriggerDummy::class.java.simpleName -> TriggerDummy(injector).fromJSON(data.toString()) + TriggerIob::class.java.name, + TriggerIob::class.java.simpleName -> TriggerIob(injector).fromJSON(data.toString()) + TriggerLocation::class.java.name, + TriggerLocation::class.java.simpleName -> TriggerLocation(injector).fromJSON(data.toString()) + TriggerProfilePercent::class.java.name, + TriggerProfilePercent::class.java.simpleName -> TriggerProfilePercent(injector).fromJSON(data.toString()) + TriggerPumpLastConnection::class.java.name, + TriggerPumpLastConnection::class.java.simpleName -> TriggerPumpLastConnection(injector).fromJSON(data.toString()) + TriggerRecurringTime::class.java.name, + TriggerRecurringTime::class.java.simpleName -> TriggerRecurringTime(injector).fromJSON(data.toString()) + TriggerTempTarget::class.java.name, + TriggerTempTarget::class.java.simpleName -> TriggerTempTarget(injector).fromJSON(data.toString()) + TriggerTempTargetValue::class.java.name, + TriggerTempTargetValue::class.java.simpleName -> TriggerTempTargetValue(injector).fromJSON(data.toString()) + TriggerTime::class.java.name, + TriggerTime::class.java.simpleName -> TriggerTime(injector).fromJSON(data.toString()) + TriggerTimeRange::class.java.name, + TriggerTimeRange::class.java.simpleName -> TriggerTimeRange(injector).fromJSON(data.toString()) + TriggerWifiSsid::class.java.name, + TriggerWifiSsid::class.java.simpleName -> TriggerWifiSsid(injector).fromJSON(data.toString()) + else -> TriggerConnector(injector) + } + } catch (e: Exception) { + aapsLogger.error(LTag.AUTOMATION, "Error parsing $obj") } } From bd979d24e501bb9afafa3201918b9f9e93c2fc30 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 20 Jun 2022 18:32:38 +0200 Subject: [PATCH 30/71] fix build --- .../androidaps/plugins/general/automation/triggers/Trigger.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt index 0ef07dfab2..2af7f49ce0 100644 --- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt +++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.kt @@ -128,6 +128,7 @@ abstract class Trigger(val injector: HasAndroidInjector) { } catch (e: Exception) { aapsLogger.error(LTag.AUTOMATION, "Error parsing $obj") } + return TriggerConnector(injector) } fun createAddButton(context: Context, trigger: TriggerConnector): ImageButton = From be201f0177c9f51bd03a1420dab914cf260d89ab Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 20 Jun 2022 23:50:56 +0200 Subject: [PATCH 31/71] Improve bolus canceling --- .../queue/CommandQueueImplementation.kt | 4 ++-- .../queue/CommandQueueImplementationTest.kt | 2 +- .../androidaps/dialogs/BolusProgressDialog.kt | 23 +++++++------------ .../androidaps/interfaces/CommandQueue.kt | 2 +- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt index bbfbd91d31..3f2e2de469 100644 --- a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt +++ b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt @@ -321,9 +321,9 @@ class CommandQueueImplementation @Inject constructor( } @Synchronized - override fun cancelAllBoluses() { + override fun cancelAllBoluses(timestamp: Long) { if (!isRunning(CommandType.BOLUS)) { - rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResult(injector).success(true).enacted(false), null)) + rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResult(injector).success(true).enacted(false), timestamp)) } removeAll(CommandType.BOLUS) removeAll(CommandType.SMB_BOLUS) diff --git a/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt b/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt index 907f739127..7c694189da 100644 --- a/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt @@ -241,7 +241,7 @@ class CommandQueueImplementationTest : TestBaseWithProfile() { Assert.assertEquals(2, commandQueue.size()) // when - commandQueue.cancelAllBoluses() + commandQueue.cancelAllBoluses(anyLong()) // then Assert.assertEquals(0, commandQueue.size()) diff --git a/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt b/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt index 8b6368bc0c..c19f869a71 100644 --- a/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt +++ b/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt @@ -1,6 +1,5 @@ package info.nightscout.androidaps.dialogs -import android.content.res.Resources import android.os.Bundle import android.os.SystemClock import android.view.LayoutInflater @@ -16,15 +15,15 @@ import info.nightscout.androidaps.database.entities.UserEntry.Action import info.nightscout.androidaps.database.entities.UserEntry.Sources import info.nightscout.androidaps.events.EventPumpStatusChanged import info.nightscout.androidaps.interfaces.CommandQueue -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.shared.logging.LTag +import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress import info.nightscout.androidaps.utils.FabricPrivacy -import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import javax.inject.Inject @@ -75,17 +74,12 @@ class BolusProgressDialog : DaggerDialogFragment() { // onDestroyView. private val binding get() = _binding!! - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE) dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) isCancelable = false dialog?.setCanceledOnTouchOutside(false) - - val theme: Resources.Theme? = context?.theme - theme?.applyStyle(R.style.AppTheme_NoActionBar, true) + context?.theme?.applyStyle(R.style.AppTheme_NoActionBar, true) _binding = DialogBolusprogressBinding.inflate(inflater, container, false) return binding.root @@ -95,6 +89,7 @@ class BolusProgressDialog : DaggerDialogFragment() { savedInstanceState?.let { amount = it.getDouble("amount") timestamp = it.getLong("timestamp") + state = it.getString("state") ?: rh.gs(R.string.waitingforpump) } binding.title.text = rh.gs(R.string.goingtodeliver, amount) binding.stop.setOnClickListener { @@ -103,11 +98,9 @@ class BolusProgressDialog : DaggerDialogFragment() { binding.stoppressed.visibility = View.VISIBLE binding.stop.visibility = View.INVISIBLE uel.log(Action.CANCEL_BOLUS, Sources.Overview, state) - commandQueue.cancelAllBoluses() + commandQueue.cancelAllBoluses(timestamp) } - val defaultState = rh.gs(R.string.waitingforpump) binding.progressbar.max = 100 - state = savedInstanceState?.getString("state", defaultState) ?: defaultState binding.status.text = state stopPressed = false } @@ -134,7 +127,7 @@ class BolusProgressDialog : DaggerDialogFragment() { .toObservable(EventDismissBolusProgressIfRunning::class.java) .observeOn(aapsSchedulers.main) .subscribe({ - aapsLogger.debug(LTag.PUMP, "Running timestamp $timestamp. Close request timestamp ${it.bolusTimestamp}") + aapsLogger.debug(LTag.PUMP, "Running timestamp $timestamp. Close request timestamp ${it.bolusTimestamp}") if (it.bolusTimestamp == null || it.bolusTimestamp == timestamp) if (running) dismiss() }, fabricPrivacy::logException) diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt index 5ba0055402..8619f43a3a 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt @@ -17,7 +17,7 @@ interface CommandQueue { fun independentConnect(reason: String, callback: Callback?) fun bolusInQueue(): Boolean fun bolus(detailedBolusInfo: DetailedBolusInfo, callback: Callback?): Boolean - fun cancelAllBoluses() + fun cancelAllBoluses(running: Long) fun stopPump(callback: Callback?) fun startPump(callback: Callback?) fun setTBROverNotification(callback: Callback?, enable: Boolean) From 532c79c74461796babaab59be31fe845300d4092 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 08:07:45 +0000 Subject: [PATCH 32/71] Bump coroutines_version from 1.6.2 to 1.6.3 Bumps `coroutines_version` from 1.6.2 to 1.6.3. Updates `kotlinx-coroutines-core` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) Updates `kotlinx-coroutines-android` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) Updates `kotlinx-coroutines-guava` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) Updates `kotlinx-coroutines-play-services` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-guava dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-play-services dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f7aeaacda4..2c78775b78 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { room_version = '2.4.2' lifecycle_version = '2.4.1' dagger_version = '2.42' - coroutines_version = '1.6.2' + coroutines_version = '1.6.3' activity_version = '1.4.0' fragmentktx_version = '1.4.1' ormLite_version = '4.46' From 5a0fc8da74496d672ade014541ea7b0795911722 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 21 Jun 2022 11:05:31 +0200 Subject: [PATCH 33/71] Widget: resolve db access in main thread --- .../nightscout/androidaps/widget/Widget.kt | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt b/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt index b8b60ad34f..b4a2cbcd29 100644 --- a/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt +++ b/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt @@ -8,6 +8,8 @@ import android.content.Context import android.content.Intent import android.graphics.Color import android.graphics.Paint +import android.os.Handler +import android.os.HandlerThread import android.view.View import android.widget.RemoteViews import dagger.android.HasAndroidInjector @@ -26,7 +28,6 @@ import info.nightscout.androidaps.plugins.general.overview.OverviewData import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.TrendCalculator -import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.LTag import info.nightscout.shared.sharedPreferences.SP @@ -53,6 +54,7 @@ class Widget : AppWidgetProvider() { @Inject lateinit var sp: SP @Inject lateinit var constraintChecker: ConstraintChecker + private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) private val intentAction = "OpenApp" override fun onReceive(context: Context, intent: Intent?) { @@ -88,16 +90,17 @@ class Widget : AppWidgetProvider() { views.setOnClickPendingIntent(R.id.widget_layout, pendingIntent) views.setInt(R.id.widget_layout, "setBackgroundColor", Color.argb(alpha, 0, 0, 0)) - updateBg(views) - updateTemporaryBasal(views) - updateExtendedBolus(views) - updateIobCob(views) - updateTemporaryTarget(views) - updateProfile(views) - updateSensitivity(views) - - // Instruct the widget manager to update the widget - appWidgetManager.updateAppWidget(appWidgetId, views) + handler.post { + updateBg(views) + updateTemporaryBasal(views) + updateExtendedBolus(views) + updateIobCob(views) + updateTemporaryTarget(views) + updateProfile(views) + updateSensitivity(views) + // Instruct the widget manager to update the widget + appWidgetManager.updateAppWidget(appWidgetId, views) + } } private fun updateBg(views: RemoteViews) { From e8928e554f6138a0d0e5bae1b5883907acd5e51f Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 21 Jun 2022 12:03:58 +0200 Subject: [PATCH 34/71] RL: process BroadcastReceiver actions outside UI thread --- .../service/RileyLinkMedtronicService.kt | 6 +- .../service/RileyLinkOmnipodService.java | 2 +- .../service/RileyLinkBroadcastReceiver.java | 232 ------------------ .../service/RileyLinkBroadcastReceiver.kt | 160 ++++++++++++ .../hw/rileylink/service/RileyLinkService.kt | 14 +- 5 files changed, 170 insertions(+), 244 deletions(-) delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/service/RileyLinkMedtronicService.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/service/RileyLinkMedtronicService.kt index a27b26b23e..e5157aadec 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/service/RileyLinkMedtronicService.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/service/RileyLinkMedtronicService.kt @@ -4,10 +4,8 @@ import android.content.Intent import android.content.res.Configuration import android.os.Binder import android.os.IBinder -import info.nightscout.shared.logging.LTag import info.nightscout.androidaps.plugins.pump.common.defs.PumpDeviceState import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RFSpy import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkEncodingType import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice @@ -21,6 +19,7 @@ import info.nightscout.androidaps.plugins.pump.medtronic.defs.MedtronicDeviceTyp import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicConst import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil +import info.nightscout.shared.logging.LTag import javax.inject.Inject import javax.inject.Singleton @@ -33,7 +32,6 @@ class RileyLinkMedtronicService : RileyLinkService() { @Inject lateinit var medtronicPumpPlugin: MedtronicPumpPlugin @Inject lateinit var medtronicUtil: MedtronicUtil @Inject lateinit var medtronicPumpStatus: MedtronicPumpStatus - @Inject lateinit var rfSpy: RFSpy @Inject lateinit var medtronicCommunicationManager: MedtronicCommunicationManager @Inject lateinit var medtronicUIComm: MedtronicUIComm @@ -79,7 +77,7 @@ class RileyLinkMedtronicService : RileyLinkService() { // get most recently used RileyLink address and name rileyLinkServiceData.rileyLinkAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, "") rileyLinkServiceData.rileyLinkName = sp.getString(RileyLinkConst.Prefs.RileyLinkName, "") - rfspy.startReader() + rfSpy.startReader() aapsLogger.debug(LTag.PUMPCOMM, "RileyLinkMedtronicService newly constructed") } diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java index b28a66d3f8..8520db88d3 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java @@ -69,7 +69,7 @@ public class RileyLinkOmnipodService extends RileyLinkService { rileyLinkServiceData.rileyLinkAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, ""); rileyLinkServiceData.rileyLinkName = sp.getString(RileyLinkConst.Prefs.RileyLinkName, ""); - rfspy.startReader(); + rfSpy.startReader(); aapsLogger.debug(LTag.PUMPBTCOMM, "RileyLinkOmnipodService newly constructed"); } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.java deleted file mode 100644 index d984c9ed27..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.java +++ /dev/null @@ -1,232 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service; - -/** - * Created by andy on 10/23/18. - */ - -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothManager; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; - -import dagger.android.DaggerBroadcastReceiver; -import dagger.android.HasAndroidInjector; -import info.nightscout.androidaps.interfaces.ActivePlugin; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkFirmwareVersion; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.DiscoverGattServicesTask; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.InitializePumpManagerTask; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTask; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTaskExecutor; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.WakeAndTuneTask; -import info.nightscout.shared.sharedPreferences.SP; - -/** - * I added this class outside of RileyLinkService, because for now it's very important part of RL framework and - * where we get a lot of problems. Especially merging between AAPS and RileyLinkAAPS. I might put it back at - * later time - */ -public class RileyLinkBroadcastReceiver extends DaggerBroadcastReceiver { - - @Inject HasAndroidInjector injector; - @Inject SP sp; - @Inject AAPSLogger aapsLogger; - @Inject RileyLinkServiceData rileyLinkServiceData; - @Inject ServiceTaskExecutor serviceTaskExecutor; - @Inject ActivePlugin activePlugin; - - RileyLinkService serviceInstance; - protected Map> broadcastIdentifiers = null; - //String deviceSpecificPrefix; - - public RileyLinkBroadcastReceiver(RileyLinkService serviceInstance) { - this.serviceInstance = serviceInstance; - - createBroadcastIdentifiers(); - } - - - private void createBroadcastIdentifiers() { - - this.broadcastIdentifiers = new HashMap<>(); - - // Bluetooth - this.broadcastIdentifiers.put("Bluetooth", Arrays.asList( // - RileyLinkConst.Intents.BluetoothConnected, // - RileyLinkConst.Intents.BluetoothReconnected)); - - // TuneUp - this.broadcastIdentifiers.put("TuneUp", Arrays.asList( // - RileyLinkConst.IPC.MSG_PUMP_tunePump, // - RileyLinkConst.IPC.MSG_PUMP_quickTune)); - - // RileyLink - this.broadcastIdentifiers.put("RileyLink", Arrays.asList( // - RileyLinkConst.Intents.RileyLinkDisconnected, // - RileyLinkConst.Intents.RileyLinkReady, // - RileyLinkConst.Intents.RileyLinkDisconnected, // - RileyLinkConst.Intents.RileyLinkNewAddressSet, // - RileyLinkConst.Intents.RileyLinkDisconnect)); - } - - private RileyLinkService getServiceInstance() { - RileyLinkPumpDevice pumpDevice = (RileyLinkPumpDevice) activePlugin.getActivePump(); - return pumpDevice.getRileyLinkService(); - } - - - @Override - public void onReceive(Context context, Intent intent) { - super.onReceive(context, intent); - - if (intent == null) { - aapsLogger.error(LTag.PUMPBTCOMM, "onReceive: received null intent"); - } else { - String action = intent.getAction(); - if (action == null) { - aapsLogger.error("onReceive: null action"); - } else { - aapsLogger.debug(LTag.PUMPBTCOMM, "Received Broadcast: " + action); - - if (!processBluetoothBroadcasts(action) && // - !processRileyLinkBroadcasts(action, context) && // - !processTuneUpBroadcasts(action) && // - !processApplicationSpecificBroadcasts(action, intent) // - ) { - aapsLogger.error(LTag.PUMPBTCOMM, "Unhandled broadcast: action=" + action); - } - } - } - } - - - public void registerBroadcasts(Context context) { - - IntentFilter intentFilter = new IntentFilter(); - - for (Map.Entry> stringListEntry : broadcastIdentifiers.entrySet()) { - - for (String intentKey : stringListEntry.getValue()) { - intentFilter.addAction(intentKey); - } - } - - LocalBroadcastManager.getInstance(context).registerReceiver(this, intentFilter); - } - - - private boolean processRileyLinkBroadcasts(String action, Context context) { - - RileyLinkService rileyLinkService = getServiceInstance(); - - if (action.equals(RileyLinkConst.Intents.RileyLinkDisconnected)) { - if (((BluetoothManager)context.getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter().isEnabled()) { - rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.RileyLinkUnreachable); - } else { - rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.BluetoothDisabled); - } - - return true; - } else if (action.equals(RileyLinkConst.Intents.RileyLinkReady)) { - aapsLogger.warn(LTag.PUMPBTCOMM, "RileyLinkConst.Intents.RileyLinkReady"); - // sendIPCNotification(RT2Const.IPC.MSG_note_WakingPump); - - rileyLinkService.rileyLinkBLE.enableNotifications(); - rileyLinkService.rfspy.startReader(); // call startReader from outside? - - rileyLinkService.rfspy.initializeRileyLink(); - String bleVersion = rileyLinkService.rfspy.getBLEVersionCached(); - RileyLinkFirmwareVersion rlVersion = rileyLinkServiceData.firmwareVersion; - - aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy version (BLE113): " + bleVersion); - rileyLinkService.rileyLinkServiceData.versionBLE113 = bleVersion; - -// if (isLoggingEnabled()) - aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy Radio version (CC110): " + rlVersion.name()); - this.rileyLinkServiceData.firmwareVersion = rlVersion; - - ServiceTask task = new InitializePumpManagerTask(injector, context); - serviceTaskExecutor.startTask(task); - aapsLogger.info(LTag.PUMPBTCOMM, "Announcing RileyLink open For business"); - - return true; - } else if (action.equals(RileyLinkConst.Intents.RileyLinkNewAddressSet)) { - String RileylinkBLEAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, ""); - if (RileylinkBLEAddress.equals("")) { - aapsLogger.error("No Rileylink BLE Address saved in app"); - } else { - // showBusy("Configuring Service", 50); - // rileyLinkBLE.findRileyLink(RileylinkBLEAddress); - rileyLinkService.reconfigureRileyLink(RileylinkBLEAddress); - // MainApp.getServiceClientConnection().setThisRileylink(RileylinkBLEAddress); - } - - return true; - } else if (action.equals(RileyLinkConst.Intents.RileyLinkDisconnect)) { - rileyLinkService.disconnectRileyLink(); - return true; - } else { - return false; - } - - } - - - public boolean processBluetoothBroadcasts(String action) { - - if (action.equals(RileyLinkConst.Intents.BluetoothConnected)) { - aapsLogger.debug(LTag.PUMPBTCOMM, "Bluetooth - Connected"); - serviceTaskExecutor.startTask(new DiscoverGattServicesTask(injector)); - - return true; - - } else if (action.equals(RileyLinkConst.Intents.BluetoothReconnected)) { - aapsLogger.debug(LTag.PUMPBTCOMM, "Bluetooth - Reconnecting"); - - getServiceInstance().bluetoothInit(); - serviceTaskExecutor.startTask(new DiscoverGattServicesTask(injector, true)); - - return true; - } else { - - return false; - } - } - - - private boolean processTuneUpBroadcasts(String action) { - - if (this.broadcastIdentifiers.get("TuneUp").contains(action)) { - if (serviceInstance.getRileyLinkTargetDevice().isTuneUpEnabled()) { - serviceTaskExecutor.startTask(new WakeAndTuneTask(injector)); - } - return true; - } else { - return false; - } - } - - - public boolean processApplicationSpecificBroadcasts(String action, Intent intent) { - return false; - } - - public void unregisterBroadcasts(Context context) { - LocalBroadcastManager.getInstance(context).unregisterReceiver(this); - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt new file mode 100644 index 0000000000..1141cf69c9 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt @@ -0,0 +1,160 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service + +import android.bluetooth.BluetoothManager +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.Handler +import android.os.HandlerThread +import androidx.localbroadcastmanager.content.LocalBroadcastManager +import dagger.android.DaggerBroadcastReceiver +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.interfaces.ActivePlugin +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.DiscoverGattServicesTask +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.InitializePumpManagerTask +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTask +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTaskExecutor +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.WakeAndTuneTask +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import info.nightscout.shared.sharedPreferences.SP +import javax.inject.Inject + +class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { + + @Inject lateinit var injector: HasAndroidInjector + @Inject lateinit var sp: SP + @Inject lateinit var aapsLogger: AAPSLogger + @Inject lateinit var rileyLinkServiceData: RileyLinkServiceData + @Inject lateinit var serviceTaskExecutor: ServiceTaskExecutor + @Inject lateinit var activePlugin: ActivePlugin + + private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) + private val broadcastIdentifiers: MutableMap> = HashMap() + + init { + createBroadcastIdentifiers() + } + + private val rileyLinkService: RileyLinkService + get() = (activePlugin.activePump as RileyLinkPumpDevice).rileyLinkService + + private fun createBroadcastIdentifiers() { + + // Bluetooth + broadcastIdentifiers["Bluetooth"] = listOf( + RileyLinkConst.Intents.BluetoothConnected, + RileyLinkConst.Intents.BluetoothReconnected + ) + + // TuneUp + broadcastIdentifiers["TuneUp"] = listOf( + RileyLinkConst.IPC.MSG_PUMP_tunePump, + RileyLinkConst.IPC.MSG_PUMP_quickTune + ) + + // RileyLink + broadcastIdentifiers["RileyLink"] = listOf( + RileyLinkConst.Intents.RileyLinkDisconnected, + RileyLinkConst.Intents.RileyLinkReady, + RileyLinkConst.Intents.RileyLinkDisconnected, + RileyLinkConst.Intents.RileyLinkNewAddressSet, + RileyLinkConst.Intents.RileyLinkDisconnect + ) + } + + override fun onReceive(context: Context, intent: Intent) { + super.onReceive(context, intent) + val action = intent.action ?: return + handler.post { + aapsLogger.debug(LTag.PUMPBTCOMM, "Received Broadcast: $action") + if (!processBluetoothBroadcasts(action) && !processRileyLinkBroadcasts(action, context) && !processTuneUpBroadcasts(action)) + aapsLogger.error(LTag.PUMPBTCOMM, "Unhandled broadcast: action=$action") + } + } + + fun registerBroadcasts(context: Context) { + val intentFilter = IntentFilter() + for ((_, value) in broadcastIdentifiers) + for (intentKey in value) + intentFilter.addAction(intentKey) + LocalBroadcastManager.getInstance(context).registerReceiver(this, intentFilter) + } + + fun unregisterBroadcasts(context: Context) { + LocalBroadcastManager.getInstance(context).unregisterReceiver(this) + } + + private fun processRileyLinkBroadcasts(action: String, context: Context): Boolean = + when (action) { + RileyLinkConst.Intents.RileyLinkDisconnected -> { + if ((context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager).adapter.isEnabled) + rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.RileyLinkUnreachable) + else + rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.BluetoothDisabled) + true + } + + RileyLinkConst.Intents.RileyLinkReady -> { + aapsLogger.warn(LTag.PUMPBTCOMM, "RileyLinkConst.Intents.RileyLinkReady") + // sendIPCNotification(RT2Const.IPC.MSG_note_WakingPump); + rileyLinkService.rileyLinkBLE.enableNotifications() + rileyLinkService.rfSpy.startReader() // call startReader from outside? + rileyLinkService.rfSpy.initializeRileyLink() + val bleVersion = rileyLinkService.rfSpy.bleVersionCached + val rlVersion = rileyLinkServiceData.firmwareVersion + aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy version (BLE113): $bleVersion") + rileyLinkService.rileyLinkServiceData.versionBLE113 = bleVersion + + aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy Radio version (CC110): " + rlVersion.name) + rileyLinkServiceData.firmwareVersion = rlVersion + val task: ServiceTask = InitializePumpManagerTask(injector, context) + serviceTaskExecutor.startTask(task) + aapsLogger.info(LTag.PUMPBTCOMM, "Announcing RileyLink open For business") + true + } + + RileyLinkConst.Intents.RileyLinkNewAddressSet -> { + val rileylinkBLEAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, "") + if (rileylinkBLEAddress == "") { + aapsLogger.error("No Rileylink BLE Address saved in app") + } else rileyLinkService.reconfigureRileyLink(rileylinkBLEAddress) + true + } + + RileyLinkConst.Intents.RileyLinkDisconnect -> { + rileyLinkService.disconnectRileyLink() + true + } + + else -> false + } + + private fun processBluetoothBroadcasts(action: String): Boolean = + when (action) { + RileyLinkConst.Intents.BluetoothConnected -> { + aapsLogger.debug(LTag.PUMPBTCOMM, "Bluetooth - Connected") + serviceTaskExecutor.startTask(DiscoverGattServicesTask(injector)) + true + } + + RileyLinkConst.Intents.BluetoothReconnected -> { + aapsLogger.debug(LTag.PUMPBTCOMM, "Bluetooth - Reconnecting") + rileyLinkService.bluetoothInit() + serviceTaskExecutor.startTask(DiscoverGattServicesTask(injector, true)) + true + } + + else -> false + } + + private fun processTuneUpBroadcasts(action: String): Boolean = + if (broadcastIdentifiers["TuneUp"]?.contains(action) == true) { + if (rileyLinkService.rileyLinkTargetDevice.isTuneUpEnabled) serviceTaskExecutor.startTask(WakeAndTuneTask(injector)) + true + } else false +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt index 4b61ecec25..47449c5c3f 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt @@ -41,18 +41,18 @@ abstract class RileyLinkService : DaggerService() { @Inject lateinit var rileyLinkServiceData: RileyLinkServiceData @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var rileyLinkBLE: RileyLinkBLE // android-bluetooth management - @Inject lateinit var rfspy: RFSpy // interface for RL xxx Mhz radio. + @Inject lateinit var rfSpy: RFSpy // interface for RL xxx Mhz radio. private val bluetoothAdapter: BluetoothAdapter? get() = (context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager?)?.adapter - protected var mBroadcastReceiver: RileyLinkBroadcastReceiver? = null + protected var broadcastReceiver: RileyLinkBroadcastReceiver? = null private var bluetoothStateReceiver: RileyLinkBluetoothStateReceiver? = null override fun onCreate() { super.onCreate() rileyLinkUtil.encoding = encoding initRileyLinkServiceData() - mBroadcastReceiver = RileyLinkBroadcastReceiver(this) - mBroadcastReceiver?.registerBroadcasts(this) + broadcastReceiver = RileyLinkBroadcastReceiver() + broadcastReceiver?.registerBroadcasts(this) bluetoothStateReceiver = RileyLinkBluetoothStateReceiver() bluetoothStateReceiver?.registerBroadcasts(this) } @@ -80,7 +80,7 @@ abstract class RileyLinkService : DaggerService() { super.onDestroy() rileyLinkBLE.disconnect() // dispose of Gatt (disconnect and close) - mBroadcastReceiver?.unregisterBroadcasts(this) + broadcastReceiver?.unregisterBroadcasts(this) bluetoothStateReceiver?.unregisterBroadcasts(this) } @@ -139,7 +139,7 @@ abstract class RileyLinkService : DaggerService() { } } - // FIXME: This needs to be run in a session so that is interruptible, has a separate thread, etc. + // FIXME: This needs to be run in a session so that is incorruptible, has a separate thread, etc. fun doTuneUpDevice() { rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.TuneUpDevice) setPumpDeviceState(PumpDeviceState.Sleeping) @@ -178,7 +178,7 @@ abstract class RileyLinkService : DaggerService() { get() = rileyLinkServiceData.targetDevice fun changeRileyLinkEncoding(encodingType: RileyLinkEncodingType?) { - rfspy.setRileyLinkEncoding(encodingType) + rfSpy.setRileyLinkEncoding(encodingType) } val error: RileyLinkError? From 40d1c0c9bc527ee1255861b6602cd227fd897269 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 21 Jun 2022 12:43:22 +0200 Subject: [PATCH 35/71] RileyLinkPumpDevice -> kt --- .../pump/medtronic/MedtronicPumpPlugin.kt | 170 ++++++++++-------- .../dialog/RileyLinkBLEConfigActivity.kt | 2 +- .../rileylink/defs/RileyLinkPumpDevice.java | 18 -- .../hw/rileylink/defs/RileyLinkPumpDevice.kt | 13 ++ .../service/RileyLinkBroadcastReceiver.kt | 20 +-- 5 files changed, 124 insertions(+), 99 deletions(-) delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.kt diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt index 9752d1ef42..2fbebf5bf7 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt @@ -91,16 +91,17 @@ class MedtronicPumpPlugin @Inject constructor( aapsSchedulers: AapsSchedulers, pumpSync: PumpSync, pumpSyncStorage: info.nightscout.androidaps.plugins.pump.common.sync.PumpSyncStorage -) : PumpPluginAbstract(PluginDescription() // - .mainType(PluginType.PUMP) // - .fragmentClass(MedtronicFragment::class.java.name) // - .pluginIcon(R.drawable.ic_veo_128) - .pluginName(R.string.medtronic_name) // - .shortName(R.string.medtronic_name_short) // - .preferencesId(R.xml.pref_medtronic) - .description(R.string.description_pump_medtronic), // - PumpType.MEDTRONIC_522_722, // we default to most basic model, correct model from config is loaded later - injector, rh, aapsLogger, commandQueue, rxBus, activePlugin, sp, context, fabricPrivacy, dateUtil, aapsSchedulers, pumpSync, pumpSyncStorage +) : PumpPluginAbstract( + PluginDescription() // + .mainType(PluginType.PUMP) // + .fragmentClass(MedtronicFragment::class.java.name) // + .pluginIcon(R.drawable.ic_veo_128) + .pluginName(R.string.medtronic_name) // + .shortName(R.string.medtronic_name_short) // + .preferencesId(R.xml.pref_medtronic) + .description(R.string.description_pump_medtronic), // + PumpType.MEDTRONIC_522_722, // we default to most basic model, correct model from config is loaded later + injector, rh, aapsLogger, commandQueue, rxBus, activePlugin, sp, context, fabricPrivacy, dateUtil, aapsSchedulers, pumpSync, pumpSyncStorage ), Pump, RileyLinkPumpDevice, PumpSyncEntriesCreator { private var rileyLinkMedtronicService: RileyLinkMedtronicService? = null @@ -234,18 +235,16 @@ class MedtronicPumpPlugin @Inject constructor( // Pump Plugin private var isServiceSet: Boolean = false - override fun getRileyLinkService(): RileyLinkMedtronicService? = rileyLinkMedtronicService + override val rileyLinkService: RileyLinkMedtronicService? = rileyLinkMedtronicService - override fun getPumpInfo(): RileyLinkPumpInfo { - val frequency = rh.gs(if (medtronicPumpStatus.pumpFrequency == "medtronic_pump_frequency_us_ca") R.string.medtronic_pump_frequency_us_ca else R.string.medtronic_pump_frequency_worldwide) - val model = if (!medtronicUtil.isModelSet) "???" else "Medtronic " + medtronicPumpStatus.medtronicDeviceType.pumpModel - val serialNumber = medtronicPumpStatus.serialNumber - return RileyLinkPumpInfo(frequency, model, serialNumber) - } + override val pumpInfo: RileyLinkPumpInfo + get() = RileyLinkPumpInfo( + rh.gs(if (medtronicPumpStatus.pumpFrequency == "medtronic_pump_frequency_us_ca") R.string.medtronic_pump_frequency_us_ca else R.string.medtronic_pump_frequency_worldwide), + if (!medtronicUtil.isModelSet) "???" else "Medtronic " + medtronicPumpStatus.medtronicDeviceType.pumpModel, + medtronicPumpStatus.serialNumber + ) - override fun getLastConnectionTimeMillis(): Long { - return medtronicPumpStatus.lastConnection - } + override val lastConnectionTimeMillis: Long = medtronicPumpStatus.lastConnection override fun setLastCommunicationToNow() { medtronicPumpStatus.setLastCommunicationToNow() @@ -326,7 +325,8 @@ class MedtronicPumpPlugin @Inject constructor( } if (rileyLinkServiceState != RileyLinkServiceState.PumpConnectorReady // && rileyLinkServiceState != RileyLinkServiceState.RileyLinkReady // - && rileyLinkServiceState != RileyLinkServiceState.TuneUpDevice) { + && rileyLinkServiceState != RileyLinkServiceState.TuneUpDevice + ) { aapsLogger.debug(LTag.PUMP, "RileyLink unreachable.") return false } @@ -334,8 +334,10 @@ class MedtronicPumpPlugin @Inject constructor( } private fun refreshAnyStatusThatNeedsToBeRefreshed() { - val statusRefresh = workWithStatusRefresh(StatusRefreshAction.GetData, null, - null)!! + val statusRefresh = workWithStatusRefresh( + StatusRefreshAction.GetData, null, + null + )!! if (!doWeHaveAnyStatusNeededRefreshing(statusRefresh)) { return } @@ -491,7 +493,7 @@ class MedtronicPumpPlugin @Inject constructor( val basalsByHour: DoubleArray? = medtronicPumpStatus.basalsByHour aapsLogger.debug( LTag.PUMP, "Current Basals (h): " - + (basalsByHour?.let { getProfilesByHourToString(it) } ?: "null")) + + (basalsByHour?.let { getProfilesByHourToString(it) } ?: "null")) // int index = 0; if (basalsByHour == null) return true // we don't want to set profile again, unless we are sure @@ -594,9 +596,13 @@ class MedtronicPumpPlugin @Inject constructor( return PumpEnactResult(injector) // .success(false) // .enacted(false) // - .comment(rh.gs(R.string.medtronic_cmd_bolus_could_not_be_delivered_no_insulin, - medtronicPumpStatus.reservoirRemainingUnits, - detailedBolusInfo.insulin)) + .comment( + rh.gs( + R.string.medtronic_cmd_bolus_could_not_be_delivered_no_insulin, + medtronicPumpStatus.reservoirRemainingUnits, + detailedBolusInfo.insulin + ) + ) } bolusDeliveryType = BolusDeliveryType.DeliveryPrepared if (isPumpNotReachable) { @@ -619,8 +625,10 @@ class MedtronicPumpPlugin @Inject constructor( bolusDeliveryType = BolusDeliveryType.Delivering // LOG.debug("MedtronicPumpPlugin::deliverBolus - Start delivery"); - val responseTask = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand(MedtronicCommandType.SetBolus, - arrayListOf(detailedBolusInfo.insulin)) + val responseTask = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand( + MedtronicCommandType.SetBolus, + arrayListOf(detailedBolusInfo.insulin) + ) val response = responseTask?.result as Boolean? setRefreshButtonEnabled(true) @@ -757,8 +765,10 @@ class MedtronicPumpPlugin @Inject constructor( } // now start new TBR - val responseTask = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand(MedtronicCommandType.SetTemporaryBasal, - arrayListOf(absoluteRate, durationInMinutes)) + val responseTask = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand( + MedtronicCommandType.SetTemporaryBasal, + arrayListOf(absoluteRate, durationInMinutes) + ) val response = responseTask?.result as Boolean? aapsLogger.info(LTag.PUMP, logPrefix + "setTempBasalAbsolute - setTBR. Response: " + response) return if (response == null || !response) { @@ -784,13 +794,13 @@ class MedtronicPumpPlugin @Inject constructor( @Deprecated("Not used, TBRs fixed in history, should be removed.") private fun cancelTBRWithTemporaryId() { - val tbrs : MutableList = pumpSyncStorage.getTBRs() - if (tbrs.size > 0 && medtronicPumpStatus.runningTBRWithTemp!=null) { + val tbrs: MutableList = pumpSyncStorage.getTBRs() + if (tbrs.size > 0 && medtronicPumpStatus.runningTBRWithTemp != null) { aapsLogger.info(LTag.PUMP, logPrefix + "cancelTBRWithTemporaryId - TBR items: ${tbrs.size}") - var item : PumpDbEntryTBR? = null + var item: PumpDbEntryTBR? = null - if (tbrs.size==1) { + if (tbrs.size == 1) { item = tbrs[0] } else { for (tbr in tbrs) { @@ -801,7 +811,7 @@ class MedtronicPumpPlugin @Inject constructor( } } - if (item!=null) { + if (item != null) { aapsLogger.debug(LTag.PUMP, "DD: cancelTBRWithTemporaryId: tempIdEntry=${item}") @@ -809,23 +819,25 @@ class MedtronicPumpPlugin @Inject constructor( aapsLogger.debug( LTag.PUMP, "syncTemporaryBasalWithTempId " + - "[date=${item.date}, " + - "rate=${item.rate}, " + - "duration=${differenceS} s, " + - "isAbsolute=${!item.isAbsolute}, temporaryId=${item.temporaryId}, " + - "pumpId=NO, pumpType=${medtronicPumpStatus.pumpType}, " + - "pumpSerial=${medtronicPumpStatus.serialNumber}]") + "[date=${item.date}, " + + "rate=${item.rate}, " + + "duration=${differenceS} s, " + + "isAbsolute=${!item.isAbsolute}, temporaryId=${item.temporaryId}, " + + "pumpId=NO, pumpType=${medtronicPumpStatus.pumpType}, " + + "pumpSerial=${medtronicPumpStatus.serialNumber}]" + ) val result = pumpSync.syncTemporaryBasalWithTempId( timestamp = item.date, rate = item.rate, - duration= differenceS * 1000L, + duration = differenceS * 1000L, isAbsolute = item.isAbsolute, temporaryId = item.temporaryId, type = item.tbrType, pumpId = null, pumpType = medtronicPumpStatus.pumpType, - pumpSerial = medtronicPumpStatus.serialNumber) + pumpSerial = medtronicPumpStatus.serialNumber + ) aapsLogger.debug(LTag.PUMP, "syncTemporaryBasalWithTempId - Result: $result") } @@ -834,7 +846,7 @@ class MedtronicPumpPlugin @Inject constructor( aapsLogger.info(LTag.PUMP, logPrefix + "cancelTBRWithTemporaryId - TBR items: ${tbrs.size}, runningTBRWithTemp=${medtronicPumpStatus.runningTBRWithTemp}") } - if (medtronicPumpStatus.runningTBRWithTemp!=null) { + if (medtronicPumpStatus.runningTBRWithTemp != null) { medtronicPumpStatus.runningTBRWithTemp = null } } @@ -846,7 +858,10 @@ class MedtronicPumpPlugin @Inject constructor( } else { var absoluteValue = profile.getBasal() * (percent / 100.0) absoluteValue = pumpDescription.pumpType.determineCorrectBasalSize(absoluteValue) - aapsLogger.warn(LTag.PUMP, "setTempBasalPercent [MedtronicPumpPlugin] - You are trying to use setTempBasalPercent with percent other then 0% ($percent). This will start setTempBasalAbsolute, with calculated value ($absoluteValue). Result might not be 100% correct.") + aapsLogger.warn( + LTag.PUMP, + "setTempBasalPercent [MedtronicPumpPlugin] - You are trying to use setTempBasalPercent with percent other then 0% ($percent). This will start setTempBasalAbsolute, with calculated value ($absoluteValue). Result might not be 100% correct." + ) setTempBasalAbsolute(absoluteValue, durationInMinutes, profile, enforceNew, tbrType) } } @@ -870,7 +885,8 @@ class MedtronicPumpPlugin @Inject constructor( scheduleNextRefresh(MedtronicStatusRefreshType.PumpTime, -1) } if (medtronicPumpStatus.basalProfileStatus !== BasalProfileStatus.NotInitialized - && medtronicHistoryData.hasBasalProfileChanged()) { + && medtronicHistoryData.hasBasalProfileChanged() + ) { medtronicHistoryData.processLastBasalProfileChange(pumpDescription.pumpType, medtronicPumpStatus) } val previousState = pumpState @@ -890,7 +906,7 @@ class MedtronicPumpPlugin @Inject constructor( private fun readPumpHistoryLogic() { val debugHistory = false - var targetDate: LocalDateTime? = null + val targetDate: LocalDateTime? if (lastPumpHistoryEntry == null) { // first read if (debugHistory) aapsLogger.debug(LTag.PUMP, logPrefix + "readPumpHistoryLogic(): lastPumpHistoryEntry: null") val lastPumpHistoryEntryTime = lastPumpEntryTime @@ -898,13 +914,11 @@ class MedtronicPumpPlugin @Inject constructor( timeMinus36h = timeMinus36h.minusHours(36) medtronicHistoryData.setIsInInit(true) if (lastPumpHistoryEntryTime == 0L) { - if (debugHistory) aapsLogger.debug( - LTag.PUMP, logPrefix + "readPumpHistoryLogic(): lastPumpHistoryEntryTime: 0L - targetDate: " - + targetDate) + if (debugHistory) aapsLogger.debug(LTag.PUMP, logPrefix + "readPumpHistoryLogic(): lastPumpHistoryEntryTime: 0L") targetDate = timeMinus36h } else { // LocalDateTime lastHistoryRecordTime = DateTimeUtil.toLocalDateTime(lastPumpHistoryEntryTime); - if (debugHistory) aapsLogger.debug(LTag.PUMP, logPrefix + "readPumpHistoryLogic(): lastPumpHistoryEntryTime: " + lastPumpHistoryEntryTime + " - targetDate: " + targetDate) + if (debugHistory) aapsLogger.debug(LTag.PUMP, logPrefix + "readPumpHistoryLogic(): lastPumpHistoryEntryTime: " + lastPumpHistoryEntryTime) //medtronicHistoryData.setLastHistoryRecordTime(lastPumpHistoryEntryTime) var lastHistoryRecordTime = DateTimeUtil.toLocalDateTime(lastPumpHistoryEntryTime) lastHistoryRecordTime = lastHistoryRecordTime.minusHours(12) // we get last 12 hours of history to @@ -922,8 +936,10 @@ class MedtronicPumpPlugin @Inject constructor( //aapsLogger.debug(LTag.PUMP, "HST: Target Date: " + targetDate); @Suppress("UNCHECKED_CAST") - val responseTask2 = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand(MedtronicCommandType.GetHistoryData, - arrayListOf(/*lastPumpHistoryEntry*/ null, targetDate) as? ArrayList?) + val responseTask2 = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand( + MedtronicCommandType.GetHistoryData, + arrayListOf(/*lastPumpHistoryEntry*/ null, targetDate) as? ArrayList? + ) if (debugHistory) aapsLogger.debug(LTag.PUMP, "HST: After task") val historyResult = responseTask2?.result as PumpHistoryResult? if (debugHistory) aapsLogger.debug(LTag.PUMP, "HST: History Result: " + historyResult.toString()) @@ -981,8 +997,10 @@ class MedtronicPumpPlugin @Inject constructor( } MedtronicStatusRefreshType.PumpTime, MedtronicStatusRefreshType.Configuration, MedtronicStatusRefreshType.BatteryStatus, MedtronicStatusRefreshType.PumpHistory -> { - workWithStatusRefresh(StatusRefreshAction.Add, refreshType, - getTimeInFutureFromMinutes(refreshType.refreshTime + additionalTimeInMinutes)) + workWithStatusRefresh( + StatusRefreshAction.Add, refreshType, + getTimeInFutureFromMinutes(refreshType.refreshTime + additionalTimeInMinutes) + ) } } } @@ -993,9 +1011,11 @@ class MedtronicPumpPlugin @Inject constructor( } @Synchronized - private fun workWithStatusRefresh(action: StatusRefreshAction, // - statusRefreshType: MedtronicStatusRefreshType?, // - time: Long?): Map? { + private fun workWithStatusRefresh( + action: StatusRefreshAction, // + statusRefreshType: MedtronicStatusRefreshType?, // + time: Long? + ): Map? { return when (action) { StatusRefreshAction.Add -> { statusRefreshMap[statusRefreshType!!] = time!! @@ -1086,14 +1106,16 @@ class MedtronicPumpPlugin @Inject constructor( runningTBR.tbrType, runningTBR.pumpId!!, runningTBR.pumpType, - runningTBR.serialNumber) + runningTBR.serialNumber + ) val differenceTimeMin = floor(differenceTime / (60.0 * 1000.0)) aapsLogger.debug( LTag.PUMP, "canceling running TBR - syncTemporaryBasalWithPumpId [date=${runningTBR.date}, " + - "pumpId=${runningTBR.pumpId}, rate=${runningTBR.rate} U, duration=${differenceTimeMin.toInt()}, " + - "pumpSerial=${medtronicPumpStatus.serialNumber}] - Result: $result") + "pumpId=${runningTBR.pumpId}, rate=${runningTBR.rate} U, duration=${differenceTimeMin.toInt()}, " + + "pumpSerial=${medtronicPumpStatus.serialNumber}] - Result: $result" + ) } } @@ -1145,8 +1167,10 @@ class MedtronicPumpPlugin @Inject constructor( .enacted(false) // .comment(rh.gs(R.string.medtronic_cmd_set_profile_pattern_overflow, profileInvalid)) } - val responseTask = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand(MedtronicCommandType.SetBasalProfileSTD, - arrayListOf(basalProfile)) + val responseTask = rileyLinkMedtronicService?.medtronicUIComm?.executeCommand( + MedtronicCommandType.SetBasalProfileSTD, + arrayListOf(basalProfile) + ) val response = responseTask?.result as Boolean? aapsLogger.info(LTag.PUMP, logPrefix + "Basal Profile was set: " + response) return if (response == null || !response) { @@ -1184,18 +1208,24 @@ class MedtronicPumpPlugin @Inject constructor( // OPERATIONS not supported by Pump or Plugin private var customActions: List? = null - private val customActionWakeUpAndTune = CustomAction(R.string.medtronic_custom_action_wake_and_tune, - MedtronicCustomActionType.WakeUpAndTune) + private val customActionWakeUpAndTune = CustomAction( + R.string.medtronic_custom_action_wake_and_tune, + MedtronicCustomActionType.WakeUpAndTune + ) private val customActionClearBolusBlock = CustomAction( - R.string.medtronic_custom_action_clear_bolus_block, MedtronicCustomActionType.ClearBolusBlock, false) + R.string.medtronic_custom_action_clear_bolus_block, MedtronicCustomActionType.ClearBolusBlock, false + ) private val customActionResetRLConfig = CustomAction( - R.string.medtronic_custom_action_reset_rileylink, MedtronicCustomActionType.ResetRileyLinkConfiguration, true) + R.string.medtronic_custom_action_reset_rileylink, MedtronicCustomActionType.ResetRileyLinkConfiguration, true + ) override fun getCustomActions(): List? { if (customActions == null) { - customActions = listOf(customActionWakeUpAndTune, // + customActions = listOf( + customActionWakeUpAndTune, // customActionClearBolusBlock, // - customActionResetRLConfig) + customActionResetRLConfig + ) } return customActions } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt index ad9c82bbb4..61be9e9b16 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/dialog/RileyLinkBLEConfigActivity.kt @@ -87,7 +87,7 @@ class RileyLinkBLEConfigActivity : DaggerAppCompatActivity() { sp.putString(RileyLinkConst.Prefs.RileyLinkAddress, bleAddress) sp.putString(RileyLinkConst.Prefs.RileyLinkName, deviceName) val rileyLinkPump = activePlugin.activePump as RileyLinkPumpDevice - rileyLinkPump.rileyLinkService.verifyConfiguration(true) // force reloading of address to assure that the RL gets reconnected (even if the address didn't change) + rileyLinkPump.rileyLinkService?.verifyConfiguration(true) // force reloading of address to assure that the RL gets reconnected (even if the address didn't change) rileyLinkPump.triggerPumpConfigurationChangedEvent() finish() } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.java deleted file mode 100644 index 996eb5a358..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.java +++ /dev/null @@ -1,18 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs; - -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkService; - -public interface RileyLinkPumpDevice { - - void setBusy(boolean busy); - - void triggerPumpConfigurationChangedEvent(); - - RileyLinkService getRileyLinkService(); - - RileyLinkPumpInfo getPumpInfo(); - - long getLastConnectionTimeMillis(); - - void setLastCommunicationToNow(); -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.kt new file mode 100644 index 0000000000..ce3048cbac --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/defs/RileyLinkPumpDevice.kt @@ -0,0 +1,13 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs + +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkService + +interface RileyLinkPumpDevice { + + fun setBusy(busy: Boolean) + fun triggerPumpConfigurationChangedEvent() + val rileyLinkService: RileyLinkService? + val pumpInfo: RileyLinkPumpInfo + val lastConnectionTimeMillis: Long + fun setLastCommunicationToNow() +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt index 1141cf69c9..bfbaf4b184 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt @@ -40,7 +40,7 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { createBroadcastIdentifiers() } - private val rileyLinkService: RileyLinkService + private val rileyLinkService: RileyLinkService? get() = (activePlugin.activePump as RileyLinkPumpDevice).rileyLinkService private fun createBroadcastIdentifiers() { @@ -102,13 +102,13 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { RileyLinkConst.Intents.RileyLinkReady -> { aapsLogger.warn(LTag.PUMPBTCOMM, "RileyLinkConst.Intents.RileyLinkReady") // sendIPCNotification(RT2Const.IPC.MSG_note_WakingPump); - rileyLinkService.rileyLinkBLE.enableNotifications() - rileyLinkService.rfSpy.startReader() // call startReader from outside? - rileyLinkService.rfSpy.initializeRileyLink() - val bleVersion = rileyLinkService.rfSpy.bleVersionCached + rileyLinkService?.rileyLinkBLE?.enableNotifications() + rileyLinkService?.rfSpy?.startReader() // call startReader from outside? + rileyLinkService?.rfSpy?.initializeRileyLink() + val bleVersion = rileyLinkService?.rfSpy?.bleVersionCached val rlVersion = rileyLinkServiceData.firmwareVersion aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy version (BLE113): $bleVersion") - rileyLinkService.rileyLinkServiceData.versionBLE113 = bleVersion + rileyLinkService?.rileyLinkServiceData?.versionBLE113 = bleVersion aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy Radio version (CC110): " + rlVersion.name) rileyLinkServiceData.firmwareVersion = rlVersion @@ -122,12 +122,12 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { val rileylinkBLEAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, "") if (rileylinkBLEAddress == "") { aapsLogger.error("No Rileylink BLE Address saved in app") - } else rileyLinkService.reconfigureRileyLink(rileylinkBLEAddress) + } else rileyLinkService?.reconfigureRileyLink(rileylinkBLEAddress) true } RileyLinkConst.Intents.RileyLinkDisconnect -> { - rileyLinkService.disconnectRileyLink() + rileyLinkService?.disconnectRileyLink() true } @@ -144,7 +144,7 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { RileyLinkConst.Intents.BluetoothReconnected -> { aapsLogger.debug(LTag.PUMPBTCOMM, "Bluetooth - Reconnecting") - rileyLinkService.bluetoothInit() + rileyLinkService?.bluetoothInit() serviceTaskExecutor.startTask(DiscoverGattServicesTask(injector, true)) true } @@ -154,7 +154,7 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { private fun processTuneUpBroadcasts(action: String): Boolean = if (broadcastIdentifiers["TuneUp"]?.contains(action) == true) { - if (rileyLinkService.rileyLinkTargetDevice.isTuneUpEnabled) serviceTaskExecutor.startTask(WakeAndTuneTask(injector)) + if (rileyLinkService?.rileyLinkTargetDevice?.isTuneUpEnabled == true) serviceTaskExecutor.startTask(WakeAndTuneTask(injector)) true } else false } \ No newline at end of file From 37593a2d422f4d38738600cb80302862ed67039f Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 21 Jun 2022 13:26:13 +0200 Subject: [PATCH 36/71] cleanup --- .../nightscout/androidaps/di/AppComponent.kt | 6 +- .../comm/MedtronicHistoryDataUTest.kt | 65 ++++--------- .../pump/MedtronicPumpHistoryDecoderUTest.kt | 22 ++--- .../data/MedtronicHistoryDataUTest.kt | 95 +++++++------------ .../{dagger => di}/OmnipodInjectHelpers.kt | 2 +- .../{dagger => di}/OmnipodWizardModule.kt | 2 +- .../fragment/action/InitializePodFragment.kt | 2 +- .../fragment/action/InsertCannulaFragment.kt | 2 +- .../fragment/info/AttachPodFragment.kt | 2 +- .../fragment/info/PodActivatedFragment.kt | 2 +- .../info/StartPodActivationFragment.kt | 2 +- .../fragment/action/DeactivatePodFragment.kt | 2 +- .../fragment/info/PodDeactivatedFragment.kt | 2 +- .../fragment/info/PodDiscardedFragment.kt | 2 +- .../info/StartPodDeactivationFragment.kt | 2 +- .../OmnipodDashHistoryModule.kt | 2 +- .../dash/{dagger => di}/OmnipodDashModule.kt | 6 +- .../OmnipodDashWizardViewModelsModule.kt | 6 +- .../OmnipodErosHistoryModule.kt | 2 +- .../eros/{dagger => di}/OmnipodErosModule.kt | 6 +- .../OmnipodErosWizardViewModelsModule.kt | 6 +- .../eros/ui/OmnipodErosOverviewFragment.kt | 26 +++-- .../general/openhumans/OpenHumansAPI.kt | 8 +- .../openhumans/{dagger => di}/Helpers.kt | 2 +- .../{dagger => di}/OpenHumansModule.kt | 2 +- .../general/openhumans/ui/OHLoginActivity.kt | 4 +- 26 files changed, 104 insertions(+), 176 deletions(-) rename omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/{dagger => di}/OmnipodInjectHelpers.kt (99%) rename omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/{dagger => di}/OmnipodWizardModule.kt (99%) rename omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/{dagger => di}/OmnipodDashHistoryModule.kt (94%) rename omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/{dagger => di}/OmnipodDashModule.kt (91%) rename omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/{dagger => di}/OmnipodDashWizardViewModelsModule.kt (94%) rename omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/{dagger => di}/OmnipodErosHistoryModule.kt (92%) rename omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/{dagger => di}/OmnipodErosModule.kt (91%) rename omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/{dagger => di}/OmnipodErosWizardViewModelsModule.kt (94%) rename openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/{dagger => di}/Helpers.kt (94%) rename openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/{dagger => di}/OpenHumansModule.kt (96%) diff --git a/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt b/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt index 32b65aca7b..fb5bc21397 100644 --- a/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt +++ b/app/src/main/java/info/nightscout/androidaps/di/AppComponent.kt @@ -16,12 +16,12 @@ import info.nightscout.androidaps.dependencyInjection.AutotuneModule import info.nightscout.androidaps.diaconn.di.DiaconnG8Module import info.nightscout.androidaps.insight.di.InsightDatabaseModule import info.nightscout.androidaps.insight.di.InsightModule -import info.nightscout.androidaps.plugin.general.openhumans.dagger.OpenHumansModule +import info.nightscout.androidaps.plugin.general.openhumans.di.OpenHumansModule import info.nightscout.androidaps.plugins.pump.common.di.PumpCommonModule import info.nightscout.androidaps.plugins.pump.common.di.RileyLinkModule import info.nightscout.androidaps.plugins.pump.medtronic.di.MedtronicModule -import info.nightscout.androidaps.plugins.pump.omnipod.dash.dagger.OmnipodDashModule -import info.nightscout.androidaps.plugins.pump.omnipod.eros.dagger.OmnipodErosModule +import info.nightscout.androidaps.plugins.pump.omnipod.dash.di.OmnipodDashModule +import info.nightscout.androidaps.plugins.pump.omnipod.eros.di.OmnipodErosModule import info.nightscout.shared.di.SharedModule import javax.inject.Singleton diff --git a/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt b/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt index adb0844ef0..e2864fc967 100644 --- a/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt +++ b/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/MedtronicHistoryDataUTest.kt @@ -2,34 +2,21 @@ package info.nightscout.androidaps.plugins.pump.medtronic.comm import android.util.Log import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil -import org.mockito.Mock import info.nightscout.androidaps.plugins.bus.RxBus -import info.nightscout.androidaps.interfaces.ResourceHelper -import info.nightscout.androidaps.plugins.pump.common.defs.PumpType -import info.nightscout.shared.sharedPreferences.SP -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.shared.logging.AAPSLoggerTest -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil -import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus -import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil -import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.MedtronicPumpHistoryDecoder -import kotlin.Throws +import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.RawHistoryPage +import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.MedtronicPumpHistoryDecoder import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryType import info.nightscout.androidaps.plugins.pump.medtronic.data.MedtronicHistoryData import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.TempBasalProcessDTO import info.nightscout.androidaps.plugins.pump.medtronic.defs.MedtronicDeviceType +import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus +import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import info.nightscout.androidaps.utils.serialisation.SealedClassHelper.gson import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers -import org.mockito.Mockito -import org.mockito.MockitoAnnotations -import java.lang.Exception //import uk.org.lidalia.slf4jtest.TestLogger; //import uk.org.lidalia.slf4jtest.TestLoggerFactory; @@ -44,50 +31,30 @@ class MedtronicHistoryDataUTest : TestBase() { // "16 00 12 EC 14 47 13 33 00 14 F2 14 47 13 00 16 01 14 F2 14 47 13 33 00 1C C9 15 47 13 00 16 00 1C C9 15 47 13 33 4E 31 D3 15 47 13 00 16 01 31 D3 15 47 13 33 00 1A F1 15 47 13 00 16 00 1A F1 15 47 13 33 50 1D F1 15 47 13 00 16 01 1D F1 15 47 13 33 50 11 D8 16 47 13 00 16 01 11 D8 16 47 13 33 50 31 FB 16 47 13 00 16 01 31 FB 16 47 13 33 50 12 E3 17 47 13 00 16 01 12 E3 17 47 13 33 00 1E FB 17 47 13 00 16 00 1E FB 17 47 13 33 D8 21 FB 17 47 13 00 16 01 21 FB 17 47 13 07 00 00 05 CC 27 93 6D 27 93 05 0C 00 E8 00 00 00 00 05 CC 05 CC 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 E8 00 00 00 33 00 36 C4 00 48 13 00 16 00 36 C4 00 48 13 33 D8 29 C9 00 48 13 00 16 01 29 C9 00 48 13 33 00 12 E7 00 48 13 00 16 00 12 E7 00 48 13 33 BC 19 C9 01 48 13 00 16 01 19 C9 01 48 13 33 00 26 CE 01 48 13 00 16 00 26 CE 01 48 13 33 44 29 CE 01 48 13 00 16 01 29 CE 01 48 13 33 00 13 D3 01 48 13 00 16 00 13 D3 01 48 13 33 64 31 F1 01 48 13 00 16 01 31 F1 01 48 13 33 00 0B F7 01 48 13 00 16 00 0B F7 01 48 13 33 00 12 D8 02 48 13 00 16 01 12 D8 02 48 13 33 00 10 F1 02 48 13 00 16 00 10 F1 02 48 13 33 00 30 C4 03 48 13 00 16 01 30 C4 03 48 13 33 00 04 CA 03 48 13 00 16 00 04 CA 03 48 13 33 00 2F D3 03 48 13 00 16 01 2F D3 03 48 13 33 00 30 D8 03 48 13 00 16 00 30 D8 03 48 13 33 00 13 E7 03 48 13 00 16 01 13 E7 03 48 13 33 00 2E FB 03 48 13 00 16 00 2E FB 03 48 13 19 00 00 C1 04 08 13 07 00 00 04 0C 28 93 6D 28 93 05 0C 00 E8 00 00 00 00 04 0C 04 0C 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 E8 00 00 00 06 3E 03 7A 19 DC 48 49 13 0C 3E 0C E6 08 09 13 07 00 00 01 E4 29 93 6D 29 93 05 0C 00 E8 00 00 00 00 01 E4 01 E4 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 E8 00 00 00 1A 00 13 D2 0D 0A 13 1A 01 28 D2 0D 0A 13 21 00 2A D8 0D 0A 13 03 00 00 00 0E 2D D9 2D 0A 13 33 98 26 DE 0D 4A 13 00 16 01 26 DE 0D 4A 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5D 70" // ) - - - //lateinit var rxBus: RxBus lateinit var medtronicHistoryData: MedtronicHistoryData - lateinit var medtronicPumpStatus : MedtronicPumpStatus - + lateinit var medtronicPumpStatus: MedtronicPumpStatus @Before fun setup() { - MockitoAnnotations.initMocks(this) - rxBus = RxBus(TestAapsSchedulers(), aapsLogger) - medtronicPumpStatus = MedtronicPumpStatus( - rh, sp, rxBus, - rileyLinkUtil + medtronicPumpStatus = MedtronicPumpStatus(rh, sp, rxBus, rileyLinkUtil) + medtronicUtil = MedtronicUtil(aapsLogger, rxBus, rileyLinkUtil, medtronicPumpStatus) + decoder = MedtronicPumpHistoryDecoder(aapsLogger, medtronicUtil, byteUtil) + medtronicHistoryData = MedtronicHistoryData( + packetInjector, aapsLogger, sp, rh, rxBus, activePlugin, + medtronicUtil, decoder, medtronicPumpStatus, pumpSync, pumpSyncStorage ) - medtronicUtil = MedtronicUtil( - aapsLogger, rxBus, rileyLinkUtil, - medtronicPumpStatus - ) - - decoder = MedtronicPumpHistoryDecoder( - aapsLogger, - medtronicUtil, byteUtil - ) - - medtronicHistoryData = MedtronicHistoryData(packetInjector, aapsLogger, sp, rh, rxBus, activePlugin, - medtronicUtil, decoder, - medtronicPumpStatus, - pumpSync, - pumpSyncStorage) - System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace") } - //@Test @Throws(Exception::class) fun testTBR() { - var historyPageData = ByteUtil + val historyPageData = ByteUtil .createByteArrayFromString( "16 00 12 EC 14 47 13 33 00 14 F2 14 47 13 00 16 01 14 F2 14 47 13 33 00 1C C9 15 47 13 00 16 00 1C C9 15 47 13 33 4E 31 D3 15 47 13 00 16 01 31 D3 15 47 13 33 00 1A F1 15 47 13 00 16 00 1A F1 15 47 13 33 50 1D F1 15 47 13 00 16 01 1D F1 15 47 13 33 50 11 D8 16 47 13 00 16 01 11 D8 16 47 13 33 50 31 FB 16 47 13 00 16 01 31 FB 16 47 13 33 50 12 E3 17 47 13 00 16 01 12 E3 17 47 13 33 00 1E FB 17 47 13 00 16 00 1E FB 17 47 13 33 D8 21 FB 17 47 13 00 16 01 21 FB 17 47 13 07 00 00 05 CC 27 93 6D 27 93 05 0C 00 E8 00 00 00 00 05 CC 05 CC 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 E8 00 00 00 33 00 36 C4 00 48 13 00 16 00 36 C4 00 48 13 33 D8 29 C9 00 48 13 00 16 01 29 C9 00 48 13 33 00 12 E7 00 48 13 00 16 00 12 E7 00 48 13 33 BC 19 C9 01 48 13 00 16 01 19 C9 01 48 13 33 00 26 CE 01 48 13 00 16 00 26 CE 01 48 13 33 44 29 CE 01 48 13 00 16 01 29 CE 01 48 13 33 00 13 D3 01 48 13 00 16 00 13 D3 01 48 13 33 64 31 F1 01 48 13 00 16 01 31 F1 01 48 13 33 00 0B F7 01 48 13 00 16 00 0B F7 01 48 13 33 00 12 D8 02 48 13 00 16 01 12 D8 02 48 13 33 00 10 F1 02 48 13 00 16 00 10 F1 02 48 13 33 00 30 C4 03 48 13 00 16 01 30 C4 03 48 13 33 00 04 CA 03 48 13 00 16 00 04 CA 03 48 13 33 00 2F D3 03 48 13 00 16 01 2F D3 03 48 13 33 00 30 D8 03 48 13 00 16 00 30 D8 03 48 13 33 00 13 E7 03 48 13 00 16 01 13 E7 03 48 13 33 00 2E FB 03 48 13 00 16 00 2E FB 03 48 13 19 00 00 C1 04 08 13 07 00 00 04 0C 28 93 6D 28 93 05 0C 00 E8 00 00 00 00 04 0C 04 0C 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 E8 00 00 00 06 3E 03 7A 19 DC 48 49 13 0C 3E 0C E6 08 09 13 07 00 00 01 E4 29 93 6D 29 93 05 0C 00 E8 00 00 00 00 01 E4 01 E4 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 E8 00 00 00 1A 00 13 D2 0D 0A 13 1A 01 28 D2 0D 0A 13 21 00 2A D8 0D 0A 13 03 00 00 00 0E 2D D9 2D 0A 13 33 98 26 DE 0D 4A 13 00 16 01 26 DE 0D 4A 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5D 70" ) @@ -141,10 +108,10 @@ class MedtronicHistoryDataUTest : TestBase() { .createByteArrayFromString( "33 20 53 78 15 51 16 00 16 01 53 78 15 51 16 33 00 6F 40 16 51 16 00 16 00 6F 40 16 51 16 7B 16 6F 40 16 11 16 2C 1E 00 33 30 71 40 16 51 16 00 16 01 71 40 16 51 16 33 00 6E 45 16 51 16 00 16 00 6E 45 16 51 16 7B 16 6E 45 16 11 16 2C 1E 00 33 3A 70 45 16 51 16 00 16 01 70 45 16 51 16 33 00 71 5E 16 51 16 00 16 00 71 5E 16 51 16 7B 16 71 5E 16 11 16 2C 1E 00 33 40 73 5E 16 51 16 00 16 01 73 5E 16 51 16 33 00 74 6D 16 51 16 00 16 00 74 6D 16 51 16 7B 16 74 6D 16 11 16 2C 1E 00 33 14 76 6D 16 51 16 00 16 01 76 6D 16 51 16 33 00 77 72 16 51 16 00 16 00 77 72 16 51 16 7B 16 77 72 16 11 16 2C 1E 00 7B 17 40 40 17 11 16 2E 1E 00 33 28 51 41 17 51 16 00 16 01 51 41 17 51 16 33 00 56 46 17 51 16 00 16 00 56 46 17 51 16 7B 17 56 46 17 11 16 2E 1E 00 33 34 59 46 17 51 16 00 16 01 59 46 17 51 16 33 00 70 4A 17 51 16 00 16 00 70 4A 17 51 16 7B 17 70 4A 17 11 16 2E 1E 00 33 58 72 4A 17 51 16 00 16 01 72 4A 17 51 16 33 00 6E 59 17 51 16 00 16 00 6E 59 17 51 16 7B 17 6E 59 17 11 16 2E 1E 00 33 18 70 59 17 51 16 00 16 01 70 59 17 51 16 33 00 70 5E 17 51 16 00 16 00 70 5E 17 51 16 7B 17 70 5E 17 11 16 2E 1E 00 33 0C 72 5E 17 51 16 00 16 01 72 5E 17 51 16 33 00 72 63 17 51 16 00 16 00 72 63 17 51 16 7B 17 72 63 17 11 16 2E 1E 00 33 1C 70 72 17 51 16 00 16 01 70 72 17 51 16 33 00 51 78 17 51 16 00 16 00 51 78 17 51 16 7B 17 52 78 17 11 16 2E 1E 00 33 12 54 78 17 51 16 00 16 01 54 78 17 51 16 07 00 00 04 4E 51 96 00 00 00 6E 51 96 05 00 00 00 00 00 00 00 04 4E 03 A2 54 00 AC 10 00 00 00 00 00 00 00 00 00 AC 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 33 00 46 46 00 52 16 00 16 00 46 46 00 52 16 7B 00 47 46 00 12 16 00 1E 00 33 20 47 64 00 52 16 00 16 01 47 64 00 52 16 33 00 6D 77 00 52 16 00 16 00 6D 77 00 52 16 7B 00 6D 77 00 12 16 00 1E 00 33 12 70 77 00 52 16 00 16 01 70 77 00 52 16 33 00 58 78 00 52 16 00 16 00 58 78 00 52 16 7B 00 59 78 00 12 16 00 1E 00 33 00 5C 78 00 52 16 00 16 02 5C 78 00 52 16 21 00 66 79 00 12 16 03 00 00 00 9C 74 42 21 12 16 03 00 03 00 03 6E 4D 01 12 16 33 00 79 4E 01 52 16 00 16 00 79 4E 01 52 16 7B 01 79 4E 01 12 16 02 1E 00 33 2A 6B 4F 01 52 16 00 16 01 6B 4F 01 52 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E D1" //"33 20 53 78 15 51 16 00 16 01 53 78 15 51 16 33 00 6F 40 16 51 16 00 16 00 6F 40 16 51 16 7B 16 6F 40 16 11 16 2C 1E 00 33 30 71 40 16 51 16 00 16 01 71 40 16 51 16 33 00 6E 45 - // 16 51 16 00 16 00 6E 45 16 51 16 7B 16 6E 45 16 11 16 2C 1E 00 33 3A 70 45 16 51 16 00 16 01 70 45 16 51 16 33 00 71 5E 16 51 16 00 16 00 71 5E 16 51 16 7B 16 71 5E 16 11 16 2C 1E 00 33 40 73 5E 16 51 16 00 16 01 73 5E 16 51 16 33 00 74 6D 16 51 16 00 16 00 74 6D 16 51 16 7B 16 74 6D 16 11 16 2C 1E 00 33 14 76 6D 16 51 16 00 16 01 76 6D 16 51 16 33 00 77 72 16 51 16 00 16 00 77 72 16 51 16 7B 16 77 72 16 11 16 2C 1E 00 7B 17 40 40 17 11 16 2E 1E 00 33 28 51 41 17 51 16 00 16 01 51 41 17 51 16 33 00 56 46 17 51 16 00 16 00 56 46 17 51 16 7B 17 56 46 17 11 16 2E 1E 00 33 34 59 46 17 51 16 00 16 01 59 46 17 51 16 33 00 70 4A 17 51 16 00 16 00 70 4A 17 51 16 7B 17 70 4A 17 11 16 2E 1E 00 33 58 72 4A 17 51 16 00 16 01 72 4A 17 51 16 33 00 6E 59 17 51 16 00 16 00 6E 59 17 51 16 7B 17 6E 59 17 11 16 2E 1E 00 33 18 70 59 17 51 16 00 16 01 70 59 17 51 16 33 00 70 5E 17 51 16 00 16 00 70 5E 17 51 16 7B 17 70 5E 17 11 16 2E 1E 00 33 0C 72 5E 17 51 16 00 16 01 72 5E 17 51 16 33 00 72 63 17 51 16 00 16 00 72 63 17 51 16 7B 17 72 63 17 11 16 2E 1E 00 33 1C 70 72 17 51 16 00 16 01 70 72 17 51 16 33 00 51 78 17 51 16 00 16 00 51 78 17 51 16 7B 17 52 78 17 11 16 2E 1E 00 33 12 54 78 17 51 16 00 16 01 54 78 17 51 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 6D" + // 16 51 16 00 16 00 6E 45 16 51 16 7B 16 6E 45 16 11 16 2C 1E 00 33 3A 70 45 16 51 16 00 16 01 70 45 16 51 16 33 00 71 5E 16 51 16 00 16 00 71 5E 16 51 16 7B 16 71 5E 16 11 16 2C 1E 00 33 40 73 5E 16 51 16 00 16 01 73 5E 16 51 16 33 00 74 6D 16 51 16 00 16 00 74 6D 16 51 16 7B 16 74 6D 16 11 16 2C 1E 00 33 14 76 6D 16 51 16 00 16 01 76 6D 16 51 16 33 00 77 72 16 51 16 00 16 00 77 72 16 51 16 7B 16 77 72 16 11 16 2C 1E 00 7B 17 40 40 17 11 16 2E 1E 00 33 28 51 41 17 51 16 00 16 01 51 41 17 51 16 33 00 56 46 17 51 16 00 16 00 56 46 17 51 16 7B 17 56 46 17 11 16 2E 1E 00 33 34 59 46 17 51 16 00 16 01 59 46 17 51 16 33 00 70 4A 17 51 16 00 16 00 70 4A 17 51 16 7B 17 70 4A 17 11 16 2E 1E 00 33 58 72 4A 17 51 16 00 16 01 72 4A 17 51 16 33 00 6E 59 17 51 16 00 16 00 6E 59 17 51 16 7B 17 6E 59 17 11 16 2E 1E 00 33 18 70 59 17 51 16 00 16 01 70 59 17 51 16 33 00 70 5E 17 51 16 00 16 00 70 5E 17 51 16 7B 17 70 5E 17 11 16 2E 1E 00 33 0C 72 5E 17 51 16 00 16 01 72 5E 17 51 16 33 00 72 63 17 51 16 00 16 00 72 63 17 51 16 7B 17 72 63 17 11 16 2E 1E 00 33 1C 70 72 17 51 16 00 16 01 70 72 17 51 16 33 00 51 78 17 51 16 00 16 00 51 78 17 51 16 7B 17 52 78 17 11 16 2E 1E 00 33 12 54 78 17 51 16 00 16 01 54 78 17 51 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 6D" ) - medtronicUtil.medtronicPumpModel =MedtronicDeviceType.Medtronic_723_Revel + medtronicUtil.medtronicPumpModel = MedtronicDeviceType.Medtronic_723_Revel medtronicUtil.isModelSet = true val historyPage = RawHistoryPage(aapsLogger) @@ -152,7 +119,7 @@ class MedtronicHistoryDataUTest : TestBase() { val pumpHistoryEntries: MutableList = decoder.processPageAndCreateRecords(historyPage) println("PumpHistoryEntries: " + pumpHistoryEntries.size) - val rewindRecords: MutableList = medtronicHistoryData.getFilteredItems(pumpHistoryEntries, PumpHistoryEntryType.Rewind) + val rewindRecords: MutableList = medtronicHistoryData.getFilteredItems(pumpHistoryEntries, PumpHistoryEntryType.Rewind) preProcessListTBR(pumpHistoryEntries) @@ -172,7 +139,7 @@ class MedtronicHistoryDataUTest : TestBase() { println("PumpHistoryEntries: getFilteredItems: " + tbrs.size) - println("PumpHistoryEntries: getRewindItems: $rewindRecords.size : " + gson.toJson(rewindRecords) ) + println("PumpHistoryEntries: getRewindItems: $rewindRecords.size : " + gson.toJson(rewindRecords)) val processList: MutableList = medtronicHistoryData.createTBRProcessList(tbrs, rewindRecords) diff --git a/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/MedtronicPumpHistoryDecoderUTest.kt b/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/MedtronicPumpHistoryDecoderUTest.kt index 9b0a05ebf9..dea31405f6 100644 --- a/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/MedtronicPumpHistoryDecoderUTest.kt +++ b/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/MedtronicPumpHistoryDecoderUTest.kt @@ -2,19 +2,14 @@ package info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump //import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.plugins.bus.RxBus -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.RawHistoryPage import info.nightscout.androidaps.plugins.pump.medtronic.defs.MedtronicDeviceType import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil -import info.nightscout.androidaps.utils.rx.TestAapsSchedulers import org.junit.Assert import org.junit.Before -import org.junit.Ignore import org.junit.Test -import org.mockito.Mock /** * Created by andy on 11/1/18. @@ -28,17 +23,17 @@ class MedtronicPumpHistoryDecoderUTest : TestBase() { //@Mock lateinit var rileyLinkUtil: RileyLinkUtil //@Mock lateinit var sp: SP - private var medtronicPumpStatus: MedtronicPumpStatus? = null + private lateinit var medtronicPumpStatus: MedtronicPumpStatus + //private var medtronicUtil: MedtronicUtil? = null //private var decoder: MedtronicPumpHistoryDecoder? = null - var rxBusWrapper = RxBus(TestAapsSchedulers(), aapsLogger) @Before fun setup() { medtronicPumpStatus = - MedtronicPumpStatus(rh, sp, rxBusWrapper, rileyLinkUtil) + MedtronicPumpStatus(rh, sp, rxBus, rileyLinkUtil) medtronicUtil = - MedtronicUtil(aapsLogger, rxBusWrapper, rileyLinkUtil, medtronicPumpStatus!!) - decoder = MedtronicPumpHistoryDecoder(aapsLogger, medtronicUtil!!, ByteUtil()) + MedtronicUtil(aapsLogger, rxBus, rileyLinkUtil, medtronicPumpStatus) + decoder = MedtronicPumpHistoryDecoder(aapsLogger, medtronicUtil, ByteUtil()) } /* @@ -191,12 +186,11 @@ class MedtronicPumpHistoryDecoderUTest : TestBase() { ): List { val historyPageData = ByteUtil.createByteArrayFromString(historyPageString) aapsLogger.debug("History Page Length:" + historyPageData.size) - medtronicUtil!!.medtronicPumpModel = medtronicDeviceType - medtronicUtil!!.isModelSet = true + medtronicUtil.medtronicPumpModel = medtronicDeviceType + medtronicUtil.isModelSet = true val historyPage = RawHistoryPage(aapsLogger) historyPage.appendData(historyPageData) - val pumpHistoryEntries: List = - decoder!!.processPageAndCreateRecords(historyPage) + val pumpHistoryEntries: List = decoder.processPageAndCreateRecords(historyPage) displayHistoryRecords(pumpHistoryEntries) return pumpHistoryEntries } diff --git a/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryDataUTest.kt b/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryDataUTest.kt index a985f6d615..f880537198 100644 --- a/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryDataUTest.kt +++ b/medtronic/src/test/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryDataUTest.kt @@ -1,70 +1,37 @@ package info.nightscout.androidaps.plugins.pump.medtronic.data -import java.lang.reflect.Type -import com.google.gson.reflect.TypeToken import com.google.gson.Gson import com.google.gson.internal.LinkedTreeMap -// import dagger.android.AndroidInjector -// import dagger.android.HasAndroidInjector +import com.google.gson.reflect.TypeToken import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.interfaces.ActivePlugin -import info.nightscout.androidaps.interfaces.PumpSync -import info.nightscout.androidaps.plugins.bus.RxBus -import info.nightscout.androidaps.plugins.pump.common.sync.PumpSyncStorage import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.MedtronicPumpHistoryDecoder import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.TempBasalPair import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil -import info.nightscout.androidaps.interfaces.ResourceHelper -import info.nightscout.shared.sharedPreferences.SP import org.junit.Before -import org.junit.Ignore - import org.junit.Test import org.mockito.Mock +import java.lang.reflect.Type -@Suppress("UNCHECKED_CAST") +@Suppress("UNCHECKED_CAST") class MedtronicHistoryDataUTest : TestBase() { - //@Mock lateinit var activePlugin: ActivePlugin - //@Mock lateinit var medtronicUtil: MedtronicUtil - //@Mock lateinit var medtronicPumpHistoryDecoder: MedtronicPumpHistoryDecoder @Mock lateinit var medtronicPumpStatus: MedtronicPumpStatus - // @Mock lateinit var pumpSync: PumpSync - // @Mock lateinit var pumpSyncStorage: PumpSyncStorage - - //@Mock lateinit var rxBus: RxBus - - // val packetInjector = HasAndroidInjector { - // AndroidInjector { - // - // } - // } @Before fun setUp() { - medtronicUtil = MedtronicUtil( - aapsLogger, rxBus, rileyLinkUtil, - medtronicPumpStatus - ) - - decoder = MedtronicPumpHistoryDecoder( - aapsLogger, - medtronicUtil, byteUtil - ) + medtronicUtil = MedtronicUtil(aapsLogger, rxBus, rileyLinkUtil, medtronicPumpStatus) + decoder = MedtronicPumpHistoryDecoder(aapsLogger, medtronicUtil, byteUtil) } - - @Test fun createTBRProcessList() { - var unitToTest = MedtronicHistoryData(packetInjector, aapsLogger, sp, rh, rxBus, activePlugin, - medtronicUtil, decoder, - medtronicPumpStatus, - pumpSync, - pumpSyncStorage) + val unitToTest = MedtronicHistoryData( + packetInjector, aapsLogger, sp, rh, rxBus, activePlugin, + medtronicUtil, decoder, medtronicPumpStatus, pumpSync, pumpSyncStorage + ) val gson = Gson() @@ -74,26 +41,26 @@ class MedtronicHistoryDataUTest : TestBase() { val yourClassList: MutableList = gson.fromJson(fileText, listType) for (pumpHistoryEntry in yourClassList) { - val stringObject = pumpHistoryEntry.decodedData["Object"] as LinkedTreeMap + val stringObject = pumpHistoryEntry.decodedData["Object"] as LinkedTreeMap - val rate : Double = stringObject.get("insulinRate") as Double - val durationMinutes: Double = stringObject.get("durationMinutes") as Double - val durationMinutesInt : Int = durationMinutes.toInt() + val rate: Double = stringObject["insulinRate"] as Double + val durationMinutes: Double = stringObject["durationMinutes"] as Double + val durationMinutesInt: Int = durationMinutes.toInt() - var tmbPair = TempBasalPair(rate, false, durationMinutesInt) + val tmbPair = TempBasalPair(rate, false, durationMinutesInt) pumpHistoryEntry.decodedData.remove("Object") pumpHistoryEntry.addDecodedData("Object", tmbPair) } - System.out.println("TBR Pre-Process List: " + gson.toJson(yourClassList)) + println("TBR Pre-Process List: " + gson.toJson(yourClassList)) val createTBRProcessList = unitToTest.createTBRProcessList(yourClassList, mutableListOf()) - System.out.println("TBR Process List: " + createTBRProcessList.size) + println("TBR Process List: " + createTBRProcessList.size) for (tempBasalProcessDTO in createTBRProcessList) { - System.out.println(tempBasalProcessDTO.toTreatmentString()) + println(tempBasalProcessDTO.toTreatmentString()) } } @@ -101,11 +68,13 @@ class MedtronicHistoryDataUTest : TestBase() { @Test fun createTBRProcessList_SpecialCase() { - var unitToTest = MedtronicHistoryData(packetInjector, aapsLogger, sp, rh, rxBus, activePlugin, - medtronicUtil, decoder, - medtronicPumpStatus, - pumpSync, - pumpSyncStorage) + val unitToTest = MedtronicHistoryData( + packetInjector, aapsLogger, sp, rh, rxBus, activePlugin, + medtronicUtil, decoder, + medtronicPumpStatus, + pumpSync, + pumpSyncStorage + ) val gson = Gson() @@ -115,26 +84,26 @@ class MedtronicHistoryDataUTest : TestBase() { val yourClassList: MutableList = gson.fromJson(fileText, listType) for (pumpHistoryEntry in yourClassList) { - val stringObject = pumpHistoryEntry.decodedData["Object"] as LinkedTreeMap + val stringObject = pumpHistoryEntry.decodedData["Object"] as LinkedTreeMap - val rate : Double = stringObject.get("insulinRate") as Double - val durationMinutes: Double = stringObject.get("durationMinutes") as Double - val durationMinutesInt : Int = durationMinutes.toInt() + val rate: Double = stringObject["insulinRate"] as Double + val durationMinutes: Double = stringObject["durationMinutes"] as Double + val durationMinutesInt: Int = durationMinutes.toInt() - var tmbPair = TempBasalPair(rate, false, durationMinutesInt) + val tmbPair = TempBasalPair(rate, false, durationMinutesInt) pumpHistoryEntry.decodedData.remove("Object") pumpHistoryEntry.addDecodedData("Object", tmbPair) } - System.out.println("TBR Pre-Process List (Special): " + gson.toJson(yourClassList)) + println("TBR Pre-Process List (Special): " + gson.toJson(yourClassList)) val createTBRProcessList = unitToTest.createTBRProcessList(yourClassList, mutableListOf()) - System.out.println("TBR Process List (Special): " + createTBRProcessList.size) + println("TBR Process List (Special): " + createTBRProcessList.size) for (tempBasalProcessDTO in createTBRProcessList) { - System.out.println(tempBasalProcessDTO.toTreatmentString()) + println(tempBasalProcessDTO.toTreatmentString()) } } diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/dagger/OmnipodInjectHelpers.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/di/OmnipodInjectHelpers.kt similarity index 99% rename from omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/dagger/OmnipodInjectHelpers.kt rename to omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/di/OmnipodInjectHelpers.kt index 906d0f3413..8e0bf4b0b2 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/dagger/OmnipodInjectHelpers.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/di/OmnipodInjectHelpers.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.common.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.common.di import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/dagger/OmnipodWizardModule.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/di/OmnipodWizardModule.kt similarity index 99% rename from omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/dagger/OmnipodWizardModule.kt rename to omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/di/OmnipodWizardModule.kt index 4c4d1e3643..6458a777bf 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/dagger/OmnipodWizardModule.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/di/OmnipodWizardModule.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.common.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.common.di import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InitializePodFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InitializePodFragment.kt index eced08a2b3..4f1d2bf1ba 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InitializePodFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InitializePodFragment.kt @@ -5,7 +5,7 @@ import androidx.annotation.IdRes import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider import info.nightscout.androidaps.plugins.pump.omnipod.common.R -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.action.InitializePodViewModel import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InsertCannulaFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InsertCannulaFragment.kt index 12483400e6..982587bcbc 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InsertCannulaFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/action/InsertCannulaFragment.kt @@ -5,7 +5,7 @@ import androidx.annotation.IdRes import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider import info.nightscout.androidaps.plugins.pump.omnipod.common.R -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.action.InsertCannulaViewModel import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/AttachPodFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/AttachPodFragment.kt index 8d693aa934..f3517705d6 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/AttachPodFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/AttachPodFragment.kt @@ -9,7 +9,7 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import info.nightscout.androidaps.plugins.pump.omnipod.common.R -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.info.AttachPodViewModel import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.common.fragment.InfoFragmentBase import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/PodActivatedFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/PodActivatedFragment.kt index 2bb2ea443d..d31bc47477 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/PodActivatedFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/PodActivatedFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import androidx.annotation.IdRes import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.info.PodActivatedViewModel import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.common.fragment.InfoFragmentBase import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/StartPodActivationFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/StartPodActivationFragment.kt index 477f740b85..704b2e446d 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/StartPodActivationFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/activation/fragment/info/StartPodActivationFragment.kt @@ -5,7 +5,7 @@ import androidx.annotation.IdRes import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider import info.nightscout.androidaps.plugins.pump.omnipod.common.R -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.info.StartPodActivationViewModel import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.common.fragment.InfoFragmentBase import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/action/DeactivatePodFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/action/DeactivatePodFragment.kt index 1003744903..0d048c2a21 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/action/DeactivatePodFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/action/DeactivatePodFragment.kt @@ -9,7 +9,7 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import info.nightscout.androidaps.plugins.pump.omnipod.common.R -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.common.fragment.ActionFragmentBase import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.deactivation.viewmodel.action.DeactivatePodViewModel import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDeactivatedFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDeactivatedFragment.kt index 096c29faf9..64a755a2dc 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDeactivatedFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDeactivatedFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import androidx.annotation.IdRes import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.common.fragment.InfoFragmentBase import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.deactivation.viewmodel.info.PodDeactivatedViewModel import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDiscardedFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDiscardedFragment.kt index 6ec5245c1c..171850f7eb 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDiscardedFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/PodDiscardedFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import androidx.annotation.IdRes import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.common.fragment.InfoFragmentBase import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.deactivation.viewmodel.info.PodDiscardedViewModel import javax.inject.Inject diff --git a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/StartPodDeactivationFragment.kt b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/StartPodDeactivationFragment.kt index 6e41a6c928..fe355de393 100644 --- a/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/StartPodDeactivationFragment.kt +++ b/omnipod-common/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/common/ui/wizard/deactivation/fragment/info/StartPodDeactivationFragment.kt @@ -5,7 +5,7 @@ import androidx.annotation.IdRes import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider import info.nightscout.androidaps.plugins.pump.omnipod.common.R -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.common.fragment.InfoFragmentBase import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.deactivation.viewmodel.info.StartPodDeactivationViewModel import javax.inject.Inject diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashHistoryModule.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashHistoryModule.kt similarity index 94% rename from omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashHistoryModule.kt rename to omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashHistoryModule.kt index 574ea7b7d3..a4000d6680 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashHistoryModule.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashHistoryModule.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.dash.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.dash.di import android.content.Context import dagger.Module diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashModule.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashModule.kt similarity index 91% rename from omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashModule.kt rename to omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashModule.kt index c565d67abc..ffb02cc03c 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashModule.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashModule.kt @@ -1,10 +1,10 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.dash.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.dash.di import dagger.Binds import dagger.Module import dagger.android.ContributesAndroidInjector -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.ActivityScope -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodWizardModule +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.ActivityScope +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodWizardModule import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.OmnipodDashManager import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.OmnipodDashManagerImpl import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManager diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashWizardViewModelsModule.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashWizardViewModelsModule.kt similarity index 94% rename from omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashWizardViewModelsModule.kt rename to omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashWizardViewModelsModule.kt index fc0f0f4e52..1426822dc8 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/dagger/OmnipodDashWizardViewModelsModule.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/di/OmnipodDashWizardViewModelsModule.kt @@ -1,11 +1,11 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.dash.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.dash.di import androidx.lifecycle.ViewModel import dagger.Binds import dagger.Module import dagger.multibindings.IntoMap -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.ViewModelKey +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.ViewModelKey import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.action.InitializePodViewModel import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.action.InsertCannulaViewModel import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.info.AttachPodViewModel diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosHistoryModule.kt b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosHistoryModule.kt similarity index 92% rename from omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosHistoryModule.kt rename to omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosHistoryModule.kt index ca0b026731..f88570a91d 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosHistoryModule.kt +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosHistoryModule.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.eros.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.eros.di import android.content.Context import dagger.Module diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosModule.kt b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosModule.kt similarity index 91% rename from omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosModule.kt rename to omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosModule.kt index ead789180a..41c4104d35 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosModule.kt +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosModule.kt @@ -1,10 +1,10 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.eros.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.eros.di import dagger.Module import dagger.Provides import dagger.android.ContributesAndroidInjector -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.ActivityScope -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodWizardModule +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.ActivityScope +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodWizardModule import info.nightscout.androidaps.plugins.pump.omnipod.eros.data.RLHistoryItemOmnipod import info.nightscout.androidaps.plugins.pump.omnipod.eros.driver.manager.ErosPodStateManager import info.nightscout.androidaps.plugins.pump.omnipod.eros.manager.AapsErosPodStateManager diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosWizardViewModelsModule.kt b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosWizardViewModelsModule.kt similarity index 94% rename from omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosWizardViewModelsModule.kt rename to omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosWizardViewModelsModule.kt index 8b46fee7f1..494dbf401a 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/dagger/OmnipodErosWizardViewModelsModule.kt +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/di/OmnipodErosWizardViewModelsModule.kt @@ -1,11 +1,11 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.eros.dagger +package info.nightscout.androidaps.plugins.pump.omnipod.eros.di import androidx.lifecycle.ViewModel import dagger.Binds import dagger.Module import dagger.multibindings.IntoMap -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.OmnipodPluginQualifier -import info.nightscout.androidaps.plugins.pump.omnipod.common.dagger.ViewModelKey +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.OmnipodPluginQualifier +import info.nightscout.androidaps.plugins.pump.omnipod.common.di.ViewModelKey import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.action.InitializePodViewModel import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.action.InsertCannulaViewModel import info.nightscout.androidaps.plugins.pump.omnipod.common.ui.wizard.activation.viewmodel.info.AttachPodViewModel diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/OmnipodErosOverviewFragment.kt b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/OmnipodErosOverviewFragment.kt index d67636cda0..429301d62c 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/OmnipodErosOverviewFragment.kt +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/OmnipodErosOverviewFragment.kt @@ -1,7 +1,6 @@ package info.nightscout.androidaps.plugins.pump.omnipod.eros.ui import android.content.Intent -import android.graphics.Color import android.os.Bundle import android.os.Handler import android.os.HandlerThread @@ -15,6 +14,7 @@ import info.nightscout.androidaps.activities.ErrorHelperActivity import info.nightscout.androidaps.events.EventPreferenceChange import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.CommandQueue +import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification import info.nightscout.androidaps.plugins.general.overview.notifications.Notification @@ -48,10 +48,9 @@ import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.alertDialogs.OKDialog import info.nightscout.androidaps.utils.protection.ProtectionCheck -import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers -import info.nightscout.shared.sharedPreferences.SP import info.nightscout.androidaps.utils.ui.UIRunnable +import info.nightscout.shared.sharedPreferences.SP import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import org.apache.commons.lang3.StringUtils @@ -59,7 +58,6 @@ import org.joda.time.DateTime import org.joda.time.Duration import java.util.* import javax.inject.Inject -import kotlin.collections.ArrayList class OmnipodErosOverviewFragment : DaggerFragment() { companion object { @@ -96,17 +94,17 @@ class OmnipodErosOverviewFragment : DaggerFragment() { } } - var _binding: OmnipodErosOverviewBinding? = null - var _rileyLinkStatusBinding: OmnipodErosOverviewRileyLinkStatusBinding? = null - var _podInfoBinding: OmnipodCommonOverviewPodInfoBinding? = null - var _buttonBinding: OmnipodCommonOverviewButtonsBinding? = null + private var _binding: OmnipodErosOverviewBinding? = null + private var _rileyLinkStatusBinding: OmnipodErosOverviewRileyLinkStatusBinding? = null + private var _podInfoBinding: OmnipodCommonOverviewPodInfoBinding? = null + private var _buttonBinding: OmnipodCommonOverviewButtonsBinding? = null // These properties are only valid between onCreateView and // onDestroyView. - val binding get() = _binding!! - val rileyLinkStatusBinding get() = _rileyLinkStatusBinding!! - val podInfoBinding get() = _podInfoBinding!! - val buttonBinding get() = _buttonBinding!! + private val binding get() = _binding!! + private val rileyLinkStatusBinding get() = _rileyLinkStatusBinding!! + private val podInfoBinding get() = _podInfoBinding!! + private val buttonBinding get() = _buttonBinding!! override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = OmnipodErosOverviewBinding.inflate(inflater, container, false).also { @@ -256,9 +254,9 @@ class OmnipodErosOverviewFragment : DaggerFragment() { val errors = ArrayList() if (omnipodErosPumpPlugin.rileyLinkService != null) { - val rileyLinkErrorDescription = omnipodErosPumpPlugin.rileyLinkService.errorDescription + val rileyLinkErrorDescription = omnipodErosPumpPlugin.rileyLinkService?.errorDescription if (StringUtils.isNotEmpty(rileyLinkErrorDescription)) { - errors.add(rileyLinkErrorDescription) + errors.add(rileyLinkErrorDescription!!) } } diff --git a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansAPI.kt b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansAPI.kt index 1c1a8376f2..18be8d0335 100644 --- a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansAPI.kt +++ b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansAPI.kt @@ -2,10 +2,10 @@ package info.nightscout.androidaps.plugin.general.openhumans import android.annotation.SuppressLint import android.util.Base64 -import info.nightscout.androidaps.plugin.general.openhumans.dagger.BaseUrl -import info.nightscout.androidaps.plugin.general.openhumans.dagger.ClientId -import info.nightscout.androidaps.plugin.general.openhumans.dagger.ClientSecret -import info.nightscout.androidaps.plugin.general.openhumans.dagger.RedirectUrl +import info.nightscout.androidaps.plugin.general.openhumans.di.BaseUrl +import info.nightscout.androidaps.plugin.general.openhumans.di.ClientId +import info.nightscout.androidaps.plugin.general.openhumans.di.ClientSecret +import info.nightscout.androidaps.plugin.general.openhumans.di.RedirectUrl import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine import okhttp3.* diff --git a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/dagger/Helpers.kt b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/di/Helpers.kt similarity index 94% rename from openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/dagger/Helpers.kt rename to openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/di/Helpers.kt index 807bd04e92..5e6f855c59 100644 --- a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/dagger/Helpers.kt +++ b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/di/Helpers.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugin.general.openhumans.dagger +package info.nightscout.androidaps.plugin.general.openhumans.di import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider diff --git a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/dagger/OpenHumansModule.kt b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/di/OpenHumansModule.kt similarity index 96% rename from openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/dagger/OpenHumansModule.kt rename to openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/di/OpenHumansModule.kt index 41ac8a53e3..41f6c2e2a9 100644 --- a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/dagger/OpenHumansModule.kt +++ b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/di/OpenHumansModule.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugin.general.openhumans.dagger +package info.nightscout.androidaps.plugin.general.openhumans.di import androidx.lifecycle.ViewModel import dagger.Binds diff --git a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/ui/OHLoginActivity.kt b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/ui/OHLoginActivity.kt index a2972976a6..5a44d3fc84 100644 --- a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/ui/OHLoginActivity.kt +++ b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/ui/OHLoginActivity.kt @@ -17,8 +17,8 @@ import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.button.MaterialButton import dagger.android.support.DaggerAppCompatActivity import info.nightscout.androidaps.plugin.general.openhumans.R -import info.nightscout.androidaps.plugin.general.openhumans.dagger.AuthUrl -import info.nightscout.androidaps.plugin.general.openhumans.dagger.ViewModelFactory +import info.nightscout.androidaps.plugin.general.openhumans.di.AuthUrl +import info.nightscout.androidaps.plugin.general.openhumans.di.ViewModelFactory import javax.inject.Inject class OHLoginActivity : DaggerAppCompatActivity() { From bbcbf3f90535c719fb70bbcb41c486cc7bf475ad Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 21 Jun 2022 18:51:55 +0200 Subject: [PATCH 37/71] fix BolusProgressDialog closing --- .../queue/CommandQueueImplementation.kt | 8 ++--- .../androidaps/queue/commands/CommandBolus.kt | 2 +- .../plugins/pump/combo/ComboPlugin.java | 2 +- .../activities/BolusProgressHelperActivity.kt | 2 +- .../androidaps/data/DetailedBolusInfo.kt | 2 ++ .../androidaps/dialogs/BolusProgressDialog.kt | 32 ++++++++++--------- .../androidaps/interfaces/CommandQueue.kt | 2 +- .../EventDismissBolusProgressIfRunning.kt | 2 +- .../events/EventOverviewBolusProgress.kt | 2 +- .../danaRKorean/DanaRKoreanPlugin.kt | 2 +- .../services/DanaRKoreanExecutionService.java | 2 +- .../androidaps/danaRv2/DanaRv2Plugin.java | 9 +++--- .../services/DanaRv2ExecutionService.java | 2 +- .../androidaps/danar/DanaRPlugin.java | 10 +++--- .../AbstractDanaRExecutionService.java | 2 +- .../danar/services/DanaRExecutionService.java | 6 ++-- .../pump/danaR/comm/MsgBolusProgressTest.kt | 2 +- .../pump/danaR/comm/MsgBolusStopTest.kt | 2 +- .../androidaps/danars/DanaRSPlugin.kt | 2 +- .../DanaRSPacketNotifyDeliveryCompleteTest.kt | 2 +- .../DanaRsPacketBolusSetStepBolusStopTest.kt | 2 +- ...naRsPacketNotifyDeliveryRateDisplayTest.kt | 2 +- .../androidaps/diaconn/DiaconnG8Plugin.kt | 2 +- .../pump/insight/LocalInsightPlugin.java | 2 +- .../plugins/pump/common/PumpPluginAbstract.kt | 2 +- 25 files changed, 55 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt index 3f2e2de469..e08da60f0f 100644 --- a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt +++ b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueueImplementation.kt @@ -321,9 +321,9 @@ class CommandQueueImplementation @Inject constructor( } @Synchronized - override fun cancelAllBoluses(timestamp: Long) { + override fun cancelAllBoluses(id: Long) { if (!isRunning(CommandType.BOLUS)) { - rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResult(injector).success(true).enacted(false), timestamp)) + rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResult(injector).success(true).enacted(false), id)) } removeAll(CommandType.BOLUS) removeAll(CommandType.SMB_BOLUS) @@ -598,12 +598,12 @@ class CommandQueueImplementation @Inject constructor( if (detailedBolusInfo.context != null) { val bolusProgressDialog = BolusProgressDialog() bolusProgressDialog.setInsulin(detailedBolusInfo.insulin) - bolusProgressDialog.setTimestamp(detailedBolusInfo.timestamp) + bolusProgressDialog.setId(detailedBolusInfo.id) bolusProgressDialog.show((detailedBolusInfo.context as AppCompatActivity).supportFragmentManager, "BolusProgress") } else { val i = Intent() i.putExtra("insulin", detailedBolusInfo.insulin) - i.putExtra("timestamp", detailedBolusInfo.timestamp) + i.putExtra("id", detailedBolusInfo.id) i.setClass(context, BolusProgressHelperActivity::class.java) i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(i) diff --git a/app/src/main/java/info/nightscout/androidaps/queue/commands/CommandBolus.kt b/app/src/main/java/info/nightscout/androidaps/queue/commands/CommandBolus.kt index d00cfb9857..03c852754d 100644 --- a/app/src/main/java/info/nightscout/androidaps/queue/commands/CommandBolus.kt +++ b/app/src/main/java/info/nightscout/androidaps/queue/commands/CommandBolus.kt @@ -26,7 +26,7 @@ class CommandBolus( val r = activePlugin.activePump.deliverTreatment(detailedBolusInfo) if (r.success) carbsRunnable.run() BolusProgressDialog.bolusEnded = true - rxBus.send(EventDismissBolusProgressIfRunning(r, detailedBolusInfo.timestamp)) + rxBus.send(EventDismissBolusProgressIfRunning(r, detailedBolusInfo.id)) aapsLogger.debug(LTag.PUMPQUEUE, "Result success: ${r.success} enacted: ${r.enacted}") callback?.result(r)?.run() } diff --git a/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java b/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java index c0d416679a..0c70619feb 100644 --- a/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java +++ b/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboPlugin.java @@ -566,7 +566,7 @@ public class ComboPlugin extends PumpPluginBase implements Pump, Constraints { return new PumpEnactResult(getInjector()).success(true).enacted(false); } - EventOverviewBolusProgress.Treatment treatment = new EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB); + EventOverviewBolusProgress.Treatment treatment = new EventOverviewBolusProgress.Treatment(0.0, 0,detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId()); EventOverviewBolusProgress.INSTANCE.setT(treatment); // start bolus delivery diff --git a/core/src/main/java/info/nightscout/androidaps/activities/BolusProgressHelperActivity.kt b/core/src/main/java/info/nightscout/androidaps/activities/BolusProgressHelperActivity.kt index 063ebe0d7d..9849f642b9 100644 --- a/core/src/main/java/info/nightscout/androidaps/activities/BolusProgressHelperActivity.kt +++ b/core/src/main/java/info/nightscout/androidaps/activities/BolusProgressHelperActivity.kt @@ -9,7 +9,7 @@ class BolusProgressHelperActivity : DialogAppCompatActivity() { BolusProgressDialog() .setHelperActivity(this) .setInsulin(intent.getDoubleExtra("insulin", 0.0)) - .setTimestamp(intent.getLongExtra("timestamp", 0L)) + .setId(intent.getLongExtra("id", 0L)) .show(supportFragmentManager, "BolusProgress") } } \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt b/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt index 07be899e6d..36eb63de96 100644 --- a/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt +++ b/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt @@ -14,6 +14,8 @@ import info.nightscout.androidaps.utils.T class DetailedBolusInfo { + val id = System.currentTimeMillis() + // Requesting parameters for driver @JvmField var insulin = 0.0 @JvmField var carbs = 0.0 diff --git a/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt b/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt index c19f869a71..fd677e751c 100644 --- a/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt +++ b/core/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt @@ -48,12 +48,12 @@ class BolusProgressDialog : DaggerDialogFragment() { private var running = true private var amount = 0.0 - var timestamp: Long = 0L + var id: Long = 0L private var state: String? = null private var helpActivity: BolusProgressHelperActivity? = null - fun setTimestamp(timestamp: Long): BolusProgressDialog { - this.timestamp = timestamp + fun setId(id: Long): BolusProgressDialog { + this.id = id return this } @@ -88,7 +88,7 @@ class BolusProgressDialog : DaggerDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { savedInstanceState?.let { amount = it.getDouble("amount") - timestamp = it.getLong("timestamp") + id = it.getLong("id") state = it.getString("state") ?: rh.gs(R.string.waitingforpump) } binding.title.text = rh.gs(R.string.goingtodeliver, amount) @@ -98,7 +98,7 @@ class BolusProgressDialog : DaggerDialogFragment() { binding.stoppressed.visibility = View.VISIBLE binding.stop.visibility = View.INVISIBLE uel.log(Action.CANCEL_BOLUS, Sources.Overview, state) - commandQueue.cancelAllBoluses(timestamp) + commandQueue.cancelAllBoluses(id) } binding.progressbar.max = 100 binding.status.text = state @@ -127,22 +127,24 @@ class BolusProgressDialog : DaggerDialogFragment() { .toObservable(EventDismissBolusProgressIfRunning::class.java) .observeOn(aapsSchedulers.main) .subscribe({ - aapsLogger.debug(LTag.PUMP, "Running timestamp $timestamp. Close request timestamp ${it.bolusTimestamp}") - if (it.bolusTimestamp == null || it.bolusTimestamp == timestamp) + aapsLogger.debug(LTag.PUMP, "Running id $id. Close request id ${it.id}") + if (it.id == null || it.id == id) if (running) dismiss() }, fabricPrivacy::logException) disposable += rxBus .toObservable(EventOverviewBolusProgress::class.java) .observeOn(aapsSchedulers.main) .subscribe({ - aapsLogger.debug(LTag.UI, "Status: ${it.status} Percent: ${it.percent}") - binding.status.text = it.status - binding.progressbar.progress = it.percent - if (it.percent == 100) { - binding.stop.visibility = View.INVISIBLE - scheduleDismiss() + if (it.t?.id == id) { + aapsLogger.debug(LTag.UI, "Status: ${it.status} Percent: ${it.percent}") + binding.status.text = it.status + binding.progressbar.progress = it.percent + if (it.percent == 100) { + binding.stop.visibility = View.INVISIBLE + scheduleDismiss() + } + state = it.status } - state = it.status }, fabricPrivacy::logException) } @@ -170,7 +172,7 @@ class BolusProgressDialog : DaggerDialogFragment() { super.onSaveInstanceState(outState) outState.putString("state", state) outState.putDouble("amount", amount) - outState.putLong("timestamp", timestamp) + outState.putLong("id", id) } override fun onDestroyView() { diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt index 8619f43a3a..b81f4fa0fe 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/CommandQueue.kt @@ -17,7 +17,7 @@ interface CommandQueue { fun independentConnect(reason: String, callback: Callback?) fun bolusInQueue(): Boolean fun bolus(detailedBolusInfo: DetailedBolusInfo, callback: Callback?): Boolean - fun cancelAllBoluses(running: Long) + fun cancelAllBoluses(id: Long) fun stopPump(callback: Callback?) fun startPump(callback: Callback?) fun setTBROverNotification(callback: Callback?, enable: Boolean) diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt index dfde13b932..f368691c3b 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventDismissBolusProgressIfRunning.kt @@ -3,4 +3,4 @@ package info.nightscout.androidaps.plugins.general.overview.events import info.nightscout.androidaps.data.PumpEnactResult import info.nightscout.androidaps.events.Event -class EventDismissBolusProgressIfRunning(val result: PumpEnactResult?, val bolusTimestamp: Long?) : Event() \ No newline at end of file +class EventDismissBolusProgressIfRunning(val result: PumpEnactResult?, val id: Long?) : Event() \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventOverviewBolusProgress.kt b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventOverviewBolusProgress.kt index 5230bc979c..ba66ac32c0 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventOverviewBolusProgress.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventOverviewBolusProgress.kt @@ -4,7 +4,7 @@ import info.nightscout.androidaps.events.Event object EventOverviewBolusProgress : Event() { - data class Treatment constructor(@JvmField var insulin: Double = 0.0, @JvmField var carbs: Int = 0, @JvmField var isSMB: Boolean) + data class Treatment constructor(var insulin: Double = 0.0, var carbs: Int = 0, var isSMB: Boolean, var id: Long) var status = "" var t: Treatment? = null diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt b/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt index 55e4139aae..88609dbc9b 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt +++ b/danar/src/main/java/info/nightscout/androidaps/danaRKorean/DanaRKoreanPlugin.kt @@ -122,7 +122,7 @@ class DanaRKoreanPlugin @Inject constructor( detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(Constraint(detailedBolusInfo.insulin)).value() if (detailedBolusInfo.carbs > 0) throw IllegalArgumentException() return if (detailedBolusInfo.insulin > 0) { - val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) + val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) var connectionOK = false if (detailedBolusInfo.insulin > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, detailedBolusInfo.carbs.toInt(), detailedBolusInfo.carbsTimestamp diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java b/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java index 56efea9bea..75c5ec5079 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java +++ b/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java @@ -278,7 +278,7 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService { if (!danaPump.getBolusStopped()) { mSerialIOThread.sendMessage(start); } else { - t.insulin = 0d; + t.setInsulin(0d); return false; } while (!danaPump.getBolusStopped() && !start.getFailed()) { diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java b/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java index 5594689077..1253ef889a 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java +++ b/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java @@ -185,16 +185,17 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { detailedBolusInfoStorage.add(detailedBolusInfo); // will be picked up on reading history - EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB); + EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId()); boolean connectionOK = false; if (detailedBolusInfo.insulin > 0 || carbs > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) carbs, carbTimeStamp, t); PumpEnactResult result = new PumpEnactResult(getInjector()); - result.success(connectionOK && Math.abs(detailedBolusInfo.insulin - t.insulin) < pumpDescription.getBolusStep()) - .bolusDelivered(t.insulin) + result.success(connectionOK && Math.abs(detailedBolusInfo.insulin - t.getInsulin()) < pumpDescription.getBolusStep()) + .bolusDelivered(t.getInsulin()) .carbsDelivered(detailedBolusInfo.carbs); if (!result.getSuccess()) - result.comment(rh.gs(R.string.boluserrorcode, detailedBolusInfo.insulin, t.insulin, danaPump.getBolusStartErrorCode())); + result.comment(rh.gs(R.string.boluserrorcode, detailedBolusInfo.insulin, t.getInsulin(), + danaPump.getBolusStartErrorCode())); else result.comment(R.string.ok); aapsLogger.debug(LTag.PUMP, "deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.getBolusDelivered()); diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java b/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java index 19debd1571..ac134cbf4a 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java +++ b/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java @@ -362,7 +362,7 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { if (!danaPump.getBolusStopped()) { mSerialIOThread.sendMessage(start); } else { - t.insulin = 0d; + t.setInsulin(0d); return false; } while (!danaPump.getBolusStopped() && !start.getFailed()) { diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java b/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java index 9640c86b00..1a2e573be2 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java +++ b/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java @@ -161,20 +161,20 @@ public class DanaRPlugin extends AbstractDanaRPlugin { public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { detailedBolusInfo.insulin = constraintChecker.applyBolusConstraints(new Constraint<>(detailedBolusInfo.insulin)).value(); if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { - EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB); + EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId()); boolean connectionOK = false; if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, detailedBolusInfo.getCarbsTimestamp() != null ? detailedBolusInfo.getCarbsTimestamp() : detailedBolusInfo.timestamp, t); PumpEnactResult result = new PumpEnactResult(getInjector()); - result.success(connectionOK && Math.abs(detailedBolusInfo.insulin - t.insulin) < pumpDescription.getBolusStep()) - .bolusDelivered(t.insulin) + result.success(connectionOK && Math.abs(detailedBolusInfo.insulin - t.getInsulin()) < pumpDescription.getBolusStep()) + .bolusDelivered(t.getInsulin()) .carbsDelivered(detailedBolusInfo.carbs); if (!result.getSuccess()) - result.comment(rh.gs(R.string.boluserrorcode, detailedBolusInfo.insulin, t.insulin, danaPump.getBolusStartErrorCode())); + result.comment(rh.gs(R.string.boluserrorcode, detailedBolusInfo.insulin, t.getInsulin(), danaPump.getBolusStartErrorCode())); else result.comment(R.string.ok); aapsLogger.debug(LTag.PUMP, "deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.getBolusDelivered()); - detailedBolusInfo.insulin = t.insulin; + detailedBolusInfo.insulin = t.getInsulin(); detailedBolusInfo.timestamp = System.currentTimeMillis(); if (detailedBolusInfo.insulin > 0) pumpSync.syncBolusWithPumpId( diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java b/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java index a1b7cbf09a..2e0b01350c 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java +++ b/danar/src/main/java/info/nightscout/androidaps/danar/services/AbstractDanaRExecutionService.java @@ -219,7 +219,7 @@ public abstract class AbstractDanaRExecutionService extends DaggerService { } public void bolusStop() { - aapsLogger.debug(LTag.PUMP, "bolusStop >>>>> @ " + (danaPump.getBolusingTreatment() == null ? "" : danaPump.getBolusingTreatment().insulin)); + aapsLogger.debug(LTag.PUMP, "bolusStop >>>>> @ " + (danaPump.getBolusingTreatment() == null ? "" : danaPump.getBolusingTreatment().getInsulin())); MsgBolusStop stop = new MsgBolusStop(injector); danaPump.setBolusStopForced(true); if (isConnected()) { diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java b/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java index 623eae8ec5..e920f2205f 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java +++ b/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java @@ -290,7 +290,7 @@ public class DanaRExecutionService extends AbstractDanaRExecutionService { if (!danaPump.getBolusStopped()) { mSerialIOThread.sendMessage(start); } else { - t.insulin = 0d; + t.setInsulin(0d); return false; } while (!danaPump.getBolusStopped() && !start.getFailed()) { @@ -322,7 +322,7 @@ public class DanaRExecutionService extends AbstractDanaRExecutionService { break; } // try to find real amount if bolusing was interrupted or comm failed - if (t.insulin != amount) { + if (t.getInsulin() != amount) { disconnect("bolusingInterrupted"); long bolusDurationInMSec = (long) (amount * speed * 1000); long expectedEnd = bolusStart + bolusDurationInMSec + 3000; @@ -340,7 +340,7 @@ public class DanaRExecutionService extends AbstractDanaRExecutionService { @Override public void run() { if (danaPump.getLastBolusTime() > System.currentTimeMillis() - 60 * 1000L) { // last bolus max 1 min old - t.insulin = danaPump.getLastBolusAmount(); + t.setInsulin(danaPump.getLastBolusAmount()); aapsLogger.debug(LTag.PUMP, "Used bolus amount from history: " + danaPump.getLastBolusAmount()); } else { aapsLogger.debug(LTag.PUMP, "Bolus amount in history too old: " + dateUtil.dateAndTimeString(danaPump.getLastBolusTime())); diff --git a/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusProgressTest.kt b/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusProgressTest.kt index 71d5020152..d1ba83f466 100644 --- a/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusProgressTest.kt +++ b/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusProgressTest.kt @@ -12,7 +12,7 @@ class MsgBolusProgressTest : DanaRTestBase() { @Test fun runTest() { `when`(rh.gs(ArgumentMatchers.eq(R.string.bolusdelivering), ArgumentMatchers.anyDouble())).thenReturn("Delivering %1\$.2fU") - danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true) + danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true, 0) danaPump.bolusAmountToBeDelivered = 3.0 val packet = MsgBolusProgress(injector) diff --git a/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusStopTest.kt b/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusStopTest.kt index fa8bdfeb8d..e214357aa8 100644 --- a/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusStopTest.kt +++ b/danar/src/test/java/info/nightscout/androidaps/plugins/pump/danaR/comm/MsgBolusStopTest.kt @@ -11,7 +11,7 @@ class MsgBolusStopTest : DanaRTestBase() { @Test fun runTest() { `when`(rh.gs(R.string.overview_bolusprogress_delivered)).thenReturn("Delivered") - danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true) + danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true, 0) val packet = MsgBolusStop(injector) // test message decoding diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt b/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt index 8d7a08cce6..cfc4e85911 100644 --- a/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt +++ b/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt @@ -286,7 +286,7 @@ class DanaRSPlugin @Inject constructor( var carbTimeStamp = detailedBolusInfo.carbsTimestamp ?: detailedBolusInfo.timestamp if (carbTimeStamp == detailedBolusInfo.timestamp) carbTimeStamp -= T.mins(1).msecs() // better set 1 min back to prevents clash with insulin detailedBolusInfoStorage.add(detailedBolusInfo) // will be picked up on reading history - val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) + val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) var connectionOK = false if (detailedBolusInfo.insulin > 0 || carbs > 0) connectionOK = danaRSService?.bolus(detailedBolusInfo.insulin, carbs.toInt(), carbTimeStamp, t) ?: false diff --git a/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRSPacketNotifyDeliveryCompleteTest.kt b/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRSPacketNotifyDeliveryCompleteTest.kt index 1728dd08ef..53a1918902 100644 --- a/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRSPacketNotifyDeliveryCompleteTest.kt +++ b/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRSPacketNotifyDeliveryCompleteTest.kt @@ -30,7 +30,7 @@ class DanaRSPacketNotifyDeliveryCompleteTest : DanaRSTestBase() { @Test fun runTest() { `when`(rh.gs(anyInt(), anyDouble())).thenReturn("SomeString") - danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true) + danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true, 0) val packet = DanaRSPacketNotifyDeliveryComplete(packetInjector) // test params Assert.assertEquals(0, packet.getRequestParams().size) diff --git a/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketBolusSetStepBolusStopTest.kt b/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketBolusSetStepBolusStopTest.kt index 8a980fb52e..9e6c0872c4 100644 --- a/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketBolusSetStepBolusStopTest.kt +++ b/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketBolusSetStepBolusStopTest.kt @@ -29,7 +29,7 @@ class DanaRsPacketBolusSetStepBolusStopTest : DanaRSTestBase() { @Test fun runTest() { `when`(rh.gs(Mockito.anyInt())).thenReturn("SomeString") - danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true) + danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true, 0) val testPacket = DanaRSPacketBolusSetStepBolusStop(packetInjector) // test message decoding testPacket.handleMessage(byteArrayOf(0.toByte(), 0.toByte(), 0.toByte())) diff --git a/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt b/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt index de504cf613..61f6ac97a0 100644 --- a/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt +++ b/danars/src/test/java/info/nightscout/androidaps/danars/comm/DanaRsPacketNotifyDeliveryRateDisplayTest.kt @@ -61,6 +61,6 @@ class DanaRsPacketNotifyDeliveryRateDisplayTest : DanaRSTestBase() { @Before fun mock() { danaRSPlugin = DanaRSPlugin(packetInjector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, profileFunction, sp, commandQueue, danaPump, pumpSync, detailedBolusInfoStorage, temporaryBasalStorage, fabricPrivacy, dateUtil) - danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true) + danaPump.bolusingTreatment = EventOverviewBolusProgress.Treatment(0.0, 0, true, 0) } } \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt index 86bb00221a..4bd3d07f22 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Plugin.kt @@ -256,7 +256,7 @@ class DiaconnG8Plugin @Inject constructor( var carbTimeStamp = detailedBolusInfo.carbsTimestamp ?: detailedBolusInfo.timestamp if (carbTimeStamp == detailedBolusInfo.timestamp) carbTimeStamp -= T.mins(1).msecs() // better set 1 min back to prevents clash with insulin detailedBolusInfoStorage.add(detailedBolusInfo) // will be picked up on reading history - val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) + val t = EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) var connectionOK = false if (detailedBolusInfo.insulin > 0 || carbs > 0) connectionOK = diaconnG8Service?.bolus(detailedBolusInfo.insulin, carbs.toInt(), carbTimeStamp, t) ?: false diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java index 65ee805c6a..517d1c7ec4 100644 --- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java +++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java @@ -587,7 +587,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Constrai bolusCancelled = false; } result.success(true).enacted(true); - EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB); + EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId()); final EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.INSTANCE; bolusingEvent.setT(t); bolusingEvent.setStatus(rh.gs(R.string.insight_delivered, 0d, insulin)); diff --git a/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt b/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt index 85dc56b946..00ee367a8c 100644 --- a/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt +++ b/pump-common/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.kt @@ -329,7 +329,7 @@ abstract class PumpPluginAbstract protected constructor( pumpSyncStorage.addCarbs(PumpDbEntryCarbs(detailedBolusInfo, this)) val bolusingEvent = EventOverviewBolusProgress - bolusingEvent.t = EventOverviewBolusProgress.Treatment(0.0, detailedBolusInfo.carbs.toInt(), detailedBolusInfo.bolusType === DetailedBolusInfo.BolusType.SMB) + bolusingEvent.t = EventOverviewBolusProgress.Treatment(0.0, detailedBolusInfo.carbs.toInt(), detailedBolusInfo.bolusType === DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) bolusingEvent.percent = 100 rxBus.send(bolusingEvent) aapsLogger.debug(LTag.PUMP, "deliverTreatment: Carb only treatment.") From a1f9d3a75db89b4eb5084c08de92e39cfdcec225 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 21 Jun 2022 21:59:54 +0200 Subject: [PATCH 38/71] Omni: fix BolusProgress --- .../plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt | 2 +- .../pump/omnipod/eros/manager/AapsOmnipodErosManager.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt index a7572cf244..739bc204a1 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt @@ -16,7 +16,6 @@ import info.nightscout.androidaps.extensions.convertedToAbsolute import info.nightscout.androidaps.extensions.plannedRemainingMinutes import info.nightscout.androidaps.extensions.toStringFull import info.nightscout.androidaps.interfaces.* -import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.common.ManufacturerType import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction @@ -577,6 +576,7 @@ class OmnipodDashPumpPlugin @Inject constructor( .comment(rh.gs(R.string.omnipod_dash_bolus_already_in_progress)) } + EventOverviewBolusProgress.t = EventOverviewBolusProgress.Treatment(detailedBolusInfo.insulin, 0, detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.id) var deliveredBolusAmount = 0.0 val beepsConfigurationKey = if (detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java index 04fb055951..faa58d345d 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java @@ -363,6 +363,8 @@ public class AapsOmnipodErosManager { boolean beepsEnabled = detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB ? isSmbBeepsEnabled() : isBolusBeepsEnabled(); + EventOverviewBolusProgress.INSTANCE.setT(new EventOverviewBolusProgress.Treatment(detailedBolusInfo.insulin, 0,detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId())); + Date bolusStarted; try { bolusCommandResult = executeCommand(() -> delegate.bolus(PumpType.OMNIPOD_EROS.determineCorrectBolusSize(detailedBolusInfo.insulin), beepsEnabled, beepsEnabled, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB ? null : From 4e8d05797996daad19d376d408d717bc0e804a03 Mon Sep 17 00:00:00 2001 From: Philoul Date: Tue, 21 Jun 2022 23:25:41 +0200 Subject: [PATCH 39/71] Fix UnitTest with default TimeZone --- .../androidaps/plugins/general/autotune/AutotuneCoreTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt index c567c3298e..81209340e9 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt @@ -40,6 +40,7 @@ class AutotuneCoreTest : TestBaseWithProfile() { @Before fun initData() { autotuneCore = AutotuneCore(sp,autotuneFS) + TimeZone.setDefault(TimeZone.getTimeZone("GMT+2")) prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! From 5b383d5201f8e2321cc25d53cc1a433827139c38 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 22 Jun 2022 10:05:03 +0200 Subject: [PATCH 40/71] resolve ANR in AutomationPlugin --- .../general/automation/AutomationPlugin.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt index aaa0bf3363..fd941dd6ca 100644 --- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt +++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt @@ -148,7 +148,7 @@ class AutomationPlugin @Inject constructor( private fun storeToSP() { val array = JSONArray() - val iterator = ArrayList(automationEvents).iterator() + val iterator = synchronized(this) { automationEvents.toMutableList().iterator() } try { while (iterator.hasNext()) { val event = iterator.next() @@ -161,6 +161,7 @@ class AutomationPlugin @Inject constructor( sp.putString(keyAutomationEvents, array.toString()) } + @Synchronized private fun loadFromSP() { automationEvents.clear() val data = sp.getString(keyAutomationEvents, "") @@ -179,7 +180,7 @@ class AutomationPlugin @Inject constructor( automationEvents.add(AutomationEvent(injector).fromJSON(event, 0)) } - @Synchronized internal fun processActions() { + internal fun processActions() { var commonEventsEnabled = true if (loop.isSuspended || !(loop as PluginBase).isEnabled()) { aapsLogger.debug(LTag.AUTOMATION, "Loop deactivated") @@ -207,7 +208,7 @@ class AutomationPlugin @Inject constructor( } aapsLogger.debug(LTag.AUTOMATION, "processActions") - val iterator: MutableIterator = automationEvents.iterator() + val iterator = synchronized(this) { automationEvents.toMutableList().iterator() } while (iterator.hasNext()) { val event = iterator.next() if (event.isEnabled && !event.userAction && event.shouldRun()) @@ -254,7 +255,7 @@ class AutomationPlugin @Inject constructor( } SystemClock.sleep(1100) event.lastRun = dateUtil.now() - if (event.autoRemove) automationEvents.remove(event) + if (event.autoRemove) remove(event) } } @@ -299,9 +300,12 @@ class AutomationPlugin @Inject constructor( } @Synchronized + fun remove(event: AutomationEvent) { + automationEvents.remove(event) + } + fun at(index: Int) = automationEvents[index] - @Synchronized fun size() = automationEvents.size @Synchronized @@ -309,10 +313,9 @@ class AutomationPlugin @Inject constructor( Collections.swap(automationEvents, fromPosition, toPosition) } - @Synchronized fun userEvents(): List { val list = mutableListOf() - val iterator: MutableIterator = automationEvents.iterator() + val iterator = synchronized(this) { automationEvents.toMutableList().iterator() } while (iterator.hasNext()) { val event = iterator.next() if (event.userAction && event.isEnabled) list.add(event) From ca5fd58ec6f45f14b3a485d7f53bc91d41279259 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 22 Jun 2022 10:26:00 +0200 Subject: [PATCH 41/71] NSClient: resolve ConcurrentModificationException --- .../plugins/general/nsclient/NSClientAddUpdateWorker.kt | 3 +++ .../plugins/general/nsclient/services/NSClientService.kt | 7 +------ .../androidaps/plugins/profile/local/LocalProfilePlugin.kt | 2 ++ .../androidaps/plugins/source/NSClientSourcePlugin.kt | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt index 5abed9f9f2..c0b1210cb9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt @@ -28,6 +28,7 @@ import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.JsonHelper import info.nightscout.androidaps.utils.JsonHelper.safeGetLong import info.nightscout.androidaps.interfaces.BuildHelper +import info.nightscout.androidaps.utils.XDripBroadcast import info.nightscout.shared.sharedPreferences.SP import java.util.concurrent.TimeUnit import javax.inject.Inject @@ -49,6 +50,7 @@ class NSClientAddUpdateWorker( @Inject lateinit var rxBus: RxBus @Inject lateinit var uel: UserEntryLogger @Inject lateinit var virtualPumpPlugin: VirtualPumpPlugin + @Inject lateinit var xDripBroadcast: XDripBroadcast override fun doWork(): Result { val treatments = dataWorker.pickupJSONArray(inputData.getLong(DataWorker.STORE_KEY, -1)) @@ -508,6 +510,7 @@ class NSClientAddUpdateWorker( } } nsClientPlugin.updateLatestDateReceivedIfNewer(latestDateInReceivedData) + xDripBroadcast.sendTreatments(treatments) return ret } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt index cd08db55fe..6b12dff07f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/services/NSClientService.kt @@ -14,6 +14,7 @@ import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.events.EventAppExit import info.nightscout.androidaps.events.EventConfigBuilderChange import info.nightscout.androidaps.events.EventPreferenceChange +import info.nightscout.androidaps.interfaces.BuildHelper import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.interfaces.DataSyncSelector import info.nightscout.androidaps.interfaces.ResourceHelper @@ -47,8 +48,6 @@ import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.JsonHelper.safeGetString import info.nightscout.androidaps.utils.JsonHelper.safeGetStringAllowNull import info.nightscout.androidaps.utils.T.Companion.mins -import info.nightscout.androidaps.utils.XDripBroadcast -import info.nightscout.androidaps.interfaces.BuildHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.LTag @@ -83,7 +82,6 @@ class NSClientService : DaggerService() { @Inject lateinit var dataWorker: DataWorker @Inject lateinit var dataSyncSelector: DataSyncSelector @Inject lateinit var repository: AppRepository - @Inject lateinit var xDripBroadcast: XDripBroadcast companion object { @@ -473,7 +471,6 @@ class NSClientService : DaggerService() { .setInputData(dataWorker.storeInputData(profileStoreJson)) .build() ) - xDripBroadcast.sendProfile(profileStoreJson) } } if (data.has("treatments")) { @@ -492,7 +489,6 @@ class NSClientService : DaggerService() { .setInputData(dataWorker.storeInputData(addedOrUpdatedTreatments)) .build() ) - xDripBroadcast.sendTreatments(addedOrUpdatedTreatments) } } if (data.has("devicestatus")) { @@ -536,7 +532,6 @@ class NSClientService : DaggerService() { .setInputData(dataWorker.storeInputData(sgvs)) .build() ) - xDripBroadcast.sendSgvs(sgvs) } } rxBus.send(EventNSClientNewLog("LAST", dateUtil.dateAndTimeString(latestDateInReceivedData))) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfilePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfilePlugin.kt index 687ca5adc3..1908e1ef39 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfilePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfilePlugin.kt @@ -461,6 +461,7 @@ class LocalProfilePlugin @Inject constructor( @Inject lateinit var sp: SP @Inject lateinit var config: Config @Inject lateinit var localProfilePlugin: LocalProfilePlugin + @Inject lateinit var xDripBroadcast: XDripBroadcast init { (context.applicationContext as HasAndroidInjector).androidInjector().inject(this) @@ -469,6 +470,7 @@ class LocalProfilePlugin @Inject constructor( override fun doWork(): Result { val profileJson = dataWorker.pickupJSONObject(inputData.getLong(DataWorker.STORE_KEY, -1)) ?: return Result.failure(workDataOf("Error" to "missing input data")) + xDripBroadcast.sendProfile(profileJson) if (sp.getBoolean(R.string.key_ns_receive_profile_store, true) || config.NSCLIENT) { val store = ProfileStore(injector, profileJson, dateUtil) val createdAt = store.getStartDate() diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/NSClientSourcePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/NSClientSourcePlugin.kt index 91d313b5a7..6ada149c6d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/source/NSClientSourcePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/NSClientSourcePlugin.kt @@ -115,11 +115,11 @@ class NSClientSourcePlugin @Inject constructor( @Suppress("SpellCheckingInspection") override fun doWork(): Result { var ret = Result.success() - - if (!nsClientSourcePlugin.isEnabled() && !sp.getBoolean(R.string.key_ns_receive_cgm, false)) return Result.success(workDataOf("Result" to "Sync not enabled")) - val sgvs = dataWorker.pickupJSONArray(inputData.getLong(DataWorker.STORE_KEY, -1)) ?: return Result.failure(workDataOf("Error" to "missing input data")) + xDripBroadcast.sendSgvs(sgvs) + if (!nsClientSourcePlugin.isEnabled() && !sp.getBoolean(R.string.key_ns_receive_cgm, false)) + return Result.success(workDataOf("Result" to "Sync not enabled")) try { var latestDateInReceivedData: Long = 0 From 84cc966e300c4d5ac884c2be42b84fdac8de3162 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 22 Jun 2022 14:31:22 +0200 Subject: [PATCH 42/71] revert RandomBgPlugin --- .../androidaps/plugins/source/RandomBgPlugin.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/RandomBgPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/RandomBgPlugin.kt index 6558d1a71a..c2115d53e3 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/source/RandomBgPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/RandomBgPlugin.kt @@ -8,15 +8,13 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.entities.GlucoseValue import info.nightscout.androidaps.database.transactions.CgmSourceTransaction -import info.nightscout.androidaps.interfaces.BgSource -import info.nightscout.androidaps.interfaces.PluginBase -import info.nightscout.androidaps.interfaces.PluginDescription -import info.nightscout.androidaps.interfaces.PluginType +import info.nightscout.androidaps.interfaces.* import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.LTag import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.XDripBroadcast -import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin +import info.nightscout.androidaps.utils.extensions.isRunningTest import info.nightscout.shared.sharedPreferences.SP import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign @@ -33,7 +31,9 @@ class RandomBgPlugin @Inject constructor( aapsLogger: AAPSLogger, private val sp: SP, private val repository: AppRepository, - private val xDripBroadcast: XDripBroadcast + private val xDripBroadcast: XDripBroadcast, + private val virtualPumpPlugin: VirtualPumpPlugin, + private val buildHelper: BuildHelper ) : PluginBase( PluginDescription() .mainType(PluginType.BGSOURCE) @@ -89,8 +89,8 @@ class RandomBgPlugin @Inject constructor( } override fun specialEnableCondition(): Boolean { -// return isRunningTest() || virtualPumpPlugin.isEnabled() && buildHelper.isEngineeringMode() - return true + return isRunningTest() || virtualPumpPlugin.isEnabled() && buildHelper.isEngineeringMode() +// return true } private fun handleNewData() { From 15f48e5c51527f2ba16e7e7e04d00e672c848971 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 22 Jun 2022 15:08:37 +0200 Subject: [PATCH 43/71] 3.0.0.2-dev-n --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 132de499a8..9d2b1a8d80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -111,7 +111,7 @@ android { defaultConfig { multiDexEnabled true versionCode 1500 - version "3.0.0.2-dev-m" + version "3.0.0.2-dev-n" buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"' buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"' From 43a098ed0919e49156b3c85dc132b45eb1718926 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 22 Jun 2022 20:54:40 +0200 Subject: [PATCH 44/71] add BG upload option to NSClient prefs --- app/src/main/res/xml/pref_nsclientinternal.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/res/xml/pref_nsclientinternal.xml b/app/src/main/res/xml/pref_nsclientinternal.xml index bc0a0b3143..bf7ef4678e 100644 --- a/app/src/main/res/xml/pref_nsclientinternal.xml +++ b/app/src/main/res/xml/pref_nsclientinternal.xml @@ -36,6 +36,11 @@ android:summary="@string/ns_upload_summary" android:title="@string/ns_upload" /> + + Date: Thu, 23 Jun 2022 08:35:24 +0200 Subject: [PATCH 45/71] icon color in light theme --- core/src/main/res/values/styles.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index a037f3eb49..92c284f9b5 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -245,7 +245,7 @@ @color/defaultText - @color/white + @color/black @color/white From cec6595d0b0ea34fbcf6fe9c34500754a88f2933 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 23 Jun 2022 10:34:24 +0200 Subject: [PATCH 46/71] RL: tasks -> kt, prevent NPE --- .../tasks/DiscoverGattServicesTask.java | 46 ------- .../service/tasks/DiscoverGattServicesTask.kt | 16 +++ .../tasks/InitializePumpManagerTask.java | 126 ------------------ .../tasks/InitializePumpManagerTask.kt | 65 +++++++++ .../hw/rileylink/service/tasks/PumpTask.java | 19 --- .../hw/rileylink/service/tasks/PumpTask.kt | 7 + .../ResetRileyLinkConfigurationTask.java | 43 ------ .../tasks/ResetRileyLinkConfigurationTask.kt | 22 +++ .../rileylink/service/tasks/ServiceTask.java | 71 ---------- .../hw/rileylink/service/tasks/ServiceTask.kt | 34 +++++ .../service/tasks/ServiceTaskExecutor.java | 53 -------- .../service/tasks/ServiceTaskExecutor.kt | 45 +++++++ .../service/tasks/WakeAndTuneTask.java | 37 ----- .../service/tasks/WakeAndTuneTask.kt | 19 +++ 14 files changed, 208 insertions(+), 395 deletions(-) delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.kt diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java deleted file mode 100644 index 38290e3e60..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.java +++ /dev/null @@ -1,46 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; - -import javax.inject.Inject; - -import dagger.android.HasAndroidInjector; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice; - -/** - * Created by geoff on 7/9/16. - */ -public class DiscoverGattServicesTask extends ServiceTask { - - - @Inject AAPSLogger aapsLogger; - - public boolean needToConnect = false; - - - public DiscoverGattServicesTask(HasAndroidInjector injector) { - super(injector); - } - - - public DiscoverGattServicesTask(HasAndroidInjector injector, boolean needToConnect) { - super(injector); - this.needToConnect = needToConnect; - } - - - @Override - public void run() { - - if (!isRileyLinkDevice()) { - return; - } - - RileyLinkPumpDevice pumpDevice = (RileyLinkPumpDevice) activePlugin.getActivePump(); - - if (needToConnect) { - pumpDevice.getRileyLinkService().getRileyLinkBLE().connectGatt(); - } - - pumpDevice.getRileyLinkService().getRileyLinkBLE().discoverServices(); - } -} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt new file mode 100644 index 0000000000..b0a6123970 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt @@ -0,0 +1,16 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport +import info.nightscout.shared.logging.AAPSLogger +import javax.inject.Inject + +class DiscoverGattServicesTask(injector: HasAndroidInjector, private val needToConnect: Boolean = false) : ServiceTask(injector) { + + @Inject lateinit var aapsLogger: AAPSLogger + + override fun run() { + if (needToConnect) pumpDevice?.rileyLinkService?.rileyLinkBLE?.connectGatt() + pumpDevice?.rileyLinkService?.rileyLinkBLE?.discoverServices() + } +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.java deleted file mode 100644 index 703cd1c211..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.java +++ /dev/null @@ -1,126 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; - -import android.content.Context; - -import java.util.Locale; - -import javax.inject.Inject; - -import dagger.android.HasAndroidInjector; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; -import info.nightscout.androidaps.plugins.common.ManufacturerType; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport; -import info.nightscout.androidaps.utils.Round; -import info.nightscout.shared.sharedPreferences.SP; - -/** - * Created by geoff on 7/9/16. - *

- * This class is intended to be run by the Service, for the Service. Not intended for clients to run. - */ -public class InitializePumpManagerTask extends ServiceTask { - - @Inject AAPSLogger aapsLogger; - //@Inject ActivePluginProvider activePlugin; - @Inject SP sp; - @Inject RileyLinkServiceData rileyLinkServiceData; - @Inject RileyLinkUtil rileyLinkUtil; - - private final Context context; - - public InitializePumpManagerTask(HasAndroidInjector injector, Context context) { - super(injector); - this.context = context; - } - - public InitializePumpManagerTask(HasAndroidInjector injector, Context context, ServiceTransport transport) { - super(injector, transport); - this.context = context; - } - - @Override - public void run() { - - if (!isRileyLinkDevice()) { - return; - } - - double lastGoodFrequency; - - if (rileyLinkServiceData.lastGoodFrequency == null) { - - lastGoodFrequency = sp.getDouble(RileyLinkConst.Prefs.LastGoodDeviceFrequency, 0.0d); - lastGoodFrequency = Math.round(lastGoodFrequency * 1000d) / 1000d; - - rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency; - -// if (RileyLinkUtil.getRileyLinkTargetFrequency() == null) { -// String pumpFrequency = SP.getString(MedtronicConst.Prefs.PumpFrequency, null); -// } - } else { - lastGoodFrequency = rileyLinkServiceData.lastGoodFrequency; - } - - /* FIXME this can apparently crash: - Fatal Exception: java.lang.ClassCastException - info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin - cannot be cast to info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice - */ - RileyLinkCommunicationManager rileyLinkCommunicationManager = ((RileyLinkPumpDevice) activePlugin.getActivePump()).getRileyLinkService().getDeviceCommunicationManager(); - - if (activePlugin.getActivePump().manufacturer() == ManufacturerType.Medtronic) { - - if ((lastGoodFrequency > 0.0d) - && rileyLinkCommunicationManager.isValidFrequency(lastGoodFrequency)) { - - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady); - - aapsLogger.info(LTag.PUMPBTCOMM, String.format(Locale.ENGLISH, "Setting radio frequency to %.3f MHz", lastGoodFrequency)); - - rileyLinkCommunicationManager.setRadioFrequencyForPump(lastGoodFrequency); - - boolean foundThePump = rileyLinkCommunicationManager.tryToConnectToDevice(); - - if (foundThePump) { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady); - } else { - rileyLinkServiceData.setServiceState(RileyLinkServiceState.PumpConnectorError, - RileyLinkError.NoContactWithDevice); - rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.IPC.MSG_PUMP_tunePump, context); - } - - } else { - rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.IPC.MSG_PUMP_tunePump, context); - } - } else { - - if (!Round.INSTANCE.isSame(lastGoodFrequency, - RileyLinkTargetFrequency.Omnipod.getScanFrequencies()[0])) { - lastGoodFrequency = RileyLinkTargetFrequency.Omnipod.getScanFrequencies()[0]; - lastGoodFrequency = Math.round(lastGoodFrequency * 1000d) / 1000d; - - rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency; - } - - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady); - rileyLinkServiceData.rileyLinkTargetFrequency = RileyLinkTargetFrequency.Omnipod; // TODO shouldn't be needed - - aapsLogger.info(LTag.PUMPBTCOMM, String.format(Locale.ENGLISH, "Setting radio frequency to %.3f MHz", lastGoodFrequency)); - - rileyLinkCommunicationManager.setRadioFrequencyForPump(lastGoodFrequency); - - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady); - - } - } - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt new file mode 100644 index 0000000000..2b43ea0ea3 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt @@ -0,0 +1,65 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks + +import android.content.Context +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.plugins.common.ManufacturerType +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData +import info.nightscout.androidaps.utils.Round.isSame +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import info.nightscout.shared.sharedPreferences.SP +import javax.inject.Inject +import kotlin.math.roundToLong + +/** + * This class is intended to be run by the Service, for the Service. Not intended for clients to run. + */ +class InitializePumpManagerTask(injector: HasAndroidInjector, private val context: Context) : ServiceTask(injector) { + + @Inject lateinit var aapsLogger: AAPSLogger + @Inject lateinit var sp: SP + @Inject lateinit var rileyLinkServiceData: RileyLinkServiceData + @Inject lateinit var rileyLinkUtil: RileyLinkUtil + + override fun run() { + if (!isRileyLinkDevice) return + + var lastGoodFrequency: Double + if (rileyLinkServiceData.lastGoodFrequency == null) { + lastGoodFrequency = sp.getDouble(RileyLinkConst.Prefs.LastGoodDeviceFrequency, 0.0) + lastGoodFrequency = (lastGoodFrequency * 1000.0).roundToLong() / 1000.0 + rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency + + } else lastGoodFrequency = rileyLinkServiceData.lastGoodFrequency + + val rileyLinkCommunicationManager = pumpDevice?.rileyLinkService?.deviceCommunicationManager + if (activePlugin.activePump.manufacturer() === ManufacturerType.Medtronic) { + if (lastGoodFrequency > 0.0 && rileyLinkCommunicationManager?.isValidFrequency(lastGoodFrequency) == true) { + rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady) + aapsLogger.info(LTag.PUMPBTCOMM, "Setting radio frequency to $lastGoodFrequency MHz") + rileyLinkCommunicationManager.setRadioFrequencyForPump(lastGoodFrequency) + if (rileyLinkCommunicationManager.tryToConnectToDevice()) rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady) + else { + rileyLinkServiceData.setServiceState(RileyLinkServiceState.PumpConnectorError, RileyLinkError.NoContactWithDevice) + rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.IPC.MSG_PUMP_tunePump, context) + } + } else rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.IPC.MSG_PUMP_tunePump, context) + } else { + if (!isSame(lastGoodFrequency, RileyLinkTargetFrequency.Omnipod.scanFrequencies[0])) { + lastGoodFrequency = RileyLinkTargetFrequency.Omnipod.scanFrequencies[0] + lastGoodFrequency = (lastGoodFrequency * 1000.0).roundToLong() / 1000.0 + rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency + } + rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady) + rileyLinkServiceData.rileyLinkTargetFrequency = RileyLinkTargetFrequency.Omnipod // TODO shouldn't be needed + aapsLogger.info(LTag.PUMPBTCOMM, "Setting radio frequency to $lastGoodFrequency MHz") + rileyLinkCommunicationManager?.setRadioFrequencyForPump(lastGoodFrequency) + rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady) + } + } +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.java deleted file mode 100644 index 66aeb7ae07..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.java +++ /dev/null @@ -1,19 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; - -import dagger.android.HasAndroidInjector; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport; - -/** - * Created by geoff on 7/10/16. - */ -public class PumpTask extends ServiceTask { - - public PumpTask(HasAndroidInjector injector) { - super(injector); - } - - - public PumpTask(HasAndroidInjector injector, ServiceTransport transport) { - super(injector, transport); - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt new file mode 100644 index 0000000000..b32b36b338 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt @@ -0,0 +1,7 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport + +open class PumpTask(injector: HasAndroidInjector) : ServiceTask(injector) + diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.java deleted file mode 100644 index 88d1c612f4..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.java +++ /dev/null @@ -1,43 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; - -import javax.inject.Inject; - -import dagger.android.HasAndroidInjector; -import info.nightscout.androidaps.interfaces.ActivePlugin; -import info.nightscout.androidaps.plugins.bus.RxBus; -import info.nightscout.androidaps.plugins.pump.common.events.EventRefreshButtonState; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RFSpy; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice; - -/** - * Created by andy on 9/16/18. - */ -public class ResetRileyLinkConfigurationTask extends PumpTask { - - @Inject ActivePlugin activePlugin; - @Inject RxBus rxBus; - @Inject RFSpy rfSpy; - - public ResetRileyLinkConfigurationTask(HasAndroidInjector injector) { - super(injector); - } - - @Override - public void run() { - - if (!isRileyLinkDevice()) { - return; - } - - RileyLinkPumpDevice rileyLinkPumpDevice = (RileyLinkPumpDevice) activePlugin.getActivePump(); - - rxBus.send(new EventRefreshButtonState(false)); - - rileyLinkPumpDevice.setBusy(true); - rfSpy.resetRileyLinkConfiguration(); - rileyLinkPumpDevice.setBusy(false); - - rxBus.send(new EventRefreshButtonState(true)); - } - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.kt new file mode 100644 index 0000000000..c0d7e6e136 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ResetRileyLinkConfigurationTask.kt @@ -0,0 +1,22 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.plugins.pump.common.events.EventRefreshButtonState +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RFSpy +import javax.inject.Inject + +class ResetRileyLinkConfigurationTask(injector: HasAndroidInjector) : PumpTask(injector) { + + @Inject lateinit var rxBus: RxBus + @Inject lateinit var rfSpy: RFSpy + + override fun run() { + if (!isRileyLinkDevice) return + rxBus.send(EventRefreshButtonState(false)) + pumpDevice?.setBusy(true) + rfSpy.resetRileyLinkConfiguration() + pumpDevice?.setBusy(false) + rxBus.send(EventRefreshButtonState(true)) + } +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.java deleted file mode 100644 index 498344913b..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.java +++ /dev/null @@ -1,71 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; - -import javax.inject.Inject; - -import dagger.android.HasAndroidInjector; -import info.nightscout.androidaps.interfaces.ActivePlugin; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport; - -/** - * Created by geoff on 7/9/16. - */ -public class ServiceTask implements Runnable { - - @Inject protected ActivePlugin activePlugin; - - public boolean completed = false; - protected ServiceTransport mTransport; - protected HasAndroidInjector injector; - - - public ServiceTask(HasAndroidInjector injector) { - this.injector = injector; - injector.androidInjector().inject(this); - init(new ServiceTransport()); - } - - - public ServiceTask(HasAndroidInjector injector, ServiceTransport transport) { - this.injector = injector; - injector.androidInjector().inject(this); - init(transport); - } - - - public void init(ServiceTransport transport) { - mTransport = transport; - } - - - @Override - public void run() { - } - - - public void preOp() { - // This function is called by UI thread before running asynch thread. - } - - - public void postOp() { - // This function is called by UI thread after running asynch thread. - } - - - public ServiceTransport getServiceTransport() { - return mTransport; - } - - /* - * protected void sendResponse(ServiceResult result) { - * RoundtripService.getInstance().sendServiceTransportResponse(mTransport,result); - * } - */ - - public boolean isRileyLinkDevice() { - return (activePlugin.getActivePump() instanceof RileyLinkPumpDevice); - } - - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt new file mode 100644 index 0000000000..81e1024244 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt @@ -0,0 +1,34 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.interfaces.ActivePlugin +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport +import javax.inject.Inject + +@Suppress("LeakingThis") +open class ServiceTask constructor(val injector: HasAndroidInjector, val serviceTransport: ServiceTransport = ServiceTransport()) : Runnable { + + @Inject lateinit var activePlugin: ActivePlugin + + var completed = false + + init { + injector.androidInjector().inject(this) + } + + override fun run() {} + + // This function is called by UI thread before running async thread. + fun preOp() {} + + // This function is called by UI thread after running async thread. + fun postOp() {} + + val isRileyLinkDevice: Boolean + get() = activePlugin.activePump is RileyLinkPumpDevice + + val pumpDevice: RileyLinkPumpDevice? + get() = if (isRileyLinkDevice) activePlugin.activePump as RileyLinkPumpDevice else null + +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.java deleted file mode 100644 index 609b586437..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.java +++ /dev/null @@ -1,53 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; - -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; - -/** - * Created by geoff on 7/9/16. - */ -@Singleton -public class ServiceTaskExecutor extends ThreadPoolExecutor { - - @Inject RileyLinkUtil rileyLinkUtil; - @Inject AAPSLogger aapsLogger; - - private static final LinkedBlockingQueue taskQueue = new LinkedBlockingQueue<>(); - - @Inject - public ServiceTaskExecutor() { - super(1, 1, 10000, TimeUnit.MILLISECONDS, taskQueue); - } - - public ServiceTask startTask(ServiceTask task) { - execute(task); // task will be run on async thread from pool. - return task; - } - - // FIXME - @Override protected void beforeExecute(Thread t, Runnable r) { - // This is run on either caller UI thread or Service UI thread. - ServiceTask task = (ServiceTask) r; - aapsLogger.debug(LTag.PUMPBTCOMM, "About to run task " + task.getClass().getSimpleName()); - rileyLinkUtil.setCurrentTask(task); - task.preOp(); - } - - - // FIXME - @Override protected void afterExecute(Runnable r, Throwable t) { - // This is run on either caller UI thread or Service UI thread. - ServiceTask task = (ServiceTask) r; - task.postOp(); - aapsLogger.debug(LTag.PUMPBTCOMM, "Finishing task " + task.getClass().getSimpleName()); - rileyLinkUtil.finishCurrentTask(task); - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt new file mode 100644 index 0000000000..704439a490 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt @@ -0,0 +1,45 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks + +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.ThreadPoolExecutor +import java.util.concurrent.TimeUnit +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class ServiceTaskExecutor @Inject constructor() : ThreadPoolExecutor(1, 1, 10000, TimeUnit.MILLISECONDS, taskQueue) { + + @Inject lateinit var rileyLinkUtil: RileyLinkUtil + @Inject lateinit var aapsLogger: AAPSLogger + + companion object { + + private val taskQueue = LinkedBlockingQueue() + } + + fun startTask(task: ServiceTask): ServiceTask { + execute(task) // task will be run on async thread from pool. + return task + } + + // FIXME + override fun beforeExecute(t: Thread, r: Runnable) { + // This is run on either caller UI thread or Service UI thread. + val task = r as ServiceTask + aapsLogger.debug(LTag.PUMPBTCOMM, "About to run task ${task.javaClass.simpleName}") + rileyLinkUtil.setCurrentTask(task) + task.preOp() + } + + // FIXME + override fun afterExecute(r: Runnable, t: Throwable) { + // This is run on either caller UI thread or Service UI thread. + val task = r as ServiceTask + task.postOp() + aapsLogger.debug(LTag.PUMPBTCOMM, "Finishing task ${task.javaClass.simpleName}") + rileyLinkUtil.finishCurrentTask(task) + } +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.java deleted file mode 100644 index 67adcd18eb..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.java +++ /dev/null @@ -1,37 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; - -import javax.inject.Inject; - -import dagger.android.HasAndroidInjector; -import info.nightscout.androidaps.plugins.bus.RxBus; -import info.nightscout.androidaps.plugins.pump.common.events.EventRefreshButtonState; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice; - -/** - * Created by geoff on 7/16/16. - */ -public class WakeAndTuneTask extends PumpTask { - - //@Inject ActivePluginProvider activePlugin; - @Inject RxBus rxBus; - - private static final String TAG = "WakeAndTuneTask"; - - public WakeAndTuneTask(HasAndroidInjector injector) { - super(injector); - } - - @Override - public void run() { - if (!isRileyLinkDevice()) { - return; - } - - RileyLinkPumpDevice pumpDevice = (RileyLinkPumpDevice) activePlugin.getActivePump(); - rxBus.send(new EventRefreshButtonState(false)); - pumpDevice.setBusy(true); - pumpDevice.getRileyLinkService().doTuneUpDevice(); - pumpDevice.setBusy(false); - rxBus.send(new EventRefreshButtonState(true)); - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.kt new file mode 100644 index 0000000000..dfc3bcd91d --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/WakeAndTuneTask.kt @@ -0,0 +1,19 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.plugins.pump.common.events.EventRefreshButtonState +import javax.inject.Inject + +class WakeAndTuneTask(injector: HasAndroidInjector) : PumpTask(injector) { + + @Inject lateinit var rxBus: RxBus + + override fun run() { + rxBus.send(EventRefreshButtonState(false)) + pumpDevice?.setBusy(true) + pumpDevice?.rileyLinkService?.doTuneUpDevice() + pumpDevice?.setBusy(false) + rxBus.send(EventRefreshButtonState(true)) + } +} \ No newline at end of file From 1b7ae4e70449b1f9eb6f7ff882ac86d8665899e2 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 23 Jun 2022 10:58:29 +0200 Subject: [PATCH 47/71] RL: code cleanup --- .../common/hw/rileylink/RileyLinkUtil.java | 38 ----- .../service/data/ServiceCommand.java | 67 -------- .../service/data/ServiceMessage.java | 40 ----- .../service/data/ServiceNotification.java | 48 ------ .../rileylink/service/data/ServiceResult.java | 96 ----------- .../service/data/ServiceTransport.java | 150 ------------------ .../service/data/ServiceTransportType.java | 15 -- .../service/tasks/DiscoverGattServicesTask.kt | 1 - .../hw/rileylink/service/tasks/PumpTask.kt | 1 - .../hw/rileylink/service/tasks/ServiceTask.kt | 3 +- .../service/tasks/ServiceTaskExecutor.kt | 6 - 11 files changed, 1 insertion(+), 464 deletions(-) delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceCommand.java delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceMessage.java delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceNotification.java delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceResult.java delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransport.java delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransportType.java diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkUtil.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkUtil.java index 7d80b7d907..8f478d36f2 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkUtil.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkUtil.java @@ -20,9 +20,6 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.enco import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkEncodingType; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.BleAdvertisedData; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceResult; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTask; import info.nightscout.shared.logging.AAPSLogger; /** @@ -33,7 +30,6 @@ import info.nightscout.shared.logging.AAPSLogger; public class RileyLinkUtil { private final List historyRileyLink = new ArrayList<>(); - private ServiceTask currentTask; private RileyLinkEncodingType encoding; private Encoding4b6b encoding4b6b; @@ -63,40 +59,6 @@ public class RileyLinkUtil { LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } - // FIXME remove ? - public void setCurrentTask(ServiceTask task) { - if (currentTask == null) { - currentTask = task; - } else { - //LOG.error("setCurrentTask: Cannot replace current task"); - } - } - - - public void finishCurrentTask(ServiceTask task) { - if (task != currentTask) { - //LOG.error("finishCurrentTask: task does not match"); - } - // hack to force deep copy of transport contents - ServiceTransport transport = task.getServiceTransport().clone(); - - if (transport.hasServiceResult()) { - sendServiceTransportResponse(transport, transport.getServiceResult()); - } - currentTask = null; - } - - - private static void sendServiceTransportResponse(ServiceTransport transport, ServiceResult serviceResult) { - // get the key (hashcode) of the client who requested this - Integer clientHashcode = transport.getSenderHashcode(); - // make a new bundle to send as the message data - transport.setServiceResult(serviceResult); - // FIXME - // transport.setTransportType(RT2Const.IPC.MSG_ServiceResult); - // rileyLinkIPCConnection.sendTransport(transport, clientHashcode); - } - public static boolean isSame(Double d1, Double d2) { double diff = d1 - d2; diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceCommand.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceCommand.java deleted file mode 100644 index 4f43013328..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceCommand.java +++ /dev/null @@ -1,67 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data; - -import android.os.Bundle; - -/** - * Created by geoff on 6/25/16. - */ -public class ServiceCommand extends ServiceMessage { - - public ServiceCommand() { - map = new Bundle(); - } - - - // commandID is a string that the client can set on the message. - // The service does not use this value, but passes it back with the result - // so that the client can identify it. - public ServiceCommand(String commandName, String commandID) { - init(); - map.putString("command", commandName); - map.putString("commandID", commandID); - } - - - public ServiceCommand(Bundle commandBundle) { - if (commandBundle != null) { - map = commandBundle; - } else { - map = new Bundle(); - init(); - map.putString("command", "(null)"); - map.putString("commandID", "(null"); - } - } - - - @Override - public void init() { - map.putString("ServiceMessageType", "ServiceCommand"); - } - - - public String getCommandID() { - return map.getString("commandID"); - } - - - public String getCommandName() { - return map.getString("command"); - } - - - public boolean isPumpCommand() { - switch (getCommandName()) { - case "FetchPumpHistory": - case "ReadPumpClock": - case "RetrieveHistoryPage": - case "ReadISFProfile": - case "ReadBolusWizardCarbProfile": - case "UpdatePumpStatus": - case "WakeAndTune": - return true; - default: - return false; - } - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceMessage.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceMessage.java deleted file mode 100644 index 83e2f57ade..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceMessage.java +++ /dev/null @@ -1,40 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data; - -import android.os.Bundle; - -/** - * Created by geoff on 7/4/16. - *

- * Base class for all messages passed between service and client - */ -public class ServiceMessage { - - protected Bundle map = new Bundle(); - - - public ServiceMessage() { - init(); - } - - - public void init() { - map.putString("ServiceMessageClass", this.getClass().getCanonicalName()); - map.putString("ServiceMessageType", this.getClass().getSimpleName()); - } - - - public Bundle getMap() { - return map; - } - - - public void setMap(Bundle map) { - this.map = map; - } - - - public String getServiceMessageType() { - return map.getString("ServiceMessageType"); - } - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceNotification.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceNotification.java deleted file mode 100644 index aad45093f1..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceNotification.java +++ /dev/null @@ -1,48 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data; - -import android.os.Bundle; - -/** - * Created by geoff on 7/6/16. - *

- * These are "one liner" messages between client and service. Must still be contained within ServiceTransports - */ -public class ServiceNotification extends ServiceMessage { - - public ServiceNotification() { - } - - - public ServiceNotification(Bundle b) { - if (b != null) { - if ("ServiceNotification".equals(b.getString("ServiceMessageType"))) { - setMap(b); - } else { - throw new IllegalArgumentException(); - } - } - } - - - public ServiceNotification(String notificationType) { - setNotificationType(notificationType); - } - - - @Override - public void init() { - super.init(); - map.putString("ServiceMessageType", "ServiceNotification"); - } - - - public String getNotificationType() { - return map.getString("NotificationType", ""); - } - - - public void setNotificationType(String notificationType) { - map.putString("NotificationType", notificationType); - } - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceResult.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceResult.java deleted file mode 100644 index ecf7d54f99..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceResult.java +++ /dev/null @@ -1,96 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data; - -import android.os.Bundle; - -/** - * Created by geoff on 6/25/16. - */ -public class ServiceResult extends ServiceMessage { - - public static final int ERROR_MALFORMED_PUMP_RESPONSE = 1; - public static final int ERROR_NULL_PUMP_RESPONSE = 2; - public static final int ERROR_INVALID_PUMP_RESPONSE = 3; - public static final int ERROR_PUMP_BUSY = 4; - - - public ServiceResult() { - init(); - } - - - public ServiceResult(Bundle resultBundle) { - if (resultBundle != null) { - setMap(resultBundle); - } else { - init(); - } - } - - - public static final String getErrorDescription(int errorCode) { - switch (errorCode) { - case ERROR_MALFORMED_PUMP_RESPONSE: - return "Malformed Pump Response"; - case ERROR_NULL_PUMP_RESPONSE: - return "Null pump response"; - case ERROR_INVALID_PUMP_RESPONSE: - return "Invalid pump response"; - case ERROR_PUMP_BUSY: - return "A pump command session is already in progress"; - default: - return "Unknown error code (" + errorCode + ")"; - } - } - - - @Override - public void init() { - super.init(); - map.putString("ServiceMessageType", "ServiceResult"); - setServiceResultType(this.getClass().getSimpleName()); - setResultError(0, "Uninitialized ServiceResult"); - } - - - public String getServiceResultType() { - return map.getString("ServiceResultType", "ServiceResult"); - } - - - public void setServiceResultType(String serviceResultType) { - map.putString("ServiceResultType", serviceResultType); - } - - - public void setResultOK() { - map.putString("result", "OK"); - } - - - public void setResultError(int errorCode) { - setResultError(errorCode, getErrorDescription(errorCode)); - } - - - public void setResultError(int errorCode, String errorDescription) { - map.putString("result", "error"); - map.putInt("errorCode", errorCode); - map.putString("errorDescription", errorDescription); - } - - - public boolean resultIsOK() { - return ("OK".equals(map.getString("result", ""))); - } - - - public String getErrorDescription() { - return map.getString("errorDescription", ""); - } - - - public String getResult() { - return map.getString("result", ""); - } - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransport.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransport.java deleted file mode 100644 index 99fa32f5e9..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransport.java +++ /dev/null @@ -1,150 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data; - -import android.os.Bundle; -import android.os.Parcel; - -/** - * Created by geoff on 7/6/16. - *

- * This class exists to hold a ServiceCommand along with transport variables such as time sent, time received, sender. - * May also contain result, if the command is completed. - */ -public class ServiceTransport extends ServiceMessage { - - private ServiceTransportType serviceTransportType = ServiceTransportType.Undefined; - - - public ServiceTransport() { - } - - - public ServiceTransport(Bundle b) { - if (b != null) { - if ("ServiceTransport".equals(b.getString("ServiceMessageType"))) { - setMap(b); - } else { - throw new IllegalArgumentException(); - } - } - } - - - @Override - public void init() { - super.init(); - map.putString("ServiceMessageType", "ServiceTransport"); - setTransportType("unknown"); - setSenderHashcode(0); - } - - - public Integer getSenderHashcode() { - return map.getInt("senderHashCode", 0); - } - - - public void setSenderHashcode(Integer senderHashcode) { - map.putInt("senderHashcode", senderHashcode); - } - - - public ServiceCommand getServiceCommand() { - return new ServiceCommand(map.getBundle("ServiceCommand")); - } - - - public void setServiceCommand(ServiceCommand serviceCommand) { - map.putBundle("ServiceCommand", serviceCommand.getMap()); - this.serviceTransportType = ServiceTransportType.ServiceCommand; - } - - - public boolean hasServiceCommand() { - return (getMap().containsKey("ServiceCommand")); - } - - - public String getTransportType() { - return map.getString("transportType", "unknown"); - } - - - // On remote end, this will be converted to the "action" of a local Intent, - // so can be used for separating types of messages to different internal handlers. - public void setTransportType(String transportType) { - map.putString("transportType", transportType); - } - - - public ServiceResult getServiceResult() { - return new ServiceResult(map.getBundle("ServiceResult")); - } - - - public void setServiceResult(ServiceResult serviceResult) { - map.putBundle("ServiceResult", serviceResult.getMap()); - this.serviceTransportType = ServiceTransportType.ServiceResult; - } - - - public boolean hasServiceResult() { - return (getMap().containsKey("ServiceResult")); - } - - - public ServiceNotification getServiceNotification() { - return new ServiceNotification(map.getBundle("ServiceNotification")); - } - - - public void setServiceNotification(ServiceNotification notification) { - map.putBundle("ServiceNotification", notification.getMap()); - this.serviceTransportType = ServiceTransportType.ServiceNotification; - } - - - public boolean hasServiceNotification() { - return (map.containsKey("ServiceNotification")); - } - - - public boolean commandDidCompleteOK() { - return getServiceResult().resultIsOK(); - } - - - public String getOriginalCommandName() { - return getServiceCommand().getCommandName(); - } - - - public String describeContentsShort() { - String rval = ""; - rval += getTransportType(); - - if (this.serviceTransportType == ServiceTransportType.ServiceNotification) { - rval += "note: " + getServiceNotification().getNotificationType(); - } else if (this.serviceTransportType == ServiceTransportType.ServiceCommand) { - rval += ", cmd=" + getOriginalCommandName(); - } else if (this.serviceTransportType == ServiceTransportType.ServiceResult) { - rval += ", cmd=" + getOriginalCommandName(); - rval += ", rslt=" + getServiceResult().getResult(); - rval += ", err=" + getServiceResult().getErrorDescription(); - } - return rval; - } - - - @Override public ServiceTransport clone() { - Parcel p = Parcel.obtain(); - Parcel p2 = Parcel.obtain(); - getMap().writeToParcel(p, 0); - byte[] bytes = p.marshall(); - p2.unmarshall(bytes, 0, bytes.length); - p2.setDataPosition(0); - Bundle b = p2.readBundle(); - ServiceTransport rval = new ServiceTransport(); - rval.setMap(b); - return rval; - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransportType.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransportType.java deleted file mode 100644 index 135c217996..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/data/ServiceTransportType.java +++ /dev/null @@ -1,15 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data; - -/** - * Created by andy on 31/05/18. - */ - -public enum ServiceTransportType { - - Undefined, // - ServiceNotification, // - - ServiceCommand, // - ServiceResult - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt index b0a6123970..e3d5a121b7 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/DiscoverGattServicesTask.kt @@ -1,7 +1,6 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport import info.nightscout.shared.logging.AAPSLogger import javax.inject.Inject diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt index b32b36b338..53cca2a306 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/PumpTask.kt @@ -1,7 +1,6 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport open class PumpTask(injector: HasAndroidInjector) : ServiceTask(injector) diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt index 81e1024244..34fdf4e050 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTask.kt @@ -3,11 +3,10 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.task import dagger.android.HasAndroidInjector import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport import javax.inject.Inject @Suppress("LeakingThis") -open class ServiceTask constructor(val injector: HasAndroidInjector, val serviceTransport: ServiceTransport = ServiceTransport()) : Runnable { +open class ServiceTask constructor(val injector: HasAndroidInjector) : Runnable { @Inject lateinit var activePlugin: ActivePlugin diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt index 704439a490..36494bb17b 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt @@ -1,6 +1,5 @@ package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.LTag import java.util.concurrent.LinkedBlockingQueue @@ -12,7 +11,6 @@ import javax.inject.Singleton @Singleton class ServiceTaskExecutor @Inject constructor() : ThreadPoolExecutor(1, 1, 10000, TimeUnit.MILLISECONDS, taskQueue) { - @Inject lateinit var rileyLinkUtil: RileyLinkUtil @Inject lateinit var aapsLogger: AAPSLogger companion object { @@ -25,21 +23,17 @@ class ServiceTaskExecutor @Inject constructor() : ThreadPoolExecutor(1, 1, 10000 return task } - // FIXME override fun beforeExecute(t: Thread, r: Runnable) { // This is run on either caller UI thread or Service UI thread. val task = r as ServiceTask aapsLogger.debug(LTag.PUMPBTCOMM, "About to run task ${task.javaClass.simpleName}") - rileyLinkUtil.setCurrentTask(task) task.preOp() } - // FIXME override fun afterExecute(r: Runnable, t: Throwable) { // This is run on either caller UI thread or Service UI thread. val task = r as ServiceTask task.postOp() aapsLogger.debug(LTag.PUMPBTCOMM, "Finishing task ${task.javaClass.simpleName}") - rileyLinkUtil.finishCurrentTask(task) } } \ No newline at end of file From f0a37d64f36f5c62787d6294ccbda880ce1485c2 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 23 Jun 2022 15:25:17 +0200 Subject: [PATCH 48/71] Eliminate use of Date() --- .../general/maintenance/MaintenancePlugin.kt | 2 +- .../nsclient/events/EventNSClientNewLog.kt | 2 +- .../omnipod/dash/OmnipodDashPumpPlugin.kt | 91 ++++++++----------- .../driver/pod/definition/BasalProgram.kt | 4 +- .../dash/ui/OmnipodDashOverviewFragment.kt | 41 ++++----- .../general/openhumans/OpenHumansUploader.kt | 6 +- 6 files changed, 65 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenancePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenancePlugin.kt index 0c466e7027..e02c373bde 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenancePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenancePlugin.kt @@ -148,7 +148,7 @@ class MaintenancePlugin @Inject constructor( * @return */ private fun constructName(): String { - return "AndroidAPS_LOG_" + Date().time + loggerUtils.suffix + return "AndroidAPS_LOG_" + System.currentTimeMillis() + loggerUtils.suffix } private fun zip(zipFile: File?, files: List) { diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/events/EventNSClientNewLog.kt b/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/events/EventNSClientNewLog.kt index 72d36e4a84..8d0aa9fac2 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/events/EventNSClientNewLog.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/events/EventNSClientNewLog.kt @@ -5,7 +5,7 @@ import java.text.SimpleDateFormat import java.util.* class EventNSClientNewLog(var action: String, var logText: String) : Event() { - var date = Date() + var date = System.currentTimeMillis() private var timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt index 739bc204a1..84aa19951d 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt @@ -85,6 +85,7 @@ class OmnipodDashPumpPlugin @Inject constructor( rh: ResourceHelper, commandQueue: CommandQueue ) : PumpPluginBase(pluginDescription, injector, aapsLogger, rh, commandQueue), Pump { + @Volatile var bolusCanceled = false @Volatile var bolusDeliveryInProgress = false @@ -95,6 +96,7 @@ class OmnipodDashPumpPlugin @Inject constructor( private var disposables: CompositeDisposable = CompositeDisposable() companion object { + private const val BOLUS_RETRY_INTERVAL_MS = 2000.toLong() private const val BOLUS_RETRIES = 5 // number of retries for cancel/get bolus status private const val STATUS_CHECK_INTERVAL_MS = (60L * 1000) @@ -460,22 +462,10 @@ class OmnipodDashPumpPlugin @Inject constructor( .observeOn(aapsSchedulers.main) .subscribe( { - if (it.isChanged( - rh, - R.string.key_omnipod_common_expiration_reminder_enabled - ) || - it.isChanged( - rh, - R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown - ) || - it.isChanged( - rh, - R.string.key_omnipod_common_low_reservoir_alert_enabled - ) || - it.isChanged( - rh, - R.string.key_omnipod_common_low_reservoir_alert_units - ) + if (it.isChanged(rh, R.string.key_omnipod_common_expiration_reminder_enabled) || + it.isChanged(rh, R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown) || + it.isChanged(rh, R.string.key_omnipod_common_low_reservoir_alert_enabled) || + it.isChanged(rh, R.string.key_omnipod_common_low_reservoir_alert_units) ) { commandQueue.customCommand(CommandUpdateAlertConfiguration(), null) } @@ -519,7 +509,7 @@ class OmnipodDashPumpPlugin @Inject constructor( override val baseBasalRate: Double get() { - val date = Date() + val date = System.currentTimeMillis() val ret = podStateManager.basalProgram?.rateAt(date) ?: 0.0 aapsLogger.info(LTag.PUMP, "baseBasalRate: $ret at $date}") return if (podStateManager.alarmType != null) { @@ -626,20 +616,15 @@ class OmnipodDashPumpPlugin @Inject constructor( ) } else { if (podStateManager.activeCommand != null) { - val sound = if (sp.getBoolean( - R.string - .key_omnipod_common_notification_uncertain_bolus_sound_enabled, - true - ) - ) - R.raw.boluserror - else - 0 + val sound = + if (sp.getBoolean( + R.string + .key_omnipod_common_notification_uncertain_bolus_sound_enabled, true + ) + ) R.raw.boluserror + else 0 - showErrorDialog( - "Bolus delivery status uncertain. Refresh pod status to confirm or deny.", - sound - ) + showErrorDialog("Bolus delivery status uncertain. Refresh pod status to confirm or deny.", sound) } } }.toSingle { @@ -1000,12 +985,9 @@ class OmnipodDashPumpPlugin @Inject constructor( val extended = JSONObject() try { val podStatus = when { - podStateManager.isPodRunning && podStateManager.isSuspended -> - "suspended" - podStateManager.isPodRunning -> - "normal" - else -> - "no active Pod" + podStateManager.isPodRunning && podStateManager.isSuspended -> "suspended" + podStateManager.isPodRunning -> "normal" + else -> "no active Pod" } status.put("status", podStatus) status.put("timestamp", dateUtil.toISOString(podStateManager.lastUpdatedSystem)) @@ -1108,21 +1090,22 @@ class OmnipodDashPumpPlugin @Inject constructor( override fun executeCustomCommand(customCommand: CustomCommand): PumpEnactResult { return when (customCommand) { - is CommandSilenceAlerts -> + is CommandSilenceAlerts -> silenceAlerts() - is CommandResumeDelivery -> + is CommandResumeDelivery -> resumeDelivery() - is CommandDeactivatePod -> + is CommandDeactivatePod -> deactivatePod() - is CommandHandleTimeChange -> + is CommandHandleTimeChange -> handleTimeChange() is CommandUpdateAlertConfiguration -> updateAlertConfiguration() - is CommandPlayTestBeep -> + is CommandPlayTestBeep -> playTestBeep() - is CommandDisableSuspendAlerts -> + is CommandDisableSuspendAlerts -> disableSuspendAlerts() - else -> { + + else -> { aapsLogger.warn(LTag.PUMP, "Unsupported custom command: " + customCommand.javaClass.name) PumpEnactResult(injector).success(false).enacted(false).comment( rh.gs( @@ -1231,10 +1214,11 @@ class OmnipodDashPumpPlugin @Inject constructor( expirationHours, lowReservoirAlertEnabled, lowReservoirAlertUnits - ) -> { + ) -> { aapsLogger.debug(LTag.PUMP, "Ignoring updateAlertConfiguration because the settings did not change") return PumpEnactResult(injector).success(true).enacted(false) } + !podStateManager.isPodRunning -> { aapsLogger.debug(LTag.PUMP, "Ignoring updateAlertConfiguration because there is no active pod") return PumpEnactResult(injector).success(true).enacted(false) @@ -1356,7 +1340,8 @@ class OmnipodDashPumpPlugin @Inject constructor( } rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS)) } - OmnipodCommandType.RESUME_DELIVERY -> { + + OmnipodCommandType.RESUME_DELIVERY -> { // We can't invalidate this command, // and this is why it is pumpSync-ed at this point if (confirmation.success) { @@ -1375,7 +1360,7 @@ class OmnipodDashPumpPlugin @Inject constructor( } } - OmnipodCommandType.SET_BASAL_PROFILE -> { + OmnipodCommandType.SET_BASAL_PROFILE -> { if (confirmation.success) { podStateManager.basalProgram = command.basalProgram if (podStateManager.basalProgram == null) { @@ -1399,7 +1384,7 @@ class OmnipodDashPumpPlugin @Inject constructor( } } - OmnipodCommandType.SET_TEMPORARY_BASAL -> { + OmnipodCommandType.SET_TEMPORARY_BASAL -> { // This treatment was synced before sending the command if (!confirmation.success) { aapsLogger.info(LTag.PUMPCOMM, "temporary basal denied. PumpId: ${historyEntry.pumpId()}") @@ -1414,7 +1399,7 @@ class OmnipodDashPumpPlugin @Inject constructor( rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS)) } - OmnipodCommandType.SUSPEND_DELIVERY -> { + OmnipodCommandType.SUSPEND_DELIVERY -> { if (!confirmation.success) { pumpSync.invalidateTemporaryBasalWithPumpId( historyEntry.pumpId(), @@ -1426,7 +1411,7 @@ class OmnipodDashPumpPlugin @Inject constructor( } } - OmnipodCommandType.SET_BOLUS -> { + OmnipodCommandType.SET_BOLUS -> { if (confirmation.success) { if (command.requestedBolus == null) { aapsLogger.error(LTag.PUMP, "Requested bolus not found: $command") @@ -1459,7 +1444,7 @@ class OmnipodDashPumpPlugin @Inject constructor( rxBus.send(EventDismissNotification(Notification.OMNIPOD_UNCERTAIN_SMB)) } - OmnipodCommandType.CANCEL_BOLUS -> { + OmnipodCommandType.CANCEL_BOLUS -> { if (confirmation.success) { podStateManager.lastBolus?.run { val deliveredUnits = markComplete() @@ -1481,7 +1466,7 @@ class OmnipodDashPumpPlugin @Inject constructor( } } - else -> + else -> aapsLogger.warn( LTag.PUMP, "Will not sync confirmed command of type: $historyEntry and " + @@ -1508,13 +1493,13 @@ class OmnipodDashPumpPlugin @Inject constructor( private fun soundEnabledForNotificationType(notificationType: Int): Boolean { return when (notificationType) { - Notification.OMNIPOD_TBR_ALERTS -> + Notification.OMNIPOD_TBR_ALERTS -> sp.getBoolean(R.string.key_omnipod_common_notification_uncertain_tbr_sound_enabled, true) Notification.OMNIPOD_UNCERTAIN_SMB -> sp.getBoolean(R.string.key_omnipod_common_notification_uncertain_smb_sound_enabled, true) Notification.OMNIPOD_POD_SUSPENDED -> sp.getBoolean(R.string.key_omnipod_common_notification_delivery_suspended_sound_enabled, true) - else -> true + else -> true } } } diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/BasalProgram.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/BasalProgram.kt index 993874b5e3..69e9037c28 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/BasalProgram.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/BasalProgram.kt @@ -15,9 +15,9 @@ class BasalProgram( fun hasZeroUnitSegments() = segments.any { it.basalRateInHundredthUnitsPerHour == 0 } - fun rateAt(date: Date): Double { + fun rateAt(date: Long): Double { val instance = Calendar.getInstance() - instance.time = date + instance.timeInMillis = date val hourOfDay = instance[Calendar.HOUR_OF_DAY] val minuteOfHour = instance[Calendar.MINUTE] val slotIndex = hourOfDay * 2 + minuteOfHour.div(30) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt index 49e03984fe..9d28dc6485 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt @@ -13,6 +13,7 @@ import info.nightscout.androidaps.Constants import info.nightscout.androidaps.activities.ErrorHelperActivity import info.nightscout.androidaps.events.EventPreferenceChange import info.nightscout.androidaps.events.EventPumpStatusChanged +import info.nightscout.androidaps.interfaces.BuildHelper import info.nightscout.androidaps.interfaces.CommandQueue import info.nightscout.androidaps.interfaces.PumpSync import info.nightscout.androidaps.interfaces.ResourceHelper @@ -39,7 +40,6 @@ import info.nightscout.androidaps.queue.events.EventQueueChanged import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.alertDialogs.OKDialog -import info.nightscout.androidaps.interfaces.BuildHelper import info.nightscout.androidaps.utils.protection.ProtectionCheck import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.androidaps.utils.ui.UIRunnable @@ -52,7 +52,6 @@ import java.time.ZonedDateTime import java.util.* import java.util.concurrent.TimeUnit import javax.inject.Inject -import kotlin.collections.ArrayList // TODO generify; see OmnipodErosOverviewFragment class OmnipodDashOverviewFragment : DaggerFragment() { @@ -274,7 +273,7 @@ class OmnipodDashOverviewFragment : DaggerFragment() { R.attr.warningColor connectionSuccessPercentage < 90 && podStateManager.successfulConnectionAttemptsAfterRetries > 50 -> R.attr.omniYellowColor - else -> + else -> R.attr.defaultTextColor } ) @@ -343,9 +342,9 @@ class OmnipodDashOverviewFragment : DaggerFragment() { when { !podStateManager.sameTimeZone -> R.attr.omniMagentaColor - timeDeviationTooBig -> + timeDeviationTooBig -> R.attr.omniYellowColor - else -> + else -> R.attr.defaultTextColor } ) @@ -361,11 +360,11 @@ class OmnipodDashOverviewFragment : DaggerFragment() { rh.gac( context, when { - expiresAt != null && ZonedDateTime.now().isAfter(expiresAt) -> + expiresAt != null && ZonedDateTime.now().isAfter(expiresAt) -> R.attr.warningColor expiresAt != null && ZonedDateTime.now().isAfter(expiresAt.minusHours(4)) -> R.attr.omniYellowColor - else -> + else -> R.attr.defaultTextColor } ) @@ -387,7 +386,7 @@ class OmnipodDashOverviewFragment : DaggerFragment() { rh.gs( R.string.pump_basebasalrate, omnipodDashPumpPlugin.model() - .determineCorrectBasalSize(podStateManager.basalProgram!!.rateAt(Date())) + .determineCorrectBasalSize(podStateManager.basalProgram!!.rateAt(System.currentTimeMillis())) ) } else { PLACEHOLDER @@ -447,21 +446,21 @@ class OmnipodDashOverviewFragment : DaggerFragment() { private fun translatedActiveAlert(alert: AlertType): String { val id = when (alert) { - AlertType.LOW_RESERVOIR -> + AlertType.LOW_RESERVOIR -> R.string.omnipod_common_alert_low_reservoir - AlertType.EXPIRATION -> + AlertType.EXPIRATION -> R.string.omnipod_common_alert_expiration_advisory AlertType.EXPIRATION_IMMINENT -> R.string.omnipod_common_alert_expiration AlertType.USER_SET_EXPIRATION -> R.string.omnipod_common_alert_expiration_advisory - AlertType.AUTO_OFF -> + AlertType.AUTO_OFF -> R.string.omnipod_common_alert_shutdown_imminent AlertType.SUSPEND_IN_PROGRESS -> R.string.omnipod_common_alert_delivery_suspended - AlertType.SUSPEND_ENDED -> + AlertType.SUSPEND_ENDED -> R.string.omnipod_common_alert_delivery_suspended - else -> + else -> R.string.omnipod_common_alert_unknown_alert } return rh.gs(id) @@ -474,7 +473,7 @@ class OmnipodDashOverviewFragment : DaggerFragment() { System.currentTimeMillis() - podStateManager.lastUpdatedSystem, - ) + ) ) val lastConnectionColor = rh.gac( @@ -528,9 +527,9 @@ class OmnipodDashOverviewFragment : DaggerFragment() { when { !podStateManager.isActivationCompleted || podStateManager.isPodKaput || podStateManager.isSuspended -> R.attr.warningColor - podStateManager.activeCommand != null -> + podStateManager.activeCommand != null -> R.attr.omniYellowColor - else -> + else -> R.attr.defaultTextColor } ) @@ -628,7 +627,7 @@ class OmnipodDashOverviewFragment : DaggerFragment() { private fun updateRefreshStatusButton() { buttonBinding.buttonRefreshStatus.isEnabled = podStateManager.isUniqueIdSet && - isQueueEmpty() + isQueueEmpty() } private fun updateResumeDeliveryButton() { @@ -695,15 +694,15 @@ class OmnipodDashOverviewFragment : DaggerFragment() { val minutes = duration.toMinutes().toInt() val seconds = duration.seconds when { - seconds < 10 -> { + seconds < 10 -> { return rh.gs(R.string.omnipod_common_moments_ago) } - seconds < 60 -> { + seconds < 60 -> { return rh.gs(R.string.omnipod_common_less_than_a_minute_ago) } - seconds < 60 * 60 -> { // < 1 hour + seconds < 60 * 60 -> { // < 1 hour return rh.gs( R.string.omnipod_common_time_ago, rh.gq(R.plurals.omnipod_common_minutes, minutes, minutes) @@ -727,7 +726,7 @@ class OmnipodDashOverviewFragment : DaggerFragment() { ) } - else -> { + else -> { val days = hours / 24 val hoursLeft = hours % 24 if (hoursLeft > 0) diff --git a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansUploader.kt b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansUploader.kt index b9ff7329bf..26d5657f8e 100644 --- a/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansUploader.kt +++ b/openhumans/src/main/java/info/nightscout/androidaps/plugin/general/openhumans/OpenHumansUploader.kt @@ -247,12 +247,12 @@ class OpenHumansUploader @Inject internal constructor( tags.add("DisplayInfo") val uploadNumber = this.uploadCounter++ - val uploadDate = Date() + val uploadDate = System.currentTimeMillis() val uploadInfo = JSONObject() uploadInfo.put("fileVersion", 2) uploadInfo.put("counter", uploadNumber) uploadInfo.put("timestamp", until) - uploadInfo.put("utcOffset", TimeZone.getDefault().getOffset(uploadDate.time)) + uploadInfo.put("utcOffset", TimeZone.getDefault().getOffset(uploadDate)) zos.writeFile("UploadInfo.json", uploadInfo.toString().toByteArray()) tags.add("UploadInfo") @@ -521,7 +521,7 @@ class OpenHumansUploader @Inject internal constructor( tags = tags, description = "AndroidAPS Database Upload", md5 = MessageDigest.getInstance("MD5").digest(bytes).toHexString(), - creationDate = uploadDate.time + creationDate = uploadDate ) refreshAccessTokenIfNeeded() From 1add8207420e1cfae2d109a72960a791ba12f11d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 08:26:59 +0000 Subject: [PATCH 49/71] Bump firebase-crashlytics-gradle from 2.9.0 to 2.9.1 Bumps firebase-crashlytics-gradle from 2.9.0 to 2.9.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-crashlytics-gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2c78775b78..f4ac0a131f 100644 --- a/build.gradle +++ b/build.gradle @@ -50,7 +50,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.2.1' classpath 'com.google.gms:google-services:4.3.10' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 0f92e5409d22324f739c4b68e46e8043ff3f7b7a Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 24 Jun 2022 13:34:11 +0200 Subject: [PATCH 50/71] fix strings %% --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 269dd9a883..cb0b891cfe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -520,8 +520,8 @@ OpenAPS SMB Dynamic ISF DynISFAdjust - DynamicISF Adjustment Factor %% - Adjustment factor for DynamicISF. Set more than 100%% for more aggressive correction doses, and less than 100%% for less aggressive corrections. + DynamicISF Adjustment Factor % + Adjustment factor for DynamicISF. Set more than 100% for more aggressive correction doses, and less than 100% for less aggressive corrections. use_smb use_uam smb_enable_carbs_suggestions_threshold From 17ca068d36a1c4f15056f83fb7b5242575ae2849 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sat, 25 Jun 2022 00:21:59 +0200 Subject: [PATCH 51/71] AutotuneIob open class for unit test --- .../androidaps/plugins/general/autotune/AutotuneIob.kt | 8 ++++---- .../androidaps/plugins/general/autotune/AutotunePrep.kt | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt index 13079e418c..c12909848c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt @@ -29,7 +29,7 @@ import kotlin.math.ceil import kotlin.math.roundToInt @Singleton -class AutotuneIob @Inject constructor( +open class AutotuneIob @Inject constructor( private val aapsLogger: AAPSLogger, private val repository: AppRepository, private val profileFunction: ProfileFunction, @@ -41,10 +41,10 @@ class AutotuneIob @Inject constructor( private val nsTreatments = ArrayList() private var dia: Double = Constants.defaultDIA - var boluses: MutableList = ArrayList() + var boluses: ArrayList = ArrayList() var meals = ArrayList() lateinit var glucose: List // newest at index 0 - private lateinit var tempBasals: MutableList + private lateinit var tempBasals: ArrayList var startBG: Long = 0 var endBG: Long = 0 private fun range(): Long = (60 * 60 * 1000L * dia + T.hours(2).msecs()).toLong() @@ -225,7 +225,7 @@ class AutotuneIob @Inject constructor( } } - fun getIOB(time: Long, localInsulin: LocalInsulin): IobTotal { + open fun getIOB(time: Long, localInsulin: LocalInsulin): IobTotal { val bolusIob = getCalculationToTimeTreatments(time, localInsulin).round() return bolusIob } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt index 9e0b5d704f..edba396893 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt @@ -302,7 +302,7 @@ class AutotunePrep @Inject constructor( // Then, calculate carb absorption for that 5m interval using the deviation. if (mealCOB > 0) { - val ci = Math.max(deviation, sp.getDouble("openapsama_min_5m_carbimpact", 3.0)) + val ci = Math.max(deviation, sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)) val absorbed = ci * tunedprofile.ic / sens // Store the COB, and use it as the starting point for the next data point. mealCOB = Math.max(0.0, mealCOB - absorbed) From 8be35e60817f5ad460bd34d714ca6ee5bc63bcca Mon Sep 17 00:00:00 2001 From: Philoul Date: Sat, 25 Jun 2022 00:27:44 +0200 Subject: [PATCH 52/71] Prepare for other unit tests for autotuneCore --- .../plugins/general/autotune/AutotuneCoreTest.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt index 81209340e9..fccbc12121 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt @@ -30,9 +30,6 @@ class AutotuneCoreTest : TestBaseWithProfile() { @Mock lateinit var injector: HasAndroidInjector @Mock lateinit var activePlugin: ActivePlugin lateinit var autotuneCore: AutotuneCore - lateinit var prep: PreppedGlucose - lateinit var prepjson: String - lateinit var inputProfile: ATProfile var min5mCarbImpact = 0.0 var autotuneMin = 0.0 var autotuneMax = 0.0 @@ -41,14 +38,15 @@ class AutotuneCoreTest : TestBaseWithProfile() { fun initData() { autotuneCore = AutotuneCore(sp,autotuneFS) TimeZone.setDefault(TimeZone.getTimeZone("GMT+2")) - prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() - val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() - inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! - prep = PreppedGlucose(JSONObject(prepjson), dateUtil) } @Test fun autotuneCoreTest() { // Test if load from file of OpenAPS categorisation is Ok + val prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() + val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() + val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! + val prep = PreppedGlucose(JSONObject(prepjson), dateUtil) + `when`(sp.getDouble(R.string.key_openapsama_autosens_max, 1.2)).thenReturn(autotuneMax) `when`(sp.getDouble(R.string.key_openapsama_autosens_min, 0.7)).thenReturn(autotuneMin) `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) From 25c976ee58311812ced8a35e72d2377df9498630 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sat, 25 Jun 2022 00:37:46 +0200 Subject: [PATCH 53/71] Add Unit Test for AutotunePrep --- .../general/autotune/AutotunePrepTest.kt | 250 +++++++++++++++ .../res/autotune/test1/Convert_Log2JSON.xlsx | Bin 0 -> 65522 bytes .../test1/oaps-iobCalc.2022-05-21.json | 286 ++++++++++++++++++ 3 files changed, 536 insertions(+) create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt create mode 100644 app/src/test/res/autotune/test1/Convert_Log2JSON.xlsx create mode 100644 app/src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt new file mode 100644 index 0000000000..74c6ff6e15 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt @@ -0,0 +1,250 @@ +package info.nightscout.androidaps.plugins.general.autotune + +import dagger.android.HasAndroidInjector +import info.nightscout.androidaps.R +import info.nightscout.androidaps.TestBaseWithProfile +import info.nightscout.androidaps.data.IobTotal +import info.nightscout.androidaps.data.LocalInsulin +import info.nightscout.androidaps.data.ProfileSealed +import info.nightscout.androidaps.data.PureProfile +import info.nightscout.androidaps.database.AppRepository +import info.nightscout.androidaps.database.data.Block +import info.nightscout.androidaps.database.data.TargetBlock +import info.nightscout.androidaps.database.entities.Bolus +import info.nightscout.androidaps.database.entities.Carbs +import info.nightscout.androidaps.database.entities.GlucoseValue +import info.nightscout.androidaps.interfaces.* +import info.nightscout.androidaps.plugins.general.autotune.data.* +import info.nightscout.androidaps.utils.DateUtil +import info.nightscout.androidaps.utils.JsonHelper +import info.nightscout.androidaps.utils.T +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.sharedPreferences.SP +import org.json.JSONArray +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito.`when` +import java.io.File +import java.util.* +import kotlin.collections.ArrayList + +class AutotunePrepTest : TestBaseWithProfile() { + @Mock lateinit var sp: SP + @Mock lateinit var autotuneFS: AutotuneFS + @Mock lateinit var injector: HasAndroidInjector + @Mock lateinit var activePlugin: ActivePlugin + @Mock lateinit var repository: AppRepository + lateinit var autotunePrep: AutotunePrep + lateinit var autotuneIob: TestAutotuneIob + lateinit var inputProfile: ATProfile + var min5mCarbImpact = 0.0 + var autotuneMin = 0.0 + var autotuneMax = 0.0 + var startDayTime = 0L + + + @Before + fun initData() { + TimeZone.setDefault(TimeZone.getTimeZone("GMT+2")) + val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() + inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! + val inputIobJson = File("src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS + val iobOapsCalcul = buildIobOaps(JSONArray(inputIobJson)) + autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalcul) + autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) + } + + @Test + fun autotunePrepTest() { // Test if load from file of OpenAPS categorisation is Ok + val prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() + val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepjson), dateUtil) //prep data calculated by OpenAPS autotune + val oapsEntriesJson = File("src/test/res/autotune/test1/aaps-entries.2022-05-21.json").readText() + autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) + val oapsTreatmentsJson = File("src/test/res/autotune/test1/aaps-treatments.2022-05-21.json").readText() + autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation + autotuneIob.boluses = buildBoluses(oapsPreppedGlucose) //Values from oapsPrepData because linked to iob calculation method for TBR + `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) + + val aapsPreppedGlucose = autotunePrep.categorizeBGDatums(inputProfile, inputProfile.localInsulin, false) + try { + aapsPreppedGlucose?.let { // compare all categorization calculated by aaps plugin (aapsPreppedGlucose) with categorization calculated by OpenAPS (oapsPreppedGlucose) + for (i in aapsPreppedGlucose.crData.indices) + Assert.assertTrue(oapsPreppedGlucose.crData[i].equals(aapsPreppedGlucose.crData[i])) + for (i in aapsPreppedGlucose.csfGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.csfGlucoseData[i].equals(aapsPreppedGlucose.csfGlucoseData[i])) + for (i in aapsPreppedGlucose.isfGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.isfGlucoseData[i].equals(aapsPreppedGlucose.isfGlucoseData[i])) + for (i in aapsPreppedGlucose.basalGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.basalGlucoseData[i].equals(aapsPreppedGlucose.basalGlucoseData[i])) + } + ?: Assert.fail() + } catch (e: Exception) { + Assert.fail() + } + } + + + + /** + * OpenAPS profile for Autotune only have one ISF value and one IC value + */ + fun atProfileFromOapsJson(jsonObject: JSONObject, dateUtil: DateUtil, defaultUnits: String? = null): ATProfile? { + try { + min5mCarbImpact = JsonHelper.safeGetDoubleAllowNull(jsonObject, "min_5m_carbimpact") ?: return null + autotuneMin = JsonHelper.safeGetDoubleAllowNull(jsonObject, "autosens_min") ?: return null + autotuneMax = JsonHelper.safeGetDoubleAllowNull(jsonObject, "autosens_max") ?: return null + val txtUnits = JsonHelper.safeGetStringAllowNull(jsonObject, "units", defaultUnits) ?: return null + val units = GlucoseUnit.fromText(txtUnits) + val dia = JsonHelper.safeGetDoubleAllowNull(jsonObject, "dia") ?: return null + val peak = JsonHelper.safeGetIntAllowNull(jsonObject, "insulinPeakTime") ?: return null + val localInsulin = LocalInsulin("insulin", peak, dia) + val timezone = TimeZone.getTimeZone(JsonHelper.safeGetString(jsonObject, "timezone", "UTC")) + val isfJson = jsonObject.getJSONObject("isfProfile") + val isfBlocks = ArrayList(1).also { + val isfJsonArray = isfJson.getJSONArray("sensitivities") + val value = isfJsonArray.getJSONObject(0).getDouble("sensitivity") + it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + } + val icBlocks = ArrayList(1).also { + val value = jsonObject.getDouble("carb_ratio") + it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + } + val basalBlocks = blockFromJsonArray(jsonObject.getJSONArray("basalprofile"), dateUtil) + ?: return null + val targetBlocks = ArrayList(1).also { + it.add(0, TargetBlock((T.hours(24).secs()) * 1000L, 100.0, 100.0)) + } + + val pure = PureProfile( + jsonObject = jsonObject, + basalBlocks = basalBlocks, + isfBlocks = isfBlocks, + icBlocks = icBlocks, + targetBlocks = targetBlocks, + glucoseUnit = units, + timeZone = timezone, + dia = dia + ) + return ATProfile(ProfileSealed.Pure(pure), localInsulin, profileInjector).also { it.dateUtil = dateUtil} + } catch (ignored: Exception) { + return null + } + } + + + fun blockFromJsonArray(jsonArray: JSONArray?, dateUtil: DateUtil): List? { + val size = jsonArray?.length() ?: return null + val ret = ArrayList(size) + try { + for (index in 0 until jsonArray.length() - 1) { + val o = jsonArray.getJSONObject(index) + val tas = o.getInt("minutes") * 60 + val next = jsonArray.getJSONObject(index + 1) + val nextTas = next.getInt("minutes") * 60 + val value = o.getDouble("rate") + if (tas % 3600 != 0) return null + if (nextTas % 3600 != 0) return null + ret.add(index, Block((nextTas - tas) * 1000L, value)) + } + val last: JSONObject = jsonArray.getJSONObject(jsonArray.length() - 1) + val lastTas = last.getInt("minutes") * 60 + val value = last.getDouble("rate") + ret.add(jsonArray.length() - 1, Block((T.hours(24).secs() - lastTas) * 1000L, value)) + } catch (e: Exception) { + return null + } + return ret + } + + fun buildBoluses(preppedGlucose: PreppedGlucose): ArrayList { //if categorization is correct then I return for dose function the crInsulin calculated in Oaps + val boluses: ArrayList = ArrayList() + try { + for (i in preppedGlucose.crData.indices) { + boluses.add( + Bolus( + timestamp = preppedGlucose.crData[i].crEndTime, + amount = preppedGlucose.crData[i].crInsulin, + type = Bolus.Type.NORMAL + ) + ) + } + } catch (e: Exception) { } + return boluses + } + + fun buildMeals(jsonArray: JSONArray): ArrayList { + val list: ArrayList = ArrayList() + try { + for (index in 0 until jsonArray.length()) { + val json = jsonArray.getJSONObject(index) + val value = JsonHelper.safeGetDouble(json, "carbs", 0.0) + val timestamp = JsonHelper.safeGetLong(json, "date") + if (value > 0.0 && timestamp > startDayTime) { + list.add(Carbs(timestamp=timestamp, amount = value, duration = 0)) + } + } + } catch (e: Exception) { } + return list + } + + fun buildGlucose(jsonArray: JSONArray): List { + val list: ArrayList = ArrayList() + try { + for (index in 0 until jsonArray.length()) { + val json = jsonArray.getJSONObject(index) + val value = JsonHelper.safeGetDouble(json, "sgv") + val timestamp = JsonHelper.safeGetLong(json, "date") + list.add(GlucoseValue(raw = value, noise = 0.0, value = value, timestamp = timestamp, sourceSensor = GlucoseValue.SourceSensor.UNKNOWN, trendArrow = GlucoseValue.TrendArrow.FLAT)) + } + } catch (e: Exception) { } + if (list.size > 0) + startDayTime = list[list.size-1].timestamp + return list + } + + fun buildIobOaps(jsonArray: JSONArray): ArrayList { //if categorization is correct then I return for dose function the crInsulin calculated in Oaps + val list: ArrayList = ArrayList() + for (index in 0 until jsonArray.length()) { + val json = jsonArray.getJSONObject(index) + val time = JsonHelper.safeGetLong(json,"date") + val iob = JsonHelper.safeGetDouble(json, "iob") + val activity = JsonHelper.safeGetDouble(json, "activity") + val iobTotal = IobTotal(time) + iobTotal.iob = iob + iobTotal.activity = activity + list.add(iobTotal) + } + return list + } + + class TestAutotuneIob( + val aapsLogger: AAPSLogger, + repository: AppRepository, + val profileFunction: ProfileFunction, + val sp: SP, + val dateUtil: DateUtil, + val activePlugin: ActivePlugin, + autotuneFS: AutotuneFS, + val iobOapsCalcul: ArrayList + ) : AutotuneIob( + aapsLogger, + repository, + profileFunction, + sp, + dateUtil, + activePlugin, + autotuneFS + ) { + override fun getIOB(time: Long, localInsulin: LocalInsulin): IobTotal { + var bolusIob = IobTotal(time) + iobOapsCalcul.forEach { + if (it.time == time) + return it + } + return bolusIob + } + } +} diff --git a/app/src/test/res/autotune/test1/Convert_Log2JSON.xlsx b/app/src/test/res/autotune/test1/Convert_Log2JSON.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5f4d84fff9958b0ed283cd4c4661e1641aa9d54d GIT binary patch literal 65522 zcmeFXRa9JUmoAFCyM_dJilD*W3xX8x2?Tfd;2Oi-t?;11o#5`lf?Ejga2Cne-G7h$ zpPPNLZ@Rf)3_@kreCK2HUDRtucmx6%Bp4JJ7?>9@p$lj3;jl0;aY!&Q_%JANdXn~b zE@pNvMjDLG%>6Km>loci40l6XvPUsrP+; zpA-e&z?(YFgyzeCf0eq}c3Cs|;wyU3`_`J8{%dxIG>-Lsv-Pitv^5=xrrH=%NQTI7 zd?AsuiMMxZZ{-HaHv_}eN@04=H_qPPeT@tt)$(SQ1`|}|Nf}7yR-)hvRVYbX5gfmR zzSZz5VE&Zbu`02*iYl}@Wg6apMO0w*i?K=X-P91ZlQL*mc*Wb(1P$@2G?p+`bW(*kC7M=yq#C6Wkl#c%2gtX0Pu_uE{K){b~{4-C6#&@Jy> z+l5`DA0j@SicW|NIX`dOKKhs!^vVH7js@A{ZN2rF**-@1*L$usc5*1$`Atf4O)oT_wbTBhs*TB|6}!9$h7VMDvp9aSJu0fV{A%oh3mZ*#`;}t)*ofBagheRMXkpqOVa=WQ}omG^X5? zDg@}q2Tu8)L8=2L7UQv`MP@(ZHibjmp1o!hn(nYdLH0(5irffYf34>R+k0?q`I;sw zM~h|P3l6$%N}8h=k1iIaNDRsc5uT<^;`ZNCzk$!7U(i=Md#vMkq*ja=lUqF%T8VTP z+uwiBo@r5h)iNUVvoLrK{PxPEqX%2V=-;a3>>OE;9Edp`1Q-}H7!+6!8;-w1akqD} zHnq36ehRw(5DhGlcED@@XMZ)vjVg45aC(mdk8rl^Cf!^K=UuQPE42)$p65*#*rdiO z-A&f>5y-Q#o~vEpC6S)^wkf@wKWuAC@Xg8XC4<%Z0wLep>=8qjV=AWZP~c_ zs{)CD3+%>-*dX~0){Ww3^{%b13@Wo$4WXhW^Y0Dx*Kwzg*$FCg;qijyl=dmL`67mK zCp2`Q0#c~klOOC=0&&(Ne6B#n{U|ElJ!LO@LYH*V37W?nas!i0Oqg768IT~RG;%3& zbo?koTMy$^GW4nC?p3^~w_dmfjq-o{_=0NIgUaXP1%c?lrIx-F>`)#+mvg{?v4K|r z)cRLaMXPn#tv|px}{YP6`CO^(S#yTLfn=5MgLC?~~zzTm`rEkR@)&o^z)h)9O^pFiNUmC|-(E z)Il{+t@VD9gVv;eibVyS_?GFaL_zYoh0+D6b8P)1kX)&_>2$Att3zR47CI~0B0o|z z_Kk(G#krOhqn=kq)Y4^}vE_2|ApayyF}@DizV zt&hn6-vSDYr8$-atiwg*Pb={sKwT`%Y|S|SeCK>}iUS=Ldva-lHkxBf8E<=AhB|Ut zSLj?7xy7VRmEP34hwyT`m)koYF6BLPtB-PW;eid$9pO=7<8>nxUmdH$Nx#nXLtGv@ zD0lzKBd>q}w)fh;LhAKX<0zf=KMbG1;wtp=idy=l#RY zm!UG{!byw#ui80CZ>jbbuVSpKTU)kPF~9#LSG@9i*R*IW-~s>jY74K`KYzNk$papZ zG^S9|;&9AQG(SUo_O`_SAABX&$nL%Ewkdgx(Gsq&1&*dJ0wi zJTEqS-cdc=oUh|u)wSnR`^eEykFz-iV|gGnl6EzGiT%vK5@`}%Tn!f{))efb5`y)6 zhNAkVepo|q6HAsy9BjqtFTt-^5}fKa!KX1GrvUG?YAoV>q=sxyLRO))9`RSsoGd@F zKq9Q`OFdQV3(KtUp~;B(Z*J}6C^#=kKM-QcDG^LK`zXjoxLq>39yH4OcF<)qx_r#R zD#)iNo%oC|7bV@q4c9g_=z^prSU2AkC6E?x*&>N$Kue1N@BHu`)tGbM&FOaG{j5<=?UY_5wAF? z-LGoMe=;(4VOdZRRULh23TBkK)sOGEY)E}^LwOgl9{;OVF=GAKBzgxW89y}}oYd%$ zR0Kx_{;%#M;}QC#BxZQJrQ#{vn8#8ZE;QFgClB?y#bsU_Q?veR?;P!l&U5-v*((|rN1{gATAL?5vzyXPq0D9Ec#GDlBZ9i~9x9A);CbF{6mYlH2V+|N z2orA^NfVIw!%>v*m`cXLpwNF_sS|{tb)-s&C6Ok!VtC5^S*#!rJ_3(@t=S?}(b8Jz z>|r2-m;8pplqIa&>f^`5-;K{kK9Ij6rGXfa)R5-7f>%q2W`OI8c>S!2=A=Y=vfgmG zd1Ou(o0d-MT-spA#y2Zak{-SQIl?`T_BYgRzhSZw!KBYsbxr50TSV(2Q7)e`j+634 zCcHRqi_FvFdIr8w>td5*+#GmBPNV(MO*t@Hbt7URoS)XJ9BjVSYL1is-Ki*c_*UR+ zLsA;6jI3?Nw6?X!_dfZ>)OJ2O?3OZmpwmdi#iU& zYHz=EDpSe@YY1wG@^TMpkioIeq?O)TV}kajnO>{KjL`SoAR%;#(j(4|yRs!Kg;zw5 zut!@g&d=7wog`D6;(Yix7Czh!i*&jF8qv2`qcbL~807}Be7mN0I8HBZGLOYDk~EF7 zj}_HX*UmN4JlSTg;Q8jur20UQEWP3bnQx~hrfLs?8cdopDbujH^l(&dojRE{O=o@uPT4GRzP` zEH;Q`+=oW$!OnKIb*5~V%`@MF;W^l?F@iiLLKbiJt`wjls5!neM zkiLX}ko545oe9B^ROh2^fNaB?-Yg(3CVsjkxc9E6Fl*o3bQs;_O}!N=CO60W%sSNw z7qan&*rM{c_X1m+coqNN4+2y+p-(20?5!#A%E}56eV?=m(W^pKY41t8{JQ6>KA;wV z64{!UkMIQbUq_LTl|rp-PmGXjIFxITST}sNf&_%sbRG^q_)-bk<+hE;os0&{zxre> zk|X!(yY%5nfT{St`$dMeFBU?9?a<)q1?s=M97hpj)*1q*w+D7JlK*1@f6o5$DbJ(7 zfK`ASQs|M~T^Qpf4<*Q0eG!!td=Lc8)454)=w_++&j;=+iSw?56U6<|bH0o?`oI%qpawDRkeDN$g zZ_eMsl~^VPlDJxWwrIeoYS9$VSUY|uDE6w_s>+hWODBc@(!`5l`unqP(q*enPGhiq zcf_0AZLZNCeJQoi5CP?}igeE+=Lhc1obREVK9+M~{+#>n2Gn-9-30@l3yG1{3+I*l ze4`4atE9vAp6heiv-JLindrm zt?u_um%8ku8bYEfoa>ISj@P?xZ%g_v{U3cE7uA1!pS@LaSIK)^tiU#E-7NF<6Mg5L zdDQxFcw}VQ>VJ0^!h1Z}RTx(29}>epBGT5@aKCT=(dfwUTI%+Gw6V!Mv!3!n*7o7F z>$c+K$}>?BHcRJ+$&fr>*aC`FuH1#qu46*A55v z<>M9a&F#VNuSC%$|3?2um&f;5Q$M4z+c`dd^j~k+yD7@C^+Shk9&Wl+!CpDyI1=^s zYVnXAUwJV4e)8+nCPe;pYrAXZ)ut=I-Q)KDJcs+rFAgfv`;{qOgbl#%a!Z!WBEZ29gl%x?~@ZVnI67SGQXABFGT`0f+FQ4}x4 z*&B_I#0gWAjXgW=GjSgzf=-AWIIoN?`}v#}-Y<$8VvQ2j`|og!5N+G1ZgW@=i#W-a z24@UfM%DYEsR}oslo`$xPwSqI5;B=!su)SOuB;dedoQM44quy{eznio)*mdu-@V{m zGCR!~SzHcZZpmO4X!4G1`o!Cq@3s!_37>zEdb+>0*(z6@0BOQ!3rpJJu=l^*zOSx9 zpB;|+)$I9j*XL#cdB-ubk(l~>v(f8CTM^3xy=AG^qMcy8C;3MMa*NX0lDdUM#v*7p zt`FZ*dQaOZQB+u;5m8iBb#>1?wtHsVor~Lao+#1wnQf7m%XfZS*&j;OB0q$eKDM>6 ztvqb|e5O@@rYxzW=`&@~W!6OeuIh59x-vhiI^y9mEm1ffq!f?AIYgyGN)(pAEpkKh z`{w-D{(YD<1~Xtt5mZqP9J%*4F~%vQnAGb=7-UMi*LS2V}2APF!>kI zmWBaxh9NkEL(i2AqdJaTUS|n|7Hfs05H638J--&Ce3zd|>(`B32h}?)8R~Ddxr8l& z3$;GyDRcOX+Al<uqcPa4pJ;cy|8y^@!%2|_DJ38CvBBt zcz0#$LkNhtOw&!f7oNIS)A2YJ!CS)-wsrlHC%sjJ)~;eVh)P8Go|}6c zOspV#wbwj=oT5U4R?vMDd?|Qk;C;;gZiRh$)obio8FDNN1bd)fMtF_~`fThtZ6@fe zx2EupgYfFd!gH}S+!g`WDul5ERE&3^hOOe6OFk=t+#gpITNq%QDK_`7OV8*n-!zkr z7&{OL)#u!-G(>hrpWc#-q+*?hzUDzndP^BQwXclTRbMr0QUbOk{FGlnrlYmVTPKRa zn2pRMM&6?`WOgh$smGo1yHDM(TdAV3kz2S-*w47K2YWN4W7LbrT*W)7`zJEeJHPHZ z&vj<9<7&dwudwD!Ft!>!(Muxm&#j=aPG)ccMd&pxZ#0S{Wg#{o|@6^)-lk^3W^Gp z3k1rE3-W~Kza;fkp;TE7SILyfQ+us@ZoiQeYmjawSBZ%jc_w32#V-XZRC)uszMf zsUAEAK9X?WEHT}+uMU0WuhRk!Ct8-~bYSuY;}c`nEQlYTmcPM~Fa~BJJk};a2Te>6 z@%6z4DU7N*<|h_>7%77y)P+()an59EoW*&R?BCaMFF3m|37jNwJI9Hn)BKQRrWHO_ z^;xohaHv82!eJ#fp^#<=KN73D!2IScL4BObCoMm8!79NgABKKU4s%k$ATHmAUg_;S z$)u}OCZ(T|x!B70-P@<-gAO&Q>Q3{yqLd8^hCg=(T6OH|I<4o{x#^XBs>KfjQDa%G z5Y$-)@iZaEy2XuBnC6{Qwy;X&YKZDPa+vBR%)bkcqCYAMD3Knav9wf;)V`!pWvz5m6P$)sy3LP!BgrIWDVmswRVkAlJWh|YW zBCg`Nbb2N22R)-M*rifMkU%vpb1$Lot%m_Lu}Kr0Y@C7-8{XR6^vMK|VKj!r3Sm-V zh#fhtuzhM*mHk5WM{-2elA0b&?4mDP!PsZ3IBTr|Nric(lsN%uZfQkViCB^dFI^X> z0Y>CpaEiVYdd7jgenOs{VnT-H00?19O)ePIJb~WA(%ISj3yek1 zhbit_{R;XFw|(ygp2ec@0*eY|3%v8(!n(pSgr{mjbz@Uy-HwZIRO!L5)UQ!W+b2W}FI|`f^?>Dg2KZDFT~1Ke>s({0lk#!~huh zQ&{{e1;ut#(-eg%kYvp%&B+axzvC0&?O~_|#%Gzc7i6X0m5H7rHGRa?n=N1I9+Arh zc8XiSfFw%=2aeX;_E zSJ)O#@o*_cG(6zi6C^d>SbAQ)j^^SBdK-zfqU`NA-P}2aN$M7XvO&jNzVy?+|LZt(}J*bMkY>+!6TY_N%R1`>%K=0L{_Q_6iSmT5}fsE0^U(>^Y4gA@nVAsboXsyB?(cMc{HZ zY4sNUSua9`7RcrHQ;%+XxZv@S^fB5kUSZ*99tyU9`it?-vZTpc`mf_E#X`X#m2Au0 zZE)4&i-TBi<{Db^@eO8aZrd{+14^Z!epVp>4bytUaRP%mRB%qz4U+D6^M9)8SuA`H zley52lgB48o7jjXo1`6zdpc{aR}3Fdl2)pR@1N$LaCo*`XQiq>U_R09#*)LdP>G+? zZDzkBWvfxMa zS~`{eP)jEBJgn)_lrSiJr5Aq7o_*Yly7;WF-waX{nh~_^z~B5t$rGLn*uu z3cqI@I=i;jkJOgC4w$xr7yhWAZHY3Zz>Ds~;@8_lcT4+{Jtd$ql`t((&wmAPu2Uq$4j&Q;~X%bIeDL}>z(3LsfL!~=@{1=i^ zle$G@e;Py2xOu#is}Hg6`1Z~B`bkjlp21iltRPzB1=O9>>BrU10TX zDRRB;zm6GR5T9ghNT5n+c!G)vVba$ztgn&;daJhdg;7_C$%Yc5f}yN26_l})fbykMtW+2V^bKVXu}e?oz!eyk>e>mRNrbAQW` z;pWLHK`LdQteM&G=yFUx_TXsgMlziIrZCOgtg8mZ0-5J1-@B(!0LoePJeBi6w|!g9 z`=>D%cJ8tb3^RbT+~PpaJPoZj2X%{y+ma>C?Tw}_l*J;%`84(qFN$Zldu-^z2c9%3 zSI(U1#Kg?L=rM0&=}BxSHd4NY6lk`U;1+QH9UM?6o^01RLt;{Q=`_DJT^_#{(GSSy zDPTtdtJBFgHby>i!WoEB4mY*b?jDa737Yx8dNjAomiJ!!Ph|^?X%r`Jm_FGK^WRaS z0i&9x-w2ts!!cR6Zfrc!3ULo5ekMX(EC0i158%Bg{?jVbe@3`n-?T0ktL+{U`!=Eb zq|}-sUHgkYR?{(Ej5gjq_bNAOehhEtt4Ru)=7Pmf`f2F1wj@7Xm5iRo9|%b#cYuKfm;wKyN^hIaV$IkKZfV8!{@CQk9xDZ0LGe68)4FMIQC%x(WM$K&W? z{Pou>;^^}!oNIr)n~l3T*6ZVB5_g9I2#A6hi!azOF|{EDmL&!bR-g*rab2g?KxgNs z8h9XGTy6KJ-pKiiIcWDR&e63Ji@?77IKIbN zJv3hN(?qgR)lsBJq~Ad>gCpv6MOL!SaJOSkf2{RR!8iQr9U0-Tfu~7A9ljt>CrFG3 zv|Gp-h<23)oI)fn&%jWAzWPzwZv6ASXNPABf$>M-6?2}_LejEsov|dJy{z`97#t}* zfK5^*aGGVt?6U7Y!z=LoIyWgp6*{mxuhIIep7s*QJEj;?VDL-7kWXDpGcz;`G;iR* z`DP!IyrFJp>0zTePOI{kajDvYOY+-*6eiU>g$q zHCafU1z2jfX*T44Xh-lDznWaQ?9>8MBIC;0QJSH}!OB~~_o$jQ6Xn&?&Uja zLy#1v0dU~yphGbgRv2-u1wj#LuK~#QPtgcmx_paK821!jXPrTo1h%+X2yV;6i+1{y znd6FH-J_*6n}-1TtXiHeNNq(&GXDlbulhP(KCZ+{DK2doQ(NM?g}Lh2*m3@V70!pvkE-rCnYZB2wjFpdQfT zp;ut%q;SYl(kL--9N{UEIi7G5jyTDe0A8kQ|6D=%Sg+7WGe%dPP=bfqhdumD>yugt zqIn|}rpJBN(GE{^m*9G#N;z4~v5Z>N!HnZN@ClIciCzx@xUv4E()}f|H^9&eX{jR{ z@uIyaP4&i? zX%}VaIa(`6NNT2B9CxNf44UYLAl-ofn}HOtHs~W-ri%5H?vT27%w; z;*Ms|DI&6sA9pomwWx`%x#S+%GP{MjY9g_WT`!ER!+hAve*?Yc%K#x$^bPA01|}kND7WtS64Q@6?wo~q4^M^X%+0E1FZc3&=v8e7bI1q} z7vy8`W_Rz&1Xj&s{!nAZyGS*r`L^+2Ykp(5ZvXmHmBls*Sl)OdwbFyEg|(Q;&Wl*a ziwc)LKc6H^RdGgzM}{5-GdiX(SHz>=oj<;yXi)g$|gjL&n<3)#*Ck6#{qGk8Y|D}4G-mp>_I8XaJh7bwCm z%%S_48ICa>5gL-GW{+}|W2a_c8~u7;-BdVLW*O_W*)#mvpzw&p4lA|bYm$3ug96|dG(Z?zSt?BtFuKRO(pO$jN zor=B4Hbudu@-tiHW&4fxV0b^p1v~78qMGIgg9;-dnqiJ&7@^0{%Oc%h>?*EvpPp?> zWoGahd?ITVs&G2-YO&h)Lbf-g*u8V7U0)JMN>`8a&txOQ{@BJ!MEveuR5kD?6aVYo z=-*2IY&*?Has8-08#n^d>z_cC(X9pd!$yz5b7HR;HAi{{g3m}i(nhKI_uSTzjPN@N#0GEI?btLBwZd5RdhD%dB7*~r$8k!h{@YbVJ{jC3dhUr5?Riv9ca|a7B&PK z%VU0Xm)rK(9BqYHa>RTMk`smSZm$PpfX4@AZl6PQ0|VoM!fSl+6bTH_7?~s zymdy?{6TnQ^YV87`cir3U@W(aS>O`Cyt{HjT`!Df4M+dyPG|hw6(M?RU;Ir!h(>)& zf#hOV#$!ui=-TcBilD=ET@E@Djry9xirCs)u5W?vuRnx`=w}-d+E2$njYai@KSgNlB#cFlFS0zhk2OnL1ex!f-OuzCG?qD4c9;*JTC}TctF!ozaAyCiEd(AbMA=C$^)#8nJ~I8 z+35%=P65KPTllts(B-4+d^{TZpi)HHio@tov4#sKlYk8<*bK^hlYqvMDoZF@4kIIG zR9e7%R+ty*F8v{ZDO0Cp?wc%E$<9vU>6feP2XmT{1wZ&DoodYvi&U1&jP~#nUBiXL zD)v+s)}f67Voez_uiGM$6l6(l03YpaB4+>}&4w0dyyxXbqC8q_Y$WR};$F4tt8*KX zM_JFyubfpYx+!v3+MDp`wLpyybd*R74YM@!CPfJ>j%OFznjH%IPKM-bq%4jvmngi1DmkhM&VAE-Z)&Q` zbH@!&0_R(W1|3T$gUSq-stHu9kzQ)?jwfflrV}~`Se1`Uxe7E zod71BF;m;zcPj2oMuXfuhzX#1gg?{E2E&*6+8w3A1u*Z8=xFq~&_hDITF0@Pn$>|J7~^j^;L0UxavA+BcTq}u(@GXB2RKZ=dS+P~UBE7@b2jb`67yH;$+a^U<8Z)0PuXMB?H)1x^EXrW-Bz7ic$+dQ%GM#sGDWhWTwV?YDlur>xn zovk2RD8{y>hDfEcdNERrT9or^N+aa5QppNJ4rm6K?-TQbk8Vlbgx-pT`oamJLk$=L zw{ST#I|yN8r@oM(28h|hIMbL^yEHb_0uL#Ix>=1EJPmQ!RhhS1Q{4GJTw5BlqbyH& z6hQ&2w_>pJ)i=rtQsb<OmY$kSYJMSA57+izY)1MIhH=9eOpaR;D}Ntl+V)4Pk*S`p)vmg4{LOl@8qcg7s!0m zeIiamwk1^c9RFLkG|7~BpmsrbRclVns43K%P=o)oPO*bWr~(843l@4PGbDlh!^ri$ z!s7&sd#6&-s!GeVT`3qs*C)WFRG*xKwDm^wcFze@54bXGFq7D-^9*VoB?w+yj654; z&Q~D#WKHwq4}qYn8f(uOH7wr~+Efp7AaYI_GTg{Lurdp+cPAFMtXaf5`9^!C8e;6(`&Ag(sLN?-c zrT?1FoECV<_7VeBj-&_=-xfM0Wy|k~JlD%m@ zO9T0$>MAw+9vbgd60P)2b3D+|@s&3q6V)E;<#QAdsnVRk0+gD8#*O4fw&;Q2e&rMj zIudn@0P6cI621_0NV+asq**de7OoxOD!|lcg|TG{B;ws>ihJ~-S=9iT>iDmv0Wi_5 zKQQ=BFSyURA1qNruTCw?7UbWhFJwpnAyBL!c01x#ofjt9gA#5wuVG?94{0rjhotMT zagubRK^AndW#7%9G=z=_)QiS2?iTH;0 zW>Z+@usmJJBno4Jw>ORIGuR%UzFORjV!WB7VO&7UQ}FL)3X~uvWq{=D5jJ>^j1kTR zRi^@PWj%LhG&ZN3(d{ z{G$IrS@(J*xC2MCXd>#*=~r`H0ZUB*EcH*nr4Vxe;hPV_E>eX4>{jt4R$joJsO%4A z*z}96HeW6aCzz>+xF%~{1McOT6AsW%BHoYYHNQZ$Ogp9z9nRmggCT{#;0s*L%SM&_SX3UPcU>kSshwN88|c zMcw)*Tj8bf8Zj@$W0Vk?ZOfd$dQL*wYGyu$LtZ=DGZ$FMZd?J+l9a04qmm*seg!iD z0pJcOBsp+AgvqhA!eYHTNq4Y+8E}Kw5iJe8om?7L<-hjH#OV^%Fk}kg0RDW#H zN4JfE*FJ>{oVHAZyyn>InS!|DqiIU~fazdl{i*={p_o>gJ`0OhuXR4##V0$%>74u{ zV?S3V4ifb7kA>qS-#b8?)v#}rW)i{bfilWbLxnK*Oa+!Ih+B_Y`FL|AD_CDF=R=%xh6!m&% zR@)HJ{lonyJ9E?^`&H2bVjP)tDC(rUi`xVF)&2lzWu5p7Xna&EX}b-+)7ayM58pEM(r7`7VBE~P5eBVcy=jg2F)mFI zEfIsK8;KuGGRNp!jJ{rwi7r0>l~C82WcYgoyoDKOi>TEchRMIpVjArQ;VPJE-VWw{ zW796#dxfskm&aqIH8x#G`lno#kf{xW)pO2J=lSThtDz*uHH|(WTbf>k5sh94Xke1t zj$~c38HVmz--blD+k!GgE7q3qbUwHW69YBs;df0WD#Lpjg&l{*;0}i{(8^m89GOdS zAz}hb*EgF^2OoMR0tf1$SzhW={3V(2HGR^mn7Vz*M$d57mOz^P3gQqmouB?rHlLGWsBAiIRo~fK9 zh9vm#oWobX=r^zXr1GD4Ius}+g%@6nd>9Rmh_Zy5wtmGmIWcF%4Rt2$tcj?8lJ zix20UHS|}D#A9bX((}>%E9K4HowmK&!OnznB#Z3RgOa66-$I!>e}9;(o5MAu=@j^E zU0Gw+S=Tl=+^G_H^_1KK=LKaIT# zT&p=cMtxgn=MZ)gp@MLsGO&MZGTV*Ftta+FR9eEv~R5N5_=WqM2#W^#W=Qe_AM zgFR1lCLRrRB~ljYCNpxjOZXn622An-K~`RXXrQ8~=WQ@E$ywJVtI~~zM#qyTDBP%7 zVSfqUrf$k4M6|>+CxSQ~a80yz>6Mgl>_5m0;>;-ACM%GPKu{*F_aqyWgFB?p`_AAx zi_{^Qx#_CG*Cl(_WQZ7@KO=w1W5!D2;v%tGrGiL);cRiBtGuCYu~1^?rSEiLP6bie z<8LVf^~$6zfqy7hn!_TwUE?3tsZkI;3PP4Q;&>h{0Kt_Jq(N1@J|OFL<4oC|9hc3( zqwhtd#xNBAhrogy!P9%Fev+h+kD%v+iT&!BT@yB)K9D$mvQ{a+(? zMZ7f1f#MkPi=5JtWOGgs^ZvAE2=)7kzRm2j%eN5ha@zZysC8m1$*_mmwYb2VA@Qh& zDb=8Dt|9C^strf$^U1tt4!Z6nuK}oej1CK7xWk9IacsJuOx$NpBbh@Ox$8KY!_g4e zsI>;(XkW92uGOKudlm{8DpHu*M_jQioA|lau$|ZyN*(PcGgA>aN*`_OEl1-20u_H- z7#AtV^6z-P$3j4jt;x%lz?uJJy5zX@{>y2Aw9!o3M+)hkQM=qk?AuAvU`(cpQ!0PM zujAL(MqS%Sx*|5K+yF4JCSGx8D{Mx538_@ApK|k(z?VNL zJW}XQ_2xU)40n{&&29I=c%jH!G8Si)zl@>joYG5U z12SZFyReJ%O`N`oXeQrkT4?}iPs5;VDm88K@94QF?XS?qwR7)$A_XFzn4M6{zcPB1 zaIUEzgk!=V|4M=EnAfDW2G?Xyl~+;k1;*9&uEWp^j9Xw%lPI~$)4{vvVI?$veqD9K zw9##!f>Bk%W#o617ISHV#!kUI+zNGPZ>Dk@@ql7rk|&q5o+e*zb??Rs?$3126UQqY z2pA`a=~?~}YIBMtZ@BppN#3ZO*(6(q(0HwnfI;gEQ@TON99^i7^ew-mifg3iuA*$f zRbXM{0qRZ~qphWhMKr-YNBsp)-ri79WVBP9OY6oI0pfO!g~)#j}4sha9)S4{LNn6UAEV zr&A=o2~hJzv@T7jPsKBUaXKC)A_U7lbM zvQZaF1zkkEFabsYxcfHW-wA|(RH-Yh7Mf?-!aS33WCGTdNI{NJeZ6B+kT2;j3ps3o z);9S9nsNKc_J<^Q%5NQR51%tM=t>P{ZZJ*K4O25Gl6`9b$c9iUEy@?HTF7t0-~5~I z!wsRmACZxuFQsMPKmh9ViWuSSO+ORD6_>6eFjW8RY7>%l<-RKZpyQK^JvW>P@x<33g^#?wQc6?#@ z`|DbkRz(DNom8Q;ucPlA-nYSTTqD0SoEQqr2I`^XuYO*_A?yF3s8hZ$*hO3pb5?%* z@;K1a{-%iW+=X||aFv5Sv}?xF>pHQ%?e_FRr@tfBe>|OUH1lz;ykzg7hZJotIKcHB z&R0k4&UP;Vf^7H2fhr51kD^#_#>0C|ZuXI5r+Tl4OY`vyOV26QE=0Wa@It`ns;jUt z^Xl}p03F&jyA7FnU7>ZRv`e&N|H?^dxhlo|Jd#1tMfte)=g*aQQ9WJj9OxEm4Mv^^6(@_cv@-Hw_Hii?R=EpKmP7v1ZRsVQ_j z&ql>d6Ro`qDH17b;LgU!Sy7oU2=fiLS9wSJVHBU;fMMbeb7e2P5l4oqae6Ymz(uoN z!$ome`@*KX5EeJBxwVEHbVABht`ecl$`%uGHp71S@-@Ck3Ifh#d(vF5yO#(21xC6y z){+wp>sc|961Kgp-C2!~C^C4gix>|Civb&Yq%#+=c7>6Yl3k5fsE23lq9wsd(`sDM znYjAdis?iB^+|lpHC`+a9L6@_SSn6YT*(8NR1E7Km?vWJl(?0YwKDjOMip?;w*0j| zr6fj4Zn*0SpQl*TMn;M1gXc@blPSYBX*Cqn_L0ktZX17V!DGsq8I$B%U5Lo%y+Q3L zfw59oiQ9F|Yx;{V9^P~hyrR)<%#6%QVNbKANKQll8(8|C3A@{uGF*hVo`)V?{6CS1F@10=096pzB`v)w5J*jD&AcP6axG8U5! zJX2775XpynT;P6&i{F!pq>xtfydaG;<*;wv(I@MG*(wGKtmqm*hXG0YcWI~dkmw^? zvF@L2p-iTxAC$t^Zkc&a`IlveS}MNa?kBAFglMM(k;H8Qf8qrCYnSZ)hGx2&fPFaf zgE`dx`Ztntv1ztCk7@c@cO&x_7w-O*A)ExO&kHtmRpy(NoOWR=kSdjmhC_Mtb}?S}$ZEHpoZ=wKA+*)wndFAX7kbrs==oQ8{;11tCwP zr0f3p>h^4;m+3y3L}~Lmuqkx|n^HHzgGP@-c_2yUMRC7=cV+D;xdReHfVK~A0f=qJ z=@^r(4;3;g6D|BkyC)|(%|&`2a+4ZN;!;f6?a&;PbR?I^TsP6S^ZpNyM#Od%$zRah z3*ngZYsuK4KU>eD=fbuA{e}X78wUthcr%B)K5LDpxKWvCFo3s9Y+-mrq)K=P3&men z>rEh5$+YQWDLUf>O;G%4u=_3$2iOcvSLLy+UJ`TO(IVTga(4q8n5k2?a2b(+TF+c} zSokrqQx<`{Dhj8Cy5OJjt$bk*x7{ddx6BGIrs#I?dBzwb>EE?@i8T+)$r+4q%&!iM z;c=U0v#eCwvHXBrYn+tF4hiUI2mwBQS#E4YBH5f1D^zCO`Qt@%mh|Cj$hvK_k6`2K z^e!P0Kpf(@Ee&8jMB&(-#Wm*FLb5?l^R;@35Awr6FaY0p!5RYySFXl_k@}yGiurWZ zFThb_KjQ?sHT>oA;ZC47OJ+hA8j|{}@U<)bj_$hv<|Gc=;3P&rV3&mePZvbqrD}ER z+8j`QMn}mNnGWu6iZxJp2M^pa5Lj=%tGCBhtcV9Kzyjz7T${VVDy5$x0MNpOu5%fi zx`_na~knTph8|m&o z5BQ$%{Jyo$A1)WeV$Z(!-q*G3o_X-srNuw6V3~e zIRJ`5a0C2G$g#h7hVT`vDfmVKrZndwe0vt>`x0@~?zw0&uaOfBrJO#aISOQtq zn(xyENTHBuz6+~-n??y6clzLe#S(V5a=v025<`=7C`e>K@X~Aqr~0QC|6fXiVJHJU zJia?gDPHa91qxmP6w^UOO^~v|2wCe-!SW^ecjU97GapSlir2q(gkQ+ufCXB78Y`A}>(j5!dQOM}JXUCrF#^QWA{^`Nf~iwH*P^ps;iOMA z=@bxX4hS>@1lr9?1&Jlh0em+fbc5h3W>t-Qj{Cpz3cLPegw_S13qb7W=D7mm5bgU# z48IzUdSM)d5%6+yH()_}C2TP8c|c6hF;@*5fck5*P$373qe?)^`xoa4PNGH8rBT$K z&kXqa>V*LtM@ZkI18Kyc=pc;j^|bWD1OERj43~gk?U`U+`1B_Ji&#-K`y}1}2NA%4 z(~Tr^D3I1gOhk)ecXCp2MuwBdul0z3EAGi?k&(>(~288(A*6 z+=@Tkz^@}^NYj};t3Kz2>k=;#EO4)UIXfgdu7op;FyBLG&-^N#!M4PG4|6zL{YDa` z|5Q;DF)kGT=LkX~y6U(euIg{Y5nf-j#0h1${62;eG%3Jg`p+?SMq&zo2|l=W`0%cTNurdG=A&@T5#L&c%tVtCSeEpa zg-H4e?u78NY~Z>8scGp2g+%$EZ|Q)uwio-O$_D+zq10dkkGTBuEN_)*C;#UTYO*}7 z@d4Imqmw5-fySkVXd3hr@cW0G}+bekG%9OU);9_{J z%wPf0u=%^7E~dK)^o9HY%pheAXvo5nGz*4xK%z}&bXQ$z2oawdQf<*71XjdM2IVax zhe>&gUiUo3ke}q`77acBTS+UtUY$;CMMSUr7)ztU)Yp`H5Zy=m+7DQ^dYSA zK8hea1ALAOeCXOD$uL{VD41a}G%c1s*8^bJLE|XF7xw7Z`3^BRC>-W%Xd(#*3`fCl z#2~wG6y=(xrCL^%8tMPHJabl9j>AIA8s5Daip}`Apgwg3p2YBVZuIPJI;VHR^#tLX z|Eu3b5OBCnq5qEiO|nR2E+D1>IQTJ^XF~qeT8*9Cp31ZR?^L$z* zO&RDdssOp_#fK`%bV)0t_BF~g96XNtUy`WYw+R2oaN+%_1wnbu+dSJ`M?ikSr|dp( z?_3-G8lVsz{vds$-_$=vk7qq5>3iItf}Yq;#UhMP0L*>}=QP;fiXW5&xaVj!^!G+KeC) z&r=wZ+TcmM``DIuSH_RYVPk*=PKnn+i=L*O(nDve5U7uRr;ZG6>i;&S^nWxIw9N@9BE*|MA98HU+2k+#_La7!gg6bx!`(rcb|-boS)( zc^P%&A6t6zJD5b*eJGYIID^!rG)}%bJ@SL3j0H71pxG58dSG-UF16Sd)g+q>1KqLO z_h`_CeY{(xr)oIPsdt}+yeNg2@#i1ISc zh!QXIgIx8mAE6E3RQ*Z{lSqc1%Aca}vjYs9vA-T)?Pq6dfPy5Y@OIE;O5Ps0mkSl4*w#U8!Ny7=#fxGglHl zLC(d0(}t$2Xi)Lo0@Q_c{S29&SgBbNm0y4uW)6j& zH);OPGzPKy@kqtk02Hu@m+;xP=X1EDwCMJNf<);{)qG-_!2Q= zpF*v}dAws+@L7`?Ia7*VgF@5=zI6DYKcf}~gKxg8h(SMab)MG_dc7QS%){fA?*7Lt zcdd&Ntk8A3pmczwcSs?ukW3K@jxRMICHQ*bd5FsP=}w^O0p>rN9s&FS zFjwjeb75PHh(vM+*;xZIqL1uD#1uzq)^IluZ|!+p_3%ZECTAB#D-31L!(g!d3Of{j zXYPZ|1s*z9CZOLl$v(4|^!x{V17ePI@AJ7d=^H*~QaM01z$@%xXmJ+U0zU#cpA*Q( z?xIGKFo?aB=fvfOMzc4Od*MIh7s+UJ^4uotiiZ6kUghe2_D^45~{@Lu@Jk z^x9c>ApvH10FtK~IwMx<(#0oHe$F5C5s2YQAciv!*DudVk7p+l{(!|YHUOqLm#yShy&lx z$+~qf(sOXRe_y=u3O134CavBe0A;JgfS6PO)B@!7BeOp4G&5Hd8oZGiofW~P&qTcZ z?UK)T$NSB32yF6dHJC>4xXZZE4cpXUp?D*d`4062rx{64AT#KI@XLeP1|(!UkEYfo z{}Apt1IE#du$JA0QO-+)B~{5~))69Dg_7tBh9W{Q{>wfI2U`YkjG^2nwBdpVeAxEw znhl+y?zBNr0<_drFclwlKDWY#huAd5J2n8q`~ZaiT-e=xZ2~a2ggyJ*J1B}g& z3hG&cm(M`D&A|sztAExIHjHSRA2L9)Mo6@#B{%Rd8|ucPKb+bugFU48W9@v8lnL>- zrmqB|8T&{JL!b{nJhA^uG^~HzgKK97s5(@>NLm>)MAQ{RaomC}Ft~=YR6mG5k#S7k zioBgv|4Sb^Ls)2Wt8AkcN~Cc?xb}Q;?EC7VooL$9>R=G{Zthl9L6YESWlt(yaiZPtSUGn_ zvngpE@0fD!q@i z+zeMVvH|t5RyN-dU}( z9%^TJrI@ij{stuXVC^gw&U#FL%;#q$xC0)s@OH8>m?KdWUh4VW48{JjfG9sAQ%<=x z_IB=aT}XQu&S9asin~Sxw};2l(si-~8uzfUid%s5idwDBWymcjgorBEnz%>=x4SXj zdMFyL-<8YvC;6>)c<(Ja>v-~m+%}H3*JN-$9vgg@~fELd8Pe{6^O$MDw<^Gu~_>Jx-WnKhSM$UQo&!d7r_#1{h20) z2VeU9a=auNP}mym2qS!BQXtuYUFbl0wlCDHg6GloCMtjCkj#M1B((`~R>jJpSCzo+ z*bTq;Sg#k%{7snNd5<&6YPd|O!rz6wSH|JfRfE|xK#pVOYj&hITddh8*%3|LZZk|c z~B08h{MDb3tx{KvvP}{yEY;Xs^|xCPR||9NlbT zsfQ(^xJ{k|eXy=FBq=3|m}0Vk;OrfPi3;?izKc;nprlWnmC_=~!SWK7vu_cj z3OR@RRvbZzCw=e~TsB9>1d6nS9HbMmaAp%4Uc|Lm9HGXRAn*|sXnh#PEO3cMKT2on z;t`Yl(9GJ52-IWsVVsl3?3RnHD>E`F?*XsUj^tODd|!I6nVUyj55PQwsyDSN9;2q# zAj@T_4^nz+{i=6iJhAiU{ezri*`t5I=hxy!0Sy|b0Bh_*u>~h4c}l!i(6o107ALFm zb5}qu2h?=c4U+Oggp_7@SAwWq5ui!bFc0Ed_MrSz??eH+DAiush_2Ol0UW!9oH?8n zMC+Fx^nlt#;3Evm^GIt&EIayxps9Lax%DEHsLtxDow7RU`-!;@PJEo*TMd^$6nQ=Ei>3cnFoyz9>@E7y|gG#7s(Pi z8sv+7&2GKdwkQ6x{xc-K6Qsv0@EWg4_l42wO-O)Qg z$*-`f`5G0e4bPKWwuC+@3@I(mgzub9A3Xfz+3(tH((2mw|D0r?n>GBh*D57J7nPFS zhvKv`pad(uirVy8&A4q@Ec_j;E9I`%KhcW$-R@32iA3K`H>5aSzA5Ebm_Xro^qM<% z$MP7?g`wA|%(37a^W7(@qc9;WsYnktT-l_Hfm>zE;pp()mREhyTuczeM4-g2{7{z4 zout#G1DE)JP--2KG+fmhCcvDS5_FrE)*GTsKh>`?*zUz=#=z4r&sg#dQVK4mhoj)z z(iUvg!R<&45HR8}vz+uS^0!HLFnnR&nc9_{>y+~dn#(L`iDq1?%zuF24!nA>qOaiWvYJTN8C10f zZ1w+1GtOxgX$`wYc{#706}p+ly_Zz1Kw)AuG1NkZJyO{^7nDkC((IsBpCZjraT3qS zGcwcxWViyz=znMpLz#uI^d(6W=LYf)mp_NpkMjOh(xLImzggn2rW0z}^0UUk*I&2; z*^JY4#vnVA7{Pc!%`~j{Ndnp7?wfbfaqyVEB<1N+dkphy9-L4MgfDQ0>?KUZs+V6%gr(eMUI` zPk-?{1DKQB>vH81eQuV5i*_I7SRP+rDw_b;-TbS_Z-iZ%QH+GNF4zyJu<5@c$T+h^ zOykfyT0nK!{_!$(7BEg9{jaEUChDnMaA1T1Ziyjx5oknV-K}ACg4&b3cpruUD*k z3$Yj5EDPV&faYM*y&K9hKB9@g^DbW#(Y4;+pmWBjl=77G0>&tQi8rHcK>u%nL*pv) zTvt!uWka>_83L6xI%FNuhLqT;<=3U{yNO&afR#E`M^J*4|NQH;{b3wG(MM`@s8^Tu zLMGI_h-#g`K~x+bX_!e9HeSP@HJPy2_z=C*p41oYXJy6~7(Gi+f%f=KP_CMfz;REM z(p4cM5*qwV2`Ji0I3_8eA*xttFO!P&w?b4k<2{PN9{2wp7bh%a zOWfCK`cW|Va40{1Ai?FE@P(PZzx4ka&8DQK087~%gr z><~5>_BCaOiN{PAk!hF`v{^_uw|s2w62 zEoji~i@JKRuWSB66YK4ug|q;WbmTZ}>0SAUKjA*zwD4a<_la z1AQqZqA7Gn92oPRYquZ*VL20FMUUmYhZS3lL>mk=rZGfJlhkHcIOf3MR3c6wD4f$N zxl1)+&CGXxMB;fM?yvpUg4J|jaZ=V9$NS$P78R0{^8E+ub{bYCIR`_P9MP-{<&rv1 zH!lv0pC!_JM+>CNhcY80QfPh>48vzM7AL8;9z5gRy_Iw2B&+?w`d zc@`KGz=N_U-SF<>yvQe-dW{5Y;yb^mCIR$TMK16AGXPYd#ho?&fRJc5vS%?Ejf; zmKTe$Jolx=Kd5;^W^UBrWkft96H4(@N9D)T_MI=uzfo{#Ag876S2XcE)i6j&puPaq z?jtVbE_PRsGW2DD{}rlsl!Yf1H4yF?fi6~86~TW4 zTdk9|5o!6qFs}g`tgV-O4Fgd<_-_nap@+R!!?g1sxd08gj+c!d*&G_j1%z72PQxGc zQz^#-J!by;tqb)KVgo~aM8#Kc?s~gA+Te6WR-=Y4R$yRDD+_Lwl5H3=k~4reRNcdX z0!jeG@{$zjd0leH9%R6$|5D9sXhXnQhK;eV>|%fykZHhhYs2KcRemRoKK?G~M*p%6 zFn@4*9`Qw|0`q11Md}<^MbWU3#eeGrf*NMXd~62A|Fwx(a>MMbD-9#Uo$k(!R?*xo zB?o(2M?KCdUrYxq7<5eg-ydE7A{>+^JSnB7%-CfO`V_hRyG8x}hSC*`tiu`i3zG{W zNYxWl6zI}|%JmJz_IY>7p@SyWpr~uF#DGzdcb)ROM{9?>DOO+q()}BG9qn!chA>tH zV$a?gnC}BK5SgM>ze%xj*Zv|5jzYIg-%fkQ9$Vi<8gUV`knRCsJ=+2v!yTFTVemvz3G>e9ii~2G8yb90dVqXj~jVjN32_x9>N<`O;H+#NqndfeJg?d&s*K2^Ji-|UkL&t7hoQKI_H_j0| zHE3`+7cc=5>sG>4I?8|o{LIzrdZ7&iIxK{e`Yw1T9dMZC4YF>WCu%@=+%1ebu0_O5Ym!ui% z{hw`(WX7e|3<-G1sYbZAt+3iZ{mYpj zV8j8UU;!Nmr@PH!zG8Hv#`w0`?)56G3) z$C2jN;(qBKPJ&aeg~iD-jbmsV5^aB-3!^{4xB=cKjse;kK(bBTNE?r{+6+BvMAs~T zO|8t1iIfS|+&xrIIA6XTtD)Hnkdpeqeop<`GGLac~un0T?g*XYo7x9r=yQ0 z_2Av??%ET4;M}^>72Ga-$?HBFz=QHk4r0AQ7 z>Vfc$k(^{*+W{oN9v=qRH9JnXfW$m8M&4<%X5;%glHoryd3tz48^MUGuHSka@IMy9Mlld zA~d{_swL*j(dsFPl$5``#R6wf3oul9fk?Ff?fxF9j5YwEVM!^1`XY@bl{|Y!jACGX z2z~z9PYLM1L_`9=g7Lo9|3U_{b0TGGe*;X>izLcgZcYIU(;#pY*XRGejl8_ zO;9VLdp1mSo%`y0A;)9<5g66x8q!HO8ee4%d=OnD6yU6@_O($nuN_Qo8ecmD;xeJ6 z^r#R`WTLcmz&8T`FT}PrWYSrkZ{hw`pxf_L^${*b@l#e1qy)w@?N$h(7q`KnE_$fU zR3^jzS1;RzAwxS8ht}`xP(XFq+PiDGP)-0E9L1?tLwSn}5{T#|j8i}$UA%D%mLL2c z@{mWd760ugWRk(ii@o5zMzdr&a_e@YYWPSixpdRrsw%&e3VrX=Ft({{OI?Sj;#GtH!h8#)Ai~3+4w+9sl)0K zXhXr@l9<34QDau|PiWi4!3JDLyDf#Sfo!ksW!rRHeRIOaNskXSR#3y9KDu?y z$#Ok)+Wp^XP*qfZ-$uEeV}6yjU%mBULPr0X9~P>_o*miGox4nJS%)4%$yTj!A&B3-%~dE|K(*r+iX{Qb%7%IWO(g1t7dq|wEp z4XsQ82_f(hy>Z6bzWTH1rLPQmk(=!eJw^-8IFrTY5{6TLzl)*%Jcz|=?X62J?T$~p zr>gmd87%V{Xhl*1HSpkWduA(EWuKW|`5K*m>LQ|WptLMEXQ0E;_U<(@H1iv=wFXi z`D2N^9!sm@^;E(Mq`7!dBf@PRNY-BT$j3=|3|=zv5rqgT)57zGN(WLXgk?Etywrds5G0hEERG+9H11a95=EMiIb^6j?kR<7azzks0O?F zzNH`L*xej87{;XRHQ+&XvM>Non7{1tEGCd!>q^mPM29~_KhuN=5>tsRs%8OrTS%w{CuSz`oM39BcR74O1y_hb)0I~CVId7k;867} zTq>sV6!~9*acEbq_I?3$j_jC&cJ=g0XRd6P*BO#TN(`BqcHjQUh!J%QpqO6skWoP? zY<>4aGLpb6Yfl+VdpjX=EV=pU#cpG8t)fKURQ8!3(w(sM7qzvn z5GJvo2?~fTV&IMvM&hkjFR%`~a9?8X5yE!30$K9d$ zQ5Yil=J^T$AH?Dw*yTUp`AR~5zPOY&NDKcna3+F{Bz|f3cM4g9e{51jY6dW4?o@3@ zgy<$;0y`yPNFkp4tY+rz;YWsg;I7fXPErREnWzc|iAV z#^C^RJpnG+V26H^;4A1Qeo&s6e$U`d^w8&FzWjVcA@1x)munLfY|zQ5+kbaE&^Vgf z;ecCY@a3si?yaoMm6{{9!vEc@3OcyhF-YW*v*ZJ=u&@IAZ%$zUP2vj6!KQSl^{=Hr zpCH^jm+ck}Ydn3?`uQGE)g#o)d804v0Q=Py0eS0LJ!&(jKbQ|bMV@#UFFRa`d~F)a z?u$>r;eh*4o50jgtO>7k$!N}iA{({4uCzT7Ckj~MwkPh=0&{BX?!?DSIHL7(weFxY zcC~UF8AgVQXgY|U-rVD(W+6ev`D9=YZ#?1(18TTF__ z2SBr$WJ*wQMu#(+WTq~N=bST$b~{@9lNtg@1r;s`o zxWCo$yT>nLSA7$t!4GfBdrO%J=S`lso#@PE>!xwNkeR1Uy~PxT42QQgIg%>=dF zv^UFqd}lId#}t-p6wYRy(J*J=QhHv~54fUclAo8^h@zWfvDd03AfrNu@nWm-RE zT2KfzSZAVVpVS2eK%)QYIZMJpHI~0Mcp)M3-%2gnIA@E>i`ZEmG#}G-cN1K+9dCWJ z=FYe>XcAySmzYiLMNsL#c?bKv_=ArdIu|B0>^8N0SQfnZfAC0L}}R#DJoo7>$I{b~$kXl3*}y?=g3_|*-A;=^^Mc63!RFbSX48<=IpMwC2nEN`v`5=wVUkFRps+1U*q z^&gK)(?lL_xFDU%aS4PX?l(TCJx_g`kHoLMcf~I z267W}*`KZtPxlhG61J3-*nz+ExVb$i?t@=E-P+3)@pQhqzur1;a62nyA9;%N=)Zbm z03N&a|MS@5kG+~lIKcCP@_@&XqyKv{lf##&OP zwbZJXmmsyh)(7RT?Ez!{A5==DEGUCnlpJ$d;UzIwN7U9lVS+`-9Ir%?$TO=sF50gg zo9W5+xU_JgnX^^NND~YCr>m*!MlZ3 zwq6$1bJk@|m(@-TTVVaR?S^1pA!3DZC~l(SjXBiTKt&cGpBdlPmM|rqGNb<=eKt}f z$eSH>*{qgtN{M2Z;u{RgY)PuA-n3AN=Gcj`Ha#d@KNu});}XF&JA=lSpTF*1*`X+F zX4>jGMId_kG*PITa>$Jvnzc;*cD{^G%=S6AI8sFUG#wy361kF3SB}0p)3wiu_BZxv z55nzxl-BUMehiDwbpJTMHR|0j0*UW3Mr#-AJqqZ~w4yV5oD0I=?mG|VRu$f+Ha~jB zhY_eVPxdorwv_2( z@2@J#SHW&5;74}efl->Qc~7MsDCCs_vsv5WYF*#qxpPi*Eu>`OJlEkk#KZW`Xh4kj zuJt3`+Z}mXIJNZTIXSD3HleZ@g;|Br);F9F(9lE}mG&`S?(k1x81F6y=~B|N9F~v6 z@+P;CwLi5x+9+EK48yMF!w9fy|XLfM&;C8z^7{$kt5`SEoV%kQG}!4KuQ zefoZ0T2GHr<${wFedbMyX|o;=d5&7SAS&)A)h!g~6VIkA(cxBMxH>xLH&qqI*M zk`3w@goKI&Kg4L%+{=V+0-IQ+d}XDVC&9namA;btl{$NJ#Qgt1&3H;ZyRi%m1tkc^ zgu?p|JRgnhO-;aG>_6F4??@T}pUV42_5bboB@| zm*b8kW5U))v#>F}+_b3~Oj8q+*r-vwqkoKQw#Ma9vA8&SF`=#Iev$Tc^k{QgwnV|x zcu9;Lx4G7(;-rZ#S%tO@@hUe+0+7<)yz$eG2o73ZQkEUCf>uFc_-z|+S zDVFR<8p#J;`yGeN^XrA7_8j+DkKY<^TAuV<9uLxV4aj+>HSYEb*Q*;F1oaK{FrLn? z&lZp8R}*GCc5SXToCp)9H7J~%8y~EmZXOCl=XItdMY=tIw=7ym8az7KPW2=|94~)O zY+AH-UZ?QTUbH>*cs$LWyvAgsc%l&Tm;&_K?KrOQXt^?K^3*iY9XXsXY@8NZVlf|i zRO9J*IzWBmci&pfcs%qZ->x+vWb|CDGm>C#oNE!uYO3)r^=#oUI<$Gbfqh(WH2-$s z5B~Buec0YOxoCHxwhN}N!rS`6S2EAWYdL)RkEudg$Lk~d$3lGP&oi*onQ%?Z2rLcHd}q8y_+DstRWuh5dUdtFtu1qDp7%Y36Q{I;3n z@H5g-wfu{gUATua@-BCp&@19g^7dO6-PP#9uFOA=Z*mypmmb z-;vR*<;vl@<#8Iz&)4S_?>zJ=O^EGNoM8mePl*}mk@w-8lvwqm^9hpZ&FahHojl2& z2);_wz_a?2vzFam+RIoRY7QGFlp7{o()|{VV5Ht?DENp(W@kaJy0;QqX*2S3jQFh! zC!{}!k>>C8$_HjJIyHV3`H``@BP@%n@crN&V_^5+fo#!YP2MQ2II zdU|h-Qf~KXr@i;?-~tte2W5g)YJ}wziZOBfgj|XWiTKMp9i!XT7CAOrd2|!Xbpv(3 zxb;FnM4EG;LU9N1gaHHT-%4G<3R`B&lJ|FVVjg;;^JV2mx02p0Fo?~1_KO=2jwMvv z$#~OUYYhP_z!%vne2QmVS5E7-L>X~J^$9ZVbIh(&JaDuqO%C2;>)GlINIMExrk1dt z(?B`hgRwI1baWR3dAIrPMO}j3VkRznk5KnN+3B&A6e3Z_V^7PL-YpiVsf>U0wQ|9D z$D&g*E-1g_IJVd6xYqEnbydn{V>@EaMbjG-R#!5hUMgXanYw2IBPOj$h`RU77h8g{ z%p1K@>o#nDFUplb7~+V=n(0(ZcCB*Y7z3C^wuIDzG-l7w@nU=RZg^|YO$Upzc%z}u zI*~3$8#cJ5j16Z>O{gusT6ypO*A%wkqWS5H>zw8mm&RTIVjvQU`x`WH2Z$TZ;j)b1 z-LZ!l-h!7KK1q6o*}u0Gb)!|vLJy3!kVCH-$bzx%e4Zgr@BJJ#0`7c2E!jS+Nvx#Q ztTu2O*JBVDu!>J{J*f%CexihEHGl%4&DQu8Iws!8D|CFfoBi**TEg|3S}-_=RCAP!LGy#O=su5%UW%Q$-rR?295@zm zo`XdZ?ga8KoTCpv_f!hQ+&(K~nM*!yP5?RbI(|1$kzl(R-r1`NhlY+RzUrdi=oKHJ*c2 zesOt*>JrE+r{vk(TpfKs6m0oX>B%^L$Y`&;_*l5iHOzd*qdIMVhr@UJW*v1IRmeK3 z40fD7szRZ+*i6Ea*wXP6@01!G*8m!MqJFrey`fwo?j#j?VnzdPehG6_<|NEbI$2_@ z07yrPQsjMMXx8LSYC2+{->zFX<`h-rn`SIEsy!?3vv~ska=o>=eMk{3Tc=B>;Qu-6ic`Eow(EvJ#5H~mV zL88xnLu<{qBFP|4bEV0Qa=x|2K=~L=fdD+QPLgoV=vV!%3RV(D zrrifoy*enE+;}zKfg?|v%j6m^e6-fVajQHyWhk16dJhTg3fD_QmDOFJf^f^0l7j4d zaflx)-sQk}-;bE6ZMl2193TkmrLLH_Rf<$HHyO!1!4;Kz#Zl@LpX~lB!+C8-F^%bx zBjzN&R=V;d{p)O)##S@d1iFw-=D9su7V_y(bHm#{jS2Du;$il~cN} zKDuEp=*zZNWi-6~s#2qxYt#G2K#`re+bLvs?OmbwZh?6d{O9p7>`Bw2$sxVyn~kwH zE%8bjFwV=k^Ho_8Y{K6)2y-WPU z1rB)HDP)Nm`~VgdRjVep@1dP67D;*vgqJDz28!)2=p6k`yVoLCmdiw(8@=3l!aulPbC z<72{B&5@9!2P3IZ=pAkiUj&zC15?zi84x+)t`zl%teFYT+?HPrHD$9yD-jVc)FRwM zT3U-pQ9%+=Ut-2in&nQ;@kK(;NGLrukJP?4?Lef()6wqRx16t>QPZfJ@I~X!5;z;4 zJgxj;AvH%oaLW{h*K_ueYO1`r3Ch&rnvrM>hct~ON#38dHuREcZe_o+9?e8|tune~ zAzwtZ=^{jN*uoGOQxAcWx8$u?@PWUvBX> zxax?st2_b>wVsd@+p=W$`Jf?tdSmRJY40FI0*`B?xGF=z-JP=>P=N}sD}D`#W~VeE z%T`e(WKg2U;<3srVMCG+dJ%2(B05-IqR_HgHKAOc_eyf4?AQ!r@CF1t^Z4Z9R!;oa z@zY1MyA!jdFRo!4G03#!vv{W9?+Pb{_}9AOPWps!&iSL}_UHKoGD_eT0)pF4aSCZl ziTN44fiU>uwtnC-fIIs+*-^hD^?5!7PK8d@zikK{mENW~PeOBN$`_Ws+)6-&$-=*V zCr(jo*z2Y6+immLEf&%wfXVBI+h4bJzvmNwv}1o?_7@hXNLS)nf12$6ZbAxH!y-b; zx|J`vl{q8+%bLsQIINu2LcahuWx1gQd;Ctzqpu4#=)lVr zmj6Ijvtz`B>T{YGWn-V^z$z9&%gqd+r$kbH2F5u$Ji4@Bb4YyZ)3K@s_V!VLYR`#c ztsg(KBhD`E1l@_EbGNGW=Y){moLv3@GTCQ{kieMLrZ?~#7h}xEnu|KZ9VN{ulXJqh zl@|ZZcFol}`XZ8Sl?Q#(0tbD&(1+XGz$^TVx-?W&ZCNgW_WBF--bU-(1YC+V%#>!U zHf|zfm>2iDa>yrGOBzFkDfE$J#acXd#v&C>UoRqagb24vI~7qFi%J-E69PO#$Ctl$ zg6psM;(k5?6+i&3b23H>Rb2@XrDP#XuR+mcA5qyABy4~y;fr9@wR|YlCG>BnDaO!0 zB;%KH>e9LDn7hQ?bR61Ty`k9Em3UW4Im!%I^v5gC&@tRgEj%?C#xl^Prj^dh99i+( zn^-Tkctb58Q{=}7!LDA9?JCwbxCwegp@_4;9;8?#UnO!=s3uswKdH8oplc$lPs3>5 zWe)(sk3+8SZ(J5W2fcS4fO0B_g4Jju(-##(MJGW|B@wdg5eN?a-1wP{x6Z9H_Rg$O zKRk7L0%^_K!tGJu+KelX3b9~7GvJ-s!?m6sbvic`cYvw}!Psurq-~HZZsjdWqjLLtuJu!n#kHX zRkR;vM`M0nh%}Z)0EBv;MCR@mS)_*KUWTEQu(vVhvBO1Bg>bF~0+o{AZXaByL*Lmy z*_5S`!HQiy=gMNKi+s|_XvpdNm;R2$T*W=>cK<(uxP%KZ|Hhbl#ZXpmtx8c^yIv|q zy6%$Hsbl|}qr3WtcT!nGDgA5BnLJ_B;etr^*NM|O?j|m{x4p-gEP4ugDMC>cmiL}y zsL0+SHvYl@Yh~P`(M_b2Z)l+f_lS7Yuxe=jq&Xn#AU%_Ei>iF1Lcr$y$2>Q6P43P++Ej&>S0eUIe0L;@pu6|9E~)3eQp?E?sbx?%~%TFb(%$AKB+ z4b%vTG9Y~YQL_!x7hVMO5}D<9cvIf6j-X-LaK8!QqebU%b#t_v=T;#P)e zabG+JJnTV+3US{C@mpxvopN$g!J0H&mmVvq^gbPdkHqh2-XDlQApTgook7+YbPV!r zS{kQV%Y5_|h*eiNX{Hi&`SJS4sCRcMlURl!0utP^%@87-C%lwbRISekPL|)~l-J@Y zK2Ty_zqZJKl`>|dBf;@}!QGc2&^qz*x^EE0UPQqnX>m~(^4Ux2_KVs>%7n(WkH>Or z10@X(8~atMt{FE-0R3d%fH2+N_kHm37x5JQ+z0KgW^0D)n}X8r`LXNJm{vS<1QB#^ z=RqP5qK5Y@8_~+7#2#}UM?Du3b98cUGRD0R2Xz=)L+z!-?^uJiajM6fIrN!w6MHFe zsxK=IC}cz`cNog5=nH>bO3JQyaI80^LRo~@M?k8^>@LGf9|!wx8z?+<(fEcRooa=K zU#Uy5?hW0#R2o><1kTPcI`KZP=1#i*s`{;Y8z#w`we3CfaQ2sfgG=tZ8h<+YxmV*) z!cY6~-gWV6)9aJLcNq)x(FXkKYF7JCuoSjKj&Lz?;rd(I)8UW4tLC~&*uqz(M3+@s zxdfa!tJCVb3?;b#q%;gSN2|yfj>t`2Vo?CjL-{@7r(~j4it?VT>*NzJxILos_{uwy};a%!I6C&AtoS3MpeB z%2KvyM2L(nktJC}g+e_y{l35V`MuBcAH1*6C)LNe?)$p0^SsXUI*#K!Z;XjMgZN}D zn?JQ$vrxr{$!K{}5OpQz`zMUyzQYF^TRRvmZ_g-At3*YQB10W+@rjE;M5=CWp5_O6 zY-x&aElGr0&*K4Xsq*%cWkkh^!LQ7H{#E^5{-Y3*2yoJZ+isuqy;05x@ZuCjgecle zaO3Oauj=xFKlsYozI~nOxUr;ir}%{#aQmv+o8zypQ0dT#)zxrf)0Muor!CfZCvH+) zPcEx=TKamHogBIcOZ1x6Ya{S`D6#)cSmn-qfn9!UO(~?MWvP9fIjmD=s)Zmg?FeuA z3sx4O<_CCZ`3CSyzhjV|5+|e1tXG5@^ zpOQB1r0Rz5lIj=VVdmT)TMqoow%!1)aKwai2Q*Pf_{=0ELvnY!iT8&8M0WO|R3w^8 zunVDtvR~ulbqC+*kNUU4@ikvlHJH=ugvSHbGKNY4-8X#LJx@uIhiGp6KIgX6gnYYF^}Tgj((gKA1+USz!H^3%4$ThYC{8B zb4c+PEo0Ur&;(77s*cPQ*;u$s^KsdRY;WX=6 z>$#x6PdV{BX2Ms6p@rxA>anK5_ z{fiQ}bTClW%=!LppU5xD{7Ct}Hycf`PrA{`Hb~*7W6Y1)&4?qJw4H^8oz^!}k53kG z=}O0wZukCo_}2`*Pn-Va=2aBNppuQZ*=uEuTq}=n1|3JSFy@6J{0ctGPQbB~Uo0V* z0b>^BY-Nl8;uDv;YZ%`pl_oloP%srv?*B!Q>RZ9B&|W|V1Oa+ zujP-8()f5a->>>^hSc92z>SZvfkml-xfTfb|=!jgAop z=AsKxU6Eh!9#IVa(e1uDpu;2qY#}9%=E+-28O67P2qydtjpBq6Df@wNj6&Aho=goC zY>Q#OIZkw$)FP-{uF_F~?84$8RbT{pEtW{NYLLHuyif3mPoJd0j#$W`#N8w^B|RnG z-r1&_6xpf@w8km66pYI6wdj6ojc%EoF1q33SN7O#FNC2-SHz9AImz~k3sH1oYBlru z6?OO&t(*V|@U)h18IyaO7d`m#zaJLyPf&2_TevqfBQh2BPQpRDk2SlQ@FlTuq_J$o zGNW=9sP@c%W5;G$K$TarUyb6kV|9~F{K;&wWeRL~EeZSRNd+u1B^U0&M_uaBiY4}F zsdQdbISErb!5pm)kyQvY@c@LwtH0&rOB?&jinf0a99lVq=sR~Ef_G2@X_~s1&MtSp zvB5&cJXrB1iJ#ZvZ&qxu8IbrO5H+H6GI&pIl!V8rqR2fyzT?t-5)3!&byGA^)}@kl z_WS)&sax@;68Cm%lEEB#IdEbgJY9a99hB?7S`b{I32C{6r$+F{-o(z0gAw7dGJ>IJ zaaeC%O-5i9>3f6`N}#euEK@MQdxH~(8Zi{k+YHI8%5j3R^M8c1&8IH5C z&5xG~8;p%Hgiz`~D}2dL|19O7)k7c`n6JwEG>Kh{b`)$%*2M_+*n8_>VlEppG^y9| z<~6$?;0W`97N(S?4l3~haRmt&h$@A9XFI<+TK_k`nOxv`($-F1LMfb=ST7kdTTj1v z+V^`Y^dJJw@XxW@Ay;w=Gq`0_yWI`LjT`Eq9R|p$mE%SC;%2~AB4%WB#KZ^90{uJ` zI)LG@F~aZ8Jvw9SEw=17e^XIsT*GaHX0Gwrg?Pq+P0SmY4wMnHim|$B)&qkckchRY zWb3Ns5D?Q=s>*g#N)zRJ^MQwqZ%yX(?;b^c-Z7p_P2v3y`p3!3t~Alb67M9<7#~LY zddK(Wm?865rUSb)iHBsLjSB4_`mb)JX=b+YbqKk?liWUOa=K#uz!T$HU%O%e_t1S6 z9#hZ8h&-_5uhcV2eQ1{YBfM4pM#Xbd-kRgQvfe9hsr@+CfI|vVCcWW8;4M5y-6thw z!){OXs@~zozD#L$TL!K?{bGPrRaB>kf<>I+GANLn;Pi~5N{t^4X{*egF=%r{7|s`g zy(Zz7`Wk1IJ}gfvQbyjK2ZYd(jm!-dbvFrc9aIMOFhkJIb<#F7;Ue!1@bAReIAE;J zSQS+EHrHiOIg}Ojng+=;#^wRT3-(t0a;bn($)EhTVW&4 z$c_GLcfZ2!H(t~CGru=kxC_)cC+P61P4o37b(=}~pZLCYUeT`sFAfk~Rn)#BBZ~^7 zxSLdx(kHL=G$n09@7T}C3}3rCQlgutK{HW*{P~T|>*=#lFw^ICL=)Pq{%H%~8l4U> z&*xJk{~^a#N{6fC?jPCjtBoHe=01NDblcPDEEPefvPAA?IQ)aw>;8zFZ*<=Juuv-e z?j^un7;|mTlEc18)g||%ty)9v3mR`Hm~`*1yQZfQqEE&x>S|W|Sf=Qt(iiD@dfKw- zZ>XF6l78~t>3|%Dz0%?vz~weivq@oY{-|Cw@8UWQb!E3ufPKN8NbZ1c67`OX2Z6|` z+t%3~(zaQV$@;7l>cIrB>x+_%=OF)tlYRd7cNT!NDdo=%a7t@g&}kf5`(5GOhLeSF zj*m!+sOW72zF@tXaky$c*hNm{D+=0eBZWCRoD&76322|_VOG-52(S4SuVO#&kIMzp z`~}kC#oII&tp>d8XJ=f$c-f2K9xFIih3|r8HJyqZ%xsjni3%IF9h?fqcl-PR^ZzX7 zUk5cfi9gvxMgRT z0?D7E^>dnq%TS#T+-J!CdPCg^+h+W8tX=YD$xF)P&ZP!h%WR;-T*hOhnw0D|3r--> z#<{fbiSVN?HSc)r;x4M1hNr$?{VC@{reLmS6~xeZi~pb?E&Q2xaT3|_QQo2xbECQV z!8*8tp6kF0RS8=T7q#q`x1)-wr@+p=(t^nq?!_=5Qt-mG5eVj9Mae;lt z9VTsNu*IAl&OWY_-4iCO{kkxXT(0avD?Y_Z}};LiQ0?6+N5A+JeeWhY7=kTA&Z+~>H^!#5$Vu6ZRn zOY?hf$i^CA$%#Ib$|XOnVPv!NF_a*r24e9e6$1!N8oPd>hZXd}Pj)HPf&nZ#+#6#P zyafc&y_(@eD_x69yo+#MayAGmm7>|BHLo7&Q8`D;lX$6wX=5}D1iIQn&im|I zkAk>!Dl_h34b=vt;%kH(PP>Y`kqtCc2@np(7DsbHcTh3sYp#-UuTW_V!66;Sy144Y z>RnaUTh8`K)k3N5%TA3DFj0$WKtO!?J?`5gF1LgG4(wGiw1d&@joi&u5}5n8wlA9% z0)Tu{&W6LoZpC12ZZlDbdo00i-Le&k~L*kV=CPEygG>TB$jxG z?IUm?@NLSiy@zCCAzU~Qp}v^~dH@Jlrr=W9qBH9bY?v!+K!U>oWcQyOeW=E1+hWYy zVu z+b$!c34vTdb{;`&dW*4OY{I3RGliYU?mNA?C@*Y;E0;&@S%O}ZmTt=m(~l{>7JS>X z^BJ^BH8ag&icouBBZPo8g#69DEOON{UBLQ0HvaJ0mg-J@)^{C`_#4<`+tM`6!c5N2qjN>&X!(;ktqifm za{`#E4d8qmwZ9A;+1P7;d!)G|)i0UlJOu~wka0DkWZ_#GZ3^m08T=>*HRcm5EkD05 zpfT=v-LhX}jFNlwFBi|)`c2BwObT)w*LZ2Qtz-=0Cj@SkeA@O|C3uN}FSP z_6!Wa&5QI+t=Dzk=@(CC3K1kfXu&;rf_oq#yR>M|(-flA@Qt>oPCtIKd(F5pIa_3v z24fE^>nn=lwtV0FW<%Gw;R!hgSlY*9E)uv0KLc2{Gd$soLTuBfe@;w3IVKEC?oBcF z%_iB(A>mkYgJDq_OXro??HK#kZ}dRYkZM=uB4_l7Ut=z-EW-OWj*0)q{G@?5O%8O+ zu8NTUMy^KhQv*h?)!-dz*B)5h7RUl>9-y_{e44pKvK5FlnUaFEgQ^E$j8b$C@;)c~hwCoNvP|oec2L;DF0LyI zG5Z;LW-hg}w2dTh2De@GJndei2I*>@<1k8mQ&uytL`xN?Ch1^!HbAkULaIR2tFNg5 z&?Ux>A$0enZ}`aW3i;H1AKzs14U8E;aNV@Oq_=VKk$sIe^XL0cJeb-Ru2n^c{lOj}SY4Eiij zT4m>IsHvQ$+OhSk$PUt17%KYF|JH^17lF5g zN)JCNS3o(YC(e?a{BLtHKb_a9m>92JmkA*_2M=`neq6JAd?T^;0Z@lQj{#Llh+r(Y zDyB`JO#f1!doN<};LRJa(Xw^$mUDEm@R*AaONU-kF-r%CwF6)On8{EtTGquT1zAA# zYx!LO2K|fjr-$6`&Y2)ebi{rf`t)KcCF6$+{r{4;;aOKPJ!rp5818^TX^MErPTQjZa{`2Z4j$lL%(3Bu6MO8Q55|0zWBWz1eJu||EfRP0DHQ5Bt zkCDQzaI8sBtnGvuQz&+}F++i~3Cf(>Z3Van2mO@9MC+acNGTJzrDX*k?$4aoU034@tuLNOlGmUF#;YtyIyp;b8PGp{**H~&;G4PVgmG}F)m zVn+p>gwM2V3rmv#Zn1ajPE;Cd8adQuPrpgG`>S$@6EPua;1M7#frqAIj>@q33G#6W z)%lUt&v3C|QIYp{2aIi&^a(<1bA_(fH6e(Jf@n3yNr#{^Vgf||1$XpOOJfMW&BW*o z*C+TYx>`$wXF2PAbg+jmPmQJtBXD*kug%sHlXW9EYbiqqc=&{p&S;Hs(jY|I|E4v& z6Kgc?neT>Gw!CetWVL;oWffsz0AhiAJbdNz<7a;9j2UE-~|AKhytb z072zRON6jB;#NF`3=AdjA$SEcHyyJH^Awb33|KgzrR__SAd;b;4@Tv~2`1!$`{%c<_u(p@U7^-*9<_6#l<><_9{#pW_m$zmpO*5GpKY%52uCG&n z?AIGBY#uLEoK~)wX8(V*b*xm#J@!c6s}&`eY;M6e4bNxzpTn`GhaiEa0&iA_mt-S= zlrjXt2p1Si+yBy>CMrA7Tuc_e+~Wo-D>L>?Wp3hxZLYe|kIMk97P8)@D;+r-7Go@6 zK%!-QrXF0p^jugO6S^;CW*}%$d8QzYFdsdA1lcuzpov;C64R!*;*rW+XE* z5@Aaz1LF;PL&=Iwwgmh&)scRL13@KA4%=KAo4pBoj{vSs7KAomq?5rCAKpV`Hgc9a z$Ue~CDpS}7Zs#p^E$g_KJHySAYeQ_`G7~koZv&&S;?1Te5TSI=?M8cpz-!%}F(neQ zM31o~V3Vyuk=3fZ0~VIpyOz&7UJa}U=j$IEP%Qv*t&Ah$W2j*_o&b9XCtt;v8vJik z&#N>@>T@&c$hv?!Lw$0)fBVGZ0FMXG9IUWV&nL}LKc}#(TJ)dBpa3A6-kl+UWNo6h z6`r)E8q*`FTx}u>?n_eVKx1)@8M#hOnRNKPaa$>U7s4)}F1@Apgp0=;fqmOpreH>3 z!jEf-?SJ?TK-1l9|580Zd>%P0vHxAGXx2MOTDD`LzP2ov4UswNb27kh;0HJs0Gm~eB?Tpb z{@KOGHOpKoT+P`)mMJ*k2!1WF7FsrUrZmBx@6!_=i`-GEZ?Co z)}!P`^3?|z0ot+bK?_qeWKC4X6mrX&zy9Wp6i|yB;z>u#_8!*1ud$9U)3v&4J_} zzF$h532-S1a;YkofQacuho1w!{w_>osf;s|mUC#bj+EyHoe0-0(Rb5HpxG<9DM`DumAhuEpR3qnc8%af$td}&Zc#KQZ*8jz*oK8 z13&Bd7bj%#1; zU<=~rRTC+>7QF91%2oVy2$HFmL2(v=&tk+R4I=w85h06=0_ZA^GO=3%uRs7Q?(xpn z({yfdis6Aa=*%62WS8bj`=A3=h3o>SJt>n+xUhk)8K$2|K{oCP~Orjb% zUgHUH4^!2@x4v$(d{DJMx;LFWcF0I(-IxlXu;O^hs8!u$d%Ba(u@XgX;^%di`ld!>GvZ+FP7+V|( zH+N3EySVyie)r3XjOKj$;9nq8J?|?QZR;6qma6`Dcw2t~h!S-dH9HkQx4-_`p66(k z{X&v$>L*~KkEbR%HqizyGU^>$RK8H{y6muO(}4gdz#*=e;h2SuRd&U9`bY5DKK2&52qj= zwGz(p!hGw8%8F}JeKn+Or?S$1dx3WsX!IpHpT@e9$^l@Vr|8-r?E;hqlI%?aXNqJL zRg*Y>UG{CIikaon_l<0RVSthm8N5OSXxk);qn2D2Lor=w`91H9waL{Qf#>7iMY zHw`HwpXF-ErsJSA;r5xRoeTMhvAWR~g6az5czzLjiM!O^65m&7nCZ!1Q#C&Z6$=Og zsaHd^-4;t&fcO%Jy8#vJDQ9akOT)e5x3T6!$s+}KJGuC3ZW48@h~=~I=h$1dGS&it&&>`@6ERzHXe@y`yK}B!EhVIh@ zC5k@F!rD6{Qy@Rb8G}r97ZIj{$j{nr+R5#FQ=Xb)dwpDz4y#bExt8CT#xpx*?0`=O`FDTN zoU4LG8q>-Qyr5H+sc3ushPtJ88#`;JBO31)b#HCzj8!{u90z#rDXTc1Ck#`mQr2wd z*!5{WY4v*MUzNdw01WwD*n&S7xNen>f93SFbP=hiKJAv*o%t1)8;JO}kfnCz_isZ+ z%X}WBm_C&yZf2Bomf9x<5Ncyb5P2 z(Da10>l^q7Cu0p`Beb3w;NiO!i=w41p%Xd8dlXfSjY&3VQjady>Dy=Mi~i5O#-Ay< z21rKgNJ{rQohFUND4mTcvy%rWx0FpL22_wXA)c<*$A<~4wAWVg!qd~3K=nAZ`QTu| zvzw0Yx10cb&Fcvo4(c+E8vXE0#fjTXKu(4VbZUj-E6)LCR&|=&Y^%h*SYi|x)hL~1W0Qi>{Tu%U`{BS=Jb0Fhi};mtA-ui0m0%*}ZWOi)KC1iQ$dEJiT~lv%hKB_Q;lnJNnlEQ-o;S zCy<8FV@g~3Yv_~3`2m6*b^1?^zI2rc%gfhnatSJSn(vuUUSoNa)&hJMh5c3&K0Dnt zKH9_bB934ISJicOgu0`TZ?-DUd_vwU8aaT!J;3BbPjVDUK2S$E_n0S}$ddvQX}k8V z?XRav+g&>-uzdgJty!PeC$Z*7iXd2+N(#@HX@783!w+JF`er}`5qkoA0z zGTkvKO+dmBk%h0y!DqB-l_}S`RSgyu0AMFB4*kAi=V=9xLpt4M1eb2jh|PN~m7u-B zN_`_}`86LQVkOs>8Ru5MkTle(kP*M#nkstf@4}L*=(qo%JiQ#?!JRgfKFcVk2$}tS+d%D z7X0(z;G;EZ#@#FGH>YS{DnN-Iuajc)Eiitv(v^dNYBEn`m#=0N;q>po>if7sP}$vC z7n8!VrFxG)E79t;sB>|a4b@uUi$&NCO^;eu^K3FB52I7v^>763goV2XUVu9)m|PlFB(%Kw=1uC|%m;U1n5NOi zWizAJGx{eq8}eR>=kdiN%?O79nvMX-{A0A^$9dFTH0*sCl@h%r|Z8o{b;(kq?rgP&dYR{v+3Ujx#A@mOj>M@b8uVT|L z0W=LLNsUoMJYY92Hzb*#j^wcDcP|Kxi;6NS7fd@TzpfPU%{$%hqbA$02y})r^bS(x z&TH2>W;s$UOYD0$Y2YRI5wEx+lHDbH9pGfAjEkkISPM6`hkpL%S4l4=h(P?iPE0cN z3l!e*cg;h-%+6WS&EFuju=0i#wduHZd6R>zS7w!D_hC;4_G5o_^RI=0NL%T6Z(gMV z*L|hxZR6vmjkm$x)J`^=4JNeE*(r_FFTG#{%8a;TGKX5*oL9(5pERB5 z-Z8@mmMmIueTI$Dfn&lnHBV=jdt9paZ<@VQ^QJ%t94RE`yg^}gj7WO{DS|p}UT%vg z4004oqV+Hc3(0RF1!3nt;K<5_{h^5rOP4*@E=Mc6X@k)tq*y60tc#Bkn3fw1jh#q0 z;%hcA1ZOcsG}G%Veuk`uo(zmUU;u~BVq!Hjw38SfF_LQ6JTpuWD1IJq!FcnU2~~8D zvw#)@-)kQf&9wK2Sbuj*A2vQUG)3tzd9>qMrR7(Ah$VLU`7;Xj`80+VS)&(JJ&gWc zsqtegwR}0WG=7J#W1a-ho5e!TM&UYUBvh`*Cf)ECcwuP*Cb>@;>c_9=}azUu;MQ7#~4Jsaeq+4Lx`X*tl4v?dkov~OKT z1)oe}2+M7W-k{+_ZpiK%=Qqbo5Bmx!AH_@ZGioW^7R*m?E=rFcPgTjCe5w}G3$w_| ziTCF;Jd2sv>W=az9C43f1=hh9Ni>+->LJyJstI~c;=1H#?ncV}*QBS`eE^F1qr!x3q0m<`c@M7~}`P4zUP( zfXIt1!1*)K;Wy!VAtz>-=0NH_KYD{Xj=HH z>0mx!FYPFdCx1-ch0hzCcIAZZ!HmA!yER6TmLd`@^9&v?W3V6z{|tkcz0|dyFMnS| zbT5p5Z>pveC4INOE?SNm*S+Oqh1L{fors>q@V5kca)+OcC*TN>29_6X zV{#zC8NK8?j!hlT*t;ayBd;%aHa8=v2f(@GZ{B>r6rP4|>u& zozk2yW=1P{N0p{@=#P(_qA1Fg?v;>v9`rj{GqnhK8GgvB7QAl!2!2+k9T8=wN(CiE z<6ex&rI=+^D>O5e9bXx7YwiH$$_5YmDr^4?sIDH*(oZ6J4(7o$xif8EfF8)DlZOUp?n(l#@` zd+yFC^ntVT!ybS>fACJco9g}Nwcj=DQ~h{H{qL{x4EvbIC*v1p+EirL0QE&I>3TiY zA4p6=PyB5Ny|<(NHbHWav_@DNuQ&{F;JRAY+`LWf&^&H@6;Q3TGIFNCjeY7@Nx)?) zY-&57l(oFI@syZ=FMDB6#sNt2_O19k>dwUM;UqP*Gm$^2j4q}JM*pLKkhEEWGT#)o zyDbEu`@^$DkPZJiem%jAt7F7}0g!(>MH*}k;UXeam~-?Z6QW+SD}{nOXnY!thrWD& zl&U|b&tGn(RTE1bbo(|k^a^6J0;Ggw82vLH<~Qy8;!OBVP!VgO&To_y#y+GVZBCnIAPBl!l8axkBQ!dU-(NApEThyB@;Iq z^BUPRO<=bDHWl9HOlgWbqgk6!0mQA0CuyTna>5-Ud`dzRGkktGPVy7NR5Ir=At&gc zPN#h}4)mMLzjqrV&~n#loF3j3acHV(;wC1gxE2E40t8b<0jBrkc}g+n_mj&O$xcCX7~UB zuT**&zkWDoqd9rZJzs8yQLW<)p0v#>VtiObkYt;A2h0=T@k6$Rn_7W+mb-{*tx~JL zt7Dtl%i`Ww?2ilq(bfG^#J;8y{dF+IC!DhA@{_gzMA0M=Z7<${%J@>&y*?XNJlgi| z;{ESO8U50PZvQAFD~}tzH5_t#KTAnFggZz|8!6j=?aB?yYJA+jJHO&I>9FrdoZoh8 znc)`pJM1{!P2jaYEZU9}sfixC>4UjrDTss#`Q!E6OiH)MWAHt7zB-uj!VEW!EL2U{ zpyaY*2X#U8=fM%V&JUQZVk!19xG}wC#j?`y_FV7ka@_L0dYm(rW`0`B?3+=CO+q`8kqK%XVWzrB z;dhenpuw$$_HBf`tqf0)I$Vl9?^DtiG}Hc-J;rq)%YG@ZfpcAf&Of!BW5TnD+b7?? z;GmTe`@0^%ffez|rCKn3G_9*I$x-<`1zP4^I~~3I z{L06i$)>jW@6hA&TdNaJrl{i+YsOqsrCx-ux7jpt#syt^PxET>eSjY`&&omu9 zxv=O)v{#zR-7V8*O*hV)MyTTE@uVR0MHhHXSm&6rkK%!lkB8NQFhGKKsf1bZ8N~b( z?Iw;PE*bR8WQc$fly6oNPB9v@gK%03OOe{l9HN^ZK*?RHMUSMG5^g9Fq^JPHxhFmT zCQ;*7ybOpF9^`40X@1X!5r(!t=cdx)6(^c<#zU{+%7dr=N_=_+3Cmh!XY-~3=smG< zA%<%C8EI5@^H?D!)UZ+hjfsb8k?rKTkr*B-rhBB8xcG<#5JB|g_+@KGTPqc|1u8+`EzgN9fcpHR1W-x}qH_@#M5iXF06^POBlKg5wyh{crl*EF$-{h*px*fiR)O&+pL9Hb za){OPtfK+leth??fJZ7zQ-%ji6y-aocKHOVU++J=Q1_sO&-rnEBvI&Axq^>dF_rD{ zTa1Q-*dXIAy8Tr;WE3D(9Ssg@Fu$ij-gn!RuO>rbM`u7&J{(k3>bFPd?3v#ai<_sr zLQmZ}{moh*_&Hh!S=&^6Ic50w-fDllu9-Jgtk@tflc}4!olf1q{Va^CsVMKgW1;SbaPV4)^n4LN{!Rp**tB1q5jXoNKEXVq%2RNJi}0t3)Y-7XfLwv_L@9dWz#& zFYfLlmXwh@40Api7IJfSg|Fx*q>FgDx9DNkad)7i-B)w|75Z3Xq0-kFS785(1O-(!o3t@9-s&*KPf;G+lFuy##@ z%wf?2E7{FN*_sA8-@Rw!!>}7qfQoJ5XI$wUUuHtxGYvr{8;I-ny{9D+W{U?(z3nN-*Cs|Jzu$IH zsio#Hv2DC~^&5Su7{f=wUKKzS>Z^tWin$5Y9}G+p(20Te853vwQUQT>$^KDroii5> z&~*KSO!H_TKjl$>dE2jpH3HR-mt5&#A==+PqNlf&phiahXRIPu)nWx797+@b6Y1Rq z=&S0#_qV6aQ2-+smNB?`^x_DO7egG>^G|MhC+WN@2*&ZhFpfp*+2ps@mqOfTOr(9N zS9&OVTRyZ~TPscR9?YG3blx7#xazoQcdk;^65@=WXtCHl8F%fx!eslj$335g8efc9 zi$llw{IUPm@RgKtP3G4nVrsD%1CkoJFMCjnqzjHeILK-KtBv*3=aQ?RRK5xwX=b^` zqB#zUeC}L}jlQr3!#8HN+9R61r4rA(avC6 z#f|}lqRMQHHApa#uTGqF|EQR#qoOuB4DRkpv&kGGJ(j#IDP8A(4utG-pf&!*H z$)t9#Tl9YJBuk1(*xom8*sTWu)FtZ3ZSGtv-@6tHlzHMGT#hVN!%51;7tw2w!FhHL zI(EKm9J7E802HpQz<~yS)-dGtk}M$ewn6&gTj-`n+=w=AQg!=x;Q9N=6>$t zeSXC}-znnZp~iwk{GABfXUPiJ9pBwkX542R zFt-0VBt<1E=vLym(!9K&x-zi`RQXQ;J*E03mq9YkZ(m6jFhL@wjs>gD`$KYVFE_i})nU8Y$k34*WTSjagb$L`uJUK~g(z)xQr_x8w zt{zUOKIllJ{ns^-;_-1!?LGJIs_aQ6g3UJt8+=VGl#xH>hAz#m+&sCFR)({9*L|pAQjfakU)8;X zy^ZX5EhT03GNzl(-r_xI*qA*u4jmLX$#}UYSb?cNG(K0CjTALnll({O*pTxtLSu36 za%QRgAL^>=o(C-r(4pj`X4ZNm$K38vjE`=Ki`E5&0Fb^B$>^ub;M+A(oUZ*fglFN4 z?@fbQe<>`>#l~IkQ3_AXsJc5IqQ7|9N&u0c5Faw8HjgwGI(MY8wxN zQ{k9w1RIPT!)<=Doc<3##Lm2#JaxOrrw3Yk8r5>lCc`AE!GVlaknN!B9JjRL&z%aZ zyXEs1pa$ar-o36i68!5I zo1cyOEq*=q`9R?gl}?SS@Yd)jmnL=JX75+3U^{N!R8pCg!3AFWpi2!0Xcl^pWeEwn zyp8erc8XuY(LanVp0{hbYFWQA{no!3N%s)lm-U-wBa~|z$loH_QCR+=LFx^mCw||C zl=lcKf=#;Q4nhLKjkUB7KYp{EtY)&u6rR5SEX;Biyke0A2(#MjKf zUGHZ8-r_j^X`0iEO1{Z9tv*X+_sv`L9L{=qHDDtVSx3FM*(09>gWG!bYHFJ1^`cJ- z_kKQa=X;PV{4ANJ_Txj?l(cQBjr&J#kBUnOZ%`N7Ehchd|7KMc6Ovq5$YabQsz1_)c1hnp8{GAf7Ua5jN zlV=)zbzjOdmxk0mWlWgu_b^!g8vl>M;KHS#+ZLBk`kqW}`aJJVZ!QUyI>_AOpK%Y+ z^0N@hEn9M)dJ}uuIm(=sDvel`{`4mAjjXL@cMy^NtPI05jZlC)2UcTcHtU&Ogq#8q>x79E^nb(mr1J zB8H7%Xf&_zSoI>+e$05hf;%2gO8UIG9aP$eBf!sSAF^7aYu}C9dVje&6viGh7go=gBZs}I z70a-mjp2EEkK&crKP)sBrkpt;8I&6=R^ULy#C-E$308>APT0YKx-QC;Qn-F%M{8FawkeuttuTl+Py>pi~fqxTKEc_)CQ+)mHH zmNxPks8UDl=;`nVg;^WH+;23n37g#&{E4JC@KEp)^ zMd#O^4KjDmKuC}RQcTN(z3OOgkUu@PyCL_Jo_2LW337!xzF$5*c5F_VYTAYqdxp3A zlj}-8Hpq)LvDY)mr@O7Kscx^ikB7z<@Z0RVnScd*{*rQORm<&Y8+3f_k**|MjL0D2 zj-wJn$zbDdOlQU3)5uTZG6qAuf4n&|fW~*L zY9ia!K&pLVx_VV#LSv0f-62T{B-MJqT*?Q>KW*U_j|REvxwO;?L2ms^Ttgonf-s7P zh&vngv~rKhwkGCJR-gMWoVMOF|I_;S$IRcrk3a19PV0B7y1*rWi1|lHKMw!CYIET2 zm^`gF|GUU*9=Ti!{8@N&y0iJso;!X1T_ouL+8+1oN6{&5k_#7XNiSSryZ|Oa`ngyH z`1uD)x%dURp0&t@JOYtiDZ2oC3~ zw*32!DCbDbz_yO$X;fd>ccPr+7~dzdglQ?3R&9`AU8*&sF>G(Hr$lyMOlgW#{PA}9 zX@#m{#1omFhZ08+vz?gS>_(rtYSUwO^~jV3#q`nBXXPK}Yn98O%nt*|h9|48RAzIO zu(mH-4Y#LueTQRTsHT;CZ(sY-NXeeqOjOXuPvI`c*WFVFc6c>O_%oq4B zJpG;*7YF>y0IdJR*g2GY3U5S->&1hGgro;)Spt#LBw2!*_mT|cc%G?X4Y9Q0 zz9g4v`^m4a{#tc|Y&K&5Vum&Idn?$ZX|*ZVPR1V%e}IyAeF%5}qNdyDwxdZJHdq#r z4wm~WEh{fA4czAcWhOq2Y_tWy9IpdyrWyWsA9C{d|NmX+?3w-hdYEnMw+vy3|0ecR z!{#H`!-{8c#;RxIwE z47P4uuRxM3Z=;qmtoP>C7b0ABwN|}cU&bUALmDYVzU$&1(=)u+6eaXlCT%nJVZT=# zjy;p-o5>tMnij2)-+AH3`S|nTrZ&yRUpVn^S1&W#(f#x}l1DyXe$@9@q4wp@ukpD9 z7O+jy8wT8a>h+xcj`#0{7aaGtt9z(RlCfVE%jn-P8s=fwo=$tXIvEZ$T~~}=%*Wb9 zZzQzBg@i;@?1IYPzkwFebIzr(eiMbI-)J<`eSDb-zMv?i?XBH=rS!8SuCk42F&6(@ zGx39RlJ)i>&92!(YYh-l^?#ABgUbZY)yBE95T9qb@@LXlP8@vf(3fv0%qvUoX;K8 z#mU=6+r!Dz_spDwisyGe!UJA^BU|AH&AUrjF7$+6T6CufEK-Yth@r@uIvY|TA;%|7 z-U>5TE2$T(rk;A0l$2=m1RVYS?(p|`s$S~P=Fqo=$Y0xY=~4+AFGGJV4Lu+2I{h*9 zyzBI6U*msu_vPVGe&OFJDb-N6zBTq_%lMXL#?C{0qYOeA6qQP01|hPQY-KCPPNHOa zB*|E#i0qZ9$THT9r6`(6zw^v!{q?@r`}ccYuE)%I&bgP*{kiXR%ypY*`NATZOWw}+ z+t7>BboC2gr+Uc3cFXPL8ToHt$o|XV+uxVLcg8Qx-L|W)(j4qr05_K!g#EvD3;TUu zrjN-#^!u`WyMK9kWLwO)rKtrwjjy%-{@;4I`oAqNl8rPje4{s$HT=GQdHi|eWreVx z?!X8TK(C+CsP?V&qf-S)UUVw$+tK}I?suq|8SZslF(0_4xnkzF;G+J1p*7MyhL@B{euB7% zktue1ZH3}v-7#~_;Th@;$GXyg(ZHCer=Z@F3?P^ zFZU|?*Eau(fPn*i6~aV9a3q9@g5W3!6Ai)95GDqKV<1c{1jj;{YY==5!d!>o>kuXm zg5w}eJOsx>7%~KtAxr`UCqS4)2u_4BNf4X_VUi&@8N#GMa0-M;h2T^OlLo=L6~9) zE`~7oA^1LoDS_Y;LdchqHwjKt|F@s+bO*TP|JNTsV+A_<>&Y6i0o|T~-qlVt;w+7# zt0|0K-&JF#Id(RvK6xqE_1qD@jyV2WlQ-yur3n)9E?cQKHf<@>eNzWVTacnFUx)Xi zV&%H7_fHFb9XZTdPq=P$32Lq>y!rEu$U(kQ%`WYhp*8)S8ib|&{*iMrCDGIO`22Fb zHCl->#q7K5%UaQm{EfV~H4H@6+RI!=%GTUNMmtSHX+Gcbm0G@nwHB96Qy#Pi?hO9u z``{6m;!IR_8|&h$GS{m%t6sCcUX@6_M3Sx(tSaf+Hfl~GB~#HJsAFO3G+y#$HxVb%3zL2q zU4msFOT&A|09NJA=AUnj-o9#JQ$AnhHn_Ed|9PVIp#4GOlnTc^{^u{}fz3;w&CFi@cv%$hRFLEo9Ud>BAt$r??wv-*Mehx!O1dfd&3Ji{h%LU`2fiLF- z5HxPwK9d5sZtvKHSyyKo) z={q_HN8svFuh5N~8@D#vhN^s#QLSIogKjhly~AfqZ|Lh~FrmlOK=dsULx^+|u@*6% zWXA+k{M^Sky2%m}4U4L<2nrWU5f*gd=4HA8kcfN2n28;tZfE>qB#y3EQ|;5;5u5X- z00lk|Qu7AU$-v;Zpw|>X7kT)!aA{QP`tDaH(QUmh?+aX|4U4o?Iqva3w?XLjP&>t; z)EfkLYAic?8Y_TlK<04@xP=Q&{eWp+`^zhaq8?w=G3mOOOK7if!G-Uj2TlfmEV3Tl zs#5=8ndvT|xF-ja4Cm7pH&*lc4GXJnD;4R|?$vcrspk9U8fFVuY`ri^pgaLC03s!r z_VRF zi9rnpZ%a84qJDX`l9|246p$)Jfr3$H^xs~~c6R!~-4%1D$!!dC+DaMT8jo=%4&9mr zpcv^O`7s&nW&W)DgV)O+U>ThPR_2dBQdDpf@c~I8x~CUTd(y+3)VLmVJ*J!0Tac>7(p_>x;b%L~YytXg%#2ufO`gmCOshSpVntb!+QlVC5q8iAjxD24!6BjNq_}e zc?CeN{0gf7wBVw%xh>|3gQWdsi_m!C);ZL2z9g3_woYLq>S(5-gMoA8>)QC7XD(O)5KUXs$ zDb9)Ttn2{ZUBtCK8VU_{qHC1vG+oTrDC?X<86VbCJ8H;_fAoU8U09BzGh}W{Y^h?q zD6URiA9a*k5FVECudyc1p4#E3c>z1!R{yqwEKUp!MD6PEiMh}2VaLmd&7R`kfg)}X zDi@pX3r@i5Xa{|9&F95yOPwzUo)pXF$i}|&V3B1%Xx?|`Fz!+ul(2SUIzh^H_lFaY z>qHG#2WPTL>dt8M3ThkUEw-WGgTs>1=r>$BTnzv{A3b|2_bNgA46FUct(qZQ#<^EjIbv;rbG&@f>l$Qp+=@&z z3Hg~P2kYC4ZIfTi84nWmB_JX z+_mOp-u-VGK|I7vRjLH7AwN~FYDb$Y6~d3r4i~t2AL(9P5wcLhV!oBAEHi`6M^iP~ zJ!An?(&uF}$GM-X=)4Jfq!V~8Oi6SH>Zn+bEJ>A9KL+5s+iP(b9`M12Rho*)al>`c zSa4Dzn@I03*CS|vuxWs>MFxpA&{)hlQ%E1HkEN~lup!|!A3xQ?kJ)DjP|$G;65*&D zQaQ4_=ek+*d9nG_XFG)gEb`9Tqy<=LKK5R1iyxczWEG0(UK{p)L$%UQK&tZLjDXA6 zE@rezgnZY?-_RtQzdHEkO60~5pZRph=7<10hW@B$VdkMgr{j3`s_A@a% z?ClA{G99FC9C$6$Q!*U!5Z3<>UbVfj=4n#}k8B8_O#xPhJu5T}YKiug+=03wk&`?C z2N+^?K(1A=QD;}}o;l{HHOj5Q=N1~+N8aFmQY|B`3FL5-?%mmHKxV(uQSND!=nVI4 zUqqwIrT7eNEW?u%J&a6Z2C-Ij)EF-uS;4loE%3Y#;PeiVR*5nqx&X^MmH0p;$pA#2 z%mlX|5sb)$DC;?O*$;;IrEL&ka{F2(2&6ZAorL#{ZvN^|gNLOv1`n@8>I=7LQ}_7$ z#RD!U{c7HEKkVim-ob}W^y;4-GS&j=4JyoZkTTgWMn(kFFr;=Rju|Ml?00p)422|^ zeqYk}I01Vp45T$D5BtF#$h$gYl}m*X`XZDimUH`2tv5781DgOb9t~A)t z1tx~~6)ojh1Ek{EwnoNfw7s2S8_w9YS(L-&cs}~ke*9q@j=LrU$3`wR4|4uw_lPT^ zKR^ddaB=!|TDBiQC`&B?8P1>KcUMYTXO>9^rJYRT#a6PJY(E>K-?Q!4C>XqD zN^GoMOauh`9>iXD@TeczjKNCtTA%a<8Ejny-|8}ZBuG!2KRho3^dAEpbn^~->=96k zm2z#WwMO{)=kk_2N=g8a4$(E|^LBTL-s9;s75$$1LQjzV^pHJa$|?t^SN)U<-m z%T!8@E7v3k@nT6=ZufYZ#(cR)i@gXUhYC^_kY%qM$*Ejd^h=?~^?t8v(;yLlscH`p zU5uzp>bhv}!2cxFaW-aP6Et0{f2GRE*@z!Z0lStlub`MWbMr_hU-~82Vl6ZYwi6?* z&DK?DYKbjlJ0A$P+e*AQI|^#~FE-p{*l@QTbtD@U8y|OEpJlJd)7rA(0gwyE5-!&F z(b@+1h3x%|YAzV%DQS*Sg7neWAp;tgk|I?iE2Z^Zw3(=8sxxXRR%ph+5GlY)TE?u2 z8RJuWGK_t>!xgXwGg8GkL?q6dfd|aBTYIR9l*%}Bz0Xw_sBKy#;WE@y&?yE0P0xqx zqc84DL3MBAM~Wb?Il~A`?;iURZUvE*jj@79H$>l-S=}G36kyzbc5rCfkkPyyt|ZsBo{$^AzTy!Hmr78Mecx zF7+18?%1yPH#EpU(U=PP6%BBdA{(au>Q+m1sf-n~R15)j#Bz7?>@#MSxRR+P1WrFc zcDvnU-K^lWAZEIJYEz%Y)PeFHb&J`lC6bpa7sO^6n-l8BNb64+e&yU<(pp(?cdgt^*+{_o z$ONna52H}szF#F_{Ns?M*LMt{7KGt^+V?-KJIL+NL~`#khooRX-XM9!b3 zNpHoL0Nzs7t&0k=5nF7W_;+T5k73k0-^o`me9ji|*kVv~?P0b*` z!uC2eq>zsvE~B5Sk~wE+M&Q{czc-5XZPhz0S$-6USC4(ol zni@7r#&VgfZ?C@?Se=D;{1!W$=-~L_V%>VF6Jq{Rtxm`6C+32&m4~H9hFFs%gzT-U zxK6dUzWAKB*sDA}TMYKd$ZZkkN@q!WO>4U*R@>B2GA^EeOYIzb{#B%vy?nY+g#R&I z`aI_QkjaQu=i7o0DzAdWq>L+f*J=``#t1IT%Pp2f;lOsJ>3-2=u zvY7UI{9#_svv-I_40D;1K)FT<#*{dVjH?`x&ywHeE53MJPUy|i)c4*;Vj^*^R`MnB z=39%Xlf*|4hX?CQdu>An+v=5Ud^ry~MUU$6i>wI!zy~m83c>-28)G?HNChZmR)sPA?O2Q`$U9}eZ zLX$vMsBI_dAeDckWZaAHQG+FiB1ndHM`WNh)9n-}?& z`a$2=?q(w+^MMJ4c;OGd8e^BbMsO%YP0+42zRpuIIVaC| zo9_-^>02+Ju;S0-^gVO;;Llj0XgMNXNUPdibx_SO_g;f#$JXrL^}E`ad`BE5+pkdT zLanU2KNL(f5+x1T2a_dFXrxa$sLd5>v^o3Q=VTcvdY<{Z7^cJiDRICuZ)u!wxRZL-yVG|Jw@;cj*IyZ{SHlRJ zZ&c0j%Tg_++9iFg78$cmZR%m1+ci@dwHd@46*%&KLyjkvl6&2>sxY*o)uH=1M_ z4pFauj7tu~wfBF$D|AZCeM94-=CsL4&N?d1Hd^=;Vf*uaea-h{M1+OyE4iq>j*~`}@5KrF~0DehHftNQ*!OMti zrhM%QMQ)Es=f8?}IacIu&yd}1n?7Yf>Z3tlyBI=@qCHbPh@Hpw4|G0J@AM&DcRfCg zHu_-c$TsEN3Ax>XygA1`3xty1QrG>PCb`IaMD>CqIgMqgUZA#^+i~Jp_IBDtUE(g> zOOLiry@3v1s$t=L@x+XwnRZgt(5ly`=dL7+MGakPO2|#xldjaF=bMxk?3I?=ctg4_ z;ln#0erijO@z=)YMB|&vX6J6nn0O1>!Dr)zhzI9))+tu)Yafz%w#Q*KYVJRWT!-sp zHxEvgFDg{`3YD;r8G4Wz5>uY2t$&vkMcK8uvkr(En#>pWvH4_{7EC$u(KuBQt8n_z z;{LWPTVGC085Ta9qeR{n4^J$lId>oG9)Bg=klD2-y$D*wVrrC&d9&!1N7e1sy!q|D zyDUH7xYI^D(V1hu-ErU5(++Qd@N%njV4$rhk&gb9Wz_I&`yvXy3aho#^wGIN7~LL3#QzJyfB|Q8dl5 zGiTZmam{lTVoQOn!;|?}ARzm$M&^y|HHdn}1E5W^z3HfScc>+S4jy=BICE3)?2P+p zG3L$$4{4IGRQ!B=P(u5*QSk?)v|#rIz21v{{Pryrr&$J!=VxmZiEVh5F9>pPAw+O0 zd2f2u8wr>WA~RG0?-faTci|%z11B#kI2)=>Odsj?jeit#TRBfbn0Nq8Lhx!H2Jx+` zYyq#|GbTtBeSR50ozyVCx1y^?x`s!`gZROWG+`NVzQeA;7x%y24KtQg(BqHYR^f|>@V{Z}#c-PTvr9N6T(s`GDhhfl+8F| zp%bfx7?sV&4R@07T^(PiTL6H80>pS!^n7S^bZfL2A-;V>#gafwEF+TNZkYZ=a8(?! z5peFBI-$1;*10aPlmR=jcGK1%mP?SHGZcibcW}&uEqRH73k2P;%)WRJXp$btPj4VOX4JIu6je=~kh& zMpCB+RfsQTU~4f+_?9Zd3dNDyxW+KxH>`7zaKIacm1^4^fzvjOx;ngv`M=$j0T zz6fTN#L?pan0~tHqHGM0g{criHpc9_m)C*6ziFtg>XCn1I;j>ZtX=LLmf{Z7wwAv% z*F$IoW+N%iG24=Ul6WR*7G(L$2m0Vn6A+4oS7s5hy)O1P`sr|+eTbari zVCOPB(o&^{`!C`i72n*9dw04CQlgpnhygEe_!M(!qby64)uJ7%!-E>^6-UybuoNV( z7?yVw)GW;B-kRqO5mxvA^2K|Z{zATgdG;ab-CF4&VP%s8j|l(X+;#cQN6%2u5_NqI z3kwgk`{$RdHRJ;Nyqw+b4tcvCce6p7O7I513n(%BSNs!LVhA*>|79r)OD*WKvLhWo z<0g+mu7584_=!Vh8_;YC`W?6awr~vC0-DU2Ydu{^PWCP?PKfTm$|2~mwqyZ0pMU{e zzsb>F$B^@@gg=d7MVWUb0ChRr{&b%QI0KAuKY9G@aprZ`-`rO@yW5}^Xw?Q5i2tU& zche8;ZYPf)cXwNHi1CIY>#y!a2y85|1;Si_J6nDe*thvlfecZ*|7Oi-PSpO3Zwxw^!kx%AJ6-2W-z_qN%e>seUHFIZUqR}<}@%m3_s{3&2l7sG)6 zmrlq(h5p`#_){bcOAiqG!={y{#6MU6+4c2veeP?9Nx$`g;SJaUy^+k|VtEgOFu91l F`yZXLYODYN literal 0 HcmV?d00001 diff --git a/app/src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json b/app/src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json new file mode 100644 index 0000000000..92304dbf45 --- /dev/null +++ b/app/src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json @@ -0,0 +1,286 @@ +[ + { "iob": 5.249, "activity": 0.0391, "date": 1653099848000}, + { "iob": 5.292, "activity": 0.0438, "date": 1653100148000}, + { "iob": 4.964, "activity": 0.047, "date": 1653100449000}, + { "iob": 4.674, "activity": 0.0489, "date": 1653100748000}, + { "iob": 4.377, "activity": 0.0498, "date": 1653101048000}, + { "iob": 4.077, "activity": 0.0498, "date": 1653101348000}, + { "iob": 3.73, "activity": 0.0491, "date": 1653101648000}, + { "iob": 3.389, "activity": 0.0476, "date": 1653101948000}, + { "iob": 3.055, "activity": 0.0457, "date": 1653102249000}, + { "iob": 2.782, "activity": 0.0436, "date": 1653102548000}, + { "iob": 2.47, "activity": 0.0411, "date": 1653102848000}, + { "iob": 2.22, "activity": 0.0386, "date": 1653103149000}, + { "iob": 1.935, "activity": 0.0358, "date": 1653103448000}, + { "iob": 1.711, "activity": 0.0332, "date": 1653103748000}, + { "iob": 1.452, "activity": 0.0304, "date": 1653104049000}, + { "iob": 1.927, "activity": 0.028, "date": 1653104349000}, + { "iob": 1.84, "activity": 0.027, "date": 1653104648000}, + { "iob": 1.658, "activity": 0.0258, "date": 1653104949000}, + { "iob": 1.482, "activity": 0.0245, "date": 1653105248000}, + { "iob": 1.264, "activity": 0.0229, "date": 1653105549000}, + { "iob": 1.104, "activity": 0.0212, "date": 1653105848000}, + { "iob": 0.952, "activity": 0.0194, "date": 1653106149000}, + { "iob": 1.619, "activity": 0.0181, "date": 1653106449000}, + { "iob": 1.678, "activity": 0.0184, "date": 1653106749000}, + { "iob": 1.775, "activity": 0.0187, "date": 1653107048000}, + { "iob": 1.581, "activity": 0.019, "date": 1653107348000}, + { "iob": 1.437, "activity": 0.0188, "date": 1653107648000}, + { "iob": 1.294, "activity": 0.0183, "date": 1653107948000}, + { "iob": 1.153, "activity": 0.0176, "date": 1653108249000}, + { "iob": 1.017, "activity": 0.0167, "date": 1653108548000}, + { "iob": 0.887, "activity": 0.0156, "date": 1653108848000}, + { "iob": 1.011, "activity": 0.0147, "date": 1653109148000}, + { "iob": 0.889, "activity": 0.0141, "date": 1653109448000}, + { "iob": 0.771, "activity": 0.0133, "date": 1653109748000}, + { "iob": 0.656, "activity": 0.0124, "date": 1653110049000}, + { "iob": 0.547, "activity": 0.0114, "date": 1653110348000}, + { "iob": 0.392, "activity": 0.0103, "date": 1653110649000}, + { "iob": 0.294, "activity": 0.0091, "date": 1653110949000}, + { "iob": 0.2, "activity": 0.008, "date": 1653111249000}, + { "iob": 0.065, "activity": 0.0066, "date": 1653111549000}, + { "iob": 0.034, "activity": 0.0055, "date": 1653111849000}, + { "iob": 0.549, "activity": 0.0048, "date": 1653112148000}, + { "iob": 0.674, "activity": 0.0053, "date": 1653112449000}, + { "iob": 0.597, "activity": 0.0057, "date": 1653112749000}, + { "iob": 0.468, "activity": 0.0058, "date": 1653113049000}, + { "iob": 0.389, "activity": 0.0057, "date": 1653113349000}, + { "iob": 0.262, "activity": 0.0053, "date": 1653113649000}, + { "iob": 0.186, "activity": 0.0048, "date": 1653113949000}, + { "iob": 0.064, "activity": 0.0041, "date": 1653114249000}, + { "iob": -0.005, "activity": 0.0034, "date": 1653114549000}, + { "iob": -0.12, "activity": 0.0026, "date": 1653114849000}, + { "iob": -0.181, "activity": 0.0018, "date": 1653115149000}, + { "iob": -0.287, "activity": 0.0008, "date": 1653115449000}, + { "iob": -0.34, "activity": 0, "date": 1653115749000}, + { "iob": -0.436, "activity": -0.001, "date": 1653116049000}, + { "iob": -0.48, "activity": -0.0018, "date": 1653116349000}, + { "iob": -0.519, "activity": -0.0026, "date": 1653116649000}, + { "iob": -0.554, "activity": -0.0034, "date": 1653116949000}, + { "iob": -0.585, "activity": -0.0041, "date": 1653117249000}, + { "iob": -0.662, "activity": -0.0049, "date": 1653117549000}, + { "iob": -0.687, "activity": -0.0055, "date": 1653117848000}, + { "iob": -0.708, "activity": -0.0061, "date": 1653118149000}, + { "iob": -0.726, "activity": -0.0066, "date": 1653118449000}, + { "iob": -0.351, "activity": -0.0071, "date": 1653118748000}, + { "iob": -0.218, "activity": -0.0064, "date": 1653119049000}, + { "iob": -0.088, "activity": -0.0055, "date": 1653119349000}, + { "iob": 13.594, "activity": 0.0023, "date": 1653119649000}, + { "iob": 13.552, "activity": 0.0331, "date": 1653119949000}, + { "iob": 13.224, "activity": 0.0573, "date": 1653120249000}, + { "iob": 12.838, "activity": 0.076, "date": 1653120548000}, + { "iob": 12.322, "activity": 0.09, "date": 1653120849000}, + { "iob": 11.794, "activity": 0.1001, "date": 1653121149000}, + { "iob": 11.177, "activity": 0.1068, "date": 1653121449000}, + { "iob": 10.58, "activity": 0.111, "date": 1653121749000}, + { "iob": 9.919, "activity": 0.1129, "date": 1653122049000}, + { "iob": 9.254, "activity": 0.1129, "date": 1653122349000}, + { "iob": 8.643, "activity": 0.1114, "date": 1653122649000}, + { "iob": 7.992, "activity": 0.1088, "date": 1653122949000}, + { "iob": 7.406, "activity": 0.1053, "date": 1653123248000}, + { "iob": 7.111, "activity": 0.1012, "date": 1653123549000}, + { "iob": 6.515, "activity": 0.0971, "date": 1653123849000}, + { "iob": 5.99, "activity": 0.0927, "date": 1653124149000}, + { "iob": 5.439, "activity": 0.0878, "date": 1653124448000}, + { "iob": 4.962, "activity": 0.0828, "date": 1653124749000}, + { "iob": 4.462, "activity": 0.0775, "date": 1653125048000}, + { "iob": 4.036, "activity": 0.0724, "date": 1653125349000}, + { "iob": 3.638, "activity": 0.0672, "date": 1653125649000}, + { "iob": 3.214, "activity": 0.0621, "date": 1653125948000}, + { "iob": 2.866, "activity": 0.0571, "date": 1653126249000}, + { "iob": 2.494, "activity": 0.0522, "date": 1653126549000}, + { "iob": 2.193, "activity": 0.0476, "date": 1653126849000}, + { "iob": 1.867, "activity": 0.0431, "date": 1653127149000}, + { "iob": 1.563, "activity": 0.0388, "date": 1653127449000}, + { "iob": 1.329, "activity": 0.0347, "date": 1653127748000}, + { "iob": 1.115, "activity": 0.0309, "date": 1653128049000}, + { "iob": 0.87, "activity": 0.0272, "date": 1653128349000}, + { "iob": 0.692, "activity": 0.0239, "date": 1653128649000}, + { "iob": 0.482, "activity": 0.0206, "date": 1653128948000}, + { "iob": 0.287, "activity": 0.0176, "date": 1653129249000}, + { "iob": 0.156, "activity": 0.0148, "date": 1653129548000}, + { "iob": 0.038, "activity": 0.0122, "date": 1653129848000}, + { "iob": -0.067, "activity": 0.0099, "date": 1653130149000}, + { "iob": -0.161, "activity": 0.0078, "date": 1653130448000}, + { "iob": -0.195, "activity": 0.006, "date": 1653130748000}, + { "iob": -0.271, "activity": 0.0044, "date": 1653131049000}, + { "iob": -0.339, "activity": 0.0029, "date": 1653131349000}, + { "iob": -0.4, "activity": 0.0015, "date": 1653131649000}, + { "iob": -0.155, "activity": 0.0007, "date": 1653131948000}, + { "iob": 8.11, "activity": 0.0045, "date": 1653132249000}, + { "iob": 7.992, "activity": 0.0222, "date": 1653132549000}, + { "iob": 7.745, "activity": 0.0359, "date": 1653132849000}, + { "iob": 7.488, "activity": 0.0465, "date": 1653133149000}, + { "iob": 7.136, "activity": 0.0541, "date": 1653133449000}, + { "iob": 6.8, "activity": 0.0596, "date": 1653133749000}, + { "iob": 6.441, "activity": 0.0633, "date": 1653134049000}, + { "iob": 6.022, "activity": 0.0651, "date": 1653134349000}, + { "iob": 5.644, "activity": 0.0657, "date": 1653134649000}, + { "iob": 5.216, "activity": 0.0653, "date": 1653134949000}, + { "iob": 4.962, "activity": 0.0644, "date": 1653135249000}, + { "iob": 4.544, "activity": 0.0627, "date": 1653135549000}, + { "iob": 4.185, "activity": 0.0606, "date": 1653135849000}, + { "iob": 3.839, "activity": 0.058, "date": 1653136149000}, + { "iob": 3.456, "activity": 0.055, "date": 1653136449000}, + { "iob": 3.139, "activity": 0.0519, "date": 1653136749000}, + { "iob": 2.788, "activity": 0.0486, "date": 1653137049000}, + { "iob": 2.503, "activity": 0.0453, "date": 1653137350000}, + { "iob": 2.186, "activity": 0.0418, "date": 1653137649000}, + { "iob": 3.17, "activity": 0.0407, "date": 1653137949000}, + { "iob": 3.956, "activity": 0.0413, "date": 1653138249000}, + { "iob": 3.648, "activity": 0.042, "date": 1653138549000}, + { "iob": 4.126, "activity": 0.043, "date": 1653138849000}, + { "iob": 3.81, "activity": 0.0437, "date": 1653139150000}, + { "iob": 3.541, "activity": 0.0437, "date": 1653139450000}, + { "iob": 3.272, "activity": 0.0431, "date": 1653139749000}, + { "iob": 3.588, "activity": 0.0428, "date": 1653140049000}, + { "iob": 3.875, "activity": 0.0431, "date": 1653140349000}, + { "iob": 3.608, "activity": 0.0434, "date": 1653140648000}, + { "iob": 4.271, "activity": 0.0442, "date": 1653140949000}, + { "iob": 3.996, "activity": 0.0452, "date": 1653141249000}, + { "iob": 4.298, "activity": 0.0462, "date": 1653141548000}, + { "iob": 4.015, "activity": 0.0468, "date": 1653141849000}, + { "iob": 4.538, "activity": 0.0481, "date": 1653142149000}, + { "iob": 4.245, "activity": 0.0489, "date": 1653142449000}, + { "iob": 4.729, "activity": 0.05, "date": 1653142749000}, + { "iob": 4.426, "activity": 0.0508, "date": 1653143049000}, + { "iob": 4.353, "activity": 0.051, "date": 1653143349000}, + { "iob": 4.049, "activity": 0.0507, "date": 1653143650000}, + { "iob": 3.747, "activity": 0.0498, "date": 1653143949000}, + { "iob": 3.402, "activity": 0.0483, "date": 1653144249000}, + { "iob": 3.115, "activity": 0.0464, "date": 1653144550000}, + { "iob": 2.788, "activity": 0.0441, "date": 1653144849000}, + { "iob": 2.524, "activity": 0.0417, "date": 1653145149000}, + { "iob": 2.271, "activity": 0.0391, "date": 1653145449000}, + { "iob": 2.033, "activity": 0.0365, "date": 1653145750000}, + { "iob": 1.807, "activity": 0.0338, "date": 1653146050000}, + { "iob": 1.594, "activity": 0.0312, "date": 1653146349000}, + { "iob": 1.395, "activity": 0.0286, "date": 1653146650000}, + { "iob": 1.258, "activity": 0.0262, "date": 1653146949000}, + { "iob": 1.034, "activity": 0.0236, "date": 1653147249000}, + { "iob": 0.971, "activity": 0.0215, "date": 1653147549000}, + { "iob": 1.008, "activity": 0.0197, "date": 1653147849000}, + { "iob": 0.963, "activity": 0.0183, "date": 1653148149000}, + { "iob": 1.046, "activity": 0.0171, "date": 1653148450000}, + { "iob": 0.912, "activity": 0.0161, "date": 1653148749000}, + { "iob": 1.254, "activity": 0.0156, "date": 1653149049000}, + { "iob": 1.176, "activity": 0.0154, "date": 1653149349000}, + { "iob": 1.051, "activity": 0.0149, "date": 1653149650000}, + { "iob": 0.928, "activity": 0.0142, "date": 1653149949000}, + { "iob": 1.008, "activity": 0.0138, "date": 1653150249000}, + { "iob": 0.89, "activity": 0.0133, "date": 1653150549000}, + { "iob": 0.775, "activity": 0.0127, "date": 1653150849000}, + { "iob": 0.664, "activity": 0.0118, "date": 1653151149000}, + { "iob": 0.606, "activity": 0.011, "date": 1653151449000}, + { "iob": 0.703, "activity": 0.0105, "date": 1653151749000}, + { "iob": 0.702, "activity": 0.0101, "date": 1653152049000}, + { "iob": 0.902, "activity": 0.0101, "date": 1653152349000}, + { "iob": 0.801, "activity": 0.0101, "date": 1653152649000}, + { "iob": 0.701, "activity": 0.0098, "date": 1653152949000}, + { "iob": 0.603, "activity": 0.0094, "date": 1653153249000}, + { "iob": 0.508, "activity": 0.0088, "date": 1653153549000}, + { "iob": 0.415, "activity": 0.0081, "date": 1653153849000}, + { "iob": 0.327, "activity": 0.0074, "date": 1653154149000}, + { "iob": 0.242, "activity": 0.0066, "date": 1653154449000}, + { "iob": 0.161, "activity": 0.0058, "date": 1653154749000}, + { "iob": 0.134, "activity": 0.005, "date": 1653155049000}, + { "iob": 0.4, "activity": 0.0048, "date": 1653155349000}, + { "iob": 0.475, "activity": 0.0049, "date": 1653155649000}, + { "iob": 0.401, "activity": 0.005, "date": 1653155950000}, + { "iob": 0.327, "activity": 0.0048, "date": 1653156250000}, + { "iob": 0.203, "activity": 0.0044, "date": 1653156549000}, + { "iob": 0.132, "activity": 0.004, "date": 1653156849000}, + { "iob": 0.064, "activity": 0.0034, "date": 1653157149000}, + { "iob": -0.002, "activity": 0.0028, "date": 1653157449000}, + { "iob": -0.064, "activity": 0.0022, "date": 1653157750000}, + { "iob": -0.073, "activity": 0.0016, "date": 1653158049000}, + { "iob": -0.08, "activity": 0.0011, "date": 1653158349000}, + { "iob": -0.085, "activity": 0.0007, "date": 1653158649000}, + { "iob": -0.087, "activity": 0.0004, "date": 1653158949000}, + { "iob": -0.088, "activity": 0.0001, "date": 1653159249000}, + { "iob": -0.088, "activity": -0.0001, "date": 1653159549000}, + { "iob": -0.137, "activity": -0.0004, "date": 1653159849000}, + { "iob": -0.184, "activity": -0.0007, "date": 1653160150000}, + { "iob": -0.18, "activity": -0.001, "date": 1653160449000}, + { "iob": -0.175, "activity": -0.0012, "date": 1653160749000}, + { "iob": -0.168, "activity": -0.0014, "date": 1653161049000}, + { "iob": -0.211, "activity": -0.0015, "date": 1653161350000}, + { "iob": -0.203, "activity": -0.0017, "date": 1653161649000}, + { "iob": -0.243, "activity": -0.002, "date": 1653161950000}, + { "iob": -0.282, "activity": -0.0023, "date": 1653162250000}, + { "iob": -0.32, "activity": -0.0026, "date": 1653162549000}, + { "iob": -0.357, "activity": -0.0029, "date": 1653162850000}, + { "iob": -0.391, "activity": -0.0032, "date": 1653163150000}, + { "iob": -0.375, "activity": -0.0035, "date": 1653163449000}, + { "iob": -0.357, "activity": -0.0036, "date": 1653163749000}, + { "iob": -0.149, "activity": -0.0035, "date": 1653164049000}, + { "iob": -0.132, "activity": -0.0031, "date": 1653164350000}, + { "iob": 9.296, "activity": 0.015, "date": 1653164649000}, + { "iob": 9.123, "activity": 0.0332, "date": 1653164950000}, + { "iob": 8.96, "activity": 0.0474, "date": 1653165249000}, + { "iob": 8.644, "activity": 0.0584, "date": 1653165550000}, + { "iob": 8.282, "activity": 0.0664, "date": 1653165850000}, + { "iob": 7.835, "activity": 0.0718, "date": 1653166149000}, + { "iob": 7.416, "activity": 0.0753, "date": 1653166450000}, + { "iob": 6.984, "activity": 0.0772, "date": 1653166749000}, + { "iob": 6.547, "activity": 0.0776, "date": 1653167049000}, + { "iob": 6.061, "activity": 0.0769, "date": 1653167350000}, + { "iob": 5.68, "activity": 0.0754, "date": 1653167650000}, + { "iob": 5.458, "activity": 0.0734, "date": 1653167949000}, + { "iob": 5.046, "activity": 0.0712, "date": 1653168250000}, + { "iob": 4.925, "activity": 0.069, "date": 1653168549000}, + { "iob": 4.487, "activity": 0.0663, "date": 1653168849000}, + { "iob": 4.113, "activity": 0.0633, "date": 1653169150000}, + { "iob": 3.706, "activity": 0.0599, "date": 1653169449000}, + { "iob": 3.363, "activity": 0.0566, "date": 1653169749000}, + { "iob": 3.039, "activity": 0.053, "date": 1653170049000}, + { "iob": 2.733, "activity": 0.0494, "date": 1653170350000}, + { "iob": 2.395, "activity": 0.0457, "date": 1653170650000}, + { "iob": 2.126, "activity": 0.0421, "date": 1653170950000}, + { "iob": 1.824, "activity": 0.0385, "date": 1653171250000}, + { "iob": 1.64, "activity": 0.0351, "date": 1653171549000}, + { "iob": 1.473, "activity": 0.0319, "date": 1653171849000}, + { "iob": 1.273, "activity": 0.0288, "date": 1653172150000}, + { "iob": 1.136, "activity": 0.026, "date": 1653172450000}, + { "iob": 1.011, "activity": 0.0235, "date": 1653172749000}, + { "iob": 0.852, "activity": 0.021, "date": 1653173050000}, + { "iob": 0.752, "activity": 0.0189, "date": 1653173350000}, + { "iob": 0.662, "activity": 0.0169, "date": 1653173650000}, + { "iob": 0.534, "activity": 0.0149, "date": 1653173949000}, + { "iob": 0.463, "activity": 0.0132, "date": 1653174249000}, + { "iob": 0.352, "activity": 0.0115, "date": 1653174550000}, + { "iob": 0.298, "activity": 0.0101, "date": 1653174850000}, + { "iob": 0.25, "activity": 0.0089, "date": 1653175149000}, + { "iob": 0.329, "activity": 0.0079, "date": 1653175450000}, + { "iob": 0.34, "activity": 0.0074, "date": 1653175750000}, + { "iob": 0.304, "activity": 0.0068, "date": 1653176050000}, + { "iob": 0.272, "activity": 0.0062, "date": 1653176350000}, + { "iob": 0.512, "activity": 0.006, "date": 1653176650000}, + { "iob": 0.581, "activity": 0.0061, "date": 1653176950000}, + { "iob": 1.238, "activity": 0.0075, "date": 1653177250000}, + { "iob": 1.147, "activity": 0.0088, "date": 1653177550000}, + { "iob": 1.151, "activity": 0.0098, "date": 1653177850000}, + { "iob": 1.05, "activity": 0.0104, "date": 1653178149000}, + { "iob": 0.947, "activity": 0.0107, "date": 1653178449000}, + { "iob": 0.844, "activity": 0.0106, "date": 1653178750000}, + { "iob": 0.741, "activity": 0.0104, "date": 1653179050000}, + { "iob": 0.59, "activity": 0.0099, "date": 1653179350000}, + { "iob": 0.542, "activity": 0.0093, "date": 1653179649000}, + { "iob": 0.497, "activity": 0.0087, "date": 1653179949000}, + { "iob": 0.456, "activity": 0.0081, "date": 1653180250000}, + { "iob": 0.516, "activity": 0.0077, "date": 1653180549000}, + { "iob": 0.429, "activity": 0.0072, "date": 1653180849000}, + { "iob": 0.294, "activity": 0.0066, "date": 1653181150000}, + { "iob": 0.163, "activity": 0.0058, "date": 1653181450000}, + { "iob": 0.037, "activity": 0.0049, "date": 1653181750000}, + { "iob": -0.085, "activity": 0.0039, "date": 1653182050000}, + { "iob": -0.153, "activity": 0.0029, "date": 1653182349000}, + { "iob": -0.265, "activity": 0.0018, "date": 1653182650000}, + { "iob": -0.371, "activity": 0.0007, "date": 1653182949000}, + { "iob": -0.471, "activity": -0.0005, "date": 1653183249000}, + { "iob": -0.566, "activity": -0.0016, "date": 1653183550000}, + { "iob": -0.606, "activity": -0.0026, "date": 1653183850000}, + { "iob": -0.64, "activity": -0.0036, "date": 1653184150000}, + { "iob": -0.67, "activity": -0.0044, "date": 1653184450000} +] + From 0774aa46d0afec7140f6913e1845415cee5ee025 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 25 Jun 2022 10:17:59 +0200 Subject: [PATCH 54/71] prevent NPE --- .../nightscout/androidaps/dialogs/CarbsDialog.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt index cd9eedaeb5..7c73776689 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt @@ -143,7 +143,7 @@ class CarbsDialog : DialogFragmentWithDate() { ) val plus1text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_1, FAV1_DEFAULT)) binding.plus1.text = plus1text - binding.plus1.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus1text + binding.plus1.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus1text binding.plus1.setOnClickListener { binding.carbs.value = max( 0.0, binding.carbs.value @@ -155,7 +155,7 @@ class CarbsDialog : DialogFragmentWithDate() { val plus2text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_2, FAV2_DEFAULT)) binding.plus2.text = plus2text - binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus2text + binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus2text binding.plus2.setOnClickListener { binding.carbs.value = max( 0.0, binding.carbs.value @@ -166,7 +166,7 @@ class CarbsDialog : DialogFragmentWithDate() { } val plus3text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_3, FAV3_DEFAULT)) binding.plus3.text = plus3text - binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus3text + binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus3text binding.plus3.setOnClickListener { binding.carbs.value = max( 0.0, binding.carbs.value @@ -179,7 +179,7 @@ class CarbsDialog : DialogFragmentWithDate() { setOnValueChangedListener { eventTime: Long -> run { val timeOffset = ((eventTime - eventTimeOriginal) / (1000 * 60)).toDouble() - binding.time.value = timeOffset + if (_binding != null) binding.time.value = timeOffset } } @@ -250,7 +250,8 @@ class CarbsDialog : DialogFragmentWithDate() { val hypoSelected = binding.hypoTt.isChecked if (hypoSelected) actions.add( - rh.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(hypoTT) + " " + unitLabel + " (" + rh.gs(R.string.format_mins, hypoTTDuration) + ")").formatColor( context, + rh.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(hypoTT) + " " + unitLabel + " (" + rh.gs(R.string.format_mins, hypoTTDuration) + ")").formatColor( + context, rh, R.attr.tempTargetConfirmation ) @@ -258,7 +259,7 @@ class CarbsDialog : DialogFragmentWithDate() { val timeOffset = binding.time.value.toInt() if (useAlarm && carbs > 0 && timeOffset > 0) - actions.add(rh.gs(R.string.alarminxmin, timeOffset).formatColor(context , rh, R.attr.infoColor)) + actions.add(rh.gs(R.string.alarminxmin, timeOffset).formatColor(context, rh, R.attr.infoColor)) val duration = binding.duration.value.toInt() if (duration > 0) actions.add(rh.gs(R.string.duration) + ": " + duration + rh.gs(R.string.shorthour)) @@ -385,7 +386,7 @@ class CarbsDialog : DialogFragmentWithDate() { override fun onResume() { super.onResume() - if(!queryingProtection) { + if (!queryingProtection) { queryingProtection = true activity?.let { activity -> val cancelFail = { From 530004fb57f557330e1f7487dfddd86ab72c5a8b Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 25 Jun 2022 10:27:28 +0200 Subject: [PATCH 55/71] remove unused code, prevent root blocking --- .../plugins/general/overview/OverviewFragment.kt | 13 ++++++------- .../events/EventUpdateOverviewPumpStatus.kt | 5 ----- 2 files changed, 6 insertions(+), 12 deletions(-) delete mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventUpdateOverviewPumpStatus.kt diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt index 4374fd0c05..8ecba9d5ad 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt @@ -51,7 +51,11 @@ import info.nightscout.androidaps.plugins.constraints.bgQualityCheck.BgQualityCh import info.nightscout.androidaps.plugins.general.automation.AutomationPlugin import info.nightscout.androidaps.plugins.general.nsclient.data.NSDeviceStatus import info.nightscout.androidaps.plugins.general.overview.activities.QuickWizardListActivity -import info.nightscout.androidaps.plugins.general.overview.events.* +import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewCalcProgress +import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewGraph +import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewIobCob +import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewNotification +import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewSensitivity import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationStore import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider @@ -66,7 +70,6 @@ import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.ToastUtils import info.nightscout.androidaps.utils.TrendCalculator import info.nightscout.androidaps.utils.alertDialogs.OKDialog -import info.nightscout.androidaps.interfaces.BuildHelper import info.nightscout.androidaps.utils.protection.ProtectionCheck import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.androidaps.utils.ui.SingleClickButton @@ -236,10 +239,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList .debounce(1L, TimeUnit.SECONDS) .observeOn(aapsSchedulers.main) .subscribe({ updateGraph() }, fabricPrivacy::logException) - disposable += activePlugin.activeOverview.overviewBus - .toObservable(EventUpdateOverviewPumpStatus::class.java) - .observeOn(aapsSchedulers.main) - .subscribe({ updatePumpStatus() }, fabricPrivacy::logException) disposable += activePlugin.activeOverview.overviewBus .toObservable(EventUpdateOverviewNotification::class.java) .observeOn(aapsSchedulers.main) @@ -308,7 +307,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList } handler.postDelayed(refreshLoop, 60 * 1000L) - refreshAll() + handler.post { refreshAll() } updatePumpStatus() updateCalcProgress() } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventUpdateOverviewPumpStatus.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventUpdateOverviewPumpStatus.kt deleted file mode 100644 index 30ad6b7507..0000000000 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/events/EventUpdateOverviewPumpStatus.kt +++ /dev/null @@ -1,5 +0,0 @@ -package info.nightscout.androidaps.plugins.general.overview.events - -import info.nightscout.androidaps.events.Event - -class EventUpdateOverviewPumpStatus(val from: String) : Event() \ No newline at end of file From d71cc391fef3a37405e465a0b2d88a71e09356cb Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 25 Jun 2022 10:29:20 +0200 Subject: [PATCH 56/71] RL: resolve crash on nullable object --- .../common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt index 36494bb17b..f0623eaf92 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/ServiceTaskExecutor.kt @@ -30,7 +30,7 @@ class ServiceTaskExecutor @Inject constructor() : ThreadPoolExecutor(1, 1, 10000 task.preOp() } - override fun afterExecute(r: Runnable, t: Throwable) { + override fun afterExecute(r: Runnable, t: Throwable?) { // This is run on either caller UI thread or Service UI thread. val task = r as ServiceTask task.postOp() From 991f2c95b7ee5ffe351f21957a0d3f934069dc12 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 25 Jun 2022 13:51:44 +0200 Subject: [PATCH 57/71] Exception on NaN --- .../plugins/general/overview/OverviewData.kt | 4 +- .../general/overview/OverviewPlugin.kt | 49 +------------------ .../xdripStatusline/StatusLinePlugin.kt | 7 ++- .../plugins/insulin/InsulinLyumjevPlugin.kt | 6 ++- .../plugins/insulin/InsulinOrefBasePlugin.kt | 35 ++++++------- .../insulin/InsulinOrefFreePeakPlugin.kt | 6 ++- .../insulin/InsulinOrefRapidActingPlugin.kt | 6 ++- .../InsulinOrefUltraRapidActingPlugin.kt | 6 ++- .../IobCobCalculatorPlugin.kt | 1 + .../insulin/InsulinLyumjevPluginTest.kt | 8 +-- .../insulin/InsulinOrefBasePluginTest.kt | 38 ++++++-------- .../insulin/InsulinOrefFreePeakPluginTest.kt | 6 ++- .../InsulinOrefRapidActingPluginTest.kt | 8 +-- .../InsulinOrefUltraRapidActingPluginTest.kt | 8 +-- .../nightscout/androidaps/data/IobTotal.kt | 20 ++++---- .../info/nightscout/androidaps/utils/Round.kt | 13 ++--- .../androidaps/danaRv2/DanaRv2Plugin.java | 3 +- .../androidaps/danar/AbstractDanaRPlugin.java | 3 +- .../androidaps/danar/DanaRPlugin.java | 3 +- 19 files changed, 90 insertions(+), 140 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt index d114f19847..6f0b64bc6d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt @@ -207,8 +207,8 @@ class OverviewData @Inject constructor( * IOB, COB */ - fun bolusIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromBolus().round(fabricPrivacy) - fun basalIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round(fabricPrivacy) + fun bolusIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromBolus().round() + fun basalIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round() fun cobInfo(iobCobCalculator: IobCobCalculator): CobInfo = iobCobCalculator.getCobInfo(true, "Overview COB") val lastCarbsTime: Long diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt index 50bf49c812..58b2de95d6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt @@ -6,11 +6,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventPumpStatusChanged import info.nightscout.androidaps.extensions.* -import info.nightscout.androidaps.interfaces.Config -import info.nightscout.androidaps.interfaces.Overview -import info.nightscout.androidaps.interfaces.PluginBase -import info.nightscout.androidaps.interfaces.PluginDescription -import info.nightscout.androidaps.interfaces.PluginType +import info.nightscout.androidaps.interfaces.* import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification @@ -21,7 +17,6 @@ import info.nightscout.androidaps.plugins.general.overview.graphExtensions.Scale import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationStore import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress import info.nightscout.androidaps.utils.FabricPrivacy -import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP @@ -175,46 +170,4 @@ class OverviewPlugin @Inject constructor( .storeDouble(R.string.key_statuslights_bat_critical, sp, rh) .storeInt(R.string.key_boluswizard_percentage, sp, rh) } -/* - @Volatile - var runningRefresh = false - override fun refreshLoop(from: String) { - if (runningRefresh) return - runningRefresh = true - overviewBus.send(EventUpdateOverviewNotification(from)) - loadIobCobResults(from) - overviewBus.send(EventUpdateOverviewProfile(from)) - overviewBus.send(EventUpdateOverviewBg(from)) - overviewBus.send(EventUpdateOverviewTime(from)) - overviewBus.send(EventUpdateOverviewTemporaryBasal(from)) - overviewBus.send(EventUpdateOverviewExtendedBolus(from)) - overviewBus.send(EventUpdateOverviewTemporaryTarget(from)) - loadAsData(from) - overviewData.preparePredictions(from) - overviewData.prepareBasalData(from) - overviewData.prepareTemporaryTargetData(from) - overviewData.prepareTreatmentsData(from) - overviewData.prepareIobAutosensData(from) - overviewBus.send(EventUpdateOverviewGraph(from)) - overviewBus.send(EventUpdateOverviewIobCob(from)) - aapsLogger.debug(LTag.UI, "refreshLoop finished") - runningRefresh = false - } - - @Suppress("SameParameterValue") - private fun loadAll(from: String) { - loadBg(from) - loadProfile(from) - loadTemporaryTarget(from) - loadIobCobResults(from) - loadAsData(from) - overviewData.prepareBasalData(from) - overviewData.prepareTemporaryTargetData(from) - overviewData.prepareTreatmentsData(from) -// prepareIobAutosensData(from) -// preparePredictions(from) - overviewBus.send(EventUpdateOverviewGraph(from)) - aapsLogger.debug(LTag.UI, "loadAll finished") - } -*/ } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatusLinePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatusLinePlugin.kt index 1c54ea4feb..e0106a49d5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatusLinePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/xdripStatusline/StatusLinePlugin.kt @@ -8,12 +8,11 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.events.* import info.nightscout.androidaps.extensions.toStringShort import info.nightscout.androidaps.interfaces.* -import info.nightscout.shared.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.utils.DecimalFormatter import info.nightscout.androidaps.utils.FabricPrivacy -import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers +import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign @@ -123,8 +122,8 @@ class StatusLinePlugin @Inject constructor( status += activeTemp.toStringShort() + " " } //IOB - val bolusIob = iobCobCalculator.calculateIobFromBolus().round(fabricPrivacy) - val basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round(fabricPrivacy) + val bolusIob = iobCobCalculator.calculateIobFromBolus().round() + val basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round() status += DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob) + "U" if (sp.getBoolean(R.string.key_xdripstatus_detailediob, true)) { status += ("(" diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt index 4ca7c6f91e..e13bb47b6f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPlugin.kt @@ -8,6 +8,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.shared.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.utils.HardLimits import org.json.JSONObject import javax.inject.Inject import javax.inject.Singleton @@ -19,8 +20,9 @@ class InsulinLyumjevPlugin @Inject constructor( profileFunction: ProfileFunction, rxBus: RxBus, aapsLogger: AAPSLogger, - config: Config -) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) { + config: Config, + hardLimits: HardLimits +) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) { override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_LYUMJEV override val friendlyName get(): String = rh.gs(R.string.lyumjev) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt index a13f3e467e..f84d23f531 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt @@ -6,12 +6,12 @@ import info.nightscout.androidaps.data.Iob import info.nightscout.androidaps.database.embedments.InsulinConfiguration import info.nightscout.androidaps.database.entities.Bolus import info.nightscout.androidaps.interfaces.* -import info.nightscout.shared.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification import info.nightscout.androidaps.plugins.general.overview.notifications.Notification +import info.nightscout.androidaps.utils.HardLimits import info.nightscout.androidaps.utils.T -import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.shared.logging.AAPSLogger import kotlin.math.exp import kotlin.math.pow @@ -27,7 +27,8 @@ abstract class InsulinOrefBasePlugin( val profileFunction: ProfileFunction, val rxBus: RxBus, aapsLogger: AAPSLogger, - config: Config + config: Config, + val hardLimits: HardLimits ) : PluginBase( PluginDescription() .mainType(PluginType.INSULIN) @@ -43,18 +44,18 @@ abstract class InsulinOrefBasePlugin( override val dia get(): Double { val dia = userDefinedDia - return if (dia >= MIN_DIA) { + return if (dia >= hardLimits.minDia()) { dia } else { sendShortDiaNotification(dia) - MIN_DIA + hardLimits.minDia() } } open fun sendShortDiaNotification(dia: Double) { if (System.currentTimeMillis() - lastWarned > 60 * 1000) { lastWarned = System.currentTimeMillis() - val notification = Notification(Notification.SHORT_DIA, String.format(notificationPattern, dia, MIN_DIA), Notification.URGENT) + val notification = Notification(Notification.SHORT_DIA, String.format(notificationPattern, dia, hardLimits.minDia()), Notification.URGENT) rxBus.send(EventNewNotification(notification)) } } @@ -65,12 +66,13 @@ abstract class InsulinOrefBasePlugin( open val userDefinedDia: Double get() { val profile = profileFunction.getProfile() - return profile?.dia ?: MIN_DIA + return profile?.dia ?: hardLimits.minDia() } override fun iobCalcForTreatment(bolus: Bolus, time: Long, dia: Double): Iob { + assert(dia != 0.0) + assert(peak != 0) val result = Iob() - val peak = peak if (bolus.amount != 0.0) { val bolusTime = bolus.timestamp val t = (time - bolusTime) / 1000.0 / 60.0 @@ -80,9 +82,9 @@ abstract class InsulinOrefBasePlugin( if (t < td) { val tau = tp * (1 - tp / td) / (1 - 2 * tp / td) val a = 2 * tau / td - val S = 1 / (1 - a + (1 + a) * exp(-td / tau)) - result.activityContrib = bolus.amount * (S / tau.pow(2.0)) * t * (1 - t / td) * exp(-t / tau) - result.iobContrib = bolus.amount * (1 - S * (1 - a) * ((t.pow(2.0) / (tau * td * (1 - a)) - t / tau - 1) * Math.exp(-t / tau) + 1)) + val s = 1 / (1 - a + (1 + a) * exp(-td / tau)) + result.activityContrib = bolus.amount * (s / tau.pow(2.0)) * t * (1 - t / td) * exp(-t / tau) + result.iobContrib = bolus.amount * (1 - s * (1 - a) * ((t.pow(2.0) / (tau * td * (1 - a)) - t / tau - 1) * exp(-t / tau) + 1)) } } return result @@ -95,17 +97,12 @@ abstract class InsulinOrefBasePlugin( get(): String { var comment = commentStandardText() val userDia = userDefinedDia - if (userDia < MIN_DIA) { - comment += "\n" + rh.gs(R.string.dia_too_short, userDia, MIN_DIA) + if (userDia < hardLimits.minDia()) { + comment += "\n" + rh.gs(R.string.dia_too_short, userDia, hardLimits.minDia()) } return comment } - override abstract val peak: Int + abstract override val peak: Int abstract fun commentStandardText(): String - - companion object { - - const val MIN_DIA = 5.0 - } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt index c9588c493b..3b3150cca7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPlugin.kt @@ -10,6 +10,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.shared.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.utils.HardLimits import info.nightscout.shared.sharedPreferences.SP import org.json.JSONObject import javax.inject.Inject @@ -26,8 +27,9 @@ class InsulinOrefFreePeakPlugin @Inject constructor( profileFunction: ProfileFunction, rxBus: RxBus, aapsLogger: AAPSLogger, - config: Config -) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) { + config: Config, + hardLimits: HardLimits +) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) { override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_FREE_PEAK diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt index 8abb4619cc..76bceef9f2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPlugin.kt @@ -8,6 +8,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.shared.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.utils.HardLimits import org.json.JSONObject import javax.inject.Inject import javax.inject.Singleton @@ -22,8 +23,9 @@ class InsulinOrefRapidActingPlugin @Inject constructor( profileFunction: ProfileFunction, rxBus: RxBus, aapsLogger: AAPSLogger, - config: Config -) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) { + config: Config, + hardLimits: HardLimits +) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) { override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_RAPID_ACTING override val friendlyName get(): String = rh.gs(R.string.rapid_acting_oref) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt index 4f944b4674..631d495943 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPlugin.kt @@ -8,6 +8,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.shared.logging.AAPSLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.utils.HardLimits import org.json.JSONObject import javax.inject.Inject import javax.inject.Singleton @@ -22,8 +23,9 @@ class InsulinOrefUltraRapidActingPlugin @Inject constructor( profileFunction: ProfileFunction, rxBus: RxBus, aapsLogger: AAPSLogger, - config: Config -) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) { + config: Config, + hardLimits: HardLimits +) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) { override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_ULTRA_RAPID_ACTING override val friendlyName get(): String = rh.gs(R.string.ultrarapid_oref) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt index 00fa1dd6dd..30c05b1f32 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt @@ -481,6 +481,7 @@ class IobCobCalculatorPlugin @Inject constructor( val profile = profileFunction.getProfile() ?: return total val dia = profile.dia val divisor = sp.getDouble(R.string.key_openapsama_bolussnooze_dia_divisor, 2.0) + assert(divisor > 0) val boluses = repository.getBolusesDataFromTime(toTime - range(), true).blockingGet() diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt index c906ad4b27..27f3b16011 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinLyumjevPluginTest.kt @@ -6,9 +6,10 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.interfaces.Insulin import info.nightscout.androidaps.interfaces.ProfileFunction -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.utils.HardLimits +import info.nightscout.shared.logging.AAPSLogger import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule @@ -31,6 +32,7 @@ class InsulinLyumjevPluginTest { @Mock lateinit var profileFunction: ProfileFunction @Mock lateinit var aapsLogger: AAPSLogger @Mock lateinit var config: Config + @Mock lateinit var hardLimits: HardLimits private var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { @@ -39,7 +41,7 @@ class InsulinLyumjevPluginTest { @Before fun setup() { - sut = InsulinLyumjevPlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) + sut = InsulinLyumjevPlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt index 1aada50c74..254974283b 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePluginTest.kt @@ -9,17 +9,17 @@ import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.interfaces.Insulin import info.nightscout.androidaps.interfaces.ProfileFunction -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.androidaps.plugins.bus.RxBus -import info.nightscout.androidaps.plugins.insulin.InsulinOrefBasePlugin.Companion.MIN_DIA -import info.nightscout.androidaps.utils.DefaultValueHelper import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.utils.HardLimits +import info.nightscout.shared.logging.AAPSLogger import org.json.JSONObject import org.junit.Assert import org.junit.Before import org.junit.Rule import org.junit.Test import org.mockito.Mock +import org.mockito.Mockito.`when` import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule @@ -35,10 +35,9 @@ class InsulinOrefBasePluginTest { profileFunction: ProfileFunction, rxBus: RxBus, aapsLogger: AAPSLogger, - config: Config - ) : InsulinOrefBasePlugin( - injector, rh, profileFunction, rxBus, aapsLogger, config - ) { + config: Config, + hardLimits: HardLimits + ) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) { override fun sendShortDiaNotification(dia: Double) { shortDiaNotificationSend = true @@ -62,13 +61,13 @@ class InsulinOrefBasePluginTest { private lateinit var sut: InsulinBaseTest - @Mock lateinit var defaultValueHelper: DefaultValueHelper @Mock lateinit var rh: ResourceHelper @Mock lateinit var profileFunction: ProfileFunction @Mock lateinit var rxBus: RxBus @Mock lateinit var aapsLogger: AAPSLogger @Mock lateinit var activePlugin: ActivePlugin @Mock lateinit var config: Config + @Mock lateinit var hardLimits: HardLimits private var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { @@ -77,30 +76,23 @@ class InsulinOrefBasePluginTest { @Before fun setUp() { - sut = InsulinBaseTest(injector, rh, profileFunction, rxBus, aapsLogger, config) + sut = InsulinBaseTest(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) + `when`(hardLimits.minDia()).thenReturn(5.0) } @Test fun testGetDia() { - Assert.assertEquals(MIN_DIA, sut.dia, 0.0) - testUserDefinedDia = MIN_DIA + 1 - Assert.assertEquals(MIN_DIA + 1, sut.dia, 0.0) - testUserDefinedDia = MIN_DIA - 1 - Assert.assertEquals(MIN_DIA, sut.dia, 0.0) + Assert.assertEquals(5.0, sut.dia, 0.0) + testUserDefinedDia = 5.0 + 1 + Assert.assertEquals(5.0 + 1, sut.dia, 0.0) + testUserDefinedDia = 5.0 - 1 + Assert.assertEquals(5.0, sut.dia, 0.0) Assert.assertTrue(shortDiaNotificationSend) } - @Test - fun minDiaTes() { - Assert.assertEquals(5.0, MIN_DIA, 0.0001) - } - @Test fun testIobCalcForTreatment() { val treatment = Bolus(timestamp = 0, amount = 10.0, type = Bolus.Type.NORMAL) - val expected = Iob() - Assert.assertEquals(expected.iobContrib, sut.iobCalcForTreatment(treatment, 0, 0.0).iobContrib, 0.001) - Assert.assertEquals(expected.activityContrib, sut.iobCalcForTreatment(treatment, 0, 0.0).activityContrib, 0.001) testPeak = 30 testUserDefinedDia = 4.0 val time = System.currentTimeMillis() diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt index c71c61655b..75d996285d 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefFreePeakPluginTest.kt @@ -7,8 +7,9 @@ import info.nightscout.androidaps.TestBase import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.interfaces.Insulin import info.nightscout.androidaps.interfaces.ProfileFunction -import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.utils.HardLimits import info.nightscout.shared.sharedPreferences.SP import org.junit.Assert.assertEquals import org.junit.Before @@ -31,6 +32,7 @@ class InsulinOrefFreePeakPluginTest : TestBase() { @Mock lateinit var rxBus: RxBus @Mock lateinit var profileFunction: ProfileFunction @Mock lateinit var config: Config + @Mock lateinit var hardLimits: HardLimits private var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { @@ -39,7 +41,7 @@ class InsulinOrefFreePeakPluginTest : TestBase() { @Before fun setup() { - sut = InsulinOrefFreePeakPlugin( injector, sp, rh, profileFunction, rxBus, aapsLogger, config) + sut = InsulinOrefFreePeakPlugin(injector, sp, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt index fb2a5f91da..317ccabf5f 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefRapidActingPluginTest.kt @@ -6,9 +6,10 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.interfaces.Insulin import info.nightscout.androidaps.interfaces.ProfileFunction -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.utils.HardLimits +import info.nightscout.shared.logging.AAPSLogger import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule @@ -31,6 +32,7 @@ class InsulinOrefRapidActingPluginTest { @Mock lateinit var profileFunction: ProfileFunction @Mock lateinit var aapsLogger: AAPSLogger @Mock lateinit var config: Config + @Mock lateinit var hardLimits: HardLimits private var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { @@ -39,7 +41,7 @@ class InsulinOrefRapidActingPluginTest { @Before fun setup() { - sut = InsulinOrefRapidActingPlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) + sut = InsulinOrefRapidActingPlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt index 2de46cf16b..1944d0a0f0 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefUltraRapidActingPluginTest.kt @@ -6,9 +6,10 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.interfaces.Insulin import info.nightscout.androidaps.interfaces.ProfileFunction -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.utils.HardLimits +import info.nightscout.shared.logging.AAPSLogger import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule @@ -31,6 +32,7 @@ class InsulinOrefUltraRapidActingPluginTest { @Mock lateinit var profileFunction: ProfileFunction @Mock lateinit var aapsLogger: AAPSLogger @Mock lateinit var config: Config + @Mock lateinit var hardLimits: HardLimits private var injector: HasAndroidInjector = HasAndroidInjector { AndroidInjector { @@ -39,7 +41,7 @@ class InsulinOrefUltraRapidActingPluginTest { @Before fun setup() { - sut = InsulinOrefUltraRapidActingPlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) + sut = InsulinOrefUltraRapidActingPlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) } @Test diff --git a/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt b/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt index eb5f46428d..44540e1e27 100644 --- a/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt +++ b/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt @@ -10,7 +10,7 @@ import org.json.JSONException import org.json.JSONObject @Suppress("SpellCheckingInspection") -class IobTotal(val time: Long) : DataPointWithLabelInterface { +class IobTotal(val time: Long) : DataPointWithLabelInterface { var iob = 0.0 var activity = 0.0 @@ -51,15 +51,15 @@ class IobTotal(val time: Long) : DataPointWithLabelInterface { return this } - fun round(fabricPrivacy: FabricPrivacy? = null): IobTotal { - iob = Round.roundTo(iob, 0.001, fabricPrivacy) - activity = Round.roundTo(activity, 0.0001, fabricPrivacy) - bolussnooze = Round.roundTo(bolussnooze, 0.0001, fabricPrivacy) - basaliob = Round.roundTo(basaliob, 0.001, fabricPrivacy) - netbasalinsulin = Round.roundTo(netbasalinsulin, 0.001, fabricPrivacy) - hightempinsulin = Round.roundTo(hightempinsulin, 0.001, fabricPrivacy) - netInsulin = Round.roundTo(netInsulin, 0.001, fabricPrivacy) - extendedBolusInsulin = Round.roundTo(extendedBolusInsulin, 0.001, fabricPrivacy) + fun round(): IobTotal { + iob = Round.roundTo(iob, 0.001) + activity = Round.roundTo(activity, 0.0001) + bolussnooze = Round.roundTo(bolussnooze, 0.0001) + basaliob = Round.roundTo(basaliob, 0.001) + netbasalinsulin = Round.roundTo(netbasalinsulin, 0.001) + hightempinsulin = Round.roundTo(hightempinsulin, 0.001) + netInsulin = Round.roundTo(netInsulin, 0.001) + extendedBolusInsulin = Round.roundTo(extendedBolusInsulin, 0.001) return this } diff --git a/core/src/main/java/info/nightscout/androidaps/utils/Round.kt b/core/src/main/java/info/nightscout/androidaps/utils/Round.kt index 3f854d4979..e7ca2f5fd8 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/Round.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/Round.kt @@ -2,6 +2,7 @@ package info.nightscout.androidaps.utils import android.os.Bundle import java.math.BigDecimal +import java.security.InvalidParameterException import kotlin.math.abs import kotlin.math.ceil import kotlin.math.floor @@ -12,16 +13,10 @@ import kotlin.math.roundToLong */ object Round { - fun roundTo(x: Double, step: Double, fabricPrivacy: FabricPrivacy? = null): Double = try { - if (x == 0.0) 0.0 + fun roundTo(x: Double, step: Double): Double { + if (x.isNaN()) throw InvalidParameterException("Parameter is NaN") + return if (x == 0.0) 0.0 else BigDecimal.valueOf((x / step).roundToLong()).multiply(BigDecimal.valueOf(step)).toDouble() - } catch (e: Exception) { - fabricPrivacy?.logCustom("Error_roundTo", Bundle().apply { - putDouble("x", x) - putDouble("step", step) - putString("stacktrace", e.stackTraceToString()) - }) - 0.0 } fun floorTo(x: Double, step: Double): Double = diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java b/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java index 1253ef889a..40e9688199 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java +++ b/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java @@ -354,8 +354,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { insulin = constraintChecker.applyExtendedBolusConstraints(new Constraint<>(insulin)).value(); // needs to be rounded int durationInHalfHours = Math.max(durationInMinutes / 30, 1); - insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep(), - null); + insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); PumpEnactResult result = new PumpEnactResult(getInjector()); if (danaPump.isExtendedInProgress() && Math.abs(danaPump.getExtendedBolusAmount() - insulin) < pumpDescription.getExtendedBolusStep()) { diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java b/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java index f2dbf782a6..77588a77bf 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java +++ b/danar/src/main/java/info/nightscout/androidaps/danar/AbstractDanaRPlugin.java @@ -267,8 +267,7 @@ public abstract class AbstractDanaRPlugin extends PumpPluginBase implements Pump insulin = constraintChecker.applyExtendedBolusConstraints(new Constraint<>(insulin)).value(); // needs to be rounded int durationInHalfHours = Math.max(durationInMinutes / 30, 1); - insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep(), - null); + insulin = Round.INSTANCE.roundTo(insulin, getPumpDescription().getExtendedBolusStep()); PumpEnactResult result = new PumpEnactResult(getInjector()); if (danaPump.isExtendedInProgress() && Math.abs(danaPump.getExtendedBolusAmount() - insulin) < getPumpDescription().getExtendedBolusStep()) { diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java b/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java index 1a2e573be2..10c8b58fa2 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java +++ b/danar/src/main/java/info/nightscout/androidaps/danar/DanaRPlugin.java @@ -288,8 +288,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin { double extendedRateToSet = absoluteRate - getBaseBasalRate(); extendedRateToSet = constraintChecker.applyBasalConstraints(new Constraint<>(extendedRateToSet), profile).value(); // needs to be rounded to 0.1 - extendedRateToSet = Round.INSTANCE.roundTo(extendedRateToSet, - pumpDescription.getExtendedBolusStep() * 2, null); // *2 because of half hours + extendedRateToSet = Round.INSTANCE.roundTo(extendedRateToSet, pumpDescription.getExtendedBolusStep() * 2); // *2 because of half hours // What is current rate of extended bolusing in u/h? aapsLogger.debug(LTag.PUMP, "setTempBasalAbsolute: Extended bolus in progress: " + (danaPump.isExtendedInProgress()) + " rate: " + danaPump.getExtendedBolusAbsoluteRate() + "U/h duration remaining: " + danaPump.getExtendedBolusRemainingMinutes() + "min"); From 9cfcf238a16f1cc7e494ff6510bb749b84f8406e Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 25 Jun 2022 13:57:37 +0200 Subject: [PATCH 58/71] fix typo --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb0b891cfe..d33d543dd9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1175,7 +1175,7 @@ Max-BG out of range! Temptarget:\nMin: %1$s\nMax: %2$s\nDuration: %3$s Temptarget:\nTarget: %1$s\nDuration: %2$s - Temptarget:\Reason: %1$s\nTarget: %2$s\nDuration: %3$s + Temptarget:\nReason: %1$s\nTarget: %2$s\nDuration: %3$s QuickWizard: %1$s\nInsulin: %2$.2fU\nCarbs: %3$dg Calc. Wizard:\nInsulin: %1$.2fU\nCarbs: %2$dg Show entry on device: From 00f0446c21e059f1287333fc72578daeb6f8c8c2 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 25 Jun 2022 15:53:40 +0200 Subject: [PATCH 59/71] EROS: show discard button in engineering mode --- .../pump/omnipod/eros/ui/ErosPodManagementActivity.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/ErosPodManagementActivity.kt b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/ErosPodManagementActivity.kt index 0aa199eabc..5e55c7d612 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/ErosPodManagementActivity.kt +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/ui/ErosPodManagementActivity.kt @@ -32,6 +32,7 @@ import info.nightscout.androidaps.queue.events.EventQueueChanged import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.alertDialogs.OKDialog import info.nightscout.androidaps.extensions.toVisibility +import info.nightscout.androidaps.interfaces.BuildHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.androidaps.utils.ui.UIRunnable import io.reactivex.rxjava3.disposables.CompositeDisposable @@ -53,6 +54,7 @@ class ErosPodManagementActivity : NoSplashAppCompatActivity() { @Inject lateinit var omnipodErosPumpPlugin: OmnipodErosPumpPlugin @Inject lateinit var serviceTaskExecutor: ServiceTaskExecutor @Inject lateinit var aapsSchedulers: AapsSchedulers + @Inject lateinit var buildHelper: BuildHelper private var disposables: CompositeDisposable = CompositeDisposable() private val handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) @@ -160,7 +162,8 @@ class ErosPodManagementActivity : NoSplashAppCompatActivity() { // Only show the discard button to reset a cached Pod address before the Pod has actually been initialized // Otherwise, users should use the Deactivate Pod Wizard. In case proper deactivation fails, // they will get an option to discard the Pod state there - val discardButtonEnabled = podStateManager.hasPodState() && !podStateManager.isPodInitialized + // Milos Kozak: allow to show button by activating engineering mode + val discardButtonEnabled = podStateManager.hasPodState() && (!podStateManager.isPodInitialized || buildHelper.isEngineeringMode()) binding.buttonDiscardPod.visibility = discardButtonEnabled.toVisibility() val pulseLogButtonEnabled = aapsOmnipodManager.isPulseLogButtonEnabled From 37aebc1575657a03aab81ee136c1fec5fde69c3a Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 25 Jun 2022 17:20:49 +0200 Subject: [PATCH 60/71] New Crowdin updates (#1844) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations exam.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Turkish) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Italian) * New translations strings.xml (French) * New translations strings.xml (Hebrew) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Spanish) * Update source file strings.xml * New translations strings.xml (Dutch) * New translations strings.xml (Turkish) * New translations exam.xml (Hebrew) * New translations strings.xml (Hebrew) * New translations strings.xml (Hebrew) * New translations strings.xml (Czech) * New translations strings.xml (Hebrew) * New translations strings.xml (Slovak) * New translations strings.xml (Hebrew) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations exam.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Italian) * New translations strings.xml (French) * New translations strings.xml (Hebrew) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Spanish) * Update source file strings.xml * New translations strings.xml (Czech) * Update source file strings.xml * New translations strings.xml (Spanish) --- app/src/main/res/values-cs-rCZ/strings.xml | 4 +- app/src/main/res/values-da-rDK/strings.xml | 3 - app/src/main/res/values-es-rES/strings.xml | 6 +- app/src/main/res/values-fr-rFR/strings.xml | 3 - app/src/main/res/values-it-rIT/exam.xml | 1 + app/src/main/res/values-it-rIT/strings.xml | 34 +++++++++++- app/src/main/res/values-iw-rIL/exam.xml | 1 + app/src/main/res/values-iw-rIL/strings.xml | 55 ++++++++++++++++++- app/src/main/res/values-nl-rNL/exam.xml | 1 + app/src/main/res/values-nl-rNL/strings.xml | 25 ++++++++- app/src/main/res/values-no-rNO/strings.xml | 5 +- app/src/main/res/values-pt-rBR/strings.xml | 3 - app/src/main/res/values-ru-rRU/strings.xml | 3 - app/src/main/res/values-sk-rSK/strings.xml | 7 ++- app/src/main/res/values-sv-rSE/strings.xml | 1 - app/src/main/res/values-tr-rTR/strings.xml | 5 +- app/src/main/res/values-zh-rCN/strings.xml | 3 - .../src/main/res/values-it-rIT/strings.xml | 3 + .../src/main/res/values-nl-rNL/strings.xml | 3 + core/src/main/res/values-it-rIT/strings.xml | 47 ++++++++++++++++ core/src/main/res/values-nl-rNL/strings.xml | 43 +++++++++++++++ danar/src/main/res/values-it-rIT/strings.xml | 4 +- danar/src/main/res/values-nl-rNL/strings.xml | 4 +- .../src/main/res/values-it-rIT/strings.xml | 2 + .../src/main/res/values-nl-rNL/strings.xml | 2 + .../src/main/res/values-it-rIT/strings.xml | 38 +++++++++++++ .../src/main/res/values-nl-rNL/strings.xml | 38 +++++++++++++ .../src/main/res/values-it-rIT/strings.xml | 21 +++++++ .../src/main/res/values-nl-rNL/strings.xml | 21 +++++++ shared/src/main/res/values-iw-rIL/strings.xml | 26 +++++++++ shared/src/main/res/values-nl-rNL/strings.xml | 26 +++++++++ wear/src/main/res/values-it-rIT/strings.xml | 28 ++++++++++ wear/src/main/res/values-iw-rIL/strings.xml | 28 ++++++++++ wear/src/main/res/values-nl-rNL/strings.xml | 28 ++++++++++ wear/src/main/res/values/strings.xml | 19 +------ 35 files changed, 483 insertions(+), 58 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 5fbe88be2f..c577d77db7 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -433,8 +433,8 @@ Povolení odesílaní OpenAPS SMB Dynamická ISF - Korekční faktor pro DynamicISF v %% - Korekční faktor pro DynamicISF. Pro agresivnější korekční dávky nastavte hodnoty větší než 100%%, a pro méně agresivní korekce menší než 100%%. + Korekční faktor pro DynamicISF v % + Korekční faktor pro DynamicISF. Pro agresivnější korekční dávky nastavte hodnoty vyšší než 100 %, pro méně agresivní korekce nižší než 100 %. Povolit UAM Povolit SMB Použít super mikro bolusy místo dočasných bazálů pro zrychlení účinku diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index c906acf229..0f64e595f1 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -432,8 +432,6 @@ Aktiver lokale udsendelser. OpenAPS SMB Dynamisk ISF - DynamicISF-justeringsfaktor %% - Justeringsfaktor for Dynamisk ISF. Indstil mere end 100%% for mere aggressive korrektionsdoser og mindre end 100%% for mindre aggressive korrektioner. Aktiver UAM Aktiver SMB Brug Super Mikro Boluser i stedet for midlertidig basal for hurtigere handling @@ -956,7 +954,6 @@ Max-BS udenfor området! Midlertidigt mål:\nMin: %1$s\nMax: %2$s\nVarighed: %3$s Midlertigt mål:\nMål: %1$s\nVarighed: %2$s - Midlertigt mål:\Grund: %1$s\nMål: %2$s\nVarighed: %3$s Hurtigguide: %1$s\nInsulin: %2$.2fE\nKH: %3$dg Guide:\nInsulin: %1$.2fE\nKH: %2$dg Vis post på enhed: diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 0f21604eb6..d80010a14a 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -433,8 +433,8 @@ Habilitar la emisión de mensajes localmente. OpenAPS SMB ISF Dinámico - Factor de ajuste de ISF Dinámico % - Porcentaje del factor de ajuste de ISF Dinámico\nValor predeterminado: 100\nEstablecer valores por encima del 100%% para que el algoritmo aplique correcciones más agresivas y valores por debajo del 100%% para correcciones menos agresivas. + Factor de ajuste de ISF Dinámico % + Porcentaje del factor de ajuste de ISF Dinámico\nValor predeterminado: 100\nEstablecer valores por encima del 100% para que el algoritmo aplique correcciones más agresivas y valores por debajo del 100% para correcciones menos agresivas. Activar UAM Activar SMB Usar microbolos en lugar de basales temporales, para corregir más rápidamente @@ -970,7 +970,7 @@ ¡Glucosa máxima fuera de rango! Objetivo temporal:\nMin: %1$s\nMax: %2$s\nDuración: %3$s Objetivo temporal:\nObjetivo: %1$s\nDuración: %2$s - ObjetivoTemporal:\Razón: %1$s\nObjetivo: %2$s\nDuración: %3$s + ObjetivoTemporal:\nRazón: %1$s\nObjetivo: %2$s\nDuración: %3$s Asistente Rápido: %1$s\nInsulina: %2$.2fU\nCarbohidratos: %3$dg Calc. Asistente:\nInsulina: %1$.2fU\nCarbohidratos: %2$dg Mostrar entrada en dispositivo: diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index e160225133..a278365845 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -434,8 +434,6 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Activer les transmissions locales OpenAPS SMB SI dynamique - Facteur d\'ajustement SI dynamique %% - Facteur d\'ajustement pour SI dynamique. Définissez plus de 100 %% pour des corrections plus agressives et moins de 100 %% pour des corrections moins agressives. Activer RNS Activer SMB Utiliser les Super Micro Bolus au lieu des débits de base temporaires pour une action rapide @@ -970,7 +968,6 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Gly maxi hors limite! Cible temporaire:\nMin: %1$s\nMax : %2$s\nDurée : %3$s Cible temporaire:\nCible: %1$s\nDurée: %2$s - Cible temporaire:\nRaison: %1$s\nCible : %2$s\nDurée : %3$s Assistant: %1$s\nInsuline : %2$.2fU\nGlucides : %3$dg Assistant Calc :\nInsuline : %1$.2fU\nGlucides : %2$dg Afficher l\'entrée sur l\'appareil : diff --git a/app/src/main/res/values-it-rIT/exam.xml b/app/src/main/res/values-it-rIT/exam.xml index 3f3d10cbfa..c91b576f44 100644 --- a/app/src/main/res/values-it-rIT/exam.xml +++ b/app/src/main/res/values-it-rIT/exam.xml @@ -123,6 +123,7 @@ La registrazione di un cambio cannula ripristinerà il rapporto Autosens al 100%. Alcune opzioni del plugin hanno intervalli di tempo configurabili che possono essere impostati dall\'utente. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html + https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Errori inserimento CHO Cosa dovresti fare se hai fatto un inserimento non corretto di carboidrati? Eliminare nei Trattamenti l\'inserimento non corretto e immettere il nuovo valore CHO. diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index eb81d05f9f..4bcbd2d112 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -6,6 +6,7 @@ Sicurezza trattamenti Max bolo consentito [U] Max CHO consentiti [g] + Glicemia sotto la quale si attiva la sospensione per glicemia bassa %1$s Preferenze Preferenze Aggiorna trattamenti da NS @@ -432,14 +433,15 @@ Abilita trasmissioni locali OpenAPS SMB ISF Dinamico - %% fattore di regolazione ISF dinamico - Fattore di regolazione per ISF dinamico. Imposta più del 100%% per correzioni più aggressive, meno del 100%% per correzioni meno aggressive. + Fattore di regolazione per ISF Dinamico (%) + Fattore di regolazione per ISF Dinamico. Imposta più del 100% per dosi di correzione più aggressive e meno del 100% per correzioni meno aggressive. Abilita UAM Abilita SMB Usa super-micro-boli al posto della basale temporanea per un\'azione più veloce Rilevamento dei pasti non annunciati Tempo picco Curva IOB Tempo del picco [min] + Picco Free-Peak Oref Rapid-Acting Oref Ultra-Rapid Oref @@ -591,6 +593,7 @@ Questo valore è chiamato Max IOB nel contesto OpenAPS\nOpenAPS non aggiungerà ulteriore insulina se IOB corrente è maggiore di questo valore Max tempo assorbimento pasto [h] Tempo entro il quale ogni pasto si considera assorbito. Eventuali carboidrati rimanenti verranno tagliati fuori. + Glicemia sotto la quale l\'erogazione d\'insulina è sospesa. Il valore predefinito utilizza il modello target standard. L\'utente può impostare un valore compreso tra 60 mg/dl (3.3mmol/l) e 100mg/dl (5.5mmol/l). Con valori inferiori a 65/3.6 viene usato il modello predefinito Finestre tratt.nto: mostra campo note Avanti Indietro @@ -603,7 +606,11 @@ Secondo incremento di CHO Terzo incremento di CHO CGM + Usa connessione cellulare + Usa connessione WiFi WiFi SSID + Durante la ricarica + Utilizzo batteria Impostazioni connessione SSID ammessi (separati da punto e virgola) Consenti connessione in roaming @@ -678,6 +685,8 @@ Un trattamento (insulina: %1$.2f, carboidrati: %2$d, a: %3$s) non può essere aggiunto ai trattamenti. Controlla e aggiungi il record necessario. eCarbs: %1$d g (%2$d h), ritardo: %3$d m Nessun dato autosens disponibile + File di log + Miscellanea Impostazioni Log Ripristina valori predefiniti Malfunzionamento NSClient. Considera il riavvio di NS e NSClient. @@ -770,6 +779,11 @@ Inserimento % non valido Media TIR + TIR giorno + TIR notte + Dettaglio 14 giorni + SD: %1$s + HbA1c: Monitor attività Vuoi resettare le statistiche sull\'attività? Statistiche @@ -956,7 +970,6 @@ Max-BG fuori range! Temptarget:\nMin: %1$s\nMax: %2$s\nDurata: %3$s Temptarget:\nTarget: %1$s\nDurata: %2$s - Temptarget:\Motivo: %1$s\nTarget: %2$s\nDurata: %3$s QuickWizard: %1$s\nInsulina: %2$.2fU\nCHO: %3$dg Calc. Wizard:\nInsulina: %1$.2fU\nCHO: %2$dg Mostra voce sul dispositivo: @@ -965,9 +978,11 @@ Nessun profilo attivo! Valore COB sconosciuto! Lettura BG mancante o recente riavvio dell\'app? Violazione vincolo CHO! + Calc (IC: %1$.1f, ISF: %2$.1f) CHO: %1$.2fU COB: %1$.0fg %2$.2fU BG: %1$.2fU + IOB: %1$.2fU Superbolo: %1$.2fU Trend di 15\': %1$.2fU Percentuale: %1$.2fU x %2$d%% ≈ %3$.2fU @@ -994,6 +1009,10 @@ %1$d selezionati Ordina Finestra di dialogo cancellata + Molto basso + Basso + Alto + Molto alto Sotto In range Sopra @@ -1001,6 +1020,13 @@ Nascondi record di loop Widget di AndroidAPS Configura opacità + Stato loop + Scala del grafico + Profilo 1 + Profilo 2 + Login + Rimuovi tutto + Avvio reset Codice QR per configurare OTP apri impostazioni imposta allarme timer CHO @@ -1014,4 +1040,6 @@ GlucoRx Aidex GlucoRx Aidex Ricevi valori glicemia da CGM GlucoRx Aidex. + Bloccato dalle opzioni di ricarica + Bloccato dalle opzioni di connettività diff --git a/app/src/main/res/values-iw-rIL/exam.xml b/app/src/main/res/values-iw-rIL/exam.xml index ef3818b091..e4f2d5dd9e 100644 --- a/app/src/main/res/values-iw-rIL/exam.xml +++ b/app/src/main/res/values-iw-rIL/exam.xml @@ -123,6 +123,7 @@ רישום החלפת צינורית יאפס את היחס של Autosens בחזרה ל-100%. חלק מאפשרויות התוסף כוללות טווחי זמן הניתנים להגדרה ע\"י המשתמש. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html + https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens שגיאות רישום פחמימות מה לעשות אם טעיתם ברישום הפחמימות? מחקו את הרשומה השגויה בטיפולים וציינו את ערך הפחמימות הנכון. diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index df974a2eec..498f502fc0 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -6,6 +6,7 @@ בטיחות טיפולים בולוס מקסימלי מותר [U] מקסימום פחמימות מותר [g] + רמת הסוכר נמוכה מסף ההשהיה עקב סוכר נמוך העדפות %1$s העדפות רענן טיפול מ-Nightscout @@ -432,14 +433,15 @@ אפשר שידורים מקומיים. OpenAPS SMB רגישות דינאמית - כיוונון פקטור הרגישות הדינאמית %% - כיוונון פקטור הרגישות הדינאמית. קבעו יותר מ-100%% לקבלת תיקונים אגרסיביים יותר ופחות מ-100%% לקבלת תיקונים עדינים יותר. + כיוונון פקטור הרגישות הדינאמית % + כיוונון פקטור הרגישות הדינאמית. הגדירו יותר מ-100% לקבלת תיקונים אגרסיביים יותר ופחות מ-100% לקבלת תיקונים עדינים יותר. הפעלת UAM אפשר SMB השתמש בסופר מיקרו בולוסים במקום בבזאלי זמני לפעילות מהירה יותר זיהוי של ארוחות לא מוכרזות שעת שיא של עקומת IOB זמן שיא [min] + שיא Oref שיא חופשי Oref אינסולין מהיר Oref אינסולין אולטרה מהיר @@ -591,6 +593,7 @@ ב-OpenAPS ערך זה נקרא מקסימום אינסולין פעיל (maxIOB). \nלא יוזרק עוד אינסולין אם כמות האינסולין הפעיל הנוכחי גדול מערך זה זמן ספיגה מקסימלי של הארוחה [h] משך זמן בו כל ארוחה תחשב כנספגה. לא תהיה התחשבות בפחמימות שנותרו. + ערך הסוכר שמתחתיו מושעה הזרקת אינסולין. ערך ברירת המחדל משתמש במודל מטרה סטנדרטי. המשתמש יכול להגדיר ערך בין 60 ל-100 מג\"\\ד\"ל. ערכים מתחת ל-65 מביאים לשימוש במודל ברירת המחדל הצגת שדות הערות בתיבות דו-שיח של טיפול הבא הקודם @@ -603,7 +606,11 @@ תוספת פחמימות שניה תוספת פחמימות שלישית סנסור + השתמש באינטרנט סלולרי + השתמש בחיבור WiFi WiFi SSID + בזמן טעינה + משתמש בסוללה הגדרות חיבור SSID מורשים (מופרדים בנקודה-פסיק) אפשר חיבור בנדידה @@ -770,6 +777,11 @@ רשומת אחוזים לא חוקית ממוצע זמן בטווח + זמן בטווח ביום + זמן בטווח בלילה + פירוט 14 יום + סטיית תקן: %1$s + HbA1c: מוניטור פעילות האם ברצונכם לאפס את הסטטיסטיקות הפעילות? סטטיסטיקה @@ -880,6 +892,8 @@ קבלת החלפות פרופיל שהוגדרו בנייטסקאוט או ב-NSClient אחזר אירועים לא מקוונים קבל אירועים לא מקוונים שנרשמו דרך נייטסקאוט או NSClient + קבל מינון בזאלי זמני ובולוס מושהה + קבל מינוני בזאלי זמני ובולוסים מושהים שהופעלו ממכשיר עוקב קבלת אינסולין קבלת אינסולין שהוזן באמצעות נייטסקאוט או NSClient (הוא לא מוזרק, רק מחושב רק כאינסולין פעיל) קבלת פחמימות @@ -946,12 +960,33 @@ ערכת נושא בהירה השתמש בערכת הנושא של המכשיר + מבטל ערך מטרה זמני נוכחי + יחידות המידה שונות בין הטלפון והשעון! + ערך הסוכר המינימלי מחוץ לטווח! + ערך הסוכר המקסימלי מחוץ לטווח! + ע\' מטרה זמני:\nמינ\': %1$s\nמקס\': %2$s\nמשך: %3$s + ע\' מטרה זמני:\nמטרה: %1$s\n משך: %2$s + אשף מהיר: %1$s\n אינס\': %2$.2f יח\'\nפחמ\': %3$d גר\' + מחשבון: %1$s\n אינס\': %2$.2f יח\'\nפחמ\': %3$d גר\' + הצג רשומה על המכשיר: + האשף המהיר שנבחר אינו זמין, נא לרענן את האריח + אין נתוני סוכר לביסוס חישוב! + לא הופעל פרופיל! + הפחמימות הפעילות לא ידועות! חסרות קריאות סוכר או שאותחל היישום לאחרונה? הפרת מגבלות פחמימה! + מחשבון (IC: %1$.1f, ISF: %2$.1f) פחמ\': %1$.2f יח\' פחמ\': %1$.0f גר\' %2$.2f יח\' סוכר: %1$.2f יח\' + אינ\' פעיל: %1$.2f יח\' סופר בולוס: %1$.2f יח\' מגמת 15 דק\': %1$.2f יח\' + אחוזים: %1$.2f יח\' x %2$d%% ≈ %3$.2f יח\' + הופעלה מגבלת אינסולין!\nלא ניתן להזריק %1$.2f יח\' + ע\' מטרה זמני: %1$s + %1$s ל-%2$s + המשאבה אינה זמינה! + פקודה לא ידועה: אחוזים ברירת המחדל של היישום הצג רשומות מבוטלות\\מחוקות @@ -970,6 +1005,10 @@ %1$d נבחרו מיין דו-שיח בוטל + נמוך מאוד + נמוך + גבוה + גבוה מאוד מתחת בטווח מעל @@ -977,7 +1016,17 @@ החבא רשומות לולאה ווידג\'ט AndroidAPS הגדרת אטימות + סטטוס הלולאה קנה מידה של הגרף + פרופיל 1 + פרופיל 2 + התחברות + הסר הכל + אתחל התחלה + ברקוד QR ליצירת סיסמה חד פעמית + פתח הגדרות + הגדרת אזעקה טיימר פחמימות + הכול טלפון שעון על השעון בלבד @@ -987,4 +1036,6 @@ GlucoRx Aidex Aidex קבלת נתוני סוכר מחיישני GlucoRx Aidex. + חסום ע\"י הגדרות טעינה + חסום ע\"י הגדרות חיבור diff --git a/app/src/main/res/values-nl-rNL/exam.xml b/app/src/main/res/values-nl-rNL/exam.xml index 8e8c00900e..5a64cd78c6 100644 --- a/app/src/main/res/values-nl-rNL/exam.xml +++ b/app/src/main/res/values-nl-rNL/exam.xml @@ -123,6 +123,7 @@ Het vastleggen van een canulewissel zet de Autosens-ratio terug naar 100%. Sommige van de plugins hebben configureerbare tijdbereiken die kunnen worden ingesteld door de gebruiker. https://androidaps.readthedocs.io/en/latest/CROWDIN/nl/Configuration/Sensitivity-detection-and-COB.html + https://androidaps.readthedocs.io/nl/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Koolhydraatinvoerfouten Wat moet u doen als u een onjuiste hoeveelheid koolhydraten hebt ingevoerd? Verwijder het onjuiste record in Behandelingen en voer de juiste koolhydraten opnieuw in. diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index dc28fa97db..059181d347 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -6,6 +6,7 @@ Behandelingen veiligheid Max toegestane bolus [E] Max toegestane koolhydraten [g] + BG niveau waarbij lage glucose onderbreking wordt geactiveerd %1$s Instellingen Instellingen Haal behandelingen op van NS @@ -432,8 +433,8 @@ Activeer locaal delen. OpenAPS SMB Dynamische ISF - Dynamische ISF aanpassingsfactor %% - Aanpassingsfactor voor Dynamische ISF. Stel meer dan 100%% in voor een agressievere correctie dosis en minder dan 100%% voor minder agressieve correcties. + Dynamische Isf aanpassingsfactor % + Aanpassingsfactor voor DynamicISF. Stel meer dan 100% in voor een agressievere correctie en minder dan 100% voor minder agressieve correctie. Activeer UAM Activeer SMB SMB in plaats van tijdelijke basalen voor snellere reactie @@ -592,6 +593,7 @@ Deze waarde heet MAX IOB in OpenAPS context\nOpenAPS zal geen extra insuline toedienen als de actuele IOB onderstaande waarde overschreden heeft Maximum maaltijd absorptie tijd [uur] Tijdspanne waarbinnen elke maaltijd volledig is opgenomen. Resterende KH worden niet mee gerekend. + BG waarde waarbij insuline afgifte wordt onderbroken. De standaard waarde gebruikt het standaard doelmodel. Gebruiker kan waarde instellen tussen 60 mg/dl (3.3 mmol/l) en 100mg/dl(5.6mmol/l). Waarden lager dan 65/3.6 resulteren in gebruik van het standaard model Toon notities veld in behandeling dialoogvensters Volgende Vorige @@ -604,7 +606,11 @@ Tweede koolhydraten increment Derde koolhydraten increment CGM + Mobiele verbinding gebruiken + Gebruik WiFi verbinding WiFi SSID + Tijdens opladen + Op batterij Verbindings instellingen Toegelaten SSIDs (gescheiden door puntkomma) Sta verbinding tijdens roaming toe @@ -679,6 +685,8 @@ Een Behandeling (insuline: %1$.2f, koolhydraten: %2$d, in: %3$s) niet konden worden toegevoegd aan Behandelingen. Gelieve te controleren en handmatig een record toe te voegen indien nodig. eCarbs: %1$d g (%2$d h), vertraging: %3$d m Geen autosens-gegevens beschikbaar + Logbestanden + Overige Log instellingen Terug naar standaardinstellingen NSClient werkt niet goed. Overweg een herstart van NS en NSClient. @@ -771,6 +779,11 @@ Ongeldig % invoer Gemiddelde TIR + TIR overdag + TIR s\'nachts + 14 dagen details + SD: %1$s + HbA1c: Activiteitsmonitor Wil je de activiteitenstatistieken resetten? Statistieken @@ -957,7 +970,6 @@ Max BG buiten bereik! Tijdelijk streefdoel:\nMin: %1$s\nMax: %2$s\nDuur: %3$s Tijdelijk streefdoel:\nDoel: %1$s\nDuur: %2$s - Tijdelijk streefdoel:\Reden: %1$s\nDoel: %2$s\nDuur: %3$s QuickWizard: %1$s\nInsuline: %2$.2fE\nKoolhy.: %3$dg Reken. Wizard:\nInsuline: %1$.2fE\nKoolhy.: %2$dg Toon invoer op apparaat: @@ -997,6 +1009,10 @@ %1$d geselecteerd Sorteren Dialoog geannuleerd + Zeer laag + Laag + Hoog + Zeer hoog Onder Binnen bereik Boven @@ -1004,6 +1020,7 @@ Verberg loop records AndroidAPS widget Configureer transparantie + Loop status Grafiek schaal Profiel 1 Profiel 2 @@ -1023,4 +1040,6 @@ GlucoRx Aidex Aidex Ontvang BG waarden van GlucoRx Aidex CGMS. + Geblokkeerd door oplaad instellingen + Geblokkeerd door verbindings instellingen diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 7e12b4f62e..c81f69586e 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -6,6 +6,7 @@ Sikkerhet ved behandlinger Maks tillat bolus [U] Maks tillat karbo [g] + BS er under terskelverdi slik at all insulintilførsel stoppes %1$s innstillinger Innstillinger Oppdater behandlinger fra NS @@ -432,8 +433,6 @@ Aktiver lokale sendinger. OpenAPS SMB Dynamisk ISF - DynamiskISF justeringsfaktor %% - Justeringsfaktor for dynamisk ISF. Verdier over 100%% vil gi mer aggressive korreksjonsdoser, mens verdier under 100%% vil gi mildere korreksjonsdoser. Aktiver UAM Aktiver SMB Bruk Super Mikro Solen i stedet for temp basal for raskere resultat @@ -592,6 +591,7 @@ Denne verdien kalles Maks IOB av OpenAPS\nOpenAPS vil ikke gi mere insulin hvis mengden insulin ombord (IOB) overstiger denne verdien Maks absorpsjonstid for måltid [h] Etter denne tiden forventes det at måltidet er absorbert. Eventuelle gjenværende karbo vil tas ut av beregninger. + BS er under terskelverdi slik at all insulintilførsel stoppes. Mulighet for bruker å definere verdier mellom 3.3mmol/l (60mg/dl) og 5.5mmol/l (100mg/dl). Verdier under 3.6/65 bruker standard målverdier Vis merknadsfelt i dialogvindu for Behandlinger Neste Forrige @@ -968,7 +968,6 @@ Maks-BS utenfor område! Temp target:\nMin: %1$s\nMaks: %2$s\nVarighet: %3$s TempTarget:\nMål: %1$s\nVarighet: %2$s - TempTarget:\nMin: %1$s\nMål: %2$s\nVarighet: %3$s QuickWizard: %1$s\ninsulin: %2$.2fE\nKarbo: %3$dg Kalk. Wizard:\nInsulin: %1$.2fE\nKarbo: %2$dg Vis oppføring på enhet: diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index cc897fcb4c..fc2d50ec62 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -413,8 +413,6 @@ Ativar partilha local. SMB OpenAPS FSI Dinâmico - Fator de Ajuste FSI dinâmico %% - Fator de ajuste para FSI dinâmico. Defina mais de 100%% para doses de correção mais agressivas e menos de 100%% para correções menos agressivas. Ativar UAM Ativar SMB Use Super Micro Boluses em vez de basal temp para uma ação mais rápida @@ -865,7 +863,6 @@ Glicemia maxima fora da meta! Alvo temporário:\nMin: %1$s\nMax: %2$s\nDuração: %3$s Alvo temporário:\nTarget: %1$s\nDuration: %2$s - Alvo temporário:\Reason: %1$s\nTarget: %2$s\nDuration: %3$s Assistente rápido: %1$s\nInsulin: %2$.2fU\nCarbs: %3$dg Calculadora:\nInsulin: %1$.2fU\nCarbs: %2$dg Mostrar entrada no dispositivo: diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index d41d36c2e4..9baf342a88 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -432,8 +432,6 @@ Активировать локальную передачу Супер микро болюс OpenAPS Динамический ISF - Коэффициент регулировки динамического диапазона чувствительности ISF %% - Коэффициент корректировки динамического диапазона чувствительности ISF. Установите более 100%% для более агрессивных доз коррекции и менее 100%% для менее агрессивной коррекции. Включить непредвиденный прием пищи UAM Включить супер микро болюс SMB Для ускорения действия используйте супер микро болюсы SMB вместо временного базала @@ -967,7 +965,6 @@ Макс ГК вне диапазона! ВремЦель:\nМин: %1$s\nМакс.: %2$s\nДлительность: %3$s ВремЦель:\nЦель: %1$s\nДлительность: %2$s - ВремЦель:\Причина: %1$s\nЦель.: %2$s\nДлительность: %3$s Мастер: %1$s\nИнсулин: %2$.2fЕд\nУгл: %3$dg Мастер:\nИнсулин: %1$.2fЕд\nУгл: %2$dg Показать запись на устройстве: diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index b0e22b54b4..d0a550b70c 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -6,6 +6,7 @@ Bezpečnosť zadania ošetrenia Maximálny povolený bolus [JI] Maximálne povolené množstvo sacharidov [g] + Hodnota glykémie, pri ktorej sa aktivuje LGS Nastavenie pluginu %1$s Nastavenia Obnoviť ošetrenia z NS @@ -432,8 +433,8 @@ Povoliť lokálne vysielanie. OpenAPS SMB Dynamická ISF - Korekčný faktor pre Dynamickú ISF v %% - Korekčný faktor pre dynamickú ISF. Pre agresivnejšie korekčné dávky nastavte hodnoty väčšie ako 100%% a pre menej agresivne korekcie menšie než 100%%. + Korekčný faktor pre Dynamickú ISF v % + Korekčný faktor pre dynamickú ISF. Pre agresivnejšie korekčné dávky nastavte hodnoty väčšie ako 100%, pre menej agresívne korekcie, menšie než 100%. Povoliť UAM Povoliť SMB Použiť Super Mikro Bolusy namiesto dočasných bazálov, pre zrýchleniu účinku @@ -592,6 +593,7 @@ Táto hodnota je v kontexte OpenAPS nazývaná Max IOB.\nOpenAPS nikdy nepridá inzulín, pokiaľ je súčasné IOB väčšie, ako táto hodnota Maximálna doba vstrebávania sacharidov [h] Doba, po ktorej sú všetky sacharidy považované za vstrebané. Zvyšné budú orezané. + Hodnota glykémie, pri ktorej bude podávanie inzulínu zastavené. Východzia hodnota využíva štandardný cieľový model. Užívateľ môže nastaviť hodnoty od 3,3 mmol/l do 5,5 mmol/l. Pri hodnotách pod 3,6 mmol/l se použije východzí model. Zobrazovať kolónku poznámky v dialógoch ošetrení Ďalšia Späť @@ -968,7 +970,6 @@ Maximálna glykémia mimo rozsah! Doč. cieľ:\nMin: %1$s\nMax: %2$s\nTrvanie: %3$s Doč. cieľ:\nCieľ: %1$s\nTrvanie: %2$s - Doč. cieľ:\nDôvod: %1$s\nCieľ: %2$s\nTrvanie: %3$s Rýchly bolus: %1$s\nInzulín: %2$.2fJI\nSacharidy: %3$dg Kalkulačka: \nInzulín: %1$.2fJI\nSacharidy: %2$dg Zobraziť záznam na zariadení: diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index ee5c7d8905..a85a2e4cb2 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -941,7 +941,6 @@ Eversense-appen. Ogiltigt maximum BG! Temp-mål:\nMin: %1$s\nMax: %2$s\nVaraktighet: %3$s Temp-mål:\nMål: %1$s\nDuration: %2$s - Temp-mål:\Orsak: %1$s\nMål: %2$s\nVaraktighet: %3$s Snabbsteg: %1$s\nInsulin: %2$.2fU\nKolhydrater: %3$dg Kalkylator:\nInsulin: %1$.2fU\nKolhydrater: %2$dg Visa post på enhet: diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index f0383b2d42..7737bbb046 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -433,8 +433,8 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Yerel yayınları etkinleştirin. OpenAPS SMB Dinamik İDF - DinamikİDF ayarlama faktörü %% - DinamikİDF için ayarlama faktörü. Daha agresif düzeltme dozları için %%100\'den fazla ve de az agresif düzeltmeler için %%100\'den az ayarlayın. + DinamikİDF Ayar Faktörü % + DinamikİDF için ayarlama faktörü. Daha agresif düzeltme dozları için %100\'den fazla ve daha az agresif düzeltmeler için %100\'den az ayarlayın. UAM etkinleştir SMB (Super Micro Bolus) etkinleştir Daha hızlı bir etki için geçici bazal yerine Super Micro Bolus kullanın @@ -970,7 +970,6 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Maks-KŞ aralık dışında! Geçici Hedef:\nMin: %1$s\nMaks: %2$s\nSüre: %3$s Geçici Hedef:\nHedef: %1$s\nSüre: %2$s - Geçici Hedef:\Neden: %1$s\nHedef: %2$s\nSüre: %3$s Hızlı Asistan: %1$s\nİnsülin: %2$.2fU\nKarb: %3$dg Hesap Mak.:\nİnsulin: %1$.2fÜ\nKarb: %2$dg Girişi cihazda göster: diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0258e545fb..642148ddb4 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -432,8 +432,6 @@ 启用本地广播。 OpenAPS SMB 动态ISF(胰岛素敏感系数) - 动态ISF胰岛素敏系数调整比例 %% - 动态ISF的调整因子。设置100%%以上用于更积极的校正,100%%以下则不那么积极校正。 启用 UAM 启用微型大剂量 使用微型大剂量代替使用临时基础率,更快的干预 @@ -957,7 +955,6 @@ 目标血糖最大值超出范围! 临时目标:\n最小: %1$s\n最大: %2$s\n持续时间: %3$s 临时目标:\n目标: %1$s\n持续时间: %2$s - 临时目标:\原因: %1$s\n目标: %2$s\n持续时间: %3$s 快速向导: %1$s\n胰岛素: %2$.2fU\n碳水: %3$d克 计算. 向导:\n胰岛素: %1$.2fU\n碳水: %2$d克 在设备上显示条目: diff --git a/automation/src/main/res/values-it-rIT/strings.xml b/automation/src/main/res/values-it-rIT/strings.xml index 01f8733efa..926f76ebc6 100644 --- a/automation/src/main/res/values-it-rIT/strings.xml +++ b/automation/src/main/res/values-it-rIT/strings.xml @@ -120,4 +120,7 @@ Sicuro di voler eliminare %1$d elementi Ordina Automazione sistema + Esegui automazioni + Aggiungi regola + Rimuovi/ordina diff --git a/automation/src/main/res/values-nl-rNL/strings.xml b/automation/src/main/res/values-nl-rNL/strings.xml index cf5f20fb24..d4815fd566 100644 --- a/automation/src/main/res/values-nl-rNL/strings.xml +++ b/automation/src/main/res/values-nl-rNL/strings.xml @@ -120,4 +120,7 @@ Weet je zeker dat je %1$d items wilt verwijderen Sorteren Systeem automatisering + Automatisering uitvoeren + Regel toevoegen + Verwijderen/sorteren diff --git a/core/src/main/res/values-it-rIT/strings.xml b/core/src/main/res/values-it-rIT/strings.xml index 5ac31e2345..0f86119b89 100644 --- a/core/src/main/res/values-it-rIT/strings.xml +++ b/core/src/main/res/values-it-rIT/strings.xml @@ -42,6 +42,7 @@ CHO Profilo non valido !!! NESSUN PROFILO IMPOSTATO + ]]> Data Unità DIA @@ -441,6 +442,52 @@ file utente + Autotune + Aiuto per potenziali regolazioni del profilo (ISF, rapporto CHO e velocità basali) + AT + Impostazioni Autotune + Automazione cambio profilo + Se abilitato, Autotune si aggiornerà automaticamente e passerà al profilo di input dopo il calcolo da una regola di automazione. + Classifica UAM come basale + Abilita solo se hai inserito in modo affidabile tutti i carboidrati assunti, con questa opzione aumenti improvvisi individuati da Autotune verranno usati per consigliare modifiche alla velocità basale. + Regola la curva dell\'insulina + Abilita solo se usi free-peak. Questa opzione regolerà la durata di picco e DIA + Numero di giorni di dati + Applica il risultato medio in IC/ISF circadiano + Autotune non regolerà le variazioni circadiane, questa opzione applica solo la regolazione media di IC e ISF al tuo profilo di input circadiano + Includi più informazioni di log per il debug + Attiva solo se richiesto dallo sviluppatore per inviare ulteriori informazioni di log per aiutare il debug del plugin Autotune + Numero predefinito di giorni di dati da elaborare da Autotune (fino a 30) + Regolato + Profilo : + Giorni regolazione : + Ultima esecuzione : + Avviso : + Seleziona il profilo da regolare + Il profilo selezionato ha %1$d valori IC. Autotune userà %2$.2f g/U + Il profilo selezionato ha %1$d valori ISF. Autotune userà %2$.1f %3$s/U + Errore nei dati di input, prova a eseguire di nuovo Autotune o ridurre il numero di giorni + Il calcolo di Autotune è iniziato, attendi + Controlla attentamente i risultati prima di utilizzarli! + Risultato parziale giorno %1$d / %2$d regolato + Risultato: %1$s + Param + % + Mancante + Profilo Autotune %1$s + Esegui Autotune + Controlla il profilo di input + Compara profili + Copia nel profilo locale + Aggiorna il profilo di input + Ripristina il profilo di input + Creare un nuovo profilo locale da questo profilo Autotune? + Aggiornare il profilo %1$s con il profilo Autotune? + Ripristinare il profilo %1$s con il profilo di input? + Profilo non valido + Autotune eseguito senza cambio profilo + Autotune eseguito e profilo cambiato automaticamente + Errore durante l\'ultima esecuzione di Autotune %1$d giorno %1$d giorni diff --git a/core/src/main/res/values-nl-rNL/strings.xml b/core/src/main/res/values-nl-rNL/strings.xml index 28fccb7843..9a314f98f1 100644 --- a/core/src/main/res/values-nl-rNL/strings.xml +++ b/core/src/main/res/values-nl-rNL/strings.xml @@ -42,6 +42,7 @@ Koolhydraten Ongeldig profiel !!! Geen profiel ingesteld + ]]> Datum Eenheden DIA @@ -441,10 +442,52 @@ bestand gebruiker + Autotune + Hulp voor potentiële aanpassingen van het profiel (ISF, koolhydraten en basale koersen) + AT + Autotune instellingen + Automatisering Profiel Wissel + Indien ingeschakeld, wordt Autotune automatisch bijgewerkt en overschakelen naar invoerprofiel na de berekening van een automatiseringsregel. + UAM als basaal categoriseren + Alleen inschakelen als u betrouwbaar alle koolhydraten ingevoerd en hebt opgegeten, met deze optie zullen plotselinge stijgingen van Autotune worden gebruikt om wijzigingen in de basaalstand aan te bevelen. Insuline curve afstemmen Alleen inschakelen als je vrije piek gebruikt. Deze optie zal piek en DIA duur afstemmen + Aantal dagen data + Gemiddelde resultaat toepassen in circadiaan IC/ISF + Autotune zal de circadiaanse variaties niet afstemmen, deze optie past alleen de gemiddelde tuning van IC en ISF toe op uw circadiaanse invoerprofiel + Meer log-informatie voor foutopsporing toevoegen + Schakel alleen in op verzoek van een onwikkelaar om meer log-informatie te sturen om Autotune plugin te helpen debuggen Standaard aantal dagen aan gegevens dat Autotune moet verwerken (tot 30) + Tuned + Profiel : + Afstemmen dagen : + Laatste berekening : + Waarschuwing : + Selecteer profiel om aan te passen + Het geselecteerde profiel heeft %1$d IC waarden. Autotune gebruikt %2$.2f g/E + Het geselecteerde profiel heeft %1$d ISF waarden. Autotune gebruikt %2$.1f %3$s/E Fout in invoergegevens, probeer autotune opnieuw te starten of het aantal dagen te verminderen + Autotune berekening gestart, even geduld a.u.b. + Controleer de resultaten zorgvuldig voordat u het gebruikt! + Gedeeltelijk resultaat dag %1$d / %2$d afgestemd + Resultaat: %1$s + Parameter + % + Ontbreekt + Autotune profiel %1$s + Autotune uitvoeren + Controleer invoerprofiel + Vergelijk profielen + Kopiëren naar lokaal profiel + Invoerprofiel bijwerken + Invoerprofiel ongedaan maken + Een lokaal profiel van dit Autotune profiel aanmaken? + Profiel %1$s bijwerken met Autotune Profiel? + Profiel %1$s terugzetten met invoerprofiel? + Profiel ongeldig + Autotune uitgevoerd zonder profiel aanpassing + Autotune uitgevoerd en profiel automatisch gewisseld + Fout tijdens laatste Autotune uitvoeren %1$d dag %1$d dagen diff --git a/danar/src/main/res/values-it-rIT/strings.xml b/danar/src/main/res/values-it-rIT/strings.xml index 3ea04e700d..5a4de59455 100644 --- a/danar/src/main/res/values-it-rIT/strings.xml +++ b/danar/src/main/res/values-it-rIT/strings.xml @@ -1,2 +1,4 @@ - + + Azione non supportata nel micro. Usa solo l\'interfaccia di AndroidAPS! + diff --git a/danar/src/main/res/values-nl-rNL/strings.xml b/danar/src/main/res/values-nl-rNL/strings.xml index 3ea04e700d..ff920b8ec5 100644 --- a/danar/src/main/res/values-nl-rNL/strings.xml +++ b/danar/src/main/res/values-nl-rNL/strings.xml @@ -1,2 +1,4 @@ - + + Niet-ondersteunde actie in pomp. Gebruik alleen AndroidAPS gebruikersinterface! + diff --git a/diaconn/src/main/res/values-it-rIT/strings.xml b/diaconn/src/main/res/values-it-rIT/strings.xml index c4c7b80b16..2aad15a22a 100644 --- a/diaconn/src/main/res/values-it-rIT/strings.xml +++ b/diaconn/src/main/res/values-it-rIT/strings.xml @@ -152,4 +152,6 @@ Stato LGS già su OFF. Comando di disattivazione rifiutato. L\'avvio della basale temporanea viene rifiutato quando è già in esecuzione una basale temporanea Lo stop della basale temporanea viene rifiutato quando non è in esecuzione alcuna basale temporanea + Invia i log del micro a Diaconn Cloud. + Sincronizzazione Diaconn Cloud diff --git a/diaconn/src/main/res/values-nl-rNL/strings.xml b/diaconn/src/main/res/values-nl-rNL/strings.xml index acee82d0a6..ab90c38045 100644 --- a/diaconn/src/main/res/values-nl-rNL/strings.xml +++ b/diaconn/src/main/res/values-nl-rNL/strings.xml @@ -152,4 +152,6 @@ LGS status UIT, UIT Commando is geweigerd. Tijdelijk basaal start geweigerd als tijdelijk basaal wordt uitgevoerd Tijdelijk basaal stop geweigerd als tijdelijk basaal niet wordt uitgevoerd + Stuur pomp logs naar de Diaconn Cloud. + Diaconn Cloud Sync diff --git a/openhumans/src/main/res/values-it-rIT/strings.xml b/openhumans/src/main/res/values-it-rIT/strings.xml index 6ef4309f8e..54f578f9b4 100644 --- a/openhumans/src/main/res/values-it-rIT/strings.xml +++ b/openhumans/src/main/res/values-it-rIT/strings.xml @@ -16,4 +16,42 @@ Sei stato disconnesso da Open Humans Fare click qui per accedere di nuovo. Carica adesso + Avanti + Benvenuto in Open Humans + Per configurare il caricamento dei dati, fai click su \'Avanti\'. + Consenso + Termini d\'uso + Leggi attentamente le seguenti informazioni e accetta i termini d\'uso per procedere. + Questo è uno strumento open source che copierà i tuoi dati su Open Humans. Non ci riserviamo alcun diritto di condividere i tuoi dati con terze parti senza la tua esplicita autorizzazione. I dati che il progetto e l\'app ricevono vengono identificati tramite un ID utente casuale e verranno trasmessi in modo sicuro a un account Open Humans solo con la tua autorizzazione per tale processo. Puoi interrompere il caricamento ed eliminare i dati di caricamento in qualsiasi momento tramite www.openhumans.org. + Dati caricati + Valori glicemia + Boli + Boli estesi + Carboidrati + Eventi Portale (eccetto le note) + Cambi profilo + Dosi giornaliere totali + Velocità basali temporanee + Target temporanei + Impostazioni + Versione applicazione + Modello dispositivo + Dimensioni schermo + Dati di debug dell\'algoritmo + Dati NON caricati + Password + URL di Nightscout + API Secret di Nightscout + Campi di testo libero + Comprendo e accetto. + Accesso a Open Humans + Tocchi finali + Sei a solo un passo dal caricare i tuoi dati su Open Humans. Vuoi procedere? + Annulla + Continua + Completamento... + Potrebbe richiedere alcuni secondi. + Abbiamo fatto! + D\'ora in poi, il tuo telefono caricherà i dati in background di tanto in tanto. + Chiudi diff --git a/openhumans/src/main/res/values-nl-rNL/strings.xml b/openhumans/src/main/res/values-nl-rNL/strings.xml index 39127a1a5e..9a35bba7e0 100644 --- a/openhumans/src/main/res/values-nl-rNL/strings.xml +++ b/openhumans/src/main/res/values-nl-rNL/strings.xml @@ -16,4 +16,42 @@ Je bent uitgelogd van Open Humans Klik hier om opnieuw in te loggen als dit niet opzettelijk was. Nu Uploaden + Volgende + Welkom bij Open Humans + Klik op \'Volgende\' om gegevens te uploaden. + Toestemming + Gebruiksvoorwaarden + Lees zorgvuldig de volgende informatie en accepteer de gebruiksvoorwaarden om verder te gaan. + Dit is een open source tool die jouw gegevens zal kopiëren naar Open Humans. We behouden geen rechten om je gegevens met derden te delen zonder je expliciete toestemming. De gegevens die het project en de app ontvangen worden geïdentificeerd via een willekeurige gebruikers-ID en zullen alleen veilig worden verzonden naar een Open Humans account met uw toestemming voor dat proces. U kunt op elk gewenst moment stoppen met uploaden en uw upload gegevens verwijderen via www.openhumans.org. + Gegevensupload + Glucose waarden + Bolussen + Vertraagde bolus + Koolhydraten + Careportal gebeurtenissen (behalve notities) + Profiel wisselingen + Totaal Dagelijkse Doses + Tijdelijke basaalstanden + Tijdelijke streefdoelen + Instellingen + Applicatie versie + Apparaat model + Scherm afmetingen + Algoritme debug data + Gegevens NIET ge-upload + Wachtwoorden + Nightscout URL + Nightscout API Secret + Vrije tekstvelden + Ik begrijp het en ga akkoord. + Aanmelden bij Open Humans + Laatste details + U bent slechts één stap verwijderd van het uploaden van uw gegevens naar Open Humans. Wilt u doorgaan? + Afbreken + Ga verder + Voltooien... + Dit kan enkele seconden duren. + We zijn klaar! + Voortaan zal je telefoon zo nu en dan op de achtergrond gegevens uploaden. + Sluiten diff --git a/pump-common/src/main/res/values-it-rIT/strings.xml b/pump-common/src/main/res/values-it-rIT/strings.xml index 55baa3f071..37d4766e94 100644 --- a/pump-common/src/main/res/values-it-rIT/strings.xml +++ b/pump-common/src/main/res/values-it-rIT/strings.xml @@ -1,6 +1,27 @@ + Operazione non supportata dal micro e/o dal driver. + Operazione NON ANCORA supportata dal micro. + OK + Mai connesso + Risveglio + Errore nella comunicazione + Timeout della comunicazione + Micro irraggiungibile + Configurazione non valida + Attivo + In sospensione + Basali + Configurazioni + Notifiche + Statistiche + Sconosciuti + Tutto + Boli + Caricamento + Allarmi + Glicemia diff --git a/pump-common/src/main/res/values-nl-rNL/strings.xml b/pump-common/src/main/res/values-nl-rNL/strings.xml index 55baa3f071..98c757c2f2 100644 --- a/pump-common/src/main/res/values-nl-rNL/strings.xml +++ b/pump-common/src/main/res/values-nl-rNL/strings.xml @@ -1,6 +1,27 @@ + Bewerking niet ondersteund door pomp en/of driver. + Operatie NOG niet ondersteund door de pomp. + OK + Nooit verbonden + Actief worden + Communicatiefout + Time-out bij communicatie + Pomp niet beschikbaar + Ongeldige configuratie + Actief + Slapen + Basaalstanden + Instellingen + Meldingen + Statistieken + Onbekend + Alle + Bolussen + Vullen + Alarmen + Glucose diff --git a/shared/src/main/res/values-iw-rIL/strings.xml b/shared/src/main/res/values-iw-rIL/strings.xml index 554d7a16e3..c1a2923953 100644 --- a/shared/src/main/res/values-iw-rIL/strings.xml +++ b/shared/src/main/res/values-iw-rIL/strings.xml @@ -1,4 +1,30 @@ + לפני %1$d דקות + לפני %1$d דקות + לפני %1$.1f שעות + לפני %1$.1f ימים + לפני %1$.0f ימים + בעוד %1$.0f ימים + בעוד %1$.0f ימים + ש\' + ימים + שעות + שניה + דקה + שעה + יום + שבוע + שניות + דקות + שעות + ימים + שבועות + דק\' + י\' + מאוחר יותר היום + מחר + היום + אתמול diff --git a/shared/src/main/res/values-nl-rNL/strings.xml b/shared/src/main/res/values-nl-rNL/strings.xml index 554d7a16e3..b927c43d0b 100644 --- a/shared/src/main/res/values-nl-rNL/strings.xml +++ b/shared/src/main/res/values-nl-rNL/strings.xml @@ -1,4 +1,30 @@ + %1$d m geleden + %1$d minuten geleden + %1$.1f uur geleden + %1$.1f dagen geleden + %1$.0f dagen geleden + over %1$.0f dagen + over %1$.0f dagen + u + dagen + uren + seconde + minuut + uur + dag + week + seconden + minuten + uren + dagen + weken + m + d + Later vandaag + Morgen + Vandaag + Gisteren diff --git a/wear/src/main/res/values-it-rIT/strings.xml b/wear/src/main/res/values-it-rIT/strings.xml index f4a184765a..b6a8e15f35 100644 --- a/wear/src/main/res/values-it-rIT/strings.xml +++ b/wear/src/main/res/values-it-rIT/strings.xml @@ -2,6 +2,15 @@ AAPS AAPS + AAPS + AAPS(Large) + AAPS(BigChart) + AAPS(NoChart) + AAPS(Circle) + AAPS(v2) + AAPS(Cockpit) + AAPS(Steampunk) + AAPS(DigitalStyle) AAPS(azioni) AAPS(Temp Target) AAPS(Quick Wizard) @@ -55,6 +64,7 @@ Complication Tap Action Unicode in Complications Versione: + Più impostazioni watchface Controlla configurazione watchface. TempT Calcolatore @@ -80,6 +90,7 @@ Calcolo richiesto Riempimento richiesto CHO richiesti + Cambio profilo richiesto Target Basso Alto @@ -101,6 +112,7 @@ CANCELLA BOLO Micro Loop + Cambio profilo TDD CHO IOB @@ -156,4 +168,20 @@ Nessuna configurazione disponibile Controlli smartwatch disabilitati Nessun dato disponibile + incremento + decremento + H + L + media + --U + --g + -.--U/h + Caricamento: ---% + S: nessuno stato + -- Minuti fa + --- mg/dl + Nessun stato di loop + 000g + 00,0 + 0,00U diff --git a/wear/src/main/res/values-iw-rIL/strings.xml b/wear/src/main/res/values-iw-rIL/strings.xml index 0fab8bcc3e..d2a3183b5d 100644 --- a/wear/src/main/res/values-iw-rIL/strings.xml +++ b/wear/src/main/res/values-iw-rIL/strings.xml @@ -2,6 +2,15 @@ AAPS AAPS + AAPS + AAPS (גדול) + AAPS (תרשים גדול) + AAPS (ללא תרשים) + AAPS (עיגול) + AAPS (v2) + AAPS (תא טייס) + AAPS (סטימפאנק) + AAPS (דיגיטלי) AAPS (פעולות) AAPS (מטרה זמנית) AAPS (אשף מהיר) @@ -55,6 +64,7 @@ פעולת הקשה על סיבוך יוניקוד בסיבוכים גירסה: + עוד הגדרות פני שעון עיינו בהגדרות פני השעון בבקשה. מטרה זמנית מחשבון @@ -80,6 +90,7 @@ התבקש חישוב התבקש מילוי נדרשו פחמימות + התבקשה החלפת פרופיל ערך מטרה נמוך גבוה @@ -101,6 +112,7 @@ ביטול בולוס משאבה לולאה + החלפת פרופיל סה\"כ מינון אינסולין יומי TDD פחמימות כמות אינסולין פעילה @@ -156,4 +168,20 @@ אין הגדרה שליטה משעון Wear אינה מאופשרת אין נתונים זמינים + תוספת + הפחתה + גב\' + נמ\' + ממוצע + -- יח\' + -- גר\' + -.--יח\' לשעה + מעלה: --- % + אין סטטוס + לפני -- דקות + --- mg/dl + חסר סטטוס לולאה + 000 גר\' + 00,0 + 0,00 יח\' diff --git a/wear/src/main/res/values-nl-rNL/strings.xml b/wear/src/main/res/values-nl-rNL/strings.xml index 56deef316c..47492205a0 100644 --- a/wear/src/main/res/values-nl-rNL/strings.xml +++ b/wear/src/main/res/values-nl-rNL/strings.xml @@ -2,6 +2,15 @@ AAPS AAPS + AAPS + AAPS(Groot) + AAPS(GroteGrafiek) + AAPS(GeenGrafiek) + AAPS(Cirkel) + AAPS(v2) + AAPS(Cockpit) + AAPS(Steampunk) + AAPS(DigitaleStijl) AAPS(Acties) AAPS(Tijdelijk Streefdoel) AAPS(Quick Wizard) @@ -55,6 +64,7 @@ Complicatie tik voor actie Unicode in complicaties Versie: + Meer Watchface instellingen Kijk naar de Watchface configuratie, alsjeblieft. TijdStreefd Calculator @@ -80,6 +90,7 @@ Berekening aangevraagd Vullen aangevraagd Koolhydraten aangevraagd + Profiel wisselen aangevraagd Doel Laag Hoog @@ -101,6 +112,7 @@ BOLUS ANNULEREN Pomp Loop + Profiel wissel TDD Khd IOB @@ -156,4 +168,20 @@ Geen configuratie beschikbaar Wear OS besturing uitgeschakeld Geen data beschikbaar + verhoog + verlaag + H + L + gem + --E + --g + -.--E/uur + Uploader: ---% + S: geen status + -- Minuten geleden + --- mg/dl + Geen Loop Status + 000g + 00,0 + 0,00E diff --git a/wear/src/main/res/values/strings.xml b/wear/src/main/res/values/strings.xml index d5331aa883..2387f2ed94 100644 --- a/wear/src/main/res/values/strings.xml +++ b/wear/src/main/res/values/strings.xml @@ -1,9 +1,7 @@ - AAPS AAPS - AAPS AAPS(Large) AAPS(BigChart) @@ -13,19 +11,15 @@ AAPS(Cockpit) AAPS(Steampunk) AAPS(DigitalStyle) - AAPS(Actions) AAPS(Temp Target) AAPS(Quick Wizard) - No data! Old data! Since %1$s Sync with AAPS! - No data received since %1$s! Check if AAPS on the phone sends data to watch AAPS data is %1$s old! Check your sensor, xDrip+, NS, AAPS config or other! - Vibrate on Bolus Units for Actions Show Date @@ -72,7 +66,6 @@ Version: More Watchface settings Look into Watchface configuration, please. - TempT Calculator Calc @@ -89,7 +82,6 @@ Default Menu XL - Duration Temp Target Requested Quick Wizard Requested @@ -115,20 +107,16 @@ CONFIRM timeshift Bolus - Bolus Progress press to cancel CANCEL BOLUS - Pump Loop Profile switch TDD - Carb IOB no status - red pink purple @@ -153,16 +141,13 @@ multicolor Simplify UI Only show time and BG - Vibrate hourly Show Week number - Your style: no style minimal style shape style full style - Your color: Your color saturation: Your color opacity: @@ -183,7 +168,6 @@ No config available Wear controls disabled No data available - QuickWizard wearcontrol units_mgdl @@ -236,7 +220,6 @@ --- mg/dl No Loop Status 000g - 00,0 + 00,0 0,00U - From 32cb4f02af137606931ccecaaa0d8e1e72dc2d73 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sat, 25 Jun 2022 19:44:12 +0200 Subject: [PATCH 61/71] Add unit test for CategorizeUAM as basal setting true or false --- .../general/autotune/AutotunePrepTest.kt | 106 +- .../test2/aaps-entries.2022-05-21.json | 2882 +++++++++++++++ .../test2/aaps-treatments.2022-05-21.json | 3146 +++++++++++++++++ .../aapsorefautotune_recommendations.log | 53 + .../test2/aapsorefprofile.2022-05-21.json | 147 + .../res/autotune/test2/aapsorefprofile.json | 175 + .../autotune/test2/autotune.2022-05-21.json | 1 + .../test2/autotune.2022-06-25-111214.log | 420 +++ .../test2/newaapsorefprofile.2022-05-21.json | 175 + .../test2/oaps-iobCalc.2022-05-21.json | 286 ++ .../test/res/autotune/test2/profile.pump.json | 147 + .../test3/aaps-entries.2022-05-21.json | 2882 +++++++++++++++ .../test3/aaps-treatments.2022-05-21.json | 3146 +++++++++++++++++ .../aapsorefautotune_recommendations.log | 53 + .../test3/aapsorefprofile.2022-05-21.json | 147 + .../res/autotune/test3/aapsorefprofile.json | 173 + .../autotune/test3/autotune.2022-05-21.json | 1 + .../test3/autotune.2022-06-25-111350.log | 425 +++ .../test3/newaapsorefprofile.2022-05-21.json | 173 + .../test3/oaps-iobCalc.2022-05-21.json | 286 ++ .../test/res/autotune/test3/profile.pump.json | 147 + 21 files changed, 14962 insertions(+), 9 deletions(-) create mode 100644 app/src/test/res/autotune/test2/aaps-entries.2022-05-21.json create mode 100644 app/src/test/res/autotune/test2/aaps-treatments.2022-05-21.json create mode 100644 app/src/test/res/autotune/test2/aapsorefautotune_recommendations.log create mode 100644 app/src/test/res/autotune/test2/aapsorefprofile.2022-05-21.json create mode 100644 app/src/test/res/autotune/test2/aapsorefprofile.json create mode 100644 app/src/test/res/autotune/test2/autotune.2022-05-21.json create mode 100644 app/src/test/res/autotune/test2/autotune.2022-06-25-111214.log create mode 100644 app/src/test/res/autotune/test2/newaapsorefprofile.2022-05-21.json create mode 100644 app/src/test/res/autotune/test2/oaps-iobCalc.2022-05-21.json create mode 100644 app/src/test/res/autotune/test2/profile.pump.json create mode 100644 app/src/test/res/autotune/test3/aaps-entries.2022-05-21.json create mode 100644 app/src/test/res/autotune/test3/aaps-treatments.2022-05-21.json create mode 100644 app/src/test/res/autotune/test3/aapsorefautotune_recommendations.log create mode 100644 app/src/test/res/autotune/test3/aapsorefprofile.2022-05-21.json create mode 100644 app/src/test/res/autotune/test3/aapsorefprofile.json create mode 100644 app/src/test/res/autotune/test3/autotune.2022-05-21.json create mode 100644 app/src/test/res/autotune/test3/autotune.2022-06-25-111350.log create mode 100644 app/src/test/res/autotune/test3/newaapsorefprofile.2022-05-21.json create mode 100644 app/src/test/res/autotune/test3/oaps-iobCalc.2022-05-21.json create mode 100644 app/src/test/res/autotune/test3/profile.pump.json diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt index 74c6ff6e15..e36843b2da 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt @@ -39,7 +39,6 @@ class AutotunePrepTest : TestBaseWithProfile() { @Mock lateinit var repository: AppRepository lateinit var autotunePrep: AutotunePrep lateinit var autotuneIob: TestAutotuneIob - lateinit var inputProfile: ATProfile var min5mCarbImpact = 0.0 var autotuneMin = 0.0 var autotuneMax = 0.0 @@ -49,16 +48,16 @@ class AutotunePrepTest : TestBaseWithProfile() { @Before fun initData() { TimeZone.setDefault(TimeZone.getTimeZone("GMT+2")) - val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() - inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! + } + + @Test + fun autotunePrepTest1() { // Test if categorisation with standard treatments with carbs is Ok val inputIobJson = File("src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS val iobOapsCalcul = buildIobOaps(JSONArray(inputIobJson)) autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalcul) autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) - } - - @Test - fun autotunePrepTest() { // Test if load from file of OpenAPS categorisation is Ok + val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() + val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! val prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepjson), dateUtil) //prep data calculated by OpenAPS autotune val oapsEntriesJson = File("src/test/res/autotune/test1/aaps-entries.2022-05-21.json").readText() @@ -67,7 +66,7 @@ class AutotunePrepTest : TestBaseWithProfile() { autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation autotuneIob.boluses = buildBoluses(oapsPreppedGlucose) //Values from oapsPrepData because linked to iob calculation method for TBR `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) - + `when`(sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)).thenReturn(false) val aapsPreppedGlucose = autotunePrep.categorizeBGDatums(inputProfile, inputProfile.localInsulin, false) try { aapsPreppedGlucose?.let { // compare all categorization calculated by aaps plugin (aapsPreppedGlucose) with categorization calculated by OpenAPS (oapsPreppedGlucose) @@ -75,8 +74,12 @@ class AutotunePrepTest : TestBaseWithProfile() { Assert.assertTrue(oapsPreppedGlucose.crData[i].equals(aapsPreppedGlucose.crData[i])) for (i in aapsPreppedGlucose.csfGlucoseData.indices) Assert.assertTrue(oapsPreppedGlucose.csfGlucoseData[i].equals(aapsPreppedGlucose.csfGlucoseData[i])) + oapsPreppedGlucose.isfGlucoseData = oapsPreppedGlucose.isfGlucoseData.sortedBy { it.date } + aapsPreppedGlucose.isfGlucoseData = aapsPreppedGlucose.isfGlucoseData.sortedBy { it.date } for (i in aapsPreppedGlucose.isfGlucoseData.indices) Assert.assertTrue(oapsPreppedGlucose.isfGlucoseData[i].equals(aapsPreppedGlucose.isfGlucoseData[i])) + oapsPreppedGlucose.basalGlucoseData = oapsPreppedGlucose.basalGlucoseData.sortedBy { it.date } + aapsPreppedGlucose.basalGlucoseData = aapsPreppedGlucose.basalGlucoseData.sortedBy { it.date } for (i in aapsPreppedGlucose.basalGlucoseData.indices) Assert.assertTrue(oapsPreppedGlucose.basalGlucoseData[i].equals(aapsPreppedGlucose.basalGlucoseData[i])) } @@ -87,8 +90,85 @@ class AutotunePrepTest : TestBaseWithProfile() { } + @Test + fun autotunePrepTest2() { // Test if categorisation without carbs (full UAM) and categorize UAM as basal false is Ok + val inputIobJson = File("src/test/res/autotune/test2/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS + val iobOapsCalcul = buildIobOaps(JSONArray(inputIobJson)) + autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalcul) + autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) + val inputProfileJson = File("src/test/res/autotune/test2/profile.pump.json").readText() + val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! + val prepjson = File("src/test/res/autotune/test2/autotune.2022-05-21.json").readText() + val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepjson), dateUtil) //prep data calculated by OpenAPS autotune + val oapsEntriesJson = File("src/test/res/autotune/test2/aaps-entries.2022-05-21.json").readText() + autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) + val oapsTreatmentsJson = File("src/test/res/autotune/test2/aaps-treatments.2022-05-21.json").readText() + autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation + autotuneIob.boluses = buildBoluses(oapsPreppedGlucose) //Values from oapsPrepData because linked to iob calculation method for TBR + `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) + `when`(sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)).thenReturn(false) // CategorizeUAM as Basal = False + val aapsPreppedGlucose = autotunePrep.categorizeBGDatums(inputProfile, inputProfile.localInsulin, false) + try { + aapsPreppedGlucose?.let { // compare all categorization calculated by aaps plugin (aapsPreppedGlucose) with categorization calculated by OpenAPS (oapsPreppedGlucose) + for (i in aapsPreppedGlucose.crData.indices) + Assert.assertTrue(oapsPreppedGlucose.crData[i].equals(aapsPreppedGlucose.crData[i])) + for (i in aapsPreppedGlucose.csfGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.csfGlucoseData[i].equals(aapsPreppedGlucose.csfGlucoseData[i])) + oapsPreppedGlucose.isfGlucoseData = oapsPreppedGlucose.isfGlucoseData.sortedBy { it.date } + aapsPreppedGlucose.isfGlucoseData = aapsPreppedGlucose.isfGlucoseData.sortedBy { it.date } + for (i in aapsPreppedGlucose.isfGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.isfGlucoseData[i].equals(aapsPreppedGlucose.isfGlucoseData[i])) + oapsPreppedGlucose.basalGlucoseData = oapsPreppedGlucose.basalGlucoseData.sortedBy { it.date } + aapsPreppedGlucose.basalGlucoseData = aapsPreppedGlucose.basalGlucoseData.sortedBy { it.date } + for (i in aapsPreppedGlucose.basalGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.basalGlucoseData[i].equals(aapsPreppedGlucose.basalGlucoseData[i])) + } + ?: Assert.fail() + } catch (e: Exception) { + Assert.fail() + } + } - /** + @Test + fun autotunePrepTest3() { // Test if categorisation without carbs (full UAM) and categorize UAM as basal true is Ok + val inputIobJson = File("src/test/res/autotune/test3/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS + val iobOapsCalcul = buildIobOaps(JSONArray(inputIobJson)) + autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalcul) + autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) + val inputProfileJson = File("src/test/res/autotune/test3/profile.pump.json").readText() + val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! + val prepjson = File("src/test/res/autotune/test3/autotune.2022-05-21.json").readText() + val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepjson), dateUtil) //prep data calculated by OpenAPS autotune + val oapsEntriesJson = File("src/test/res/autotune/test3/aaps-entries.2022-05-21.json").readText() + autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) + val oapsTreatmentsJson = File("src/test/res/autotune/test3/aaps-treatments.2022-05-21.json").readText() + autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation + autotuneIob.boluses = buildBoluses(oapsPreppedGlucose) //Values from oapsPrepData because linked to iob calculation method for TBR + `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) + `when`(sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)).thenReturn(true) // CategorizeUAM as Basal = True + val aapsPreppedGlucose = autotunePrep.categorizeBGDatums(inputProfile, inputProfile.localInsulin, false) + try { + aapsPreppedGlucose?.let { // compare all categorization calculated by aaps plugin (aapsPreppedGlucose) with categorization calculated by OpenAPS (oapsPreppedGlucose) + for (i in aapsPreppedGlucose.crData.indices) + Assert.assertTrue(oapsPreppedGlucose.crData[i].equals(aapsPreppedGlucose.crData[i])) + for (i in aapsPreppedGlucose.csfGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.csfGlucoseData[i].equals(aapsPreppedGlucose.csfGlucoseData[i])) + oapsPreppedGlucose.isfGlucoseData = oapsPreppedGlucose.isfGlucoseData.sortedBy { it.date } + aapsPreppedGlucose.isfGlucoseData = aapsPreppedGlucose.isfGlucoseData.sortedBy { it.date } + for (i in aapsPreppedGlucose.isfGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.isfGlucoseData[i].equals(aapsPreppedGlucose.isfGlucoseData[i])) + oapsPreppedGlucose.basalGlucoseData = oapsPreppedGlucose.basalGlucoseData.sortedBy { it.date } + aapsPreppedGlucose.basalGlucoseData = aapsPreppedGlucose.basalGlucoseData.sortedBy { it.date } + for (i in aapsPreppedGlucose.basalGlucoseData.indices) + Assert.assertTrue(oapsPreppedGlucose.basalGlucoseData[i].equals(aapsPreppedGlucose.basalGlucoseData[i])) + } + ?: Assert.fail() + } catch (e: Exception) { + Assert.fail() + } + } + + /************************************************************************************************************************************************************************************* * OpenAPS profile for Autotune only have one ISF value and one IC value */ fun atProfileFromOapsJson(jsonObject: JSONObject, dateUtil: DateUtil, defaultUnits: String? = null): ATProfile? { @@ -172,6 +252,14 @@ class AutotunePrepTest : TestBaseWithProfile() { ) } } catch (e: Exception) { } + if (boluses.size == 0) //Add at least one insulin treatment for tests to avoid return null in categorization + boluses.add( + Bolus( + timestamp = startDayTime, + amount = 1.0, + type = Bolus.Type.NORMAL + ) + ) return boluses } diff --git a/app/src/test/res/autotune/test2/aaps-entries.2022-05-21.json b/app/src/test/res/autotune/test2/aaps-entries.2022-05-21.json new file mode 100644 index 0000000000..70c349e9d8 --- /dev/null +++ b/app/src/test/res/autotune/test2/aaps-entries.2022-05-21.json @@ -0,0 +1,2882 @@ +[ + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184750000, + "dateString": "2022-05-22T01:59:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "6289990761a8290004740388" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184450000, + "dateString": "2022-05-22T01:54:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628997d861a8290004740385" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184150000, + "dateString": "2022-05-22T01:49:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628996a961a8290004740382" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183850000, + "dateString": "2022-05-22T01:44:10.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6289957b61a829000474037f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183550000, + "dateString": "2022-05-22T01:39:10.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6289945f50e51d0004429e6d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183249000, + "dateString": "2022-05-22T01:34:09.000Z", + "isValid": true, + "sgv": 73, + "direction": "Flat", + "type": "sgv", + "_id": "6289933050e51d0004429e6b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182949000, + "dateString": "2022-05-22T01:29:09.000Z", + "isValid": true, + "sgv": 72, + "direction": "Flat", + "type": "sgv", + "_id": "6289920150e51d0004429e69" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182650000, + "dateString": "2022-05-22T01:24:10.000Z", + "isValid": true, + "sgv": 74, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628990d350e51d0004429e67" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182349000, + "dateString": "2022-05-22T01:19:09.000Z", + "isValid": true, + "sgv": 77, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898fa550e51d0004429e65" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182050000, + "dateString": "2022-05-22T01:14:10.000Z", + "isValid": true, + "sgv": 81, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898e7650e51d0004429e63" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181750000, + "dateString": "2022-05-22T01:09:10.000Z", + "isValid": true, + "sgv": 87, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898d4750e51d0004429e5f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181450000, + "dateString": "2022-05-22T01:04:10.000Z", + "isValid": true, + "sgv": 92, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898c2fda46aa0004d1e0fc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181150000, + "dateString": "2022-05-22T00:59:10.000Z", + "isValid": true, + "sgv": 97, + "direction": "SingleDown", + "type": "sgv", + "_id": "62898b01da46aa0004d1e0fa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180849000, + "dateString": "2022-05-22T00:54:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "SingleDown", + "type": "sgv", + "_id": "628989d2da46aa0004d1e0f8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180549000, + "dateString": "2022-05-22T00:49:09.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628988a3da46aa0004d1e0f5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180250000, + "dateString": "2022-05-22T00:44:10.000Z", + "isValid": true, + "sgv": 135, + "direction": "Flat", + "type": "sgv", + "_id": "62898774da46aa0004d1e0f1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179949000, + "dateString": "2022-05-22T00:39:09.000Z", + "isValid": true, + "sgv": 143, + "direction": "Flat", + "type": "sgv", + "_id": "62898645da46aa0004d1e0ee" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179649000, + "dateString": "2022-05-22T00:34:09.000Z", + "isValid": true, + "sgv": 143, + "direction": "Flat", + "type": "sgv", + "_id": "62898517da46aa0004d1e0ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179350000, + "dateString": "2022-05-22T00:29:10.000Z", + "isValid": true, + "sgv": 142, + "direction": "Flat", + "type": "sgv", + "_id": "628983f69d6f1800047cd0dd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179050000, + "dateString": "2022-05-22T00:24:10.000Z", + "isValid": true, + "sgv": 142, + "direction": "Flat", + "type": "sgv", + "_id": "628982c89d6f1800047cd0db" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178750000, + "dateString": "2022-05-22T00:19:10.000Z", + "isValid": true, + "sgv": 144, + "direction": "Flat", + "type": "sgv", + "_id": "628981999d6f1800047cd0d8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178449000, + "dateString": "2022-05-22T00:14:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "6289806a9d6f1800047cd0d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178149000, + "dateString": "2022-05-22T00:09:09.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62897f3b9d6f1800047cd0d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177850000, + "dateString": "2022-05-22T00:04:10.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62897e0c9d6f1800047cd0d0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177550000, + "dateString": "2022-05-21T23:59:10.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "62897cde9d6f1800047cd0cc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177250000, + "dateString": "2022-05-21T23:54:10.000Z", + "isValid": true, + "sgv": 146, + "direction": "Flat", + "type": "sgv", + "_id": "62897bc89d6f1800047cd0c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176950000, + "dateString": "2022-05-21T23:49:10.000Z", + "isValid": true, + "sgv": 143, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62897a8771a363000480abca" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176650000, + "dateString": "2022-05-21T23:44:10.000Z", + "isValid": true, + "sgv": 139, + "direction": "Flat", + "type": "sgv", + "_id": "6289797071a363000480abc7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176350000, + "dateString": "2022-05-21T23:39:10.000Z", + "isValid": true, + "sgv": 132, + "direction": "Flat", + "type": "sgv", + "_id": "6289784271a363000480abc3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176050000, + "dateString": "2022-05-21T23:34:10.000Z", + "isValid": true, + "sgv": 127, + "direction": "Flat", + "type": "sgv", + "_id": "6289771371a363000480abc1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175750000, + "dateString": "2022-05-21T23:29:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "628975e471a363000480abbe" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175450000, + "dateString": "2022-05-21T23:24:10.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "_id": "628974b671a363000480abbc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175149000, + "dateString": "2022-05-21T23:19:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "6289738f37d09a00043f2b26" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174850000, + "dateString": "2022-05-21T23:14:10.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6289727a37d09a00043f2b22" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174550000, + "dateString": "2022-05-21T23:09:10.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "6289727937d09a00043f2b21" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174249000, + "dateString": "2022-05-21T23:04:09.000Z", + "isValid": true, + "sgv": 111, + "direction": "Flat", + "type": "sgv", + "_id": "6289726037d09a00043f2b20" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173949000, + "dateString": "2022-05-21T22:59:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "6289721437d09a00043f2b1f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173650000, + "dateString": "2022-05-21T22:54:10.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "6289717d37d09a00043f2b1e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173350000, + "dateString": "2022-05-21T22:49:10.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "62896fb837d09a00043f2b1b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173050000, + "dateString": "2022-05-21T22:44:10.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "62896f8537d09a00043f2b1a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172749000, + "dateString": "2022-05-21T22:39:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "62896e8937d09a00043f2b19" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172450000, + "dateString": "2022-05-21T22:34:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "62896d8b37d09a00043f2b17" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172150000, + "dateString": "2022-05-21T22:29:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "62896cda37d09a00043f2b16" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171849000, + "dateString": "2022-05-21T22:24:09.000Z", + "isValid": true, + "sgv": 122, + "direction": "Flat", + "type": "sgv", + "_id": "62896c7537d09a00043f2b14" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171549000, + "dateString": "2022-05-21T22:19:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "62896c1037d09a00043f2b13" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171250000, + "dateString": "2022-05-21T22:14:10.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "62896b5f6a5ecf00042d5474" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170950000, + "dateString": "2022-05-21T22:09:10.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "62896ac76a5ecf00042d5472" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170650000, + "dateString": "2022-05-21T22:04:10.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "628969fd6a5ecf00042d5471" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170350000, + "dateString": "2022-05-21T21:59:10.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "_id": "628969016a5ecf00042d5470" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170049000, + "dateString": "2022-05-21T21:54:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "628967a06a5ecf00042d546e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169749000, + "dateString": "2022-05-21T21:49:09.000Z", + "isValid": true, + "sgv": 107, + "direction": "Flat", + "type": "sgv", + "_id": "628964906a5ecf00042d546b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169449000, + "dateString": "2022-05-21T21:44:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "_id": "628961a4fb144900043c34ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169150000, + "dateString": "2022-05-21T21:39:10.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62895f5ffb144900043c34e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168849000, + "dateString": "2022-05-21T21:34:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "62895d98fb144900043c34e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168549000, + "dateString": "2022-05-21T21:29:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "62895b9a9bf1e6000482ffa1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168250000, + "dateString": "2022-05-21T21:24:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628959ed9bf1e6000482ff9e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167949000, + "dateString": "2022-05-21T21:19:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6289583f9bf1e6000482ff9b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167650000, + "dateString": "2022-05-21T21:14:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628956919bf1e6000482ff96" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167350000, + "dateString": "2022-05-21T21:09:10.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "628955179bf1e6000482ff92" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167049000, + "dateString": "2022-05-21T21:04:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628953e79bf1e6000482ff90" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166749000, + "dateString": "2022-05-21T20:59:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628952c680fc7e00041b22a9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166450000, + "dateString": "2022-05-21T20:54:10.000Z", + "isValid": true, + "sgv": 110, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6289519580fc7e00041b22a7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166149000, + "dateString": "2022-05-21T20:49:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6289506680fc7e00041b22a5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165850000, + "dateString": "2022-05-21T20:44:10.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "62894f3880fc7e00041b22a3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165550000, + "dateString": "2022-05-21T20:39:10.000Z", + "isValid": true, + "sgv": 139, + "direction": "Flat", + "type": "sgv", + "_id": "62894e0980fc7e00041b22a0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165249000, + "dateString": "2022-05-21T20:34:09.000Z", + "isValid": true, + "sgv": 145, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62894cdb80fc7e00041b229e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164950000, + "dateString": "2022-05-21T20:29:10.000Z", + "isValid": true, + "sgv": 143, + "direction": "SingleUp", + "type": "sgv", + "_id": "62894bab80fc7e00041b229b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164649000, + "dateString": "2022-05-21T20:24:09.000Z", + "isValid": true, + "sgv": 133, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62894a7e4493460004e63a38" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164350000, + "dateString": "2022-05-21T20:19:10.000Z", + "isValid": true, + "sgv": 120, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6289496a4493460004e63a34" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164049000, + "dateString": "2022-05-21T20:14:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "Flat", + "type": "sgv", + "_id": "628948214493460004e63a31" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163749000, + "dateString": "2022-05-21T20:09:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "6289470c4493460004e63a2d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163449000, + "dateString": "2022-05-21T20:04:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "Flat", + "type": "sgv", + "_id": "628945dc4493460004e63a2a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163150000, + "dateString": "2022-05-21T19:59:10.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "628944ae4493460004e63a27" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162850000, + "dateString": "2022-05-21T19:54:10.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "6289437f4493460004e63a25" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162549000, + "dateString": "2022-05-21T19:49:09.000Z", + "isValid": true, + "sgv": 88, + "direction": "Flat", + "type": "sgv", + "_id": "6289425f598f780004bb3b30" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162250000, + "dateString": "2022-05-21T19:44:10.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "62894118598f780004bb3b2d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161950000, + "dateString": "2022-05-21T19:39:10.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "62893feb598f780004bb3b2b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161649000, + "dateString": "2022-05-21T19:34:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "62893ed7598f780004bb3b29" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161350000, + "dateString": "2022-05-21T19:29:10.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "62893daa598f780004bb3b27" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161049000, + "dateString": "2022-05-21T19:24:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "Flat", + "type": "sgv", + "_id": "62893c7d598f780004bb3b24" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160749000, + "dateString": "2022-05-21T19:19:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "62893b4f598f780004bb3b22" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160449000, + "dateString": "2022-05-21T19:14:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "62893a1222fbc8000495b822" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160150000, + "dateString": "2022-05-21T19:09:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628938fe22fbc8000495b81f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159849000, + "dateString": "2022-05-21T19:04:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628937b822fbc8000495b81d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159549000, + "dateString": "2022-05-21T18:59:09.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "628936a422fbc8000495b81a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159249000, + "dateString": "2022-05-21T18:54:09.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "6289357622fbc8000495b818" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158949000, + "dateString": "2022-05-21T18:49:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "6289344a22fbc8000495b815" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158649000, + "dateString": "2022-05-21T18:44:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6289331c22fbc8000495b813" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158349000, + "dateString": "2022-05-21T18:39:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "628931e9840d8d0004a20bff" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158049000, + "dateString": "2022-05-21T18:34:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "Flat", + "type": "sgv", + "_id": "628930bc840d8d0004a20bfd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157750000, + "dateString": "2022-05-21T18:29:10.000Z", + "isValid": true, + "sgv": 106, + "direction": "Flat", + "type": "sgv", + "_id": "62892f8f840d8d0004a20bfa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157449000, + "dateString": "2022-05-21T18:24:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "62892e62840d8d0004a20bf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157149000, + "dateString": "2022-05-21T18:19:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "62892d34840d8d0004a20bf5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156849000, + "dateString": "2022-05-21T18:14:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "62892c06840d8d0004a20bf2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156549000, + "dateString": "2022-05-21T18:09:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "62892af2840d8d0004a20bf0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156250000, + "dateString": "2022-05-21T18:04:10.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "628929ac8809e60004c644e9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155950000, + "dateString": "2022-05-21T17:59:10.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "_id": "6289287e8809e60004c644e6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155649000, + "dateString": "2022-05-21T17:54:09.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "6289276a8809e60004c644e3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155349000, + "dateString": "2022-05-21T17:49:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "NONE", + "type": "sgv", + "_id": "6289263c8809e60004c644e1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155049000, + "dateString": "2022-05-21T17:44:09.000Z", + "isValid": true, + "sgv": 116, + "direction": "NONE", + "type": "sgv", + "_id": "6289250d8809e60004c644dd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154749000, + "dateString": "2022-05-21T17:39:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "NONE", + "type": "sgv", + "_id": "628923df8809e60004c644d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154449000, + "dateString": "2022-05-21T17:34:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628922b18809e60004c644d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154149000, + "dateString": "2022-05-21T17:29:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "SingleDown", + "type": "sgv", + "_id": "628921861090500004ca472b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153849000, + "dateString": "2022-05-21T17:24:09.000Z", + "isValid": true, + "sgv": 96, + "direction": "SingleDown", + "type": "sgv", + "_id": "628920591090500004ca4727" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153549000, + "dateString": "2022-05-21T17:19:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "SingleDown", + "type": "sgv", + "_id": "62891f2b1090500004ca4724" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153249000, + "dateString": "2022-05-21T17:14:09.000Z", + "isValid": true, + "sgv": 124, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62891dfd1090500004ca4722" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152949000, + "dateString": "2022-05-21T17:09:09.000Z", + "isValid": true, + "sgv": 138, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62891cd01090500004ca471f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152649000, + "dateString": "2022-05-21T17:04:09.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62891ba31090500004ca471d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152349000, + "dateString": "2022-05-21T16:59:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "62891a811090500004ca471a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152049000, + "dateString": "2022-05-21T16:54:09.000Z", + "isValid": true, + "sgv": 160, + "direction": "Flat", + "type": "sgv", + "_id": "628919531090500004ca4717" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151749000, + "dateString": "2022-05-21T16:49:09.000Z", + "isValid": true, + "sgv": 159, + "direction": "Flat", + "type": "sgv", + "_id": "628918261090500004ca4714" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151449000, + "dateString": "2022-05-21T16:44:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "628916f81090500004ca4710" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151149000, + "dateString": "2022-05-21T16:39:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "628915ce1090500004ca470c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150849000, + "dateString": "2022-05-21T16:34:09.000Z", + "isValid": true, + "sgv": 161, + "direction": "Flat", + "type": "sgv", + "_id": "628914d01090500004ca4709" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150549000, + "dateString": "2022-05-21T16:29:09.000Z", + "isValid": true, + "sgv": 165, + "direction": "Flat", + "type": "sgv", + "_id": "628913731090500004ca4706" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150249000, + "dateString": "2022-05-21T16:24:09.000Z", + "isValid": true, + "sgv": 170, + "direction": "Flat", + "type": "sgv", + "_id": "628913111090500004ca4704" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149949000, + "dateString": "2022-05-21T16:19:09.000Z", + "isValid": true, + "sgv": 172, + "direction": "Flat", + "type": "sgv", + "_id": "6289130f1090500004ca46ff" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149650000, + "dateString": "2022-05-21T16:14:10.000Z", + "isValid": true, + "sgv": 173, + "direction": "Flat", + "type": "sgv", + "_id": "62890fff1090500004ca46fd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149349000, + "dateString": "2022-05-21T16:09:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "_id": "62890edacf7ee10004a2b1e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149049000, + "dateString": "2022-05-21T16:04:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890daccf7ee10004a2b1de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148749000, + "dateString": "2022-05-21T15:59:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890c64cf7ee10004a2b1da" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148450000, + "dateString": "2022-05-21T15:54:10.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890b36cf7ee10004a2b1d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148149000, + "dateString": "2022-05-21T15:49:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "_id": "62890a21cf7ee10004a2b1d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147849000, + "dateString": "2022-05-21T15:44:09.000Z", + "isValid": true, + "sgv": 175, + "direction": "Flat", + "type": "sgv", + "_id": "628908f3cf7ee10004a2b1d1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147549000, + "dateString": "2022-05-21T15:39:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "628907c5cf7ee10004a2b1ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147249000, + "dateString": "2022-05-21T15:34:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6289067fc9346b0004863369" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146949000, + "dateString": "2022-05-21T15:29:09.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6289056ac9346b0004863366" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146650000, + "dateString": "2022-05-21T15:24:10.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6289043cc9346b0004863363" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146349000, + "dateString": "2022-05-21T15:19:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6289030ec9346b0004863361" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146050000, + "dateString": "2022-05-21T15:14:10.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "628901e0c9346b000486335f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145750000, + "dateString": "2022-05-21T15:09:10.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "628900b2c9346b000486335d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145449000, + "dateString": "2022-05-21T15:04:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6288ff9ec9346b000486335b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145149000, + "dateString": "2022-05-21T14:59:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "6288fe56c9346b0004863359" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144849000, + "dateString": "2022-05-21T14:54:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6288fd270e0c880004d58de7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144550000, + "dateString": "2022-05-21T14:49:10.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6288fbf90e0c880004d58de5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144249000, + "dateString": "2022-05-21T14:44:09.000Z", + "isValid": true, + "sgv": 180, + "direction": "Flat", + "type": "sgv", + "_id": "6288facb0e0c880004d58de3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143949000, + "dateString": "2022-05-21T14:39:09.000Z", + "isValid": true, + "sgv": 184, + "direction": "Flat", + "type": "sgv", + "_id": "6288f9b60e0c880004d58de0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143650000, + "dateString": "2022-05-21T14:34:10.000Z", + "isValid": true, + "sgv": 185, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f8880e0c880004d58dde" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143349000, + "dateString": "2022-05-21T14:29:09.000Z", + "isValid": true, + "sgv": 182, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f75a0e0c880004d58ddb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143049000, + "dateString": "2022-05-21T14:24:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f62c0e0c880004d58dd8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142749000, + "dateString": "2022-05-21T14:19:09.000Z", + "isValid": true, + "sgv": 166, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f4f72634cd0004296074" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142449000, + "dateString": "2022-05-21T14:14:09.000Z", + "isValid": true, + "sgv": 160, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f3c92634cd0004296071" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142149000, + "dateString": "2022-05-21T14:09:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f29b2634cd000429606f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141849000, + "dateString": "2022-05-21T14:04:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f16d2634cd000429606c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141548000, + "dateString": "2022-05-21T13:59:08.000Z", + "isValid": true, + "sgv": 139, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f03f2634cd000429606a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141249000, + "dateString": "2022-05-21T13:54:09.000Z", + "isValid": true, + "sgv": 131, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ef2a2634cd0004296067" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140949000, + "dateString": "2022-05-21T13:49:09.000Z", + "isValid": true, + "sgv": 126, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288edfc2634cd0004296065" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140648000, + "dateString": "2022-05-21T13:44:08.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ecca0f1be700041e5a0b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140349000, + "dateString": "2022-05-21T13:39:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288eb9d0f1be700041e5a09" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140049000, + "dateString": "2022-05-21T13:34:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "_id": "6288ea6e0f1be700041e5a06" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139749000, + "dateString": "2022-05-21T13:29:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6288e9410f1be700041e5a03" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139450000, + "dateString": "2022-05-21T13:24:10.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288e82c0f1be700041e5a00" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139150000, + "dateString": "2022-05-21T13:19:10.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "6288e7030f1be700041e59fd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138849000, + "dateString": "2022-05-21T13:14:09.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288e5d00f1be700041e59fb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138549000, + "dateString": "2022-05-21T13:09:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288e4900f1be700041e59f8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138249000, + "dateString": "2022-05-21T13:04:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288e3610f1be700041e59f6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137949000, + "dateString": "2022-05-21T12:59:09.000Z", + "isValid": true, + "sgv": 86, + "direction": "Flat", + "type": "sgv", + "_id": "6288e24c0f1be700041e59f3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137649000, + "dateString": "2022-05-21T12:54:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6288e1040f1be700041e59f0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137350000, + "dateString": "2022-05-21T12:49:10.000Z", + "isValid": true, + "sgv": 72, + "direction": "Flat", + "type": "sgv", + "_id": "6288dfd60f1be700041e59ee" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137049000, + "dateString": "2022-05-21T12:44:09.000Z", + "isValid": true, + "sgv": 69, + "direction": "Flat", + "type": "sgv", + "_id": "6288df8a0f1be700041e59ec" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136749000, + "dateString": "2022-05-21T12:39:09.000Z", + "isValid": true, + "sgv": 68, + "direction": "Flat", + "type": "sgv", + "_id": "6288de580f1be700041e59ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136449000, + "dateString": "2022-05-21T12:34:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "6288dd270f1be700041e59e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136149000, + "dateString": "2022-05-21T12:29:09.000Z", + "isValid": true, + "sgv": 73, + "direction": "Flat", + "type": "sgv", + "_id": "6288db8a0f1be700041e59e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135849000, + "dateString": "2022-05-21T12:24:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6288d9fb0f1be700041e59e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135549000, + "dateString": "2022-05-21T12:19:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "6288d8e00f1be700041e59e0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135249000, + "dateString": "2022-05-21T12:14:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6288d7ae0f1be700041e59de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134949000, + "dateString": "2022-05-21T12:09:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "6288d67f0f1be700041e59da" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134649000, + "dateString": "2022-05-21T12:04:09.000Z", + "isValid": true, + "sgv": 77, + "direction": "Flat", + "type": "sgv", + "_id": "6288d5500f1be700041e59d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134349000, + "dateString": "2022-05-21T11:59:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d4220f1be700041e59d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134049000, + "dateString": "2022-05-21T11:54:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d3060f1be700041e59d2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133749000, + "dateString": "2022-05-21T11:49:09.000Z", + "isValid": true, + "sgv": 87, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d1d80f1be700041e59cf" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133449000, + "dateString": "2022-05-21T11:44:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6288d0a80f1be700041e59cb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133149000, + "dateString": "2022-05-21T11:39:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "6288cf770f1be700041e59c8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132849000, + "dateString": "2022-05-21T11:34:09.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ce548e9ed800049b39f7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132549000, + "dateString": "2022-05-21T11:29:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288cd278e9ed800049b39f5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132249000, + "dateString": "2022-05-21T11:24:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288cbf98e9ed800049b39f2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131948000, + "dateString": "2022-05-21T11:19:08.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6288cacb8e9ed800049b39ec" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131649000, + "dateString": "2022-05-21T11:14:09.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "6288c99e8e9ed800049b39e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131349000, + "dateString": "2022-05-21T11:09:09.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "_id": "6288c86f8e9ed800049b39e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131049000, + "dateString": "2022-05-21T11:04:09.000Z", + "isValid": true, + "sgv": 81, + "direction": "Flat", + "type": "sgv", + "_id": "6288c7418e9ed800049b39e3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130748000, + "dateString": "2022-05-21T10:59:08.000Z", + "isValid": true, + "sgv": 84, + "direction": "Flat", + "type": "sgv", + "_id": "6288c61a1991280004dce468" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130448000, + "dateString": "2022-05-21T10:54:08.000Z", + "isValid": true, + "sgv": 88, + "direction": "Flat", + "type": "sgv", + "_id": "6288c4ec1991280004dce464" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130149000, + "dateString": "2022-05-21T10:49:09.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "6288c3be1991280004dce461" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129848000, + "dateString": "2022-05-21T10:44:08.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "6288c2911991280004dce45e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129548000, + "dateString": "2022-05-21T10:39:08.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288c1631991280004dce45b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129249000, + "dateString": "2022-05-21T10:34:09.000Z", + "isValid": true, + "sgv": 96, + "direction": "Flat", + "type": "sgv", + "_id": "6288c0341991280004dce459" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128948000, + "dateString": "2022-05-21T10:29:08.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "6288bf061991280004dce457" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128649000, + "dateString": "2022-05-21T10:24:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6288bde0abbef90004616cf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128349000, + "dateString": "2022-05-21T10:19:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "Flat", + "type": "sgv", + "_id": "6288bcb2abbef90004616cf6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128049000, + "dateString": "2022-05-21T10:14:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "6288bb84abbef90004616cf4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127748000, + "dateString": "2022-05-21T10:09:08.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "6288ba56abbef90004616cf2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127449000, + "dateString": "2022-05-21T10:04:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288b941abbef90004616cf0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127149000, + "dateString": "2022-05-21T09:59:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288b813abbef90004616ceb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126849000, + "dateString": "2022-05-21T09:54:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b6e9c9c02c00041f7f06" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126549000, + "dateString": "2022-05-21T09:49:09.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6288b5bbc9c02c00041f7f04" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126249000, + "dateString": "2022-05-21T09:44:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b48dc9c02c00041f7f02" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125948000, + "dateString": "2022-05-21T09:39:08.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b35fc9c02c00041f7f00" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125649000, + "dateString": "2022-05-21T09:34:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b231c9c02c00041f7efe" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125349000, + "dateString": "2022-05-21T09:29:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "6288b103c9c02c00041f7efc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125048000, + "dateString": "2022-05-21T09:24:08.000Z", + "isValid": true, + "sgv": 122, + "direction": "Flat", + "type": "sgv", + "_id": "6288afd5c9c02c00041f7ef8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124749000, + "dateString": "2022-05-21T09:19:09.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "_id": "6288aea799fc930004d6bdfb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124448000, + "dateString": "2022-05-21T09:14:08.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "6288ad7999fc930004d6bdfa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124149000, + "dateString": "2022-05-21T09:09:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288ac4b99fc930004d6bdf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123849000, + "dateString": "2022-05-21T09:04:09.000Z", + "isValid": true, + "sgv": 113, + "direction": "Flat", + "type": "sgv", + "_id": "6288ab1d99fc930004d6bdf6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123549000, + "dateString": "2022-05-21T08:59:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "Flat", + "type": "sgv", + "_id": "6288a9f099fc930004d6bdf4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123248000, + "dateString": "2022-05-21T08:54:08.000Z", + "isValid": true, + "sgv": 107, + "direction": "Flat", + "type": "sgv", + "_id": "6288a8db99fc930004d6bdf1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122949000, + "dateString": "2022-05-21T08:49:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a7ad99fc930004d6bdef" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122649000, + "dateString": "2022-05-21T08:44:09.000Z", + "isValid": true, + "sgv": 111, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a73099fc930004d6bded" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122349000, + "dateString": "2022-05-21T08:39:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a55199fc930004d6bdeb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122049000, + "dateString": "2022-05-21T08:34:09.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "6288a42099fc930004d6bde8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121749000, + "dateString": "2022-05-21T08:29:09.000Z", + "isValid": true, + "sgv": 138, + "direction": "Flat", + "type": "sgv", + "_id": "6288a2fca4cc860004a251d2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121449000, + "dateString": "2022-05-21T08:24:09.000Z", + "isValid": true, + "sgv": 145, + "direction": "Flat", + "type": "sgv", + "_id": "6288a1cda4cc860004a251d1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121149000, + "dateString": "2022-05-21T08:19:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "6288a09fa4cc860004a251ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120849000, + "dateString": "2022-05-21T08:14:09.000Z", + "isValid": true, + "sgv": 148, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889f6fa4cc860004a251cc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120548000, + "dateString": "2022-05-21T08:09:08.000Z", + "isValid": true, + "sgv": 146, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889e41a4cc860004a251cb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120249000, + "dateString": "2022-05-21T08:04:09.000Z", + "isValid": true, + "sgv": 141, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889d13a4cc860004a251c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119949000, + "dateString": "2022-05-21T07:59:09.000Z", + "isValid": true, + "sgv": 132, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889be4a4cc860004a251c7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119649000, + "dateString": "2022-05-21T07:54:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889ac27ff1e700040f17dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119349000, + "dateString": "2022-05-21T07:49:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "628899957ff1e700040f17d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119049000, + "dateString": "2022-05-21T07:44:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "628898627ff1e700040f17d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118748000, + "dateString": "2022-05-21T07:39:08.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628897357ff1e700040f17d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118449000, + "dateString": "2022-05-21T07:34:09.000Z", + "isValid": true, + "sgv": 92, + "direction": "Flat", + "type": "sgv", + "_id": "6288961d7ff1e700040f17ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118149000, + "dateString": "2022-05-21T07:29:09.000Z", + "isValid": true, + "sgv": 86, + "direction": "Flat", + "type": "sgv", + "_id": "628894d37ff1e700040f17cd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117848000, + "dateString": "2022-05-21T07:24:08.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "_id": "628893bd7ff1e700040f17c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117549000, + "dateString": "2022-05-21T07:19:09.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628892907ff1e700040f17c7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117249000, + "dateString": "2022-05-21T07:14:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "628891627ff1e700040f17c6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116949000, + "dateString": "2022-05-21T07:09:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "62889024149196000412bf57" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116649000, + "dateString": "2022-05-21T07:04:09.000Z", + "isValid": true, + "sgv": 74, + "direction": "Flat", + "type": "sgv", + "_id": "62888f0f149196000412bf54" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116349000, + "dateString": "2022-05-21T06:59:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "62888de2149196000412bf51" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116049000, + "dateString": "2022-05-21T06:54:09.000Z", + "isValid": true, + "sgv": 69, + "direction": "Flat", + "type": "sgv", + "_id": "62888ccc149196000412bf4f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115749000, + "dateString": "2022-05-21T06:49:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "62888b85149196000412bf4d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115449000, + "dateString": "2022-05-21T06:44:09.000Z", + "isValid": true, + "sgv": 74, + "direction": "Flat", + "type": "sgv", + "_id": "62888a57149196000412bf4b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115149000, + "dateString": "2022-05-21T06:39:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6288892a149196000412bf49" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114849000, + "dateString": "2022-05-21T06:34:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "628888018ff3530004dc6070" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114549000, + "dateString": "2022-05-21T06:29:09.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628886d28ff3530004dc606b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114249000, + "dateString": "2022-05-21T06:24:09.000Z", + "isValid": true, + "sgv": 85, + "direction": "Flat", + "type": "sgv", + "_id": "628885a48ff3530004dc6069" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113949000, + "dateString": "2022-05-21T06:19:09.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "628884778ff3530004dc6067" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113649000, + "dateString": "2022-05-21T06:14:09.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "6288834a8ff3530004dc6065" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113349000, + "dateString": "2022-05-21T06:09:09.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288821b8ff3530004dc6062" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113049000, + "dateString": "2022-05-21T06:04:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628880ee8ff3530004dc6060" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112749000, + "dateString": "2022-05-21T05:59:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "62887fcee964810004aa5666" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112449000, + "dateString": "2022-05-21T05:54:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62887ea1e964810004aa5664" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112148000, + "dateString": "2022-05-21T05:49:08.000Z", + "isValid": true, + "sgv": 103, + "direction": "Flat", + "type": "sgv", + "_id": "62887d72e964810004aa5661" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111849000, + "dateString": "2022-05-21T05:44:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62887c44e964810004aa565d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111549000, + "dateString": "2022-05-21T05:39:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "62887b17e964810004aa565a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111249000, + "dateString": "2022-05-21T05:34:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628879e9e964810004aa5657" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110949000, + "dateString": "2022-05-21T05:29:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628878bbe964810004aa5655" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110649000, + "dateString": "2022-05-21T05:24:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628877a5363e6c0004f710e0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110348000, + "dateString": "2022-05-21T05:19:08.000Z", + "isValid": true, + "sgv": 102, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62887677363e6c0004f710de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110049000, + "dateString": "2022-05-21T05:14:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62887549363e6c0004f710dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109748000, + "dateString": "2022-05-21T05:09:08.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6288741c363e6c0004f710d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109448000, + "dateString": "2022-05-21T05:04:08.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "_id": "628872ef363e6c0004f710d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109148000, + "dateString": "2022-05-21T04:59:08.000Z", + "isValid": true, + "sgv": 129, + "direction": "Flat", + "type": "sgv", + "_id": "628871c1363e6c0004f710d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108848000, + "dateString": "2022-05-21T04:54:08.000Z", + "isValid": true, + "sgv": 130, + "direction": "Flat", + "type": "sgv", + "_id": "62887093363e6c0004f710cf" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108548000, + "dateString": "2022-05-21T04:49:08.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "62886f5719e2e60004989bbc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108249000, + "dateString": "2022-05-21T04:44:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886e2919e2e60004989bba" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107948000, + "dateString": "2022-05-21T04:39:08.000Z", + "isValid": true, + "sgv": 124, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886cfc19e2e60004989bb8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107648000, + "dateString": "2022-05-21T04:34:08.000Z", + "isValid": true, + "sgv": 132, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886be719e2e60004989bb5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107348000, + "dateString": "2022-05-21T04:29:08.000Z", + "isValid": true, + "sgv": 144, + "direction": "Flat", + "type": "sgv", + "_id": "62886ab919e2e60004989bb3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107048000, + "dateString": "2022-05-21T04:24:08.000Z", + "isValid": true, + "sgv": 153, + "direction": "Flat", + "type": "sgv", + "_id": "6288698b19e2e60004989bb0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106749000, + "dateString": "2022-05-21T04:19:09.000Z", + "isValid": true, + "sgv": 157, + "direction": "Flat", + "type": "sgv", + "_id": "6288685d19e2e60004989bac" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106449000, + "dateString": "2022-05-21T04:14:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "Flat", + "type": "sgv", + "_id": "6288672f42c1220004f9573a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106149000, + "dateString": "2022-05-21T04:09:09.000Z", + "isValid": true, + "sgv": 151, + "direction": "Flat", + "type": "sgv", + "_id": "6288660142c1220004f95736" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105848000, + "dateString": "2022-05-21T04:04:08.000Z", + "isValid": true, + "sgv": 146, + "direction": "Flat", + "type": "sgv", + "_id": "628864d342c1220004f95733" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105549000, + "dateString": "2022-05-21T03:59:09.000Z", + "isValid": true, + "sgv": 146, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628863a542c1220004f95730" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105248000, + "dateString": "2022-05-21T03:54:08.000Z", + "isValid": true, + "sgv": 149, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288629042c1220004f9572e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104949000, + "dateString": "2022-05-21T03:49:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288614942c1220004f9572c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104648000, + "dateString": "2022-05-21T03:44:08.000Z", + "isValid": true, + "sgv": 162, + "direction": "Flat", + "type": "sgv", + "_id": "6288601b42c1220004f95729" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104349000, + "dateString": "2022-05-21T03:39:09.000Z", + "isValid": true, + "sgv": 167, + "direction": "Flat", + "type": "sgv", + "_id": "62885ef1293f3e00042c31e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104049000, + "dateString": "2022-05-21T03:34:09.000Z", + "isValid": true, + "sgv": 170, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62885dc3293f3e00042c31de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103748000, + "dateString": "2022-05-21T03:29:08.000Z", + "isValid": true, + "sgv": 171, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62885c95293f3e00042c31db" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103448000, + "dateString": "2022-05-21T03:24:08.000Z", + "isValid": true, + "sgv": 174, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885b81293f3e00042c31d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103149000, + "dateString": "2022-05-21T03:19:09.000Z", + "isValid": true, + "sgv": 182, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885a52293f3e00042c31d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102848000, + "dateString": "2022-05-21T03:14:08.000Z", + "isValid": true, + "sgv": 193, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885924293f3e00042c31d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102548000, + "dateString": "2022-05-21T03:09:08.000Z", + "isValid": true, + "sgv": 204, + "direction": "SingleDown", + "type": "sgv", + "_id": "628857f7293f3e00042c31d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102249000, + "dateString": "2022-05-21T03:04:09.000Z", + "isValid": true, + "sgv": 216, + "direction": "SingleDown", + "type": "sgv", + "_id": "628856da5151b5000462a1ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101948000, + "dateString": "2022-05-21T02:59:08.000Z", + "isValid": true, + "sgv": 228, + "direction": "SingleDown", + "type": "sgv", + "_id": "628855935151b5000462a1e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101648000, + "dateString": "2022-05-21T02:54:08.000Z", + "isValid": true, + "sgv": 241, + "direction": "SingleDown", + "type": "sgv", + "_id": "6288547f5151b5000462a1e6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101348000, + "dateString": "2022-05-21T02:49:08.000Z", + "isValid": true, + "sgv": 253, + "direction": "SingleDown", + "type": "sgv", + "_id": "628853395151b5000462a1e4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101048000, + "dateString": "2022-05-21T02:44:08.000Z", + "isValid": true, + "sgv": 267, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288520b5151b5000462a1e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100748000, + "dateString": "2022-05-21T02:39:08.000Z", + "isValid": true, + "sgv": 283, + "direction": "Flat", + "type": "sgv", + "_id": "628850de5151b5000462a1df" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100449000, + "dateString": "2022-05-21T02:34:09.000Z", + "isValid": true, + "sgv": 297, + "direction": "Flat", + "type": "sgv", + "_id": "62884fb05151b5000462a1dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100148000, + "dateString": "2022-05-21T02:29:08.000Z", + "isValid": true, + "sgv": 307, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884e9493668c0004a30517" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099848000, + "dateString": "2022-05-21T02:24:08.000Z", + "isValid": true, + "sgv": 308, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884d6793668c0004a30514" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099548000, + "dateString": "2022-05-21T02:19:08.000Z", + "isValid": true, + "sgv": 296, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884c3993668c0004a30510" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099249000, + "dateString": "2022-05-21T02:14:09.000Z", + "isValid": true, + "sgv": 282, + "direction": "Flat", + "type": "sgv", + "_id": "62884b0c93668c0004a3050d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653098948000, + "dateString": "2022-05-21T02:09:08.000Z", + "isValid": true, + "sgv": 271, + "direction": "Flat", + "type": "sgv", + "_id": "628849de93668c0004a30508" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653098648000, + "dateString": "2022-05-21T02:04:08.000Z", + "isValid": true, + "sgv": 271, + "direction": "Flat", + "type": "sgv", + "_id": "628848b093668c0004a30504" + } +] diff --git a/app/src/test/res/autotune/test2/aaps-treatments.2022-05-21.json b/app/src/test/res/autotune/test2/aaps-treatments.2022-05-21.json new file mode 100644 index 0000000000..b271cc80e4 --- /dev/null +++ b/app/src/test/res/autotune/test2/aaps-treatments.2022-05-21.json @@ -0,0 +1,3146 @@ +[ + { + "created_at": "2022-05-22T02:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 635539, + "type": "NORMAL", + "rate": 0.0742, + "percent": -90, + "pumpId": 454016, + "endId": 454021, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289982461a8290004740387" + }, + { + "created_at": "2022-05-22T01:55:40.718Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 259282, + "type": "NORMAL", + "rate": 0.0824, + "percent": -90, + "pumpId": 454016, + "endId": 454021, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289982461a8290004740387" + }, + { + "created_at": "2022-05-22T01:50:36.118Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303106, + "type": "NORMAL", + "rate": 0.1648, + "percent": -80, + "pumpId": 454013, + "endId": 454015, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628996f661a8290004740384" + }, + { + "created_at": "2022-05-22T01:45:35.222Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299405, + "type": "NORMAL", + "rate": 0.49439999999999995, + "percent": -40, + "pumpId": 454010, + "endId": 454012, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628995c761a8290004740381" + }, + { + "created_at": "2022-05-22T01:40:51.929Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 281796, + "type": "NORMAL", + "rate": 0.6592, + "percent": -20, + "pumpId": 454007, + "endId": 454009, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628994ab50e51d0004429e6f" + }, + { + "created_at": "2022-05-22T01:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2449437, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 454003, + "endId": 454006, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628988efda46aa0004d1e0f7" + }, + { + "created_at": "2022-05-22T00:50:32.326Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 567674, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 454003, + "endId": 454006, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628988efda46aa0004d1e0f7" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-22T00:45:47.966Z", + "date": 1653180347966, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21574, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628987c0da46aa0004d1e0f3" + }, + { + "created_at": "2022-05-22T00:45:45.232Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285608, + "type": "NORMAL", + "rate": 1.209, + "percent": 50, + "pumpId": 453998, + "endId": 454002, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628987c0da46aa0004d1e0f4" + }, + { + "created_at": "2022-05-22T00:35:30.702Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 613035, + "type": "NORMAL", + "rate": 1.0478, + "percent": 30, + "pumpId": 453995, + "endId": 453997, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62898563da46aa0004d1e0ec" + }, + { + "created_at": "2022-05-22T00:30:42.142Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 287064, + "type": "NORMAL", + "rate": 0.7254, + "percent": -10, + "pumpId": 453992, + "endId": 453994, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628984439d6f1800047cd0df" + }, + { + "created_at": "2022-05-22T00:20:44.045Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 595609, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453989, + "endId": 453991, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628981e59d6f1800047cd0da" + }, + { + "created_at": "2022-05-22T00:10:28.057Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 614498, + "type": "NORMAL", + "rate": 0.403, + "percent": -50, + "pumpId": 453986, + "endId": 453988, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897f879d6f1800047cd0d5" + }, + { + "created_at": "2022-05-22T00:06:13.096Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 252465, + "type": "NORMAL", + "rate": 0.403, + "percent": -50, + "pumpId": 453983, + "endId": 453985, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897e8b9d6f1800047cd0d2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-22T00:00:34.526Z", + "date": 1653177634526, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21573, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897d299d6f1800047cd0cd" + }, + { + "created_at": "2022-05-22T00:00:31.592Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 340013, + "type": "NORMAL", + "rate": 0.5642, + "percent": -30, + "pumpId": 453978, + "endId": 453982, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897d299d6f1800047cd0cf" + }, + { + "created_at": "2022-05-22T00:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 30096, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453974, + "endId": 453977, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897c139d6f1800047cd0ca" + }, + { + "created_at": "2022-05-21T23:55:56.658Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 243342, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453974, + "endId": 453977, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897c139d6f1800047cd0ca" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.54, + "created_at": "2022-05-21T23:50:30.757Z", + "date": 1653177030757, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21572, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897ad171a363000480abcb" + }, + { + "created_at": "2022-05-21T23:46:13.228Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 573000, + "type": "FAKE_EXTENDED", + "rate": 2.561162303664922, + "absolute": 2.561162303664922, + "pumpId": 21571, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628979d571a363000480abc9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-21T23:40:59.180Z", + "date": 1653176459180, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21570, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289788d71a363000480abc4" + }, + { + "created_at": "2022-05-21T23:40:57.936Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304306, + "type": "NORMAL", + "rate": 1.6842000000000001, + "percent": 110, + "pumpId": 453959, + "endId": 453963, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289788e71a363000480abc6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T23:20:51.857Z", + "date": 1653175251857, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21569, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628973eb71a363000480abba" + }, + { + "created_at": "2022-05-21T23:16:23.121Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1472326, + "type": "NORMAL", + "rate": 1.1228, + "percent": 40, + "pumpId": 453954, + "endId": 453958, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628972de37d09a00043f2b24" + }, + { + "created_at": "2022-05-21T23:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 16, + "durationInMilliseconds": 983121, + "type": "NORMAL", + "rate": 0.802, + "percent": 0, + "_id": "neutral_1653171415806" + }, + { + "created_at": "2022-05-21T22:16:55.806Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 43, + "durationInMilliseconds": 2584194, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653171415806" + }, + { + "created_at": "2022-05-21T22:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 16, + "durationInMilliseconds": 1015806, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453943, + "endId": 453951, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957129bf1e6000482ff9a" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-21T21:24:43.261Z", + "date": 1653168283261, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21568, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628958a49bf1e6000482ff9c" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T21:17:49.628Z", + "date": 1653167869628, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21567, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957109bf1e6000482ff99" + }, + { + "created_at": "2022-05-21T21:17:43.507Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 42, + "durationInMilliseconds": 2536493, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453943, + "endId": 453951, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957129bf1e6000482ff9a" + }, + { + "created_at": "2022-05-21T21:10:55.350Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 406671, + "type": "NORMAL", + "rate": 1.0049000000000001, + "percent": 30, + "pumpId": 453940, + "endId": 453942, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628955629bf1e6000482ff94" + }, + { + "created_at": "2022-05-21T21:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 653862, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453936, + "endId": 453939, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894e5580fc7e00041b22a2" + }, + { + "created_at": "2022-05-21T20:40:34.976Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1165024, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453936, + "endId": 453939, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894e5580fc7e00041b22a2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T20:30:40.892Z", + "date": 1653165040892, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21566, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894bf780fc7e00041b229d" + }, + { + "created_at": "2022-05-21T20:25:40.930Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 891567, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453931, + "endId": 453935, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894aca4493460004e63a3a" + }, + { + "eventType": "Meal Bolus", + "insulin": 9.4, + "created_at": "2022-05-21T20:19:54.209Z", + "date": 1653164394209, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21565, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628949824493460004e63a35" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T20:11:04.953Z", + "date": 1653163864953, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21564, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628947704493460004e63a30" + }, + { + "created_at": "2022-05-21T20:11:03.814Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 874625, + "type": "NORMAL", + "rate": 1.2563, + "percent": 70, + "pumpId": 453924, + "endId": 453930, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628947574493460004e63a2f" + }, + { + "created_at": "2022-05-21T20:00:37.912Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 623413, + "type": "NORMAL", + "rate": 0.9606999999999999, + "percent": 30, + "pumpId": 453921, + "endId": 453923, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628944fa4493460004e63a29" + }, + { + "created_at": "2022-05-21T20:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 35425, + "type": "NORMAL", + "rate": 0.2956, + "percent": -60, + "pumpId": 453917, + "endId": 453920, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894164598f780004bb3b2f" + }, + { + "created_at": "2022-05-21T19:45:25.759Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 874241, + "type": "NORMAL", + "rate": 0.2888, + "percent": -60, + "pumpId": 453917, + "endId": 453920, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894164598f780004bb3b2f" + }, + { + "created_at": "2022-05-21T19:25:47.539Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1175731, + "type": "NORMAL", + "rate": 0.43320000000000003, + "percent": -40, + "pumpId": 453914, + "endId": 453916, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62893cc8598f780004bb3b25" + }, + { + "created_at": "2022-05-21T19:20:54.174Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293365, + "type": "NORMAL", + "rate": 0.722, + "percent": 0, + "_id": "neutral_1653160854174" + }, + { + "created_at": "2022-05-21T19:10:51.515Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 602659, + "type": "NORMAL", + "rate": 0.7942, + "percent": 10, + "pumpId": 453908, + "endId": 453910, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289394a22fbc8000495b821" + }, + { + "created_at": "2022-05-21T19:01:01.322Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 588703, + "type": "NORMAL", + "rate": 0.2888, + "percent": -60, + "pumpId": 453905, + "endId": 453907, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628936ef22fbc8000495b81c" + }, + { + "created_at": "2022-05-21T19:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 59826, + "type": "NORMAL", + "rate": 0.7942, + "percent": 10, + "pumpId": 453900, + "endId": 453904, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289349522fbc8000495b816" + }, + { + "created_at": "2022-05-21T18:50:58.216Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 541784, + "type": "NORMAL", + "rate": 0.77, + "percent": 10, + "pumpId": 453900, + "endId": 453904, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289349522fbc8000495b816" + }, + { + "created_at": "2022-05-21T18:46:12.499Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285717, + "type": "NORMAL", + "rate": 0.7, + "percent": 0, + "_id": "neutral_1653158772499" + }, + { + "created_at": "2022-05-21T18:30:30.651Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 941848, + "type": "NORMAL", + "rate": 0.91, + "percent": 30, + "pumpId": 453894, + "endId": 453896, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892fda840d8d0004a20bfc" + }, + { + "created_at": "2022-05-21T18:20:44.275Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 584884, + "type": "NORMAL", + "rate": 0.28, + "percent": -60, + "pumpId": 453891, + "endId": 453893, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892d80840d8d0004a20bf7" + }, + { + "created_at": "2022-05-21T18:15:30.389Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 312398, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453888, + "endId": 453890, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892c52840d8d0004a20bf4" + }, + { + "created_at": "2022-05-21T18:00:33.832Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 895066, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453885, + "endId": 453887, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628928ca8809e60004c644e8" + }, + { + "created_at": "2022-05-21T18:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 32345, + "type": "NORMAL", + "rate": 0.35, + "percent": -50, + "pumpId": 453881, + "endId": 453884, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628927b58809e60004c644e5" + }, + { + "created_at": "2022-05-21T17:55:44.739Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 255261, + "type": "NORMAL", + "rate": 0.3295, + "percent": -50, + "pumpId": 453881, + "endId": 453884, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628927b58809e60004c644e5" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-21T17:45:48.032Z", + "date": 1653155148032, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21563, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628925588809e60004c644de" + }, + { + "created_at": "2022-05-21T17:45:45.750Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 597498, + "type": "NORMAL", + "rate": 1.5816, + "percent": 140, + "pumpId": 453876, + "endId": 453880, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628925588809e60004c644e0" + }, + { + "created_at": "2022-05-21T17:40:44.874Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299386, + "type": "NORMAL", + "rate": 0.8567, + "percent": 30, + "pumpId": 453873, + "endId": 453875, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289242b8809e60004c644db" + }, + { + "created_at": "2022-05-21T17:35:46.611Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 295766, + "type": "NORMAL", + "rate": 0.3295, + "percent": -50, + "pumpId": 453870, + "endId": 453872, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628922fe8809e60004c644d8" + }, + { + "created_at": "2022-05-21T17:25:37.912Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 607206, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453867, + "endId": 453869, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628920a41090500004ca4729" + }, + { + "created_at": "2022-05-21T17:20:42.063Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293355, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453864, + "endId": 453866, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891f771090500004ca4726" + }, + { + "created_at": "2022-05-21T17:10:30.971Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 608601, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453861, + "endId": 453863, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891d1b1090500004ca4721" + }, + { + "created_at": "2022-05-21T17:00:45.815Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 582673, + "type": "NORMAL", + "rate": 0.0659, + "percent": -90, + "pumpId": 453858, + "endId": 453860, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891ac01090500004ca471c" + }, + { + "created_at": "2022-05-21T17:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 43325, + "type": "NORMAL", + "rate": 1.4498000000000002, + "percent": 120, + "pumpId": 453852, + "endId": 453857, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628918711090500004ca4716" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T16:55:53.346Z", + "date": 1653152153346, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21562, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289199e1090500004ca4718" + }, + { + "created_at": "2022-05-21T16:50:50.998Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 549002, + "type": "NORMAL", + "rate": 1.4322, + "percent": 120, + "pumpId": 453852, + "endId": 453857, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628918711090500004ca4716" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-21T16:45:50.105Z", + "date": 1653151550105, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21561, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628917431090500004ca4711" + }, + { + "created_at": "2022-05-21T16:45:47.200Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300314, + "type": "NORMAL", + "rate": 1.0415999999999999, + "percent": 60, + "pumpId": 453847, + "endId": 453851, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628917431090500004ca4713" + }, + { + "created_at": "2022-05-21T16:40:54.765Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 290944, + "type": "NORMAL", + "rate": 0.8463, + "percent": 30, + "pumpId": 453844, + "endId": 453846, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289161c1090500004ca470e" + }, + { + "created_at": "2022-05-21T16:35:35.684Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 317593, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453841, + "endId": 453843, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628914eb1090500004ca470b" + }, + { + "created_at": "2022-05-21T16:30:39.072Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 295126, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453838, + "endId": 453840, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913c01090500004ca4708" + }, + { + "created_at": "2022-05-21T16:25:35.342Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 301235, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453835, + "endId": 453837, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913141090500004ca4705" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-21T16:20:30.382Z", + "date": 1653150030382, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21560, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289130f1090500004ca4700" + }, + { + "created_at": "2022-05-21T16:20:27.375Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 306478, + "type": "NORMAL", + "rate": 1.0415999999999999, + "percent": 60, + "pumpId": 453830, + "endId": 453834, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913101090500004ca4702" + }, + { + "created_at": "2022-05-21T16:11:20.186Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 545699, + "type": "NORMAL", + "rate": 0.32550000000000007, + "percent": -50, + "pumpId": 453827, + "endId": 453829, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890f811090500004ca46fc" + }, + { + "created_at": "2022-05-21T16:06:52.798Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 265903, + "type": "NORMAL", + "rate": 0.26039999999999996, + "percent": -60, + "pumpId": 453824, + "endId": 453826, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890e29cf7ee10004a2b1e1" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-21T16:01:01.819Z", + "date": 1653148861819, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21559, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890cc9cf7ee10004a2b1dc" + }, + { + "created_at": "2022-05-21T16:00:58.172Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 344000, + "type": "FAKE_EXTENDED", + "rate": 1.9068139534883721, + "absolute": 1.9068139534883721, + "pumpId": 21558, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890cc9cf7ee10004a2b1dd" + }, + { + "created_at": "2022-05-21T16:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 46830, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453811, + "endId": 453814, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890b82cf7ee10004a2b1d9" + }, + { + "created_at": "2022-05-21T15:55:39.147Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 260853, + "type": "NORMAL", + "rate": 0.0673, + "percent": -90, + "pumpId": 453811, + "endId": 453814, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890b82cf7ee10004a2b1d9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T15:51:00.932Z", + "date": 1653148260932, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21557, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890a6dcf7ee10004a2b1d4" + }, + { + "created_at": "2022-05-21T15:50:58.818Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 278838, + "type": "NORMAL", + "rate": 1.1441000000000001, + "percent": 70, + "pumpId": 453806, + "endId": 453810, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890a6ecf7ee10004a2b1d6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T15:40:59.961Z", + "date": 1653147659961, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21556, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890811cf7ee10004a2b1cf" + }, + { + "created_at": "2022-05-21T15:35:20.343Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 935989, + "type": "NORMAL", + "rate": 1.0095, + "percent": 50, + "pumpId": 453800, + "endId": 453805, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628906e3cf7ee10004a2b1cc" + }, + { + "created_at": "2022-05-21T15:31:00.492Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 258353, + "type": "NORMAL", + "rate": 0.0673, + "percent": -90, + "pumpId": 453797, + "endId": 453799, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628905b6c9346b0004863368" + }, + { + "created_at": "2022-05-21T15:25:55.840Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303154, + "type": "NORMAL", + "rate": 0.3365000000000001, + "percent": -50, + "pumpId": 453794, + "endId": 453796, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890488c9346b0004863365" + }, + { + "created_at": "2022-05-21T15:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1553350, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453790, + "endId": 453793, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288fa1b0e0c880004d58de2" + }, + { + "created_at": "2022-05-21T14:41:07.802Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 18, + "durationInMilliseconds": 1132198, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453790, + "endId": 453793, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288fa1b0e0c880004d58de2" + }, + { + "created_at": "2022-05-21T14:30:59.772Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 605542, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453787, + "endId": 453789, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f7a60e0c880004d58ddd" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-21T14:25:43.954Z", + "date": 1653143143954, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21555, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f6770e0c880004d58dd9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.78, + "created_at": "2022-05-21T14:15:46.926Z", + "date": 1653142546926, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21554, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f4152634cd0004296072" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.86, + "created_at": "2022-05-21T14:05:34.493Z", + "date": 1653141934493, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21553, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f1b82634cd000429606d" + }, + { + "created_at": "2022-05-21T14:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 30, + "durationInMilliseconds": 1857281, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453769, + "endId": 453786, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e8910f1be700041e5a02" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.58, + "created_at": "2022-05-21T13:55:47.615Z", + "date": 1653141347615, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21552, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ef752634cd0004296068" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.98, + "created_at": "2022-05-21T13:45:57.753Z", + "date": 1653140757753, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21551, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ed160f1be700041e5a0c" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.6, + "created_at": "2022-05-21T13:36:02.971Z", + "date": 1653140162971, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21550, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ead30f1be700041e5a08" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.58, + "created_at": "2022-05-21T13:30:42.515Z", + "date": 1653139842515, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21549, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e98c0f1be700041e5a04" + }, + { + "created_at": "2022-05-21T13:26:18.959Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 33, + "durationInMilliseconds": 2021041, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453769, + "endId": 453786, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e8910f1be700041e5a02" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.74, + "created_at": "2022-05-21T13:10:43.719Z", + "date": 1653138643719, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21548, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e5520f1be700041e59f9" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.04, + "created_at": "2022-05-21T13:00:56.399Z", + "date": 1653138056399, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e2970f1be700041e59f4" + }, + { + "created_at": "2022-05-21T13:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 26, + "durationInMilliseconds": 1576482, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453759, + "endId": 453768, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288da470f1be700041e59e4" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.24, + "created_at": "2022-05-21T12:55:30.825Z", + "date": 1653137730825, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21546, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e1500f1be700041e59f1" + }, + { + "created_at": "2022-05-21T12:25:26.042Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 34, + "durationInMilliseconds": 2073958, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453759, + "endId": 453768, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288da470f1be700041e59e4" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T12:10:34.513Z", + "date": 1653135034513, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21545, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288d6ca0f1be700041e59db" + }, + { + "created_at": "2022-05-21T12:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1523557, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453752, + "endId": 453758, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cc5d8e9ed800049b39f4" + }, + { + "created_at": "2022-05-21T11:26:10.112Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 33, + "durationInMilliseconds": 2029888, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453752, + "endId": 453758, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cc5d8e9ed800049b39f4" + }, + { + "eventType": "Meal Bolus", + "insulin": 8.22, + "created_at": "2022-05-21T11:23:36.043Z", + "date": 1653132216043, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21544, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cbc78e9ed800049b39ef" + }, + { + "created_at": "2022-05-21T11:21:02.281Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299000, + "type": "FAKE_EXTENDED", + "rate": 1.6932107023411371, + "absolute": 1.6932107023411371, + "pumpId": 21543, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cb308e9ed800049b39ee" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T11:15:45.765Z", + "date": 1653131745765, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21542, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c9e98e9ed800049b39e9" + }, + { + "created_at": "2022-05-21T11:15:43.070Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 308169, + "type": "NORMAL", + "rate": 1.533, + "percent": 110, + "pumpId": 453738, + "endId": 453742, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c9e98e9ed800049b39eb" + }, + { + "created_at": "2022-05-21T11:10:35.181Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 305390, + "type": "NORMAL", + "rate": 0.073, + "percent": -90, + "pumpId": 453735, + "endId": 453737, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c8bb8e9ed800049b39e7" + }, + { + "created_at": "2022-05-21T11:00:50.721Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 582968, + "type": "NORMAL", + "rate": 0.21899999999999997, + "percent": -70, + "pumpId": 453732, + "endId": 453734, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c6661991280004dce46a" + }, + { + "created_at": "2022-05-21T11:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 49281, + "type": "NORMAL", + "rate": 1.022, + "percent": 40, + "pumpId": 453728, + "endId": 453731, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c5381991280004dce466" + }, + { + "created_at": "2022-05-21T10:55:43.162Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 256838, + "type": "NORMAL", + "rate": 1.0248, + "percent": 40, + "pumpId": 453728, + "endId": 453731, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c5381991280004dce466" + }, + { + "created_at": "2022-05-21T10:50:29.463Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 312203, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453725, + "endId": 453727, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c40a1991280004dce463" + }, + { + "created_at": "2022-05-21T10:45:42.010Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285961, + "type": "NORMAL", + "rate": 0.0732, + "percent": -90, + "pumpId": 453722, + "endId": 453724, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c2dd1991280004dce460" + }, + { + "created_at": "2022-05-21T10:40:32.888Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 306629, + "type": "NORMAL", + "rate": 0.2928, + "percent": -60, + "pumpId": 453719, + "endId": 453721, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c1ae1991280004dce45d" + }, + { + "created_at": "2022-05-21T10:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2430396, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453715, + "endId": 453718, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288b09fc9c02c00041f7efb" + }, + { + "created_at": "2022-05-21T09:27:51.738Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 32, + "durationInMilliseconds": 1928262, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453715, + "endId": 453718, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288b09fc9c02c00041f7efb" + }, + { + "created_at": "2022-05-21T09:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 27, + "durationInMilliseconds": 1670246, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453708, + "endId": 453714, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a50699fc930004d6bdea" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-21T08:58:07.216Z", + "date": 1653123487216, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21541, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a9a499fc930004d6bdf2" + }, + { + "created_at": "2022-05-21T08:38:27.621Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 21, + "durationInMilliseconds": 1292379, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453708, + "endId": 453714, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a50699fc930004d6bdea" + }, + { + "created_at": "2022-05-21T08:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 38, + "durationInMilliseconds": 2306129, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453704, + "endId": 453707, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889bb2a4cc860004a251c6" + }, + { + "created_at": "2022-05-21T07:58:04.003Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 1, + "durationInMilliseconds": 115997, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453704, + "endId": 453707, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889bb2a4cc860004a251c6" + }, + { + "eventType": "Meal Bolus", + "insulin": 13.56, + "created_at": "2022-05-21T07:52:52.394Z", + "date": 1653119572394, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21540, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889a5d7ff1e700040f17d9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-21T07:38:42.955Z", + "date": 1653118722955, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21539, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288971c7ff1e700040f17d2" + }, + { + "created_at": "2022-05-21T07:38:40.317Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1153999, + "type": "FAKE_EXTENDED", + "rate": 2.251401644195532, + "absolute": 2.251401644195532, + "pumpId": 21538, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628897027ff1e700040f17d0" + }, + { + "created_at": "2022-05-21T07:28:33.763Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 595482, + "type": "NORMAL", + "rate": 0.377, + "percent": -50, + "pumpId": 453689, + "endId": 453691, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628894a17ff1e700040f17cc" + }, + { + "created_at": "2022-05-21T07:13:06.679Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 924592, + "type": "NORMAL", + "rate": 0.2262, + "percent": -70, + "pumpId": 453686, + "endId": 453688, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889106149196000412bf59" + }, + { + "created_at": "2022-05-21T07:08:35.905Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 269284, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453683, + "endId": 453685, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288900b149196000412bf56" + }, + { + "created_at": "2022-05-21T07:03:41.224Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292184, + "type": "NORMAL", + "rate": 0.0754, + "percent": -90, + "pumpId": 453680, + "endId": 453682, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62888edd149196000412bf53" + }, + { + "created_at": "2022-05-21T07:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 3, + "durationInMilliseconds": 219733, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453676, + "endId": 453679, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628887058ff3530004dc606e" + }, + { + "created_at": "2022-05-21T06:30:07.195Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1792805, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453676, + "endId": 453679, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628887058ff3530004dc606e" + }, + { + "created_at": "2022-05-21T06:12:44.359Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1041347, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453673, + "endId": 453675, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628882e48ff3530004dc6064" + }, + { + "created_at": "2022-05-21T06:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 12, + "durationInMilliseconds": 762867, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453669, + "endId": 453672, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ea0e964810004aa5663" + }, + { + "created_at": "2022-05-21T05:54:16.341Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 343659, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453669, + "endId": 453672, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ea0e964810004aa5663" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.44, + "created_at": "2022-05-21T05:47:59.042Z", + "date": 1653112079042, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21537, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887d27e964810004aa5660" + }, + { + "created_at": "2022-05-21T05:47:56.189Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 371000, + "type": "FAKE_EXTENDED", + "rate": 3.305911051212938, + "absolute": 3.305911051212938, + "pumpId": 21536, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887d0ee964810004aa565f" + }, + { + "created_at": "2022-05-21T05:42:45.087Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299481, + "type": "NORMAL", + "rate": 0.8613000000000001, + "percent": 10, + "pumpId": 453657, + "endId": 453659, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887be0e964810004aa565c" + }, + { + "created_at": "2022-05-21T05:37:33.183Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 309411, + "type": "NORMAL", + "rate": 0.0783, + "percent": -90, + "pumpId": 453654, + "endId": 453656, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ab2e964810004aa5659" + }, + { + "created_at": "2022-05-21T05:12:51.790Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1479904, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453651, + "endId": 453653, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628874e5363e6c0004f710db" + }, + { + "created_at": "2022-05-21T05:07:46.012Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304280, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453648, + "endId": 453650, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628873b8363e6c0004f710d8" + }, + { + "created_at": "2022-05-21T05:02:53.773Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289742, + "type": "NORMAL", + "rate": 0.1566, + "percent": -80, + "pumpId": 453645, + "endId": 453647, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288728a363e6c0004f710d5" + }, + { + "created_at": "2022-05-21T05:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 171279, + "type": "NORMAL", + "rate": 1.5659999999999998, + "percent": 100, + "pumpId": 453639, + "endId": 453644, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715d363e6c0004f710d2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T04:57:53.298Z", + "date": 1653109073298, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21535, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715c363e6c0004f710d1" + }, + { + "created_at": "2022-05-21T04:57:50.147Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 129853, + "type": "NORMAL", + "rate": 1.472, + "percent": 100, + "pumpId": 453639, + "endId": 453644, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715d363e6c0004f710d2" + }, + { + "created_at": "2022-05-21T04:52:45.360Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303299, + "type": "NORMAL", + "rate": 1.0304, + "percent": 40, + "pumpId": 453636, + "endId": 453638, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288702f363e6c0004f710ce" + }, + { + "created_at": "2022-05-21T04:37:34.478Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 909400, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453633, + "endId": 453635, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62886c9719e2e60004989bb7" + }, + { + "created_at": "2022-05-21T04:27:51.392Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 581589, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453630, + "endId": 453632, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62886a5519e2e60004989bb2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T04:23:04.285Z", + "date": 1653106984285, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21534, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288694019e2e60004989baf" + }, + { + "created_at": "2022-05-21T04:23:00.631Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289268, + "type": "NORMAL", + "rate": 0.4416, + "percent": -40, + "pumpId": 453625, + "endId": 453629, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288692719e2e60004989bae" + }, + { + "created_at": "2022-05-21T04:18:00.399Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 291000, + "type": "FAKE_EXTENDED", + "rate": 3.210226804123711, + "absolute": 3.210226804123711, + "pumpId": 21533, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288681219e2e60004989bab" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.66, + "created_at": "2022-05-21T04:13:03.102Z", + "date": 1653106383102, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21532, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628866e342c1220004f95738" + }, + { + "created_at": "2022-05-21T04:13:00.412Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299987, + "type": "FAKE_EXTENDED", + "rate": 3.3759999999999994, + "absolute": 3.3759999999999994, + "pumpId": 21531, + "endId": 21533, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628866e342c1220004f95739" + }, + { + "created_at": "2022-05-21T04:07:39.846Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 307758, + "type": "NORMAL", + "rate": 1.0304, + "percent": 40, + "pumpId": 453609, + "endId": 453611, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288659d42c1220004f95735" + }, + { + "created_at": "2022-05-21T04:02:57.240Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 280112, + "type": "NORMAL", + "rate": 0.368, + "percent": -50, + "pumpId": 453606, + "endId": 453608, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288648842c1220004f95732" + }, + { + "created_at": "2022-05-21T04:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 175749, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453602, + "endId": 453605, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628860fe42c1220004f9572b" + }, + { + "created_at": "2022-05-21T03:47:49.532Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 12, + "durationInMilliseconds": 730468, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453602, + "endId": 453605, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628860fe42c1220004f9572b" + }, + { + "created_at": "2022-05-21T03:43:04.365Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283670, + "type": "NORMAL", + "rate": 0.7001999999999999, + "percent": -10, + "pumpId": 453599, + "endId": 453601, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885fcf42c1220004f95728" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.52, + "created_at": "2022-05-21T03:38:07.812Z", + "date": 1653104287812, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21530, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885ea5293f3e00042c31e0" + }, + { + "created_at": "2022-05-21T03:38:05.030Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 290000, + "type": "FAKE_EXTENDED", + "rate": 3.2607586206896553, + "absolute": 3.2607586206896553, + "pumpId": 21529, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885ea5293f3e00042c31e1" + }, + { + "created_at": "2022-05-21T03:32:50.531Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303634, + "type": "NORMAL", + "rate": 0.2334, + "percent": -70, + "pumpId": 453587, + "endId": 453589, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885d78293f3e00042c31dd" + }, + { + "created_at": "2022-05-21T03:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 32, + "durationInMilliseconds": 1969040, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453583, + "endId": 453586, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628851a75151b5000462a1e1" + }, + { + "created_at": "2022-05-21T02:42:42.383Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1037617, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453583, + "endId": 453586, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628851a75151b5000462a1e1" + }, + { + "created_at": "2022-05-21T02:37:54.170Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 286717, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453580, + "endId": 453582, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628850925151b5000462a1de" + }, + { + "created_at": "2022-05-21T02:32:55.252Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 297423, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453577, + "endId": 453579, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884f645151b5000462a1db" + }, + { + "created_at": "2022-05-21T02:28:10.152Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283605, + "type": "NORMAL", + "rate": 0.2968, + "percent": -60, + "pumpId": 453574, + "endId": 453576, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884e4993668c0004a30516" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.5, + "created_at": "2022-05-21T02:23:08.766Z", + "date": 1653099788766, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21528, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884d1b93668c0004a30512" + }, + { + "created_at": "2022-05-21T02:23:06.229Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294000, + "type": "FAKE_EXTENDED", + "rate": 7.10934693877551, + "absolute": 7.10934693877551, + "pumpId": 21527, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884d1b93668c0004a30513" + }, + { + "created_at": "2022-05-21T02:17:55.333Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299966, + "type": "NORMAL", + "rate": 0.5936, + "percent": -20, + "pumpId": 453562, + "endId": 453564, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884bd493668c0004a3050f" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.92, + "created_at": "2022-05-21T02:13:06.284Z", + "date": 1653099186284, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21526, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884ac093668c0004a3050b" + }, + { + "created_at": "2022-05-21T02:13:03.301Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283000, + "type": "FAKE_EXTENDED", + "rate": 3.0317526501766783, + "absolute": 3.0317526501766783, + "pumpId": 21525, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884ac093668c0004a3050c" + }, + { + "created_at": "2022-05-21T02:02:49.661Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 601864, + "type": "NORMAL", + "rate": 0.5201, + "percent": -30, + "pumpId": 453548, + "endId": 453552, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288484c93668c0004a30503" + }, + { + "created_at": "2022-05-21T02:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 168169, + "type": "NORMAL", + "rate": 0.6687000000000001, + "percent": -10, + "pumpId": 453542, + "endId": 453547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a30500" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-21T01:57:52.501Z", + "date": 1653098272501, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21524, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a304ff" + }, + { + "created_at": "2022-05-21T01:57:50.546Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 129454, + "type": "NORMAL", + "rate": 0.7155, + "percent": -10, + "pumpId": 453542, + "endId": 453547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a30500" + }, + { + "created_at": "2022-05-21T01:52:49.925Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300621, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653097969925" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-21T01:47:59.874Z", + "date": 1653097679874, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21523, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628844e49d7ff00004aaf0c0" + }, + { + "created_at": "2022-05-21T01:47:56.925Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293000, + "type": "FAKE_EXTENDED", + "rate": 3.00660409556314, + "absolute": 3.00660409556314, + "pumpId": 21522, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628844e49d7ff00004aaf0c1" + }, + { + "created_at": "2022-05-21T01:42:53.604Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292860, + "type": "NORMAL", + "rate": 0.3975, + "percent": -50, + "pumpId": 453530, + "endId": 453532, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628843b79d7ff00004aaf0bd" + }, + { + "created_at": "2022-05-21T01:37:38.923Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 313186, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453527, + "endId": 453529, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628842709d7ff00004aaf0ba" + }, + { + "created_at": "2022-05-21T01:32:51.444Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284984, + "type": "NORMAL", + "rate": 0.318, + "percent": -60, + "pumpId": 453524, + "endId": 453526, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288415b9d7ff00004aaf0b7" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.5, + "created_at": "2022-05-21T01:27:52.076Z", + "date": 1653096472076, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21521, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288402d9d7ff00004aaf0b4" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.6, + "created_at": "2022-05-21T01:18:07.619Z", + "date": 1653095887619, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21520, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62883de332ad2e0004b68cca" + }, + { + "created_at": "2022-05-21T01:18:05.464Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 876000, + "type": "FAKE_EXTENDED", + "rate": 5.068972602739726, + "absolute": 5.068972602739726, + "pumpId": 21519, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62883de332ad2e0004b68cc9" + }, + { + "created_at": "2022-05-21T01:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 18, + "durationInMilliseconds": 1085464, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-21T00:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0.76, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T23:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0.738, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T22:37:56.443Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 22, + "durationInMilliseconds": 1323557, + "type": "NORMAL", + "rate": 0.7239999999999999, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T22:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 37, + "durationInMilliseconds": 2276443, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453504, + "endId": 453510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ad" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-20T21:38:36.984Z", + "date": 1653082716984, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21518, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ac" + }, + { + "created_at": "2022-05-20T21:38:35.831Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 21, + "durationInMilliseconds": 1284169, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453504, + "endId": 453510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ad" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-20T21:28:21.755Z", + "date": 1653082101755, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21517, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628807f71664860004cb51a6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.18, + "created_at": "2022-05-20T21:18:34.069Z", + "date": 1653081514069, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21516, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628805b61664860004cb51a2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-20T21:08:33.702Z", + "date": 1653080913702, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21515, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288035c1664860004cb519c" + }, + { + "created_at": "2022-05-20T21:08:31.728Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 30, + "durationInMilliseconds": 1801610, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453495, + "endId": 453503, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288035c1664860004cb519d" + }, + { + "created_at": "2022-05-20T21:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 8, + "durationInMilliseconds": 510237, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-20T20:53:24.438Z", + "date": 1653080004438, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21514, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ffd41664860004cb5195" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-20T20:43:26.220Z", + "date": 1653079406220, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21513, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287fd7ba2dcb700046b8728" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-20T20:33:38.526Z", + "date": 1653078818526, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21512, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287fb3aa2dcb700046b8724" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-20T20:22:54.311Z", + "date": 1653078174311, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21511, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f8aba2dcb700046b871e" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-20T20:17:40.808Z", + "date": 1653077860808, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f765a2dcb700046b871b" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-20T20:08:27.325Z", + "date": 1653077307325, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21509, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f54db2af570004d8c046" + }, + { + "created_at": "2022-05-20T20:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "created_at": "2022-05-20T19:32:50.116Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 27, + "durationInMilliseconds": 1629884, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "eventType": "Meal Bolus", + "insulin": 9.58, + "created_at": "2022-05-20T19:27:22.747Z", + "date": 1653074842747, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21508, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287eb9d72b1ae0004593fea" + }, + { + "created_at": "2022-05-20T19:08:06.145Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1481495, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453473, + "endId": 453477, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287e73072b1ae0004593fe2" + }, + { + "created_at": "2022-05-20T19:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 8, + "durationInMilliseconds": 484657, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453469, + "endId": 453472, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287dedc72b1ae0004593fd2" + }, + { + "created_at": "2022-05-20T18:33:00.960Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 26, + "durationInMilliseconds": 1619040, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453469, + "endId": 453472, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287dedc72b1ae0004593fd2" + }, + { + "created_at": "2022-05-20T18:17:39.957Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 918518, + "type": "NORMAL", + "rate": 0.5591999999999999, + "percent": -20, + "pumpId": 453466, + "endId": 453468, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287db4963f1e20004e4e5a7" + }, + { + "created_at": "2022-05-20T18:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1059957, + "type": "NORMAL", + "rate": 0.699, + "percent": 0, + "_id": "neutral_1653069600000" + } +] diff --git a/app/src/test/res/autotune/test2/aapsorefautotune_recommendations.log b/app/src/test/res/autotune/test2/aapsorefautotune_recommendations.log new file mode 100644 index 0000000000..c7d134a614 --- /dev/null +++ b/app/src/test/res/autotune/test2/aapsorefautotune_recommendations.log @@ -0,0 +1,53 @@ +Parameter | Pump | Autotune | Days Missing +--------------------------------------------------------- +ISF [mg/dL/U] | 86.200 | 82.222 | +Carb Ratio[g/U]| 5.750 | 5.750 | +Basals [U/hr] | - | | + 00:00 | 0.966 | 1.009 | 0 + 00:30 | | | + 01:00 | 0.977 | 0.984 | 0 + 01:30 | | | + 02:00 | 0.971 | 0.988 | 0 + 02:30 | | | + 03:00 | 1.111 | 1.158 | 0 + 03:30 | | | + 04:00 | 0.974 | 1.028 | 0 + 04:30 | | | + 05:00 | 0.923 | 0.933 | 0 + 05:30 | | | + 06:00 | 0.823 | 0.824 | 0 + 06:30 | | | + 07:00 | 0.855 | 0.849 | 0 + 07:30 | | | + 08:00 | 0.902 | 0.909 | 0 + 08:30 | | | + 09:00 | 0.934 | 0.954 | 0 + 09:30 | | | + 10:00 | 0.938 | 0.961 | 0 + 10:30 | | | + 11:00 | 0.903 | 0.926 | 0 + 11:30 | | | + 12:00 | 0.882 | 0.885 | 0 + 12:30 | | | + 13:00 | 0.874 | 0.876 | 1 + 13:30 | | | + 14:00 | 0.866 | 0.869 | 1 + 14:30 | | | + 15:00 | 0.848 | 0.881 | 0 + 15:30 | | | + 16:00 | 0.758 | 0.798 | 0 + 16:30 | | | + 17:00 | 0.650 | 0.683 | 0 + 17:30 | | | + 18:00 | 0.648 | 0.634 | 0 + 18:30 | | | + 19:00 | 0.738 | 0.725 | 0 + 19:30 | | | + 20:00 | 0.847 | 0.838 | 0 + 20:30 | | | + 21:00 | 0.861 | 0.881 | 0 + 21:30 | | | + 22:00 | 0.863 | 0.910 | 0 + 22:30 | | | + 23:00 | 0.843 | 0.910 | 0 + 23:30 | | | diff --git a/app/src/test/res/autotune/test2/aapsorefprofile.2022-05-21.json b/app/src/test/res/autotune/test2/aapsorefprofile.2022-05-21.json new file mode 100644 index 0000000000..eefadabacb --- /dev/null +++ b/app/src/test/res/autotune/test2/aapsorefprofile.2022-05-21.json @@ -0,0 +1,147 @@ +{ + "name": "Tuned Dyn2", + "min_5m_carbimpact": 8, + "dia": 6, + "curve": "ultra-rapid", + "useCustomPeakTime": true, + "insulinPeakTime": 45, + "basalprofile": [ + { + "start": "00:00:00", + "minutes": 0, + "rate": 0.966 + }, + { + "start": "01:00:00", + "minutes": 60, + "rate": 0.977 + }, + { + "start": "02:00:00", + "minutes": 120, + "rate": 0.971 + }, + { + "start": "03:00:00", + "minutes": 180, + "rate": 1.111 + }, + { + "start": "04:00:00", + "minutes": 240, + "rate": 0.974 + }, + { + "start": "05:00:00", + "minutes": 300, + "rate": 0.923 + }, + { + "start": "06:00:00", + "minutes": 360, + "rate": 0.823 + }, + { + "start": "07:00:00", + "minutes": 420, + "rate": 0.855 + }, + { + "start": "08:00:00", + "minutes": 480, + "rate": 0.902 + }, + { + "start": "09:00:00", + "minutes": 540, + "rate": 0.934 + }, + { + "start": "10:00:00", + "minutes": 600, + "rate": 0.938 + }, + { + "start": "11:00:00", + "minutes": 660, + "rate": 0.903 + }, + { + "start": "12:00:00", + "minutes": 720, + "rate": 0.882 + }, + { + "start": "13:00:00", + "minutes": 780, + "rate": 0.874 + }, + { + "start": "14:00:00", + "minutes": 840, + "rate": 0.866 + }, + { + "start": "15:00:00", + "minutes": 900, + "rate": 0.848 + }, + { + "start": "16:00:00", + "minutes": 960, + "rate": 0.758 + }, + { + "start": "17:00:00", + "minutes": 1020, + "rate": 0.65 + }, + { + "start": "18:00:00", + "minutes": 1080, + "rate": 0.648 + }, + { + "start": "19:00:00", + "minutes": 1140, + "rate": 0.738 + }, + { + "start": "20:00:00", + "minutes": 1200, + "rate": 0.847 + }, + { + "start": "21:00:00", + "minutes": 1260, + "rate": 0.861 + }, + { + "start": "22:00:00", + "minutes": 1320, + "rate": 0.863 + }, + { + "start": "23:00:00", + "minutes": 1380, + "rate": 0.843 + } + ], + "isfProfile": { + "sensitivities": [ + { + "i": 0, + "start": "00:00:00", + "sensitivity": 86.2, + "offset": 0, + "x": 0, + "endoffset": 1440 + } + ] + }, + "carb_ratio": 5.75, + "autosens_max": 1.3, + "autosens_min": 0.7, + "units": "mg/dl", + "timezone": "Europe/Paris" +} diff --git a/app/src/test/res/autotune/test2/aapsorefprofile.json b/app/src/test/res/autotune/test2/aapsorefprofile.json new file mode 100644 index 0000000000..ad7b75b70c --- /dev/null +++ b/app/src/test/res/autotune/test2/aapsorefprofile.json @@ -0,0 +1,175 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 1.009, + "start": "00:00:00" + }, + { + "i": 1, + "minutes": 60, + "rate": 0.984, + "start": "01:00:00" + }, + { + "i": 2, + "minutes": 120, + "rate": 0.988, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.158, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 1.028, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.933, + "start": "05:00:00" + }, + { + "i": 6, + "minutes": 360, + "rate": 0.824, + "start": "06:00:00" + }, + { + "i": 7, + "minutes": 420, + "rate": 0.849, + "start": "07:00:00" + }, + { + "i": 8, + "minutes": 480, + "rate": 0.909, + "start": "08:00:00" + }, + { + "i": 9, + "minutes": 540, + "rate": 0.954, + "start": "09:00:00" + }, + { + "i": 10, + "minutes": 600, + "rate": 0.961, + "start": "10:00:00" + }, + { + "i": 11, + "minutes": 660, + "rate": 0.926, + "start": "11:00:00" + }, + { + "i": 12, + "minutes": 720, + "rate": 0.885, + "start": "12:00:00" + }, + { + "i": 13, + "minutes": 780, + "rate": 0.876, + "start": "13:00:00", + "untuned": 1 + }, + { + "i": 14, + "minutes": 840, + "rate": 0.869, + "start": "14:00:00", + "untuned": 1 + }, + { + "i": 15, + "minutes": 900, + "rate": 0.881, + "start": "15:00:00" + }, + { + "i": 16, + "minutes": 960, + "rate": 0.798, + "start": "16:00:00" + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.683, + "start": "17:00:00" + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.634, + "start": "18:00:00" + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.725, + "start": "19:00:00" + }, + { + "i": 20, + "minutes": 1200, + "rate": 0.838, + "start": "20:00:00" + }, + { + "i": 21, + "minutes": 1260, + "rate": 0.881, + "start": "21:00:00" + }, + { + "i": 22, + "minutes": 1320, + "rate": 0.91, + "start": "22:00:00" + }, + { + "i": 23, + "minutes": 1380, + "rate": 0.91, + "start": "23:00:00" + } + ], + "carb_ratio": 5.75, + "csf": 14.991, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 82.222, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 82.222, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test2/autotune.2022-05-21.json b/app/src/test/res/autotune/test2/autotune.2022-05-21.json new file mode 100644 index 0000000000..cfedd0cf9b --- /dev/null +++ b/app/src/test/res/autotune/test2/autotune.2022-05-21.json @@ -0,0 +1 @@ +{"CRData":[],"CSFGlucoseData":[],"ISFGlucoseData":[{"device":"AndroidAPS-DexcomG6","date":1653153849000,"dateString":"2022-05-21T17:24:09.000Z","isValid":true,"sgv":96,"direction":"SingleDown","type":"sgv","_id":"628920591090500004ca4727","glucose":96,"avgDelta":"-13.25","BGI":-3.49,"deviation":"-9.76"},{"device":"AndroidAPS-DexcomG6","date":1653181150000,"dateString":"2022-05-22T00:59:10.000Z","isValid":true,"sgv":97,"direction":"SingleDown","type":"sgv","_id":"62898b01da46aa0004d1e0fa","glucose":97,"avgDelta":"-11.50","BGI":-2.84,"deviation":"-8.66"},{"device":"AndroidAPS-DexcomG6","date":1653181450000,"dateString":"2022-05-22T01:04:10.000Z","isValid":true,"sgv":92,"direction":"FortyFiveDown","type":"sgv","_id":"62898c2fda46aa0004d1e0fc","glucose":92,"avgDelta":"-10.75","BGI":-2.5,"deviation":"-8.25"},{"device":"AndroidAPS-DexcomG6","date":1653153549000,"dateString":"2022-05-21T17:19:09.000Z","isValid":true,"sgv":110,"direction":"SingleDown","type":"sgv","_id":"62891f2b1090500004ca4724","glucose":110,"avgDelta":"-12.00","BGI":-3.79,"deviation":"-8.21"},{"device":"AndroidAPS-DexcomG6","date":1653154149000,"dateString":"2022-05-21T17:29:09.000Z","isValid":true,"sgv":93,"direction":"SingleDown","type":"sgv","_id":"628921861090500004ca472b","glucose":93,"avgDelta":"-11.25","BGI":-3.19,"deviation":"-8.06"},{"device":"AndroidAPS-DexcomG6","date":1653180849000,"dateString":"2022-05-22T00:54:09.000Z","isValid":true,"sgv":105,"direction":"SingleDown","type":"sgv","_id":"628989d2da46aa0004d1e0f8","glucose":105,"avgDelta":"-9.50","BGI":-3.1,"deviation":"-6.40"},{"device":"AndroidAPS-DexcomG6","date":1653181750000,"dateString":"2022-05-22T01:09:10.000Z","isValid":true,"sgv":87,"direction":"FortyFiveDown","type":"sgv","_id":"62898d4750e51d0004429e5f","glucose":87,"avgDelta":"-8.50","BGI":-2.11,"deviation":"-6.39"},{"device":"AndroidAPS-DexcomG6","date":1653153249000,"dateString":"2022-05-21T17:14:09.000Z","isValid":true,"sgv":124,"direction":"FortyFiveDown","type":"sgv","_id":"62891dfd1090500004ca4722","glucose":124,"avgDelta":"-9.00","BGI":-4.05,"deviation":"-4.95"},{"device":"AndroidAPS-DexcomG6","date":1653154449000,"dateString":"2022-05-21T17:34:09.000Z","isValid":true,"sgv":97,"direction":"FortyFiveDown","type":"sgv","_id":"628922b18809e60004c644d6","glucose":97,"avgDelta":"-6.75","BGI":-2.84,"deviation":"-3.91"},{"device":"AndroidAPS-DexcomG6","date":1653110649000,"dateString":"2022-05-21T05:24:09.000Z","isValid":true,"sgv":98,"direction":"FortyFiveDown","type":"sgv","_id":"628877a5363e6c0004f710e0","glucose":98,"avgDelta":"-6.75","BGI":-4.44,"deviation":"-2.31"},{"device":"AndroidAPS-DexcomG6","date":1653180549000,"dateString":"2022-05-22T00:49:09.000Z","isValid":true,"sgv":121,"direction":"FortyFiveDown","type":"sgv","_id":"628988a3da46aa0004d1e0f5","glucose":121,"avgDelta":"-5.25","BGI":-3.32,"deviation":"-1.93"},{"device":"AndroidAPS-DexcomG6","date":1653110348000,"dateString":"2022-05-21T05:19:08.000Z","isValid":true,"sgv":102,"direction":"FortyFiveDown","type":"sgv","_id":"62887677363e6c0004f710de","glucose":102,"avgDelta":"-6.75","BGI":-4.91,"deviation":"-1.84"},{"device":"AndroidAPS-DexcomG6","date":1653156849000,"dateString":"2022-05-21T18:14:09.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"62892c06840d8d0004a20bf2","glucose":110,"avgDelta":"-3.50","BGI":-1.72,"deviation":"-1.78"},{"device":"AndroidAPS-DexcomG6","date":1653114249000,"dateString":"2022-05-21T06:24:09.000Z","isValid":true,"sgv":85,"direction":"Flat","type":"sgv","_id":"628885a48ff3530004dc6069","glucose":85,"avgDelta":"-3.25","BGI":-1.77,"deviation":"-1.48"},{"device":"AndroidAPS-DexcomG6","date":1653131049000,"dateString":"2022-05-21T11:04:09.000Z","isValid":true,"sgv":81,"direction":"Flat","type":"sgv","_id":"6288c7418e9ed800049b39e3","glucose":81,"avgDelta":"-3.00","BGI":-1.9,"deviation":"-1.10"},{"device":"AndroidAPS-DexcomG6","date":1653110949000,"dateString":"2022-05-21T05:29:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628878bbe964810004aa5655","glucose":97,"avgDelta":"-5.00","BGI":-3.92,"deviation":"-1.08"},{"device":"AndroidAPS-DexcomG6","date":1653152949000,"dateString":"2022-05-21T17:09:09.000Z","isValid":true,"sgv":138,"direction":"FortyFiveDown","type":"sgv","_id":"62891cd01090500004ca471f","glucose":138,"avgDelta":"-5.25","BGI":-4.22,"deviation":"-1.03"},{"device":"AndroidAPS-DexcomG6","date":1653113949000,"dateString":"2022-05-21T06:19:09.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"628884778ff3530004dc6067","glucose":89,"avgDelta":"-3.00","BGI":-2.07,"deviation":"-0.93"},{"device":"AndroidAPS-DexcomG6","date":1653113649000,"dateString":"2022-05-21T06:14:09.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"6288834a8ff3530004dc6065","glucose":91,"avgDelta":"-2.75","BGI":-2.28,"deviation":"-0.47"},{"device":"AndroidAPS-DexcomG6","date":1653107948000,"dateString":"2022-05-21T04:39:08.000Z","isValid":true,"sgv":124,"direction":"FortyFiveDown","type":"sgv","_id":"62886cfc19e2e60004989bb8","glucose":124,"avgDelta":"-8.25","BGI":-7.89,"deviation":"-0.36"},{"device":"AndroidAPS-DexcomG6","date":1653156549000,"dateString":"2022-05-21T18:09:09.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"62892af2840d8d0004a20bf0","glucose":114,"avgDelta":"-2.25","BGI":-1.9,"deviation":"-0.35"},{"device":"AndroidAPS-DexcomG6","date":1653137649000,"dateString":"2022-05-21T12:54:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288e1040f1be700041e59f0","glucose":79,"avgDelta":"2.25","BGI":-18.02,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137350000,"dateString":"2022-05-21T12:49:10.000Z","isValid":true,"sgv":72,"direction":"Flat","type":"sgv","_id":"6288dfd60f1be700041e59ee","glucose":72,"avgDelta":"-0.25","BGI":-19.52,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137049000,"dateString":"2022-05-21T12:44:09.000Z","isValid":true,"sgv":69,"direction":"Flat","type":"sgv","_id":"6288df8a0f1be700041e59ec","glucose":69,"avgDelta":"-1.75","BGI":-20.95,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136449000,"dateString":"2022-05-21T12:34:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"6288dd270f1be700041e59e8","glucose":70,"avgDelta":"-2.25","BGI":-23.7,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136149000,"dateString":"2022-05-21T12:29:09.000Z","isValid":true,"sgv":73,"direction":"Flat","type":"sgv","_id":"6288db8a0f1be700041e59e5","glucose":73,"avgDelta":"-1.25","BGI":-25,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135249000,"dateString":"2022-05-21T12:14:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288d7ae0f1be700041e59de","glucose":79,"avgDelta":"0.00","BGI":-27.76,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134949000,"dateString":"2022-05-21T12:09:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d67f0f1be700041e59da","glucose":78,"avgDelta":"-2.25","BGI":-28.14,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134649000,"dateString":"2022-05-21T12:04:09.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","_id":"6288d5500f1be700041e59d7","glucose":77,"avgDelta":"-6.00","BGI":-28.32,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134349000,"dateString":"2022-05-21T11:59:09.000Z","isValid":true,"sgv":76,"direction":"FortyFiveDown","type":"sgv","_id":"6288d4220f1be700041e59d5","glucose":76,"avgDelta":"-9.50","BGI":-28.06,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134049000,"dateString":"2022-05-21T11:54:09.000Z","isValid":true,"sgv":79,"direction":"FortyFiveDown","type":"sgv","_id":"6288d3060f1be700041e59d2","glucose":79,"avgDelta":"-10.50","BGI":-27.28,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135849000,"dateString":"2022-05-21T12:24:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6288d9fb0f1be700041e59e2","glucose":76,"avgDelta":"-0.25","BGI":-26.12,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136749000,"dateString":"2022-05-21T12:39:09.000Z","isValid":true,"sgv":68,"direction":"Flat","type":"sgv","_id":"6288de580f1be700041e59ea","glucose":68,"avgDelta":"-2.50","BGI":-22.37,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135549000,"dateString":"2022-05-21T12:19:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d8e00f1be700041e59e0","glucose":78,"avgDelta":"0.50","BGI":-27.02,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653108249000,"dateString":"2022-05-21T04:44:09.000Z","isValid":true,"sgv":123,"direction":"FortyFiveDown","type":"sgv","_id":"62886e2919e2e60004989bba","glucose":123,"avgDelta":"-7.50","BGI":-7.59,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653130748000,"dateString":"2022-05-21T10:59:08.000Z","isValid":true,"sgv":84,"direction":"Flat","type":"sgv","_id":"6288c61a1991280004dce468","glucose":84,"avgDelta":"-2.50","BGI":-2.59,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653110049000,"dateString":"2022-05-21T05:14:09.000Z","isValid":true,"sgv":109,"direction":"FortyFiveDown","type":"sgv","_id":"62887549363e6c0004f710dc","glucose":109,"avgDelta":"-5.25","BGI":-5.34,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653113349000,"dateString":"2022-05-21T06:09:09.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288821b8ff3530004dc6062","glucose":94,"avgDelta":"-2.25","BGI":-2.46,"deviation":"0.21"},{"device":"AndroidAPS-DexcomG6","date":1653111249000,"dateString":"2022-05-21T05:34:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628879e9e964810004aa5657","glucose":97,"avgDelta":"-3.00","BGI":-3.45,"deviation":"0.45"},{"device":"AndroidAPS-DexcomG6","date":1653130448000,"dateString":"2022-05-21T10:54:08.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","_id":"6288c4ec1991280004dce464","glucose":88,"avgDelta":"-2.00","BGI":-3.36,"deviation":"1.36"},{"device":"AndroidAPS-DexcomG6","date":1653113049000,"dateString":"2022-05-21T06:04:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628880ee8ff3530004dc6060","glucose":98,"avgDelta":"-1.00","BGI":-2.5,"deviation":"1.50"},{"device":"AndroidAPS-DexcomG6","date":1653151149000,"dateString":"2022-05-21T16:39:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628915ce1090500004ca470c","glucose":158,"avgDelta":"-3.50","BGI":-5.09,"deviation":"1.59"},{"device":"AndroidAPS-DexcomG6","date":1653180250000,"dateString":"2022-05-22T00:44:10.000Z","isValid":true,"sgv":135,"direction":"Flat","type":"sgv","_id":"62898774da46aa0004d1e0f1","glucose":135,"avgDelta":"-1.75","BGI":-3.49,"deviation":"1.74"},{"device":"AndroidAPS-DexcomG6","date":1653151449000,"dateString":"2022-05-21T16:44:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628916f81090500004ca4710","glucose":158,"avgDelta":"-3.00","BGI":-4.74,"deviation":"1.74"},{"device":"AndroidAPS-DexcomG6","date":1653154749000,"dateString":"2022-05-21T17:39:09.000Z","isValid":true,"sgv":108,"direction":"NONE","type":"sgv","_id":"628923df8809e60004c644d9","glucose":108,"avgDelta":"-0.50","BGI":-2.5,"deviation":"2.00"},{"device":"AndroidAPS-DexcomG6","date":1653152649000,"dateString":"2022-05-21T17:04:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62891ba31090500004ca471d","glucose":149,"avgDelta":"-2.25","BGI":-4.35,"deviation":"2.10"},{"device":"AndroidAPS-DexcomG6","date":1653130149000,"dateString":"2022-05-21T10:49:09.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"6288c3be1991280004dce461","glucose":91,"avgDelta":"-2.00","BGI":-4.27,"deviation":"2.27"},{"device":"AndroidAPS-DexcomG6","date":1653111549000,"dateString":"2022-05-21T05:39:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"62887b17e964810004aa565a","glucose":100,"avgDelta":"-0.50","BGI":-2.84,"deviation":"2.34"},{"device":"AndroidAPS-DexcomG6","date":1653107648000,"dateString":"2022-05-21T04:34:08.000Z","isValid":true,"sgv":132,"direction":"FortyFiveDown","type":"sgv","_id":"62886be719e2e60004989bb5","glucose":132,"avgDelta":"-5.75","BGI":-8.1,"deviation":"2.35"},{"device":"AndroidAPS-DexcomG6","date":1653150849000,"dateString":"2022-05-21T16:34:09.000Z","isValid":true,"sgv":161,"direction":"Flat","type":"sgv","_id":"628914d01090500004ca4709","glucose":161,"avgDelta":"-3.00","BGI":-5.47,"deviation":"2.47"},{"device":"AndroidAPS-DexcomG6","date":1653179350000,"dateString":"2022-05-22T00:29:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628983f69d6f1800047cd0dd","glucose":142,"avgDelta":"-1.75","BGI":-4.27,"deviation":"2.52"},{"device":"AndroidAPS-DexcomG6","date":1653112749000,"dateString":"2022-05-21T05:59:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"62887fcee964810004aa5666","glucose":101,"avgDelta":"0.25","BGI":-2.46,"deviation":"2.71"},{"device":"AndroidAPS-DexcomG6","date":1653179050000,"dateString":"2022-05-22T00:24:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628982c89d6f1800047cd0db","glucose":142,"avgDelta":"-1.75","BGI":-4.48,"deviation":"2.73"},{"device":"AndroidAPS-DexcomG6","date":1653156250000,"dateString":"2022-05-21T18:04:10.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"628929ac8809e60004c644e9","glucose":119,"avgDelta":"0.75","BGI":-2.07,"deviation":"2.82"},{"device":"AndroidAPS-DexcomG6","date":1653109748000,"dateString":"2022-05-21T05:09:08.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6288741c363e6c0004f710d9","glucose":117,"avgDelta":"-2.75","BGI":-5.73,"deviation":"2.98"},{"device":"AndroidAPS-DexcomG6","date":1653179649000,"dateString":"2022-05-22T00:34:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898517da46aa0004d1e0ea","glucose":143,"avgDelta":"-1.00","BGI":-4.01,"deviation":"3.01"},{"device":"AndroidAPS-DexcomG6","date":1653151749000,"dateString":"2022-05-21T16:49:09.000Z","isValid":true,"sgv":159,"direction":"Flat","type":"sgv","_id":"628918261090500004ca4714","glucose":159,"avgDelta":"-1.50","BGI":-4.53,"deviation":"3.03"},{"device":"AndroidAPS-DexcomG6","date":1653108548000,"dateString":"2022-05-21T04:49:08.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","_id":"62886f5719e2e60004989bbc","glucose":128,"avgDelta":"-4.00","BGI":-7.2,"deviation":"3.20"},{"device":"AndroidAPS-DexcomG6","date":1653129848000,"dateString":"2022-05-21T10:44:08.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"6288c2911991280004dce45e","glucose":93,"avgDelta":"-2.00","BGI":-5.26,"deviation":"3.26"},{"device":"AndroidAPS-DexcomG6","date":1653173650000,"dateString":"2022-05-21T22:54:10.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289717d37d09a00043f2b1e","glucose":108,"avgDelta":"-4.00","BGI":-7.28,"deviation":"3.28"},{"device":"AndroidAPS-DexcomG6","date":1653111849000,"dateString":"2022-05-21T05:44:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62887c44e964810004aa565d","glucose":102,"avgDelta":"1.00","BGI":-2.37,"deviation":"3.37"},{"device":"AndroidAPS-DexcomG6","date":1653173949000,"dateString":"2022-05-21T22:59:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289721437d09a00043f2b1f","glucose":108,"avgDelta":"-3.00","BGI":-6.42,"deviation":"3.42"},{"device":"AndroidAPS-DexcomG6","date":1653150549000,"dateString":"2022-05-21T16:29:09.000Z","isValid":true,"sgv":165,"direction":"Flat","type":"sgv","_id":"628913731090500004ca4706","glucose":165,"avgDelta":"-2.25","BGI":-5.73,"deviation":"3.48"},{"device":"AndroidAPS-DexcomG6","date":1653179949000,"dateString":"2022-05-22T00:39:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898645da46aa0004d1e0ee","glucose":143,"avgDelta":"-0.25","BGI":-3.75,"deviation":"3.50"},{"device":"AndroidAPS-DexcomG6","date":1653112449000,"dateString":"2022-05-21T05:54:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62887ea1e964810004aa5664","glucose":102,"avgDelta":"1.25","BGI":-2.28,"deviation":"3.53"},{"device":"AndroidAPS-DexcomG6","date":1653112148000,"dateString":"2022-05-21T05:49:08.000Z","isValid":true,"sgv":103,"direction":"Flat","type":"sgv","_id":"62887d72e964810004aa5661","glucose":103,"avgDelta":"1.50","BGI":-2.07,"deviation":"3.57"},{"device":"AndroidAPS-DexcomG6","date":1653178750000,"dateString":"2022-05-22T00:19:10.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"628981999d6f1800047cd0d8","glucose":144,"avgDelta":"-0.75","BGI":-4.57,"deviation":"3.82"},{"device":"AndroidAPS-DexcomG6","date":1653129548000,"dateString":"2022-05-21T10:39:08.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288c1631991280004dce45b","glucose":94,"avgDelta":"-2.50","BGI":-6.38,"deviation":"3.88"},{"device":"AndroidAPS-DexcomG6","date":1653129249000,"dateString":"2022-05-21T10:34:09.000Z","isValid":true,"sgv":96,"direction":"Flat","type":"sgv","_id":"6288c0341991280004dce459","glucose":96,"avgDelta":"-3.50","BGI":-7.59,"deviation":"4.09"},{"device":"AndroidAPS-DexcomG6","date":1653152049000,"dateString":"2022-05-21T16:54:09.000Z","isValid":true,"sgv":160,"direction":"Flat","type":"sgv","_id":"628919531090500004ca4717","glucose":160,"avgDelta":"-0.25","BGI":-4.35,"deviation":"4.10"},{"device":"AndroidAPS-DexcomG6","date":1653152349000,"dateString":"2022-05-21T16:59:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"62891a811090500004ca471a","glucose":158,"avgDelta":"0.00","BGI":-4.35,"deviation":"4.35"},{"device":"AndroidAPS-DexcomG6","date":1653150249000,"dateString":"2022-05-21T16:24:09.000Z","isValid":true,"sgv":170,"direction":"Flat","type":"sgv","_id":"628913111090500004ca4704","glucose":170,"avgDelta":"-1.50","BGI":-5.95,"deviation":"4.45"},{"device":"AndroidAPS-DexcomG6","date":1653105549000,"dateString":"2022-05-21T03:59:09.000Z","isValid":true,"sgv":146,"direction":"FortyFiveDown","type":"sgv","_id":"628863a542c1220004f95730","glucose":146,"avgDelta":"-5.25","BGI":-9.87,"deviation":"4.62"},{"device":"AndroidAPS-DexcomG6","date":1653173350000,"dateString":"2022-05-21T22:49:10.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"62896fb837d09a00043f2b1b","glucose":110,"avgDelta":"-3.50","BGI":-8.15,"deviation":"4.65"},{"device":"AndroidAPS-DexcomG6","date":1653174249000,"dateString":"2022-05-21T23:04:09.000Z","isValid":true,"sgv":111,"direction":"Flat","type":"sgv","_id":"6289726037d09a00043f2b20","glucose":111,"avgDelta":"-1.00","BGI":-5.69,"deviation":"4.69"},{"device":"AndroidAPS-DexcomG6","date":1653178449000,"dateString":"2022-05-22T00:14:09.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"6289806a9d6f1800047cd0d6","glucose":147,"avgDelta":"0.25","BGI":-4.61,"deviation":"4.86"},{"device":"AndroidAPS-DexcomG6","date":1653128948000,"dateString":"2022-05-21T10:29:08.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"6288bf061991280004dce457","glucose":99,"avgDelta":"-4.00","BGI":-8.88,"deviation":"4.88"},{"device":"AndroidAPS-DexcomG6","date":1653103448000,"dateString":"2022-05-21T03:24:08.000Z","isValid":true,"sgv":174,"direction":"SingleDown","type":"sgv","_id":"62885b81293f3e00042c31d9","glucose":174,"avgDelta":"-10.50","BGI":-15.43,"deviation":"4.93"},{"device":"AndroidAPS-DexcomG6","date":1653149949000,"dateString":"2022-05-21T16:19:09.000Z","isValid":true,"sgv":172,"direction":"Flat","type":"sgv","_id":"6289130f1090500004ca46ff","glucose":172,"avgDelta":"-1.00","BGI":-6.12,"deviation":"5.12"},{"device":"AndroidAPS-DexcomG6","date":1653105848000,"dateString":"2022-05-21T04:04:08.000Z","isValid":true,"sgv":146,"direction":"Flat","type":"sgv","_id":"628864d342c1220004f95733","glucose":146,"avgDelta":"-4.00","BGI":-9.14,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653103149000,"dateString":"2022-05-21T03:19:09.000Z","isValid":true,"sgv":182,"direction":"SingleDown","type":"sgv","_id":"62885a52293f3e00042c31d7","glucose":182,"avgDelta":"-11.50","BGI":-16.64,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653105248000,"dateString":"2022-05-21T03:54:08.000Z","isValid":true,"sgv":149,"direction":"FortyFiveDown","type":"sgv","_id":"6288629042c1220004f9572e","glucose":149,"avgDelta":"-5.25","BGI":-10.56,"deviation":"5.31"},{"device":"AndroidAPS-DexcomG6","date":1653176050000,"dateString":"2022-05-21T23:34:10.000Z","isValid":true,"sgv":127,"direction":"Flat","type":"sgv","_id":"6289771371a363000480abc1","glucose":127,"avgDelta":"2.50","BGI":-2.93,"deviation":"5.43"},{"device":"AndroidAPS-DexcomG6","date":1653149650000,"dateString":"2022-05-21T16:14:10.000Z","isValid":true,"sgv":173,"direction":"Flat","type":"sgv","_id":"62890fff1090500004ca46fd","glucose":173,"avgDelta":"-0.75","BGI":-6.42,"deviation":"5.67"},{"device":"AndroidAPS-DexcomG6","date":1653176350000,"dateString":"2022-05-21T23:39:10.000Z","isValid":true,"sgv":132,"direction":"Flat","type":"sgv","_id":"6289784271a363000480abc3","glucose":132,"avgDelta":"3.00","BGI":-2.67,"deviation":"5.67"},{"device":"AndroidAPS-DexcomG6","date":1653175750000,"dateString":"2022-05-21T23:29:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"628975e471a363000480abbe","glucose":124,"avgDelta":"2.50","BGI":-3.19,"deviation":"5.69"},{"device":"AndroidAPS-DexcomG6","date":1653102848000,"dateString":"2022-05-21T03:14:08.000Z","isValid":true,"sgv":193,"direction":"SingleDown","type":"sgv","_id":"62885924293f3e00042c31d5","glucose":193,"avgDelta":"-12.00","BGI":-17.71,"deviation":"5.71"},{"device":"AndroidAPS-DexcomG6","date":1653128649000,"dateString":"2022-05-21T10:24:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6288bde0abbef90004616cf8","glucose":101,"avgDelta":"-4.50","BGI":-10.3,"deviation":"5.80"},{"device":"AndroidAPS-DexcomG6","date":1653155950000,"dateString":"2022-05-21T17:59:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"6289287e8809e60004c644e6","glucose":123,"avgDelta":"3.75","BGI":-2.16,"deviation":"5.91"},{"device":"AndroidAPS-DexcomG6","date":1653174550000,"dateString":"2022-05-21T23:09:10.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"6289727937d09a00043f2b21","glucose":114,"avgDelta":"1.00","BGI":-4.96,"deviation":"5.96"},{"device":"AndroidAPS-DexcomG6","date":1653178149000,"dateString":"2022-05-22T00:09:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62897f3b9d6f1800047cd0d3","glucose":149,"avgDelta":"1.50","BGI":-4.48,"deviation":"5.98"},{"device":"AndroidAPS-DexcomG6","date":1653103748000,"dateString":"2022-05-21T03:29:08.000Z","isValid":true,"sgv":171,"direction":"FortyFiveDown","type":"sgv","_id":"62885c95293f3e00042c31db","glucose":171,"avgDelta":"-8.25","BGI":-14.31,"deviation":"6.06"},{"device":"AndroidAPS-DexcomG6","date":1653108848000,"dateString":"2022-05-21T04:54:08.000Z","isValid":true,"sgv":130,"direction":"Flat","type":"sgv","_id":"62887093363e6c0004f710cf","glucose":130,"avgDelta":"-0.50","BGI":-6.72,"deviation":"6.22","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653175450000,"dateString":"2022-05-21T23:24:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"628974b671a363000480abbc","glucose":123,"avgDelta":"3.00","BGI":-3.4,"deviation":"6.40"},{"device":"AndroidAPS-DexcomG6","date":1653107348000,"dateString":"2022-05-21T04:29:08.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"62886ab919e2e60004989bb3","glucose":144,"avgDelta":"-1.75","BGI":-8.19,"deviation":"6.44"},{"device":"AndroidAPS-DexcomG6","date":1653102548000,"dateString":"2022-05-21T03:09:08.000Z","isValid":true,"sgv":204,"direction":"SingleDown","type":"sgv","_id":"628857f7293f3e00042c31d3","glucose":204,"avgDelta":"-12.25","BGI":-18.79,"deviation":"6.54"},{"device":"AndroidAPS-DexcomG6","date":1653109448000,"dateString":"2022-05-21T05:04:08.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","_id":"628872ef363e6c0004f710d6","glucose":125,"avgDelta":"0.50","BGI":-6.08,"deviation":"6.58"},{"device":"AndroidAPS-DexcomG6","date":1653176650000,"dateString":"2022-05-21T23:44:10.000Z","isValid":true,"sgv":139,"direction":"Flat","type":"sgv","_id":"6289797071a363000480abc7","glucose":139,"avgDelta":"4.00","BGI":-2.59,"deviation":"6.59"},{"device":"AndroidAPS-DexcomG6","date":1653174850000,"dateString":"2022-05-21T23:14:10.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6289727a37d09a00043f2b22","glucose":117,"avgDelta":"2.25","BGI":-4.35,"deviation":"6.60"},{"device":"AndroidAPS-DexcomG6","date":1653149349000,"dateString":"2022-05-21T16:09:09.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","_id":"62890edacf7ee10004a2b1e2","glucose":174,"avgDelta":"0.00","BGI":-6.64,"deviation":"6.64"},{"device":"AndroidAPS-DexcomG6","date":1653177850000,"dateString":"2022-05-22T00:04:10.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62897e0c9d6f1800047cd0d0","glucose":149,"avgDelta":"2.50","BGI":-4.22,"deviation":"6.72"},{"device":"AndroidAPS-DexcomG6","date":1653101948000,"dateString":"2022-05-21T02:59:08.000Z","isValid":true,"sgv":228,"direction":"SingleDown","type":"sgv","_id":"628855935151b5000462a1e8","glucose":228,"avgDelta":"-13.75","BGI":-20.52,"deviation":"6.77"},{"device":"AndroidAPS-DexcomG6","date":1653175149000,"dateString":"2022-05-21T23:19:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"6289738f37d09a00043f2b26","glucose":120,"avgDelta":"3.00","BGI":-3.84,"deviation":"6.84"},{"device":"AndroidAPS-DexcomG6","date":1653148149000,"dateString":"2022-05-21T15:49:09.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","_id":"62890a21cf7ee10004a2b1d3","glucose":174,"avgDelta":"-1.00","BGI":-7.89,"deviation":"6.89"},{"device":"AndroidAPS-DexcomG6","date":1653148749000,"dateString":"2022-05-21T15:59:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890c64cf7ee10004a2b1da","glucose":176,"avgDelta":"0.00","BGI":-6.94,"deviation":"6.94"},{"device":"AndroidAPS-DexcomG6","date":1653102249000,"dateString":"2022-05-21T03:04:09.000Z","isValid":true,"sgv":216,"direction":"SingleDown","type":"sgv","_id":"628856da5151b5000462a1ea","glucose":216,"avgDelta":"-12.75","BGI":-19.7,"deviation":"6.95"},{"device":"AndroidAPS-DexcomG6","date":1653149049000,"dateString":"2022-05-21T16:04:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890daccf7ee10004a2b1de","glucose":176,"avgDelta":"0.25","BGI":-6.72,"deviation":"6.97"},{"device":"AndroidAPS-DexcomG6","date":1653148450000,"dateString":"2022-05-21T15:54:10.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890b36cf7ee10004a2b1d7","glucose":176,"avgDelta":"-0.25","BGI":-7.37,"deviation":"7.12"},{"device":"AndroidAPS-DexcomG6","date":1653104949000,"dateString":"2022-05-21T03:49:09.000Z","isValid":true,"sgv":155,"direction":"FortyFiveDown","type":"sgv","_id":"6288614942c1220004f9572c","glucose":155,"avgDelta":"-4.00","BGI":-11.12,"deviation":"7.12"},{"device":"AndroidAPS-DexcomG6","date":1653101648000,"dateString":"2022-05-21T02:54:08.000Z","isValid":true,"sgv":241,"direction":"SingleDown","type":"sgv","_id":"6288547f5151b5000462a1e6","glucose":241,"avgDelta":"-14.00","BGI":-21.16,"deviation":"7.16"},{"device":"AndroidAPS-DexcomG6","date":1653155049000,"dateString":"2022-05-21T17:44:09.000Z","isValid":true,"sgv":116,"direction":"NONE","type":"sgv","_id":"6289250d8809e60004c644dd","glucose":116,"avgDelta":"5.00","BGI":-2.16,"deviation":"7.16","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653173050000,"dateString":"2022-05-21T22:44:10.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","_id":"62896f8537d09a00043f2b1a","glucose":115,"avgDelta":"-1.75","BGI":-9.05,"deviation":"7.30"},{"device":"AndroidAPS-DexcomG6","date":1653104049000,"dateString":"2022-05-21T03:34:09.000Z","isValid":true,"sgv":170,"direction":"FortyFiveDown","type":"sgv","_id":"62885dc3293f3e00042c31de","glucose":170,"avgDelta":"-5.75","BGI":-13.1,"deviation":"7.35"},{"device":"AndroidAPS-DexcomG6","date":1653106149000,"dateString":"2022-05-21T04:09:09.000Z","isValid":true,"sgv":151,"direction":"Flat","type":"sgv","_id":"6288660142c1220004f95736","glucose":151,"avgDelta":"-1.00","BGI":-8.36,"deviation":"7.36"}],"basalGlucoseData":[{"device":"AndroidAPS-DexcomG6","date":1653182050000,"dateString":"2022-05-22T01:14:10.000Z","isValid":true,"sgv":81,"direction":"FortyFiveDown","type":"sgv","_id":"62898e7650e51d0004429e63","glucose":81,"avgDelta":"-6.00","BGI":-1.68,"deviation":"-4.32"},{"device":"AndroidAPS-DexcomG6","date":1653182349000,"dateString":"2022-05-22T01:19:09.000Z","isValid":true,"sgv":77,"direction":"FortyFiveDown","type":"sgv","_id":"62898fa550e51d0004429e65","glucose":77,"avgDelta":"-5.00","BGI":-1.25,"deviation":"-3.75"},{"device":"AndroidAPS-DexcomG6","date":1653182650000,"dateString":"2022-05-22T01:24:10.000Z","isValid":true,"sgv":74,"direction":"FortyFiveDown","type":"sgv","_id":"628990d350e51d0004429e67","glucose":74,"avgDelta":"-4.50","BGI":-0.78,"deviation":"-3.72"},{"device":"AndroidAPS-DexcomG6","date":1653182949000,"dateString":"2022-05-22T01:29:09.000Z","isValid":true,"sgv":72,"direction":"Flat","type":"sgv","_id":"6289920150e51d0004429e69","glucose":72,"avgDelta":"-3.75","BGI":-0.3,"deviation":"-3.45"},{"device":"AndroidAPS-DexcomG6","date":1653116049000,"dateString":"2022-05-21T06:54:09.000Z","isValid":true,"sgv":69,"direction":"Flat","type":"sgv","_id":"62888ccc149196000412bf4f","glucose":69,"avgDelta":"-2.25","BGI":0.43,"deviation":"-2.68"},{"device":"AndroidAPS-DexcomG6","date":1653162549000,"dateString":"2022-05-21T19:49:09.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","_id":"6289425f598f780004bb3b30","glucose":88,"avgDelta":"-1.50","BGI":1.12,"deviation":"-2.62"},{"device":"AndroidAPS-DexcomG6","date":1653115749000,"dateString":"2022-05-21T06:49:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"62888b85149196000412bf4d","glucose":70,"avgDelta":"-2.50","BGI":0,"deviation":"-2.50"},{"device":"AndroidAPS-DexcomG6","date":1653162250000,"dateString":"2022-05-21T19:44:10.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"62894118598f780004bb3b2d","glucose":89,"avgDelta":"-1.50","BGI":0.99,"deviation":"-2.49"},{"device":"AndroidAPS-DexcomG6","date":1653115149000,"dateString":"2022-05-21T06:39:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6288892a149196000412bf49","glucose":76,"avgDelta":"-3.25","BGI":-0.78,"deviation":"-2.47"},{"device":"AndroidAPS-DexcomG6","date":1653115449000,"dateString":"2022-05-21T06:44:09.000Z","isValid":true,"sgv":74,"direction":"Flat","type":"sgv","_id":"62888a57149196000412bf4b","glucose":74,"avgDelta":"-2.75","BGI":-0.34,"deviation":"-2.41"},{"device":"AndroidAPS-DexcomG6","date":1653161950000,"dateString":"2022-05-21T19:39:10.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"62893feb598f780004bb3b2b","glucose":91,"avgDelta":"-1.50","BGI":0.86,"deviation":"-2.36"},{"device":"AndroidAPS-DexcomG6","date":1653116349000,"dateString":"2022-05-21T06:59:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"62888de2149196000412bf51","glucose":70,"avgDelta":"-1.50","BGI":0.78,"deviation":"-2.28"},{"device":"AndroidAPS-DexcomG6","date":1653157149000,"dateString":"2022-05-21T18:19:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"62892d34840d8d0004a20bf5","glucose":108,"avgDelta":"-3.75","BGI":-1.47,"deviation":"-2.28"},{"device":"AndroidAPS-DexcomG6","date":1653162850000,"dateString":"2022-05-21T19:54:10.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"6289437f4493460004e63a25","glucose":89,"avgDelta":"-1.00","BGI":1.25,"deviation":"-2.25"},{"device":"AndroidAPS-DexcomG6","date":1653183249000,"dateString":"2022-05-22T01:34:09.000Z","isValid":true,"sgv":73,"direction":"Flat","type":"sgv","_id":"6289933050e51d0004429e6b","glucose":73,"avgDelta":"-2.00","BGI":0.22,"deviation":"-2.22"},{"device":"AndroidAPS-DexcomG6","date":1653114849000,"dateString":"2022-05-21T06:34:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"628888018ff3530004dc6070","glucose":78,"avgDelta":"-3.25","BGI":-1.12,"deviation":"-2.13"},{"device":"AndroidAPS-DexcomG6","date":1653114549000,"dateString":"2022-05-21T06:29:09.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628886d28ff3530004dc606b","glucose":80,"avgDelta":"-3.50","BGI":-1.47,"deviation":"-2.03"},{"device":"AndroidAPS-DexcomG6","date":1653161649000,"dateString":"2022-05-21T19:34:09.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"62893ed7598f780004bb3b29","glucose":93,"avgDelta":"-1.25","BGI":0.73,"deviation":"-1.98"},{"device":"AndroidAPS-DexcomG6","date":1653180549000,"dateString":"2022-05-22T00:49:09.000Z","isValid":true,"sgv":121,"direction":"FortyFiveDown","type":"sgv","_id":"628988a3da46aa0004d1e0f5","glucose":121,"avgDelta":"-5.25","BGI":-3.32,"deviation":"-1.93"},{"device":"AndroidAPS-DexcomG6","date":1653110348000,"dateString":"2022-05-21T05:19:08.000Z","isValid":true,"sgv":102,"direction":"FortyFiveDown","type":"sgv","_id":"62887677363e6c0004f710de","glucose":102,"avgDelta":"-6.75","BGI":-4.91,"deviation":"-1.84"},{"device":"AndroidAPS-DexcomG6","date":1653161350000,"dateString":"2022-05-21T19:29:10.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"62893daa598f780004bb3b27","glucose":94,"avgDelta":"-1.00","BGI":0.65,"deviation":"-1.65"},{"device":"AndroidAPS-DexcomG6","date":1653157449000,"dateString":"2022-05-21T18:24:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"62892e62840d8d0004a20bf8","glucose":108,"avgDelta":"-2.75","BGI":-1.21,"deviation":"-1.54"},{"device":"AndroidAPS-DexcomG6","date":1653158649000,"dateString":"2022-05-21T18:44:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6289331c22fbc8000495b813","glucose":101,"avgDelta":"-1.75","BGI":-0.3,"deviation":"-1.45"},{"device":"AndroidAPS-DexcomG6","date":1653163150000,"dateString":"2022-05-21T19:59:10.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"628944ae4493460004e63a27","glucose":91,"avgDelta":"0.00","BGI":1.38,"deviation":"-1.38"},{"device":"AndroidAPS-DexcomG6","date":1653161049000,"dateString":"2022-05-21T19:24:09.000Z","isValid":true,"sgv":95,"direction":"Flat","type":"sgv","_id":"62893c7d598f780004bb3b24","glucose":95,"avgDelta":"-0.75","BGI":0.6,"deviation":"-1.35"},{"device":"AndroidAPS-DexcomG6","date":1653158949000,"dateString":"2022-05-21T18:49:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"6289344a22fbc8000495b815","glucose":100,"avgDelta":"-1.50","BGI":-0.17,"deviation":"-1.33"},{"device":"AndroidAPS-DexcomG6","date":1653159249000,"dateString":"2022-05-21T18:54:09.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"6289357622fbc8000495b818","glucose":99,"avgDelta":"-1.25","BGI":-0.04,"deviation":"-1.21"},{"device":"AndroidAPS-DexcomG6","date":1653116649000,"dateString":"2022-05-21T07:04:09.000Z","isValid":true,"sgv":74,"direction":"Flat","type":"sgv","_id":"62888f0f149196000412bf54","glucose":74,"avgDelta":"0.00","BGI":1.12,"deviation":"-1.12"},{"device":"AndroidAPS-DexcomG6","date":1653131049000,"dateString":"2022-05-21T11:04:09.000Z","isValid":true,"sgv":81,"direction":"Flat","type":"sgv","_id":"6288c7418e9ed800049b39e3","glucose":81,"avgDelta":"-3.00","BGI":-1.9,"deviation":"-1.10"},{"device":"AndroidAPS-DexcomG6","date":1653157750000,"dateString":"2022-05-21T18:29:10.000Z","isValid":true,"sgv":106,"direction":"Flat","type":"sgv","_id":"62892f8f840d8d0004a20bfa","glucose":106,"avgDelta":"-2.00","BGI":-0.95,"deviation":"-1.05"},{"device":"AndroidAPS-DexcomG6","date":1653152949000,"dateString":"2022-05-21T17:09:09.000Z","isValid":true,"sgv":138,"direction":"FortyFiveDown","type":"sgv","_id":"62891cd01090500004ca471f","glucose":138,"avgDelta":"-5.25","BGI":-4.22,"deviation":"-1.03"},{"device":"AndroidAPS-DexcomG6","date":1653158349000,"dateString":"2022-05-21T18:39:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"628931e9840d8d0004a20bff","glucose":102,"avgDelta":"-1.50","BGI":-0.47,"deviation":"-1.03"},{"device":"AndroidAPS-DexcomG6","date":1653160749000,"dateString":"2022-05-21T19:19:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"62893b4f598f780004bb3b22","glucose":97,"avgDelta":"-0.50","BGI":0.52,"deviation":"-1.02"},{"device":"AndroidAPS-DexcomG6","date":1653131349000,"dateString":"2022-05-21T11:09:09.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","_id":"6288c86f8e9ed800049b39e5","glucose":82,"avgDelta":"-2.25","BGI":-1.25,"deviation":"-1.00"},{"device":"AndroidAPS-DexcomG6","date":1653183550000,"dateString":"2022-05-22T01:39:10.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6289945f50e51d0004429e6d","glucose":76,"avgDelta":"-0.25","BGI":0.69,"deviation":"-0.94"},{"device":"AndroidAPS-DexcomG6","date":1653159849000,"dateString":"2022-05-21T19:04:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628937b822fbc8000495b81d","glucose":98,"avgDelta":"-0.75","BGI":0.17,"deviation":"-0.92"},{"device":"AndroidAPS-DexcomG6","date":1653158049000,"dateString":"2022-05-21T18:34:09.000Z","isValid":true,"sgv":104,"direction":"Flat","type":"sgv","_id":"628930bc840d8d0004a20bfd","glucose":104,"avgDelta":"-1.50","BGI":-0.69,"deviation":"-0.81"},{"device":"AndroidAPS-DexcomG6","date":1653160150000,"dateString":"2022-05-21T19:09:10.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628938fe22fbc8000495b81f","glucose":98,"avgDelta":"-0.50","BGI":0.3,"deviation":"-0.80"},{"device":"AndroidAPS-DexcomG6","date":1653159549000,"dateString":"2022-05-21T18:59:09.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"628936a422fbc8000495b81a","glucose":99,"avgDelta":"-0.75","BGI":0.04,"deviation":"-0.79"},{"device":"AndroidAPS-DexcomG6","date":1653160449000,"dateString":"2022-05-21T19:14:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"62893a1222fbc8000495b822","glucose":98,"avgDelta":"-0.25","BGI":0.43,"deviation":"-0.68"},{"device":"AndroidAPS-DexcomG6","date":1653117848000,"dateString":"2022-05-21T07:24:08.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","_id":"628893bd7ff1e700040f17c9","glucose":82,"avgDelta":"2.00","BGI":2.37,"deviation":"-0.37"},{"device":"AndroidAPS-DexcomG6","date":1653107948000,"dateString":"2022-05-21T04:39:08.000Z","isValid":true,"sgv":124,"direction":"FortyFiveDown","type":"sgv","_id":"62886cfc19e2e60004989bb8","glucose":124,"avgDelta":"-8.25","BGI":-7.89,"deviation":"-0.36"},{"device":"AndroidAPS-DexcomG6","date":1653156549000,"dateString":"2022-05-21T18:09:09.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"62892af2840d8d0004a20bf0","glucose":114,"avgDelta":"-2.25","BGI":-1.9,"deviation":"-0.35"},{"device":"AndroidAPS-DexcomG6","date":1653184450000,"dateString":"2022-05-22T01:54:10.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628997d861a8290004740385","glucose":80,"avgDelta":"1.75","BGI":1.9,"deviation":"-0.15"},{"device":"AndroidAPS-DexcomG6","date":1653118149000,"dateString":"2022-05-21T07:29:09.000Z","isValid":true,"sgv":86,"direction":"Flat","type":"sgv","_id":"628894d37ff1e700040f17cd","glucose":86,"avgDelta":"2.50","BGI":2.63,"deviation":"-0.13"},{"device":"AndroidAPS-DexcomG6","date":1653163449000,"dateString":"2022-05-21T20:04:09.000Z","isValid":true,"sgv":95,"direction":"Flat","type":"sgv","_id":"628945dc4493460004e63a2a","glucose":95,"avgDelta":"1.50","BGI":1.51,"deviation":"-0.01"},{"device":"AndroidAPS-DexcomG6","date":1653183850000,"dateString":"2022-05-22T01:44:10.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6289957b61a829000474037f","glucose":79,"avgDelta":"1.25","BGI":1.12,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653116949000,"dateString":"2022-05-21T07:09:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"62889024149196000412bf57","glucose":76,"avgDelta":"1.50","BGI":1.47,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135249000,"dateString":"2022-05-21T12:14:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288d7ae0f1be700041e59de","glucose":79,"avgDelta":"0.00","BGI":-27.76,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135549000,"dateString":"2022-05-21T12:19:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d8e00f1be700041e59e0","glucose":78,"avgDelta":"0.50","BGI":-27.02,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137049000,"dateString":"2022-05-21T12:44:09.000Z","isValid":true,"sgv":69,"direction":"Flat","type":"sgv","_id":"6288df8a0f1be700041e59ec","glucose":69,"avgDelta":"-1.75","BGI":-20.95,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134349000,"dateString":"2022-05-21T11:59:09.000Z","isValid":true,"sgv":76,"direction":"FortyFiveDown","type":"sgv","_id":"6288d4220f1be700041e59d5","glucose":76,"avgDelta":"-9.50","BGI":-28.06,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135849000,"dateString":"2022-05-21T12:24:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6288d9fb0f1be700041e59e2","glucose":76,"avgDelta":"-0.25","BGI":-26.12,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137350000,"dateString":"2022-05-21T12:49:10.000Z","isValid":true,"sgv":72,"direction":"Flat","type":"sgv","_id":"6288dfd60f1be700041e59ee","glucose":72,"avgDelta":"-0.25","BGI":-19.52,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136149000,"dateString":"2022-05-21T12:29:09.000Z","isValid":true,"sgv":73,"direction":"Flat","type":"sgv","_id":"6288db8a0f1be700041e59e5","glucose":73,"avgDelta":"-1.25","BGI":-25,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137649000,"dateString":"2022-05-21T12:54:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288e1040f1be700041e59f0","glucose":79,"avgDelta":"2.25","BGI":-18.02,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136449000,"dateString":"2022-05-21T12:34:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"6288dd270f1be700041e59e8","glucose":70,"avgDelta":"-2.25","BGI":-23.7,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134649000,"dateString":"2022-05-21T12:04:09.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","_id":"6288d5500f1be700041e59d7","glucose":77,"avgDelta":"-6.00","BGI":-28.32,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134949000,"dateString":"2022-05-21T12:09:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d67f0f1be700041e59da","glucose":78,"avgDelta":"-2.25","BGI":-28.14,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136749000,"dateString":"2022-05-21T12:39:09.000Z","isValid":true,"sgv":68,"direction":"Flat","type":"sgv","_id":"6288de580f1be700041e59ea","glucose":68,"avgDelta":"-2.50","BGI":-22.37,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653117249000,"dateString":"2022-05-21T07:14:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"628891627ff1e700040f17c6","glucose":79,"avgDelta":"2.50","BGI":1.77,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134049000,"dateString":"2022-05-21T11:54:09.000Z","isValid":true,"sgv":79,"direction":"FortyFiveDown","type":"sgv","_id":"6288d3060f1be700041e59d2","glucose":79,"avgDelta":"-10.50","BGI":-27.28,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653130748000,"dateString":"2022-05-21T10:59:08.000Z","isValid":true,"sgv":84,"direction":"Flat","type":"sgv","_id":"6288c61a1991280004dce468","glucose":84,"avgDelta":"-2.50","BGI":-2.59,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653110049000,"dateString":"2022-05-21T05:14:09.000Z","isValid":true,"sgv":109,"direction":"FortyFiveDown","type":"sgv","_id":"62887549363e6c0004f710dc","glucose":109,"avgDelta":"-5.25","BGI":-5.34,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653117549000,"dateString":"2022-05-21T07:19:09.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628892907ff1e700040f17c7","glucose":80,"avgDelta":"2.50","BGI":2.11,"deviation":"0.39"},{"device":"AndroidAPS-DexcomG6","date":1653118449000,"dateString":"2022-05-21T07:34:09.000Z","isValid":true,"sgv":92,"direction":"Flat","type":"sgv","_id":"6288961d7ff1e700040f17ce","glucose":92,"avgDelta":"3.25","BGI":2.84,"deviation":"0.41"},{"device":"AndroidAPS-DexcomG6","date":1653184150000,"dateString":"2022-05-22T01:49:10.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628996a961a8290004740382","glucose":80,"avgDelta":"2.00","BGI":1.55,"deviation":"0.45"},{"device":"AndroidAPS-DexcomG6","date":1653131649000,"dateString":"2022-05-21T11:14:09.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"6288c99e8e9ed800049b39e8","glucose":89,"avgDelta":"0.25","BGI":-0.65,"deviation":"0.90"},{"device":"AndroidAPS-DexcomG6","date":1653118748000,"dateString":"2022-05-21T07:39:08.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628897357ff1e700040f17d3","glucose":97,"avgDelta":"4.25","BGI":3.06,"deviation":"1.19"},{"device":"AndroidAPS-DexcomG6","date":1653130448000,"dateString":"2022-05-21T10:54:08.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","_id":"6288c4ec1991280004dce464","glucose":88,"avgDelta":"-2.00","BGI":-3.36,"deviation":"1.36"},{"device":"AndroidAPS-DexcomG6","date":1653163749000,"dateString":"2022-05-21T20:09:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"6289470c4493460004e63a2d","glucose":100,"avgDelta":"3.00","BGI":1.55,"deviation":"1.45"},{"device":"AndroidAPS-DexcomG6","date":1653151149000,"dateString":"2022-05-21T16:39:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628915ce1090500004ca470c","glucose":158,"avgDelta":"-3.50","BGI":-5.09,"deviation":"1.59"},{"device":"AndroidAPS-DexcomG6","date":1653180250000,"dateString":"2022-05-22T00:44:10.000Z","isValid":true,"sgv":135,"direction":"Flat","type":"sgv","_id":"62898774da46aa0004d1e0f1","glucose":135,"avgDelta":"-1.75","BGI":-3.49,"deviation":"1.74"},{"device":"AndroidAPS-DexcomG6","date":1653151449000,"dateString":"2022-05-21T16:44:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628916f81090500004ca4710","glucose":158,"avgDelta":"-3.00","BGI":-4.74,"deviation":"1.74"},{"device":"AndroidAPS-DexcomG6","date":1653152649000,"dateString":"2022-05-21T17:04:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62891ba31090500004ca471d","glucose":149,"avgDelta":"-2.25","BGI":-4.35,"deviation":"2.10"},{"device":"AndroidAPS-DexcomG6","date":1653130149000,"dateString":"2022-05-21T10:49:09.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"6288c3be1991280004dce461","glucose":91,"avgDelta":"-2.00","BGI":-4.27,"deviation":"2.27"},{"device":"AndroidAPS-DexcomG6","date":1653107648000,"dateString":"2022-05-21T04:34:08.000Z","isValid":true,"sgv":132,"direction":"FortyFiveDown","type":"sgv","_id":"62886be719e2e60004989bb5","glucose":132,"avgDelta":"-5.75","BGI":-8.1,"deviation":"2.35"},{"device":"AndroidAPS-DexcomG6","date":1653150849000,"dateString":"2022-05-21T16:34:09.000Z","isValid":true,"sgv":161,"direction":"Flat","type":"sgv","_id":"628914d01090500004ca4709","glucose":161,"avgDelta":"-3.00","BGI":-5.47,"deviation":"2.47"},{"device":"AndroidAPS-DexcomG6","date":1653179350000,"dateString":"2022-05-22T00:29:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628983f69d6f1800047cd0dd","glucose":142,"avgDelta":"-1.75","BGI":-4.27,"deviation":"2.52"},{"device":"AndroidAPS-DexcomG6","date":1653179050000,"dateString":"2022-05-22T00:24:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628982c89d6f1800047cd0db","glucose":142,"avgDelta":"-1.75","BGI":-4.48,"deviation":"2.73"},{"device":"AndroidAPS-DexcomG6","date":1653156250000,"dateString":"2022-05-21T18:04:10.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"628929ac8809e60004c644e9","glucose":119,"avgDelta":"0.75","BGI":-2.07,"deviation":"2.82"},{"device":"AndroidAPS-DexcomG6","date":1653109748000,"dateString":"2022-05-21T05:09:08.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6288741c363e6c0004f710d9","glucose":117,"avgDelta":"-2.75","BGI":-5.73,"deviation":"2.98"},{"device":"AndroidAPS-DexcomG6","date":1653119049000,"dateString":"2022-05-21T07:44:09.000Z","isValid":true,"sgv":105,"direction":"FortyFiveUp","type":"sgv","_id":"628898627ff1e700040f17d5","glucose":105,"avgDelta":"5.75","BGI":2.76,"deviation":"2.99"},{"device":"AndroidAPS-DexcomG6","date":1653179649000,"dateString":"2022-05-22T00:34:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898517da46aa0004d1e0ea","glucose":143,"avgDelta":"-1.00","BGI":-4.01,"deviation":"3.01"},{"device":"AndroidAPS-DexcomG6","date":1653151749000,"dateString":"2022-05-21T16:49:09.000Z","isValid":true,"sgv":159,"direction":"Flat","type":"sgv","_id":"628918261090500004ca4714","glucose":159,"avgDelta":"-1.50","BGI":-4.53,"deviation":"3.03"},{"device":"AndroidAPS-DexcomG6","date":1653129848000,"dateString":"2022-05-21T10:44:08.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"6288c2911991280004dce45e","glucose":93,"avgDelta":"-2.00","BGI":-5.26,"deviation":"3.26"},{"device":"AndroidAPS-DexcomG6","date":1653173650000,"dateString":"2022-05-21T22:54:10.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289717d37d09a00043f2b1e","glucose":108,"avgDelta":"-4.00","BGI":-7.28,"deviation":"3.28"},{"device":"AndroidAPS-DexcomG6","date":1653173949000,"dateString":"2022-05-21T22:59:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289721437d09a00043f2b1f","glucose":108,"avgDelta":"-3.00","BGI":-6.42,"deviation":"3.42"},{"device":"AndroidAPS-DexcomG6","date":1653150549000,"dateString":"2022-05-21T16:29:09.000Z","isValid":true,"sgv":165,"direction":"Flat","type":"sgv","_id":"628913731090500004ca4706","glucose":165,"avgDelta":"-2.25","BGI":-5.73,"deviation":"3.48"},{"device":"AndroidAPS-DexcomG6","date":1653164049000,"dateString":"2022-05-21T20:14:09.000Z","isValid":true,"sgv":109,"direction":"Flat","type":"sgv","_id":"628948214493460004e63a31","glucose":109,"avgDelta":"5.00","BGI":1.51,"deviation":"3.49"},{"device":"AndroidAPS-DexcomG6","date":1653179949000,"dateString":"2022-05-22T00:39:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898645da46aa0004d1e0ee","glucose":143,"avgDelta":"-0.25","BGI":-3.75,"deviation":"3.50"},{"device":"AndroidAPS-DexcomG6","date":1653131948000,"dateString":"2022-05-21T11:19:08.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"6288cacb8e9ed800049b39ec","glucose":98,"avgDelta":"3.50","BGI":-0.3,"deviation":"3.80"},{"device":"AndroidAPS-DexcomG6","date":1653178750000,"dateString":"2022-05-22T00:19:10.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"628981999d6f1800047cd0d8","glucose":144,"avgDelta":"-0.75","BGI":-4.57,"deviation":"3.82"},{"device":"AndroidAPS-DexcomG6","date":1653129548000,"dateString":"2022-05-21T10:39:08.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288c1631991280004dce45b","glucose":94,"avgDelta":"-2.50","BGI":-6.38,"deviation":"3.88"},{"device":"AndroidAPS-DexcomG6","date":1653129249000,"dateString":"2022-05-21T10:34:09.000Z","isValid":true,"sgv":96,"direction":"Flat","type":"sgv","_id":"6288c0341991280004dce459","glucose":96,"avgDelta":"-3.50","BGI":-7.59,"deviation":"4.09"},{"device":"AndroidAPS-DexcomG6","date":1653152049000,"dateString":"2022-05-21T16:54:09.000Z","isValid":true,"sgv":160,"direction":"Flat","type":"sgv","_id":"628919531090500004ca4717","glucose":160,"avgDelta":"-0.25","BGI":-4.35,"deviation":"4.10"},{"device":"AndroidAPS-DexcomG6","date":1653152349000,"dateString":"2022-05-21T16:59:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"62891a811090500004ca471a","glucose":158,"avgDelta":"0.00","BGI":-4.35,"deviation":"4.35"},{"device":"AndroidAPS-DexcomG6","date":1653150249000,"dateString":"2022-05-21T16:24:09.000Z","isValid":true,"sgv":170,"direction":"Flat","type":"sgv","_id":"628913111090500004ca4704","glucose":170,"avgDelta":"-1.50","BGI":-5.95,"deviation":"4.45"},{"device":"AndroidAPS-DexcomG6","date":1653105549000,"dateString":"2022-05-21T03:59:09.000Z","isValid":true,"sgv":146,"direction":"FortyFiveDown","type":"sgv","_id":"628863a542c1220004f95730","glucose":146,"avgDelta":"-5.25","BGI":-9.87,"deviation":"4.62"},{"device":"AndroidAPS-DexcomG6","date":1653119349000,"dateString":"2022-05-21T07:49:09.000Z","isValid":true,"sgv":114,"direction":"FortyFiveUp","type":"sgv","_id":"628899957ff1e700040f17d7","glucose":114,"avgDelta":"7.00","BGI":2.37,"deviation":"4.63"},{"device":"AndroidAPS-DexcomG6","date":1653173350000,"dateString":"2022-05-21T22:49:10.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"62896fb837d09a00043f2b1b","glucose":110,"avgDelta":"-3.50","BGI":-8.15,"deviation":"4.65"},{"device":"AndroidAPS-DexcomG6","date":1653174249000,"dateString":"2022-05-21T23:04:09.000Z","isValid":true,"sgv":111,"direction":"Flat","type":"sgv","_id":"6289726037d09a00043f2b20","glucose":111,"avgDelta":"-1.00","BGI":-5.69,"deviation":"4.69"},{"device":"AndroidAPS-DexcomG6","date":1653178449000,"dateString":"2022-05-22T00:14:09.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"6289806a9d6f1800047cd0d6","glucose":147,"avgDelta":"0.25","BGI":-4.61,"deviation":"4.86"},{"device":"AndroidAPS-DexcomG6","date":1653128948000,"dateString":"2022-05-21T10:29:08.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"6288bf061991280004dce457","glucose":99,"avgDelta":"-4.00","BGI":-8.88,"deviation":"4.88"},{"device":"AndroidAPS-DexcomG6","date":1653103448000,"dateString":"2022-05-21T03:24:08.000Z","isValid":true,"sgv":174,"direction":"SingleDown","type":"sgv","_id":"62885b81293f3e00042c31d9","glucose":174,"avgDelta":"-10.50","BGI":-15.43,"deviation":"4.93"},{"device":"AndroidAPS-DexcomG6","date":1653149949000,"dateString":"2022-05-21T16:19:09.000Z","isValid":true,"sgv":172,"direction":"Flat","type":"sgv","_id":"6289130f1090500004ca46ff","glucose":172,"avgDelta":"-1.00","BGI":-6.12,"deviation":"5.12"},{"device":"AndroidAPS-DexcomG6","date":1653105848000,"dateString":"2022-05-21T04:04:08.000Z","isValid":true,"sgv":146,"direction":"Flat","type":"sgv","_id":"628864d342c1220004f95733","glucose":146,"avgDelta":"-4.00","BGI":-9.14,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653103149000,"dateString":"2022-05-21T03:19:09.000Z","isValid":true,"sgv":182,"direction":"SingleDown","type":"sgv","_id":"62885a52293f3e00042c31d7","glucose":182,"avgDelta":"-11.50","BGI":-16.64,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653105248000,"dateString":"2022-05-21T03:54:08.000Z","isValid":true,"sgv":149,"direction":"FortyFiveDown","type":"sgv","_id":"6288629042c1220004f9572e","glucose":149,"avgDelta":"-5.25","BGI":-10.56,"deviation":"5.31"},{"device":"AndroidAPS-DexcomG6","date":1653176050000,"dateString":"2022-05-21T23:34:10.000Z","isValid":true,"sgv":127,"direction":"Flat","type":"sgv","_id":"6289771371a363000480abc1","glucose":127,"avgDelta":"2.50","BGI":-2.93,"deviation":"5.43"},{"device":"AndroidAPS-DexcomG6","date":1653176350000,"dateString":"2022-05-21T23:39:10.000Z","isValid":true,"sgv":132,"direction":"Flat","type":"sgv","_id":"6289784271a363000480abc3","glucose":132,"avgDelta":"3.00","BGI":-2.67,"deviation":"5.67"},{"device":"AndroidAPS-DexcomG6","date":1653149650000,"dateString":"2022-05-21T16:14:10.000Z","isValid":true,"sgv":173,"direction":"Flat","type":"sgv","_id":"62890fff1090500004ca46fd","glucose":173,"avgDelta":"-0.75","BGI":-6.42,"deviation":"5.67"},{"device":"AndroidAPS-DexcomG6","date":1653175750000,"dateString":"2022-05-21T23:29:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"628975e471a363000480abbe","glucose":124,"avgDelta":"2.50","BGI":-3.19,"deviation":"5.69"},{"device":"AndroidAPS-DexcomG6","date":1653102848000,"dateString":"2022-05-21T03:14:08.000Z","isValid":true,"sgv":193,"direction":"SingleDown","type":"sgv","_id":"62885924293f3e00042c31d5","glucose":193,"avgDelta":"-12.00","BGI":-17.71,"deviation":"5.71"},{"device":"AndroidAPS-DexcomG6","date":1653128649000,"dateString":"2022-05-21T10:24:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6288bde0abbef90004616cf8","glucose":101,"avgDelta":"-4.50","BGI":-10.3,"deviation":"5.80"},{"device":"AndroidAPS-DexcomG6","date":1653164350000,"dateString":"2022-05-21T20:19:10.000Z","isValid":true,"sgv":120,"direction":"FortyFiveUp","type":"sgv","_id":"6289496a4493460004e63a34","glucose":120,"avgDelta":"7.25","BGI":1.34,"deviation":"5.91"},{"device":"AndroidAPS-DexcomG6","date":1653155950000,"dateString":"2022-05-21T17:59:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"6289287e8809e60004c644e6","glucose":123,"avgDelta":"3.75","BGI":-2.16,"deviation":"5.91"},{"device":"AndroidAPS-DexcomG6","date":1653174550000,"dateString":"2022-05-21T23:09:10.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"6289727937d09a00043f2b21","glucose":114,"avgDelta":"1.00","BGI":-4.96,"deviation":"5.96"},{"device":"AndroidAPS-DexcomG6","date":1653178149000,"dateString":"2022-05-22T00:09:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62897f3b9d6f1800047cd0d3","glucose":149,"avgDelta":"1.50","BGI":-4.48,"deviation":"5.98"},{"device":"AndroidAPS-DexcomG6","date":1653103748000,"dateString":"2022-05-21T03:29:08.000Z","isValid":true,"sgv":171,"direction":"FortyFiveDown","type":"sgv","_id":"62885c95293f3e00042c31db","glucose":171,"avgDelta":"-8.25","BGI":-14.31,"deviation":"6.06"},{"device":"AndroidAPS-DexcomG6","date":1653108848000,"dateString":"2022-05-21T04:54:08.000Z","isValid":true,"sgv":130,"direction":"Flat","type":"sgv","_id":"62887093363e6c0004f710cf","glucose":130,"avgDelta":"-0.50","BGI":-6.72,"deviation":"6.22","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653175450000,"dateString":"2022-05-21T23:24:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"628974b671a363000480abbc","glucose":123,"avgDelta":"3.00","BGI":-3.4,"deviation":"6.40"},{"device":"AndroidAPS-DexcomG6","date":1653107348000,"dateString":"2022-05-21T04:29:08.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"62886ab919e2e60004989bb3","glucose":144,"avgDelta":"-1.75","BGI":-8.19,"deviation":"6.44"},{"device":"AndroidAPS-DexcomG6","date":1653102548000,"dateString":"2022-05-21T03:09:08.000Z","isValid":true,"sgv":204,"direction":"SingleDown","type":"sgv","_id":"628857f7293f3e00042c31d3","glucose":204,"avgDelta":"-12.25","BGI":-18.79,"deviation":"6.54"},{"device":"AndroidAPS-DexcomG6","date":1653109448000,"dateString":"2022-05-21T05:04:08.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","_id":"628872ef363e6c0004f710d6","glucose":125,"avgDelta":"0.50","BGI":-6.08,"deviation":"6.58"},{"device":"AndroidAPS-DexcomG6","date":1653176650000,"dateString":"2022-05-21T23:44:10.000Z","isValid":true,"sgv":139,"direction":"Flat","type":"sgv","_id":"6289797071a363000480abc7","glucose":139,"avgDelta":"4.00","BGI":-2.59,"deviation":"6.59"},{"device":"AndroidAPS-DexcomG6","date":1653174850000,"dateString":"2022-05-21T23:14:10.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6289727a37d09a00043f2b22","glucose":117,"avgDelta":"2.25","BGI":-4.35,"deviation":"6.60"},{"device":"AndroidAPS-DexcomG6","date":1653149349000,"dateString":"2022-05-21T16:09:09.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","_id":"62890edacf7ee10004a2b1e2","glucose":174,"avgDelta":"0.00","BGI":-6.64,"deviation":"6.64"}]} diff --git a/app/src/test/res/autotune/test2/autotune.2022-06-25-111214.log b/app/src/test/res/autotune/test2/autotune.2022-06-25-111214.log new file mode 100644 index 0000000000..8fafb15fc4 --- /dev/null +++ b/app/src/test/res/autotune/test2/autotune.2022-06-25-111214.log @@ -0,0 +1,420 @@ +Autotune disk usage: +160K . +Overall disk used/avail: +Filesystem Size Used Avail Use% Mounted on +rootfs 930G 431G 500G 47% / +Grabbing AAPS treatments.json and entries/sgv.json for date range... +oref0-autotune-prep ns-treatments.2022-05-21.json profile.json ns-entries.2022-05-21.json profile.pump.json > autotune.2022-05-21.json +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -16.9 IOB: 5.249 Activity: 0.0391 at 04:24:08 dev: 26.10 avgDelta: 9.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -18.9 IOB: 5.292 Activity: 0.0438 at 04:29:08 dev: 27.88 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -20.3 IOB: 4.964 Activity: 0.047 at 04:34:09 dev: 24.01 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.1 IOB: 4.674 Activity: 0.0489 at 04:39:08 dev: 17.83 avgDelta: -3.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.5 IOB: 4.377 Activity: 0.0498 at 04:44:08 dev: 11.21 avgDelta: -10.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.5 IOB: 4.077 Activity: 0.0498 at 04:49:08 dev: 7.96 avgDelta: -13.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.2 IOB: 3.73 Activity: 0.0491 at 04:54:08 dev: 7.16 avgDelta: -14.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -20.5 IOB: 3.389 Activity: 0.0476 at 04:59:08 dev: 6.77 avgDelta: -13.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -19.7 IOB: 3.055 Activity: 0.0457 at 05:04:09 dev: 6.95 avgDelta: -12.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -18.8 IOB: 2.782 Activity: 0.0436 at 05:09:08 dev: 6.54 avgDelta: -12.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -17.7 IOB: 2.47 Activity: 0.0411 at 05:14:08 dev: 5.71 avgDelta: -12.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -16.6 IOB: 2.22 Activity: 0.0386 at 05:19:09 dev: 5.14 avgDelta: -11.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -15.4 IOB: 1.935 Activity: 0.0358 at 05:24:08 dev: 4.93 avgDelta: -10.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -14.3 IOB: 1.711 Activity: 0.0332 at 05:29:08 dev: 6.06 avgDelta: -8.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -13.1 IOB: 1.452 Activity: 0.0304 at 05:34:09 dev: 7.35 avgDelta: -5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -12.1 IOB: 1.927 Activity: 0.028 at 05:39:09 dev: 8.32 avgDelta: -3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -11.6 IOB: 1.84 Activity: 0.027 at 05:44:08 dev: 8.64 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -11.1 IOB: 1.658 Activity: 0.0258 at 05:49:09 dev: 7.12 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -10.6 IOB: 1.482 Activity: 0.0245 at 05:54:08 dev: 5.31 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -9.9 IOB: 1.264 Activity: 0.0229 at 05:59:09 dev: 4.62 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -9.1 IOB: 1.104 Activity: 0.0212 at 06:04:08 dev: 5.14 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.4 IOB: 0.952 Activity: 0.0194 at 06:09:09 dev: 7.36 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.8 IOB: 1.619 Activity: 0.0181 at 06:14:09 dev: 9.30 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.9 IOB: 1.678 Activity: 0.0184 at 06:19:09 dev: 10.68 avgDelta: 2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.1 IOB: 1.775 Activity: 0.0187 at 06:24:08 dev: 9.81 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.2 IOB: 1.581 Activity: 0.019 at 06:29:08 dev: 6.44 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.1 IOB: 1.437 Activity: 0.0188 at 06:34:08 dev: 2.35 avgDelta: -5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.9 IOB: 1.294 Activity: 0.0183 at 06:39:08 dev: -0.36 avgDelta: -8.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.6 IOB: 1.153 Activity: 0.0176 at 06:44:09 dev: 0.09 avgDelta: -7.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.2 IOB: 1.017 Activity: 0.0167 at 06:49:08 dev: 3.20 avgDelta: -4.00 ISF +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -6.7 IOB: 0.887 Activity: 0.0156 at 06:54:08 dev: 6.22 avgDelta: -0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -6.3 IOB: 1.011 Activity: 0.0147 at 06:59:08 dev: 7.59 avgDelta: 1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -6.1 IOB: 0.889 Activity: 0.0141 at 07:04:08 dev: 6.58 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -5.7 IOB: 0.771 Activity: 0.0133 at 07:09:08 dev: 2.98 avgDelta: -2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -5.3 IOB: 0.656 Activity: 0.0124 at 07:14:09 dev: 0.09 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -4.9 IOB: 0.547 Activity: 0.0114 at 07:19:08 dev: -1.84 avgDelta: -6.75 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -4.4 IOB: 0.392 Activity: 0.0103 at 07:24:09 dev: -2.31 avgDelta: -6.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.9 IOB: 0.294 Activity: 0.0091 at 07:29:09 dev: -1.08 avgDelta: -5.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.5 IOB: 0.2 Activity: 0.008 at 07:34:09 dev: 0.45 avgDelta: -3.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.8 IOB: 0.065 Activity: 0.0066 at 07:39:09 dev: 2.34 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.4 IOB: 0.034 Activity: 0.0055 at 07:44:09 dev: 3.37 avgDelta: 1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.1 IOB: 0.549 Activity: 0.0048 at 07:49:08 dev: 3.57 avgDelta: 1.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.3 IOB: 0.674 Activity: 0.0053 at 07:54:09 dev: 3.53 avgDelta: 1.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.5 IOB: 0.597 Activity: 0.0057 at 07:59:09 dev: 2.71 avgDelta: 0.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.5 IOB: 0.468 Activity: 0.0058 at 08:04:09 dev: 1.50 avgDelta: -1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.5 IOB: 0.389 Activity: 0.0057 at 08:09:09 dev: 0.21 avgDelta: -2.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.3 IOB: 0.262 Activity: 0.0053 at 08:14:09 dev: -0.47 avgDelta: -2.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.1 IOB: 0.186 Activity: 0.0048 at 08:19:09 dev: -0.93 avgDelta: -3.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.8 IOB: 0.064 Activity: 0.0041 at 08:24:09 dev: -1.48 avgDelta: -3.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.5 IOB: -0.005 Activity: 0.0034 at 08:29:09 dev: -2.03 avgDelta: -3.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.1 IOB: -0.12 Activity: 0.0026 at 08:34:09 dev: -2.13 avgDelta: -3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -0.8 IOB: -0.181 Activity: 0.0018 at 08:39:09 dev: -2.47 avgDelta: -3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -0.3 IOB: -0.287 Activity: 0.0008 at 08:44:09 dev: -2.41 avgDelta: -2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.0 IOB: -0.34 Activity: 0 at 08:49:09 dev: -2.50 avgDelta: -2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.4 IOB: -0.436 Activity: -0.001 at 08:54:09 dev: -2.68 avgDelta: -2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.8 IOB: -0.48 Activity: -0.0018 at 08:59:09 dev: -2.28 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.1 IOB: -0.519 Activity: -0.0026 at 09:04:09 dev: -1.12 avgDelta: 0.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.5 IOB: -0.554 Activity: -0.0034 at 09:09:09 dev: 0.00 avgDelta: 1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.8 IOB: -0.585 Activity: -0.0041 at 09:14:09 dev: 0.00 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.1 IOB: -0.662 Activity: -0.0049 at 09:19:09 dev: 0.39 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.4 IOB: -0.687 Activity: -0.0055 at 09:24:08 dev: -0.37 avgDelta: 2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.6 IOB: -0.708 Activity: -0.0061 at 09:29:09 dev: -0.13 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.8 IOB: -0.726 Activity: -0.0066 at 09:34:09 dev: 0.41 avgDelta: 3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 3.1 IOB: -0.351 Activity: -0.0071 at 09:39:08 dev: 1.19 avgDelta: 4.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.8 IOB: -0.218 Activity: -0.0064 at 09:44:09 dev: 2.99 avgDelta: 5.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.4 IOB: -0.088 Activity: -0.0055 at 09:49:09 dev: 4.63 avgDelta: 7.00 basal +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -1.0 IOB: 13.594 Activity: 0.0023 at 09:54:09 dev: 8.74 avgDelta: 7.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -14.3 IOB: 13.552 Activity: 0.0331 at 09:59:09 dev: 23.02 avgDelta: 8.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -24.7 IOB: 13.224 Activity: 0.0573 at 10:04:09 dev: 33.70 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -32.8 IOB: 12.838 Activity: 0.076 at 10:09:08 dev: 40.76 avgDelta: 8.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -38.8 IOB: 12.322 Activity: 0.09 at 10:14:09 dev: 45.04 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -43.1 IOB: 11.794 Activity: 0.1001 at 10:19:09 dev: 46.89 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -46.0 IOB: 11.177 Activity: 0.1068 at 10:24:09 dev: 47.03 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -47.8 IOB: 10.58 Activity: 0.111 at 10:29:09 dev: 45.84 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -48.7 IOB: 9.919 Activity: 0.1129 at 10:34:09 dev: 43.66 avgDelta: -5.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -48.7 IOB: 9.254 Activity: 0.1129 at 10:39:09 dev: 41.41 avgDelta: -7.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -48.0 IOB: 8.643 Activity: 0.1114 at 10:44:09 dev: 39.51 avgDelta: -8.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -46.9 IOB: 7.992 Activity: 0.1088 at 10:49:09 dev: 39.39 avgDelta: -7.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -45.4 IOB: 7.406 Activity: 0.1053 at 10:54:08 dev: 40.13 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -43.6 IOB: 7.111 Activity: 0.1012 at 10:59:09 dev: 41.37 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -41.9 IOB: 6.515 Activity: 0.0971 at 11:04:09 dev: 42.35 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -40.0 IOB: 5.99 Activity: 0.0927 at 11:09:09 dev: 42.70 avgDelta: 2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -37.8 IOB: 5.439 Activity: 0.0878 at 11:14:08 dev: 42.09 avgDelta: 4.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -35.7 IOB: 4.962 Activity: 0.0828 at 11:19:09 dev: 39.69 avgDelta: 4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -33.4 IOB: 4.462 Activity: 0.0775 at 11:24:08 dev: 35.65 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -31.2 IOB: 4.036 Activity: 0.0724 at 11:29:09 dev: 31.45 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -29.0 IOB: 3.638 Activity: 0.0672 at 11:34:09 dev: 27.46 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -26.8 IOB: 3.214 Activity: 0.0621 at 11:39:08 dev: 25.02 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -24.6 IOB: 2.866 Activity: 0.0571 at 11:44:09 dev: 23.61 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -22.5 IOB: 2.494 Activity: 0.0522 at 11:49:09 dev: 21.75 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -20.5 IOB: 2.193 Activity: 0.0476 at 11:54:09 dev: 20.52 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -18.6 IOB: 1.867 Activity: 0.0431 at 11:59:09 dev: 18.83 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -16.7 IOB: 1.563 Activity: 0.0388 at 12:04:09 dev: 16.97 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -15.0 IOB: 1.329 Activity: 0.0347 at 12:09:08 dev: 14.46 avgDelta: -0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -13.3 IOB: 1.115 Activity: 0.0309 at 12:14:09 dev: 11.32 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -11.7 IOB: 0.87 Activity: 0.0272 at 12:19:09 dev: 7.97 avgDelta: -3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -10.3 IOB: 0.692 Activity: 0.0239 at 12:24:09 dev: 5.80 avgDelta: -4.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -8.9 IOB: 0.482 Activity: 0.0206 at 12:29:08 dev: 4.88 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -7.6 IOB: 0.287 Activity: 0.0176 at 12:34:09 dev: 4.09 avgDelta: -3.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -6.4 IOB: 0.156 Activity: 0.0148 at 12:39:08 dev: 3.88 avgDelta: -2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -5.3 IOB: 0.038 Activity: 0.0122 at 12:44:08 dev: 3.26 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -4.3 IOB: -0.067 Activity: 0.0099 at 12:49:09 dev: 2.27 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -3.4 IOB: -0.161 Activity: 0.0078 at 12:54:08 dev: 1.36 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -2.6 IOB: -0.195 Activity: 0.006 at 12:59:08 dev: 0.09 avgDelta: -2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -1.9 IOB: -0.271 Activity: 0.0044 at 13:04:09 dev: -1.10 avgDelta: -3.00 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -1.3 IOB: -0.339 Activity: 0.0029 at 13:09:09 dev: -1.00 avgDelta: -2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -0.7 IOB: -0.4 Activity: 0.0015 at 13:14:09 dev: 0.90 avgDelta: 0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -0.3 IOB: -0.155 Activity: 0.0007 at 13:19:08 dev: 3.80 avgDelta: 3.50 basal +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -1.9 IOB: 8.11 Activity: 0.0045 at 13:24:09 dev: 8.94 avgDelta: 7.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -9.6 IOB: 7.992 Activity: 0.0222 at 13:29:09 dev: 18.57 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -15.5 IOB: 7.745 Activity: 0.0359 at 13:34:09 dev: 23.47 avgDelta: 8.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -20.0 IOB: 7.488 Activity: 0.0465 at 13:39:09 dev: 24.04 avgDelta: 4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -23.3 IOB: 7.136 Activity: 0.0541 at 13:44:09 dev: 21.32 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -25.7 IOB: 6.8 Activity: 0.0596 at 13:49:09 dev: 17.94 avgDelta: -7.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -27.3 IOB: 6.441 Activity: 0.0633 at 13:54:09 dev: 0.00 avgDelta: -10.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -28.1 IOB: 6.022 Activity: 0.0651 at 13:59:09 dev: 0.00 avgDelta: -9.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -28.3 IOB: 5.644 Activity: 0.0657 at 14:04:09 dev: 0.00 avgDelta: -6.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -28.1 IOB: 5.216 Activity: 0.0653 at 14:09:09 dev: 0.00 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -27.8 IOB: 4.962 Activity: 0.0644 at 14:14:09 dev: 0.00 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -27.0 IOB: 4.544 Activity: 0.0627 at 14:19:09 dev: 0.00 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -26.1 IOB: 4.185 Activity: 0.0606 at 14:24:09 dev: 0.00 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -25.0 IOB: 3.839 Activity: 0.058 at 14:29:09 dev: 0.00 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -23.7 IOB: 3.456 Activity: 0.055 at 14:34:09 dev: 0.00 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -22.4 IOB: 3.139 Activity: 0.0519 at 14:39:09 dev: 0.00 avgDelta: -2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -20.9 IOB: 2.788 Activity: 0.0486 at 14:44:09 dev: 0.00 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -19.5 IOB: 2.503 Activity: 0.0453 at 14:49:10 dev: 0.00 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -18.0 IOB: 2.186 Activity: 0.0418 at 14:54:09 dev: 0.00 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -17.5 IOB: 3.17 Activity: 0.0407 at 14:59:09 dev: 22.04 avgDelta: 4.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -17.8 IOB: 3.956 Activity: 0.0413 at 15:04:09 dev: 23.80 avgDelta: 6.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.1 IOB: 3.648 Activity: 0.042 at 15:09:09 dev: 23.85 avgDelta: 5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.5 IOB: 4.126 Activity: 0.043 at 15:14:09 dev: 22.28 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.8 IOB: 3.81 Activity: 0.0437 at 15:19:10 dev: 20.58 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.8 IOB: 3.541 Activity: 0.0437 at 15:24:10 dev: 19.08 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.6 IOB: 3.272 Activity: 0.0431 at 15:29:09 dev: 19.33 avgDelta: 0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.4 IOB: 3.588 Activity: 0.0428 at 15:34:09 dev: 21.20 avgDelta: 2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.6 IOB: 3.875 Activity: 0.0431 at 15:39:09 dev: 23.83 avgDelta: 5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.7 IOB: 3.608 Activity: 0.0434 at 15:44:08 dev: 25.46 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -19.1 IOB: 4.271 Activity: 0.0442 at 15:49:09 dev: 26.05 avgDelta: 7.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -19.5 IOB: 3.996 Activity: 0.0452 at 15:54:09 dev: 25.98 avgDelta: 6.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -19.9 IOB: 4.298 Activity: 0.0462 at 15:59:08 dev: 26.16 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.2 IOB: 4.015 Activity: 0.0468 at 16:04:09 dev: 26.67 avgDelta: 6.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.7 IOB: 4.538 Activity: 0.0481 at 16:09:09 dev: 27.98 avgDelta: 7.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.1 IOB: 4.245 Activity: 0.0489 at 16:14:09 dev: 28.33 avgDelta: 7.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.6 IOB: 4.729 Activity: 0.05 at 16:19:09 dev: 28.30 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.9 IOB: 4.426 Activity: 0.0508 at 16:24:09 dev: 28.64 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -22.0 IOB: 4.353 Activity: 0.051 at 16:29:09 dev: 28.73 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.9 IOB: 4.049 Activity: 0.0507 at 16:34:10 dev: 28.10 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.5 IOB: 3.747 Activity: 0.0498 at 16:39:09 dev: 25.96 avgDelta: 4.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.8 IOB: 3.402 Activity: 0.0483 at 16:44:09 dev: 22.32 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.0 IOB: 3.115 Activity: 0.0464 at 16:49:10 dev: 19.00 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -19.0 IOB: 2.788 Activity: 0.0441 at 16:54:09 dev: 17.01 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -18.0 IOB: 2.524 Activity: 0.0417 at 16:59:09 dev: 15.97 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -16.9 IOB: 2.271 Activity: 0.0391 at 17:04:09 dev: 16.10 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -15.7 IOB: 2.033 Activity: 0.0365 at 17:09:10 dev: 15.48 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -14.6 IOB: 1.807 Activity: 0.0338 at 17:14:10 dev: 14.57 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -13.4 IOB: 1.594 Activity: 0.0312 at 17:19:09 dev: 13.70 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -12.3 IOB: 1.395 Activity: 0.0286 at 17:24:10 dev: 12.58 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -11.3 IOB: 1.258 Activity: 0.0262 at 17:29:09 dev: 11.54 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -10.2 IOB: 1.034 Activity: 0.0236 at 17:34:09 dev: 10.17 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -9.3 IOB: 0.971 Activity: 0.0215 at 17:39:09 dev: 9.02 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -8.5 IOB: 1.008 Activity: 0.0197 at 17:44:09 dev: 7.74 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -7.9 IOB: 0.963 Activity: 0.0183 at 17:49:09 dev: 6.89 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -7.4 IOB: 1.046 Activity: 0.0171 at 17:54:10 dev: 7.12 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.9 IOB: 0.912 Activity: 0.0161 at 17:59:09 dev: 6.94 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.7 IOB: 1.254 Activity: 0.0156 at 18:04:09 dev: 6.97 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.6 IOB: 1.176 Activity: 0.0154 at 18:09:09 dev: 6.64 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.4 IOB: 1.051 Activity: 0.0149 at 18:14:10 dev: 5.67 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.1 IOB: 0.928 Activity: 0.0142 at 18:19:09 dev: 5.12 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.0 IOB: 1.008 Activity: 0.0138 at 18:24:09 dev: 4.45 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -5.7 IOB: 0.89 Activity: 0.0133 at 18:29:09 dev: 3.48 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -5.5 IOB: 0.775 Activity: 0.0127 at 18:34:09 dev: 2.47 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -5.1 IOB: 0.664 Activity: 0.0118 at 18:39:09 dev: 1.59 avgDelta: -3.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.7 IOB: 0.606 Activity: 0.011 at 18:44:09 dev: 1.74 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.5 IOB: 0.703 Activity: 0.0105 at 18:49:09 dev: 3.03 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.3 IOB: 0.702 Activity: 0.0101 at 18:54:09 dev: 4.10 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.3 IOB: 0.902 Activity: 0.0101 at 18:59:09 dev: 4.35 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -4.3 IOB: 0.801 Activity: 0.0101 at 19:04:09 dev: 2.10 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -4.2 IOB: 0.701 Activity: 0.0098 at 19:09:09 dev: -1.03 avgDelta: -5.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -4.0 IOB: 0.603 Activity: 0.0094 at 19:14:09 dev: -4.95 avgDelta: -9.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -3.8 IOB: 0.508 Activity: 0.0088 at 19:19:09 dev: -8.21 avgDelta: -12.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -3.5 IOB: 0.415 Activity: 0.0081 at 19:24:09 dev: -9.76 avgDelta: -13.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -3.2 IOB: 0.327 Activity: 0.0074 at 19:29:09 dev: -8.06 avgDelta: -11.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.8 IOB: 0.242 Activity: 0.0066 at 19:34:09 dev: -3.91 avgDelta: -6.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.5 IOB: 0.161 Activity: 0.0058 at 19:39:09 dev: 2.00 avgDelta: -0.50 ISF +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.2 IOB: 0.134 Activity: 0.005 at 19:44:09 dev: 7.16 avgDelta: 5.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.1 IOB: 0.4 Activity: 0.0048 at 19:49:09 dev: 9.57 avgDelta: 7.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.1 IOB: 0.475 Activity: 0.0049 at 19:54:09 dev: 8.86 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.2 IOB: 0.401 Activity: 0.005 at 19:59:10 dev: 5.91 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.1 IOB: 0.327 Activity: 0.0048 at 20:04:10 dev: 2.82 avgDelta: 0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.9 IOB: 0.203 Activity: 0.0044 at 20:09:09 dev: -0.35 avgDelta: -2.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.7 IOB: 0.132 Activity: 0.004 at 20:14:09 dev: -1.78 avgDelta: -3.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.5 IOB: 0.064 Activity: 0.0034 at 20:19:09 dev: -2.28 avgDelta: -3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.2 IOB: -0.002 Activity: 0.0028 at 20:24:09 dev: -1.54 avgDelta: -2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.9 IOB: -0.064 Activity: 0.0022 at 20:29:10 dev: -1.05 avgDelta: -2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.7 IOB: -0.073 Activity: 0.0016 at 20:34:09 dev: -0.81 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.5 IOB: -0.08 Activity: 0.0011 at 20:39:09 dev: -1.03 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.3 IOB: -0.085 Activity: 0.0007 at 20:44:09 dev: -1.45 avgDelta: -1.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.2 IOB: -0.087 Activity: 0.0004 at 20:49:09 dev: -1.33 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.0 IOB: -0.088 Activity: 0.0001 at 20:54:09 dev: -1.21 avgDelta: -1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 0.0 IOB: -0.088 Activity: -0.0001 at 20:59:09 dev: -0.79 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.2 IOB: -0.137 Activity: -0.0004 at 21:04:09 dev: -0.92 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.3 IOB: -0.184 Activity: -0.0007 at 21:09:10 dev: -0.80 avgDelta: -0.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.4 IOB: -0.18 Activity: -0.001 at 21:14:09 dev: -0.68 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.5 IOB: -0.175 Activity: -0.0012 at 21:19:09 dev: -1.02 avgDelta: -0.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.6 IOB: -0.168 Activity: -0.0014 at 21:24:09 dev: -1.35 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.7 IOB: -0.211 Activity: -0.0015 at 21:29:10 dev: -1.65 avgDelta: -1.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.7 IOB: -0.203 Activity: -0.0017 at 21:34:09 dev: -1.98 avgDelta: -1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.9 IOB: -0.243 Activity: -0.002 at 21:39:10 dev: -2.36 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.0 IOB: -0.282 Activity: -0.0023 at 21:44:10 dev: -2.49 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.1 IOB: -0.32 Activity: -0.0026 at 21:49:09 dev: -2.62 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.3 IOB: -0.357 Activity: -0.0029 at 21:54:10 dev: -2.25 avgDelta: -1.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.4 IOB: -0.391 Activity: -0.0032 at 21:59:10 dev: -1.38 avgDelta: 0.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.5 IOB: -0.375 Activity: -0.0035 at 22:04:09 dev: -0.01 avgDelta: 1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.6 IOB: -0.357 Activity: -0.0036 at 22:09:09 dev: 1.45 avgDelta: 3.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.5 IOB: -0.149 Activity: -0.0035 at 22:14:09 dev: 3.49 avgDelta: 5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.3 IOB: -0.132 Activity: -0.0031 at 22:19:10 dev: 5.91 avgDelta: 7.25 basal +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -6.5 IOB: 9.296 Activity: 0.015 at 22:24:09 dev: 15.96 avgDelta: 9.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -14.3 IOB: 9.123 Activity: 0.0332 at 22:29:10 dev: 25.06 avgDelta: 10.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -20.4 IOB: 8.96 Activity: 0.0474 at 22:34:09 dev: 29.43 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -25.2 IOB: 8.644 Activity: 0.0584 at 22:39:10 dev: 29.92 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -28.6 IOB: 8.282 Activity: 0.0664 at 22:44:10 dev: 27.37 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -30.9 IOB: 7.835 Activity: 0.0718 at 22:49:09 dev: 24.70 avgDelta: -6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -32.5 IOB: 7.416 Activity: 0.0753 at 22:54:10 dev: 23.70 avgDelta: -8.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -33.3 IOB: 6.984 Activity: 0.0772 at 22:59:09 dev: 24.52 avgDelta: -8.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -33.5 IOB: 6.547 Activity: 0.0776 at 23:04:09 dev: 26.70 avgDelta: -6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -33.1 IOB: 6.061 Activity: 0.0769 at 23:09:10 dev: 28.39 avgDelta: -4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -32.5 IOB: 5.68 Activity: 0.0754 at 23:14:10 dev: 29.50 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -31.6 IOB: 5.458 Activity: 0.0734 at 23:19:09 dev: 30.14 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -30.7 IOB: 5.046 Activity: 0.0712 at 23:24:10 dev: 29.94 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -29.7 IOB: 4.925 Activity: 0.069 at 23:29:09 dev: 29.49 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -28.6 IOB: 4.487 Activity: 0.0663 at 23:34:09 dev: 29.08 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -27.3 IOB: 4.113 Activity: 0.0633 at 23:39:10 dev: 28.28 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -25.8 IOB: 3.706 Activity: 0.0599 at 23:44:09 dev: 27.57 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -24.4 IOB: 3.363 Activity: 0.0566 at 23:49:09 dev: 26.64 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -22.8 IOB: 3.039 Activity: 0.053 at 23:54:09 dev: 25.34 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -21.3 IOB: 2.733 Activity: 0.0494 at 23:59:10 dev: 23.79 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -19.7 IOB: 2.395 Activity: 0.0457 at 00:04:10 dev: 22.20 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -18.1 IOB: 2.126 Activity: 0.0421 at 00:09:10 dev: 20.65 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -16.6 IOB: 1.824 Activity: 0.0385 at 00:14:10 dev: 18.59 avgDelta: 2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -15.1 IOB: 1.64 Activity: 0.0351 at 00:19:09 dev: 17.13 avgDelta: 2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -13.8 IOB: 1.473 Activity: 0.0319 at 00:24:09 dev: 15.50 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -12.4 IOB: 1.273 Activity: 0.0288 at 00:29:10 dev: 14.16 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -11.2 IOB: 1.136 Activity: 0.026 at 00:34:10 dev: 12.71 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -10.1 IOB: 1.011 Activity: 0.0235 at 00:39:09 dev: 10.13 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -9.1 IOB: 0.852 Activity: 0.021 at 00:44:10 dev: 7.30 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -8.2 IOB: 0.752 Activity: 0.0189 at 00:49:10 dev: 4.65 avgDelta: -3.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -7.3 IOB: 0.662 Activity: 0.0169 at 00:54:10 dev: 3.28 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -6.4 IOB: 0.534 Activity: 0.0149 at 00:59:09 dev: 3.42 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -5.7 IOB: 0.463 Activity: 0.0132 at 01:04:09 dev: 4.69 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -5.0 IOB: 0.352 Activity: 0.0115 at 01:09:10 dev: 5.96 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.3 IOB: 0.298 Activity: 0.0101 at 01:14:10 dev: 6.60 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 0.25 Activity: 0.0089 at 01:19:09 dev: 6.84 avgDelta: 3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.4 IOB: 0.329 Activity: 0.0079 at 01:24:10 dev: 6.40 avgDelta: 3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.2 IOB: 0.34 Activity: 0.0074 at 01:29:10 dev: 5.69 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.9 IOB: 0.304 Activity: 0.0068 at 01:34:10 dev: 5.43 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.7 IOB: 0.272 Activity: 0.0062 at 01:39:10 dev: 5.67 avgDelta: 3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.6 IOB: 0.512 Activity: 0.006 at 01:44:10 dev: 6.59 avgDelta: 4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.6 IOB: 0.581 Activity: 0.0061 at 01:49:10 dev: 7.38 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.2 IOB: 1.238 Activity: 0.0075 at 01:54:10 dev: 7.98 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 1.147 Activity: 0.0088 at 01:59:10 dev: 7.54 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.2 IOB: 1.151 Activity: 0.0098 at 02:04:10 dev: 6.72 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.5 IOB: 1.05 Activity: 0.0104 at 02:09:09 dev: 5.98 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.6 IOB: 0.947 Activity: 0.0107 at 02:14:09 dev: 4.86 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.6 IOB: 0.844 Activity: 0.0106 at 02:19:10 dev: 3.82 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.5 IOB: 0.741 Activity: 0.0104 at 02:24:10 dev: 2.73 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.3 IOB: 0.59 Activity: 0.0099 at 02:29:10 dev: 2.52 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.0 IOB: 0.542 Activity: 0.0093 at 02:34:09 dev: 3.01 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 0.497 Activity: 0.0087 at 02:39:09 dev: 3.50 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.5 IOB: 0.456 Activity: 0.0081 at 02:44:10 dev: 1.74 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.3 IOB: 0.516 Activity: 0.0077 at 02:49:09 dev: -1.93 avgDelta: -5.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.1 IOB: 0.429 Activity: 0.0072 at 02:54:09 dev: -6.40 avgDelta: -9.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.8 IOB: 0.294 Activity: 0.0066 at 02:59:10 dev: -8.66 avgDelta: -11.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -2.5 IOB: 0.163 Activity: 0.0058 at 03:04:10 dev: -8.25 avgDelta: -10.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -2.1 IOB: 0.037 Activity: 0.0049 at 03:09:10 dev: -6.39 avgDelta: -8.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -1.7 IOB: -0.085 Activity: 0.0039 at 03:14:10 dev: -4.32 avgDelta: -6.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -1.3 IOB: -0.153 Activity: 0.0029 at 03:19:09 dev: -3.75 avgDelta: -5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -0.8 IOB: -0.265 Activity: 0.0018 at 03:24:10 dev: -3.72 avgDelta: -4.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -0.3 IOB: -0.371 Activity: 0.0007 at 03:29:09 dev: -3.45 avgDelta: -3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 0.2 IOB: -0.471 Activity: -0.0005 at 03:34:09 dev: -2.22 avgDelta: -2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 0.7 IOB: -0.566 Activity: -0.0016 at 03:39:10 dev: -0.94 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.1 IOB: -0.606 Activity: -0.0026 at 03:44:10 dev: 0.00 avgDelta: 1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.6 IOB: -0.64 Activity: -0.0036 at 03:49:10 dev: 0.45 avgDelta: 2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.9 IOB: -0.67 Activity: -0.0044 at 03:54:10 dev: -0.15 avgDelta: 1.75 basal +Warning: too many deviations categorized as UnAnnounced Meals +Adding 203 UAM deviations to 54 basal ones +and selecting the lowest 50%, leaving 128 basal+UAM ones +Adding 203 UAM deviations to 26 ISF ones +and selecting the lowest 50%, leaving 114 ISF+UAM ones +oref0-autotune-core autotune.2022-05-21.json profile.json profile.pump.json > newprofile.2022-05-21.json +CRTotalCarbs: 0 CRTotalInsulin: 0 totalCR: NaN +Hour 0 total deviations: 11.35 mg/dL +Hour 0 basal adjustment needed: 0.03 U/hr +Hour 1 total deviations: 47.03 mg/dL +Hour 1 basal adjustment needed: 0.11 U/hr +Hour 2 total deviations: 26.23 mg/dL +Hour 2 basal adjustment needed: 0.06 U/hr +Hour 3 total deviations: -18.1 mg/dL +Hour 3 basal adjustment needed: -0.04 U/hr +Hour 4 total deviations: 0 mg/dL +Hour 4 basal adjustment needed: 0 U/hr +Hour 5 total deviations: 38.31 mg/dL +Hour 5 basal adjustment needed: 0.09 U/hr +Hour 6 total deviations: 19.79 mg/dL +Hour 6 basal adjustment needed: 0.05 U/hr +Hour 7 total deviations: 7.81 mg/dL +Hour 7 basal adjustment needed: 0.02 U/hr +Hour 8 total deviations: -16.5 mg/dL +Hour 8 basal adjustment needed: -0.04 U/hr +Hour 9 total deviations: 7.99 mg/dL +Hour 9 basal adjustment needed: 0.02 U/hr +Hour 10 total deviations: 0 mg/dL +Hour 10 basal adjustment needed: 0 U/hr +Hour 11 total deviations: 0 mg/dL +Hour 11 basal adjustment needed: 0 U/hr +Hour 12 total deviations: 25.63 mg/dL +Hour 12 basal adjustment needed: 0.06 U/hr +Hour 13 total deviations: 2.6 mg/dL +Hour 13 basal adjustment needed: 0.01 U/hr +Hour 14 total deviations: 0 mg/dL +Hour 14 basal adjustment needed: 0 U/hr +Hour 15 total deviations: 0 mg/dL +Hour 15 basal adjustment needed: 0 U/hr +Hour 16 total deviations: 0 mg/dL +Hour 16 basal adjustment needed: 0 U/hr +Hour 17 total deviations: 0 mg/dL +Hour 17 basal adjustment needed: 0 U/hr +Hour 18 total deviations: 42.64 mg/dL +Hour 18 basal adjustment needed: 0.1 U/hr +Hour 19 total deviations: 6.98 mg/dL +Hour 19 basal adjustment needed: 0.02 U/hr +Hour 20 total deviations: -9.02 mg/dL +Hour 20 basal adjustment needed: -0.02 U/hr +Hour 21 total deviations: -19.5 mg/dL +Hour 21 basal adjustment needed: -0.05 U/hr +Hour 22 total deviations: 10.84 mg/dL +Hour 22 basal adjustment needed: 0.03 U/hr +Hour 23 total deviations: 0 mg/dL +Hour 23 basal adjustment needed: 0 U/hr +Adjusting hour 13 basal from 0.874 to 0.876 based on hour 12 = 0.885 and hour 15 = 0.881 +Adjusting hour 14 basal from 0.866 to 0.869 based on hour 12 = 0.885 and hour 15 = 0.881 +[ { start: '00:00:00', minutes: 0, rate: 1.009, i: 0 }, + { start: '01:00:00', minutes: 60, rate: 0.984, i: 1 }, + { start: '02:00:00', minutes: 120, rate: 0.988, i: 2 }, + { start: '03:00:00', minutes: 180, rate: 1.158, i: 3 }, + { start: '04:00:00', minutes: 240, rate: 1.028, i: 4 }, + { start: '05:00:00', minutes: 300, rate: 0.933, i: 5 }, + { start: '06:00:00', minutes: 360, rate: 0.824, i: 6 }, + { start: '07:00:00', minutes: 420, rate: 0.849, i: 7 }, + { start: '08:00:00', minutes: 480, rate: 0.909, i: 8 }, + { start: '09:00:00', minutes: 540, rate: 0.954, i: 9 }, + { start: '10:00:00', minutes: 600, rate: 0.961, i: 10 }, + { start: '11:00:00', minutes: 660, rate: 0.926, i: 11 }, + { start: '12:00:00', minutes: 720, rate: 0.885, i: 12 }, + { start: '13:00:00', minutes: 780, rate: 0.876, i: 13, untuned: 1 }, + { start: '14:00:00', minutes: 840, rate: 0.869, i: 14, untuned: 1 }, + { start: '15:00:00', minutes: 900, rate: 0.881, i: 15 }, + { start: '16:00:00', minutes: 960, rate: 0.798, i: 16 }, + { start: '17:00:00', minutes: 1020, rate: 0.683, i: 17 }, + { start: '18:00:00', minutes: 1080, rate: 0.634, i: 18 }, + { start: '19:00:00', minutes: 1140, rate: 0.725, i: 19 }, + { start: '20:00:00', minutes: 1200, rate: 0.838, i: 20 }, + { start: '21:00:00', minutes: 1260, rate: 0.881, i: 21 }, + { start: '22:00:00', minutes: 1320, rate: 0.91, i: 22 }, + { start: '23:00:00', minutes: 1380, rate: 0.91, i: 23 } ] +totalMealCarbs: 0 totalDeviations: 0 oldCSF 14.991 fullNewCSF: 14.991304347826087 newCSF: 14.991 +oldCR: 5.75 fullNewCR: NaN newCR: NaN +Limiting adjusted ISF of 43.19 to 66.31 (which is pump ISF of 86.2 / 1.3 ) +p50deviation: 3.2 p50BGI -4.96 p50ratios: 0.501 Old ISF: 86.2 fullNewISF: 43.186 adjustedISF: 66.308 newISF: 82.222 newDIA: 6 newPeak: 45 + +Autotune pump profile recommendations: +--------------------------------------------------------- +Recommendations Log File: /home/titi/aaps/autotune/aapsorefautotune_recommendations.log + +Parameter | Pump | Autotune | Days Missing +--------------------------------------------------------- +ISF [mg/dL/U] | 86.200 | 82.222 | +Carb Ratio[g/U]| 5.750 | 5.750 | + 00:00 | 0.966 | 1.009 | 0 + 01:00 | 0.977 | 0.984 | 0 + 02:00 | 0.971 | 0.988 | 0 + 03:00 | 1.111 | 1.158 | 0 + 04:00 | 0.974 | 1.028 | 0 + 05:00 | 0.923 | 0.933 | 0 + 06:00 | 0.823 | 0.824 | 0 + 07:00 | 0.855 | 0.849 | 0 + 08:00 | 0.902 | 0.909 | 0 + 09:00 | 0.934 | 0.954 | 0 + 10:00 | 0.938 | 0.961 | 0 + 11:00 | 0.903 | 0.926 | 0 + 12:00 | 0.882 | 0.885 | 0 + 13:00 | 0.874 | 0.876 | 1 + 14:00 | 0.866 | 0.869 | 1 + 15:00 | 0.848 | 0.881 | 0 + 16:00 | 0.758 | 0.798 | 0 + 17:00 | 0.650 | 0.683 | 0 + 18:00 | 0.648 | 0.634 | 0 + 19:00 | 0.738 | 0.725 | 0 + 20:00 | 0.847 | 0.838 | 0 + 21:00 | 0.861 | 0.881 | 0 + 22:00 | 0.863 | 0.910 | 0 + 23:00 | 0.843 | 0.910 | 0 diff --git a/app/src/test/res/autotune/test2/newaapsorefprofile.2022-05-21.json b/app/src/test/res/autotune/test2/newaapsorefprofile.2022-05-21.json new file mode 100644 index 0000000000..ad7b75b70c --- /dev/null +++ b/app/src/test/res/autotune/test2/newaapsorefprofile.2022-05-21.json @@ -0,0 +1,175 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 1.009, + "start": "00:00:00" + }, + { + "i": 1, + "minutes": 60, + "rate": 0.984, + "start": "01:00:00" + }, + { + "i": 2, + "minutes": 120, + "rate": 0.988, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.158, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 1.028, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.933, + "start": "05:00:00" + }, + { + "i": 6, + "minutes": 360, + "rate": 0.824, + "start": "06:00:00" + }, + { + "i": 7, + "minutes": 420, + "rate": 0.849, + "start": "07:00:00" + }, + { + "i": 8, + "minutes": 480, + "rate": 0.909, + "start": "08:00:00" + }, + { + "i": 9, + "minutes": 540, + "rate": 0.954, + "start": "09:00:00" + }, + { + "i": 10, + "minutes": 600, + "rate": 0.961, + "start": "10:00:00" + }, + { + "i": 11, + "minutes": 660, + "rate": 0.926, + "start": "11:00:00" + }, + { + "i": 12, + "minutes": 720, + "rate": 0.885, + "start": "12:00:00" + }, + { + "i": 13, + "minutes": 780, + "rate": 0.876, + "start": "13:00:00", + "untuned": 1 + }, + { + "i": 14, + "minutes": 840, + "rate": 0.869, + "start": "14:00:00", + "untuned": 1 + }, + { + "i": 15, + "minutes": 900, + "rate": 0.881, + "start": "15:00:00" + }, + { + "i": 16, + "minutes": 960, + "rate": 0.798, + "start": "16:00:00" + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.683, + "start": "17:00:00" + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.634, + "start": "18:00:00" + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.725, + "start": "19:00:00" + }, + { + "i": 20, + "minutes": 1200, + "rate": 0.838, + "start": "20:00:00" + }, + { + "i": 21, + "minutes": 1260, + "rate": 0.881, + "start": "21:00:00" + }, + { + "i": 22, + "minutes": 1320, + "rate": 0.91, + "start": "22:00:00" + }, + { + "i": 23, + "minutes": 1380, + "rate": 0.91, + "start": "23:00:00" + } + ], + "carb_ratio": 5.75, + "csf": 14.991, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 82.222, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 82.222, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test2/oaps-iobCalc.2022-05-21.json b/app/src/test/res/autotune/test2/oaps-iobCalc.2022-05-21.json new file mode 100644 index 0000000000..92304dbf45 --- /dev/null +++ b/app/src/test/res/autotune/test2/oaps-iobCalc.2022-05-21.json @@ -0,0 +1,286 @@ +[ + { "iob": 5.249, "activity": 0.0391, "date": 1653099848000}, + { "iob": 5.292, "activity": 0.0438, "date": 1653100148000}, + { "iob": 4.964, "activity": 0.047, "date": 1653100449000}, + { "iob": 4.674, "activity": 0.0489, "date": 1653100748000}, + { "iob": 4.377, "activity": 0.0498, "date": 1653101048000}, + { "iob": 4.077, "activity": 0.0498, "date": 1653101348000}, + { "iob": 3.73, "activity": 0.0491, "date": 1653101648000}, + { "iob": 3.389, "activity": 0.0476, "date": 1653101948000}, + { "iob": 3.055, "activity": 0.0457, "date": 1653102249000}, + { "iob": 2.782, "activity": 0.0436, "date": 1653102548000}, + { "iob": 2.47, "activity": 0.0411, "date": 1653102848000}, + { "iob": 2.22, "activity": 0.0386, "date": 1653103149000}, + { "iob": 1.935, "activity": 0.0358, "date": 1653103448000}, + { "iob": 1.711, "activity": 0.0332, "date": 1653103748000}, + { "iob": 1.452, "activity": 0.0304, "date": 1653104049000}, + { "iob": 1.927, "activity": 0.028, "date": 1653104349000}, + { "iob": 1.84, "activity": 0.027, "date": 1653104648000}, + { "iob": 1.658, "activity": 0.0258, "date": 1653104949000}, + { "iob": 1.482, "activity": 0.0245, "date": 1653105248000}, + { "iob": 1.264, "activity": 0.0229, "date": 1653105549000}, + { "iob": 1.104, "activity": 0.0212, "date": 1653105848000}, + { "iob": 0.952, "activity": 0.0194, "date": 1653106149000}, + { "iob": 1.619, "activity": 0.0181, "date": 1653106449000}, + { "iob": 1.678, "activity": 0.0184, "date": 1653106749000}, + { "iob": 1.775, "activity": 0.0187, "date": 1653107048000}, + { "iob": 1.581, "activity": 0.019, "date": 1653107348000}, + { "iob": 1.437, "activity": 0.0188, "date": 1653107648000}, + { "iob": 1.294, "activity": 0.0183, "date": 1653107948000}, + { "iob": 1.153, "activity": 0.0176, "date": 1653108249000}, + { "iob": 1.017, "activity": 0.0167, "date": 1653108548000}, + { "iob": 0.887, "activity": 0.0156, "date": 1653108848000}, + { "iob": 1.011, "activity": 0.0147, "date": 1653109148000}, + { "iob": 0.889, "activity": 0.0141, "date": 1653109448000}, + { "iob": 0.771, "activity": 0.0133, "date": 1653109748000}, + { "iob": 0.656, "activity": 0.0124, "date": 1653110049000}, + { "iob": 0.547, "activity": 0.0114, "date": 1653110348000}, + { "iob": 0.392, "activity": 0.0103, "date": 1653110649000}, + { "iob": 0.294, "activity": 0.0091, "date": 1653110949000}, + { "iob": 0.2, "activity": 0.008, "date": 1653111249000}, + { "iob": 0.065, "activity": 0.0066, "date": 1653111549000}, + { "iob": 0.034, "activity": 0.0055, "date": 1653111849000}, + { "iob": 0.549, "activity": 0.0048, "date": 1653112148000}, + { "iob": 0.674, "activity": 0.0053, "date": 1653112449000}, + { "iob": 0.597, "activity": 0.0057, "date": 1653112749000}, + { "iob": 0.468, "activity": 0.0058, "date": 1653113049000}, + { "iob": 0.389, "activity": 0.0057, "date": 1653113349000}, + { "iob": 0.262, "activity": 0.0053, "date": 1653113649000}, + { "iob": 0.186, "activity": 0.0048, "date": 1653113949000}, + { "iob": 0.064, "activity": 0.0041, "date": 1653114249000}, + { "iob": -0.005, "activity": 0.0034, "date": 1653114549000}, + { "iob": -0.12, "activity": 0.0026, "date": 1653114849000}, + { "iob": -0.181, "activity": 0.0018, "date": 1653115149000}, + { "iob": -0.287, "activity": 0.0008, "date": 1653115449000}, + { "iob": -0.34, "activity": 0, "date": 1653115749000}, + { "iob": -0.436, "activity": -0.001, "date": 1653116049000}, + { "iob": -0.48, "activity": -0.0018, "date": 1653116349000}, + { "iob": -0.519, "activity": -0.0026, "date": 1653116649000}, + { "iob": -0.554, "activity": -0.0034, "date": 1653116949000}, + { "iob": -0.585, "activity": -0.0041, "date": 1653117249000}, + { "iob": -0.662, "activity": -0.0049, "date": 1653117549000}, + { "iob": -0.687, "activity": -0.0055, "date": 1653117848000}, + { "iob": -0.708, "activity": -0.0061, "date": 1653118149000}, + { "iob": -0.726, "activity": -0.0066, "date": 1653118449000}, + { "iob": -0.351, "activity": -0.0071, "date": 1653118748000}, + { "iob": -0.218, "activity": -0.0064, "date": 1653119049000}, + { "iob": -0.088, "activity": -0.0055, "date": 1653119349000}, + { "iob": 13.594, "activity": 0.0023, "date": 1653119649000}, + { "iob": 13.552, "activity": 0.0331, "date": 1653119949000}, + { "iob": 13.224, "activity": 0.0573, "date": 1653120249000}, + { "iob": 12.838, "activity": 0.076, "date": 1653120548000}, + { "iob": 12.322, "activity": 0.09, "date": 1653120849000}, + { "iob": 11.794, "activity": 0.1001, "date": 1653121149000}, + { "iob": 11.177, "activity": 0.1068, "date": 1653121449000}, + { "iob": 10.58, "activity": 0.111, "date": 1653121749000}, + { "iob": 9.919, "activity": 0.1129, "date": 1653122049000}, + { "iob": 9.254, "activity": 0.1129, "date": 1653122349000}, + { "iob": 8.643, "activity": 0.1114, "date": 1653122649000}, + { "iob": 7.992, "activity": 0.1088, "date": 1653122949000}, + { "iob": 7.406, "activity": 0.1053, "date": 1653123248000}, + { "iob": 7.111, "activity": 0.1012, "date": 1653123549000}, + { "iob": 6.515, "activity": 0.0971, "date": 1653123849000}, + { "iob": 5.99, "activity": 0.0927, "date": 1653124149000}, + { "iob": 5.439, "activity": 0.0878, "date": 1653124448000}, + { "iob": 4.962, "activity": 0.0828, "date": 1653124749000}, + { "iob": 4.462, "activity": 0.0775, "date": 1653125048000}, + { "iob": 4.036, "activity": 0.0724, "date": 1653125349000}, + { "iob": 3.638, "activity": 0.0672, "date": 1653125649000}, + { "iob": 3.214, "activity": 0.0621, "date": 1653125948000}, + { "iob": 2.866, "activity": 0.0571, "date": 1653126249000}, + { "iob": 2.494, "activity": 0.0522, "date": 1653126549000}, + { "iob": 2.193, "activity": 0.0476, "date": 1653126849000}, + { "iob": 1.867, "activity": 0.0431, "date": 1653127149000}, + { "iob": 1.563, "activity": 0.0388, "date": 1653127449000}, + { "iob": 1.329, "activity": 0.0347, "date": 1653127748000}, + { "iob": 1.115, "activity": 0.0309, "date": 1653128049000}, + { "iob": 0.87, "activity": 0.0272, "date": 1653128349000}, + { "iob": 0.692, "activity": 0.0239, "date": 1653128649000}, + { "iob": 0.482, "activity": 0.0206, "date": 1653128948000}, + { "iob": 0.287, "activity": 0.0176, "date": 1653129249000}, + { "iob": 0.156, "activity": 0.0148, "date": 1653129548000}, + { "iob": 0.038, "activity": 0.0122, "date": 1653129848000}, + { "iob": -0.067, "activity": 0.0099, "date": 1653130149000}, + { "iob": -0.161, "activity": 0.0078, "date": 1653130448000}, + { "iob": -0.195, "activity": 0.006, "date": 1653130748000}, + { "iob": -0.271, "activity": 0.0044, "date": 1653131049000}, + { "iob": -0.339, "activity": 0.0029, "date": 1653131349000}, + { "iob": -0.4, "activity": 0.0015, "date": 1653131649000}, + { "iob": -0.155, "activity": 0.0007, "date": 1653131948000}, + { "iob": 8.11, "activity": 0.0045, "date": 1653132249000}, + { "iob": 7.992, "activity": 0.0222, "date": 1653132549000}, + { "iob": 7.745, "activity": 0.0359, "date": 1653132849000}, + { "iob": 7.488, "activity": 0.0465, "date": 1653133149000}, + { "iob": 7.136, "activity": 0.0541, "date": 1653133449000}, + { "iob": 6.8, "activity": 0.0596, "date": 1653133749000}, + { "iob": 6.441, "activity": 0.0633, "date": 1653134049000}, + { "iob": 6.022, "activity": 0.0651, "date": 1653134349000}, + { "iob": 5.644, "activity": 0.0657, "date": 1653134649000}, + { "iob": 5.216, "activity": 0.0653, "date": 1653134949000}, + { "iob": 4.962, "activity": 0.0644, "date": 1653135249000}, + { "iob": 4.544, "activity": 0.0627, "date": 1653135549000}, + { "iob": 4.185, "activity": 0.0606, "date": 1653135849000}, + { "iob": 3.839, "activity": 0.058, "date": 1653136149000}, + { "iob": 3.456, "activity": 0.055, "date": 1653136449000}, + { "iob": 3.139, "activity": 0.0519, "date": 1653136749000}, + { "iob": 2.788, "activity": 0.0486, "date": 1653137049000}, + { "iob": 2.503, "activity": 0.0453, "date": 1653137350000}, + { "iob": 2.186, "activity": 0.0418, "date": 1653137649000}, + { "iob": 3.17, "activity": 0.0407, "date": 1653137949000}, + { "iob": 3.956, "activity": 0.0413, "date": 1653138249000}, + { "iob": 3.648, "activity": 0.042, "date": 1653138549000}, + { "iob": 4.126, "activity": 0.043, "date": 1653138849000}, + { "iob": 3.81, "activity": 0.0437, "date": 1653139150000}, + { "iob": 3.541, "activity": 0.0437, "date": 1653139450000}, + { "iob": 3.272, "activity": 0.0431, "date": 1653139749000}, + { "iob": 3.588, "activity": 0.0428, "date": 1653140049000}, + { "iob": 3.875, "activity": 0.0431, "date": 1653140349000}, + { "iob": 3.608, "activity": 0.0434, "date": 1653140648000}, + { "iob": 4.271, "activity": 0.0442, "date": 1653140949000}, + { "iob": 3.996, "activity": 0.0452, "date": 1653141249000}, + { "iob": 4.298, "activity": 0.0462, "date": 1653141548000}, + { "iob": 4.015, "activity": 0.0468, "date": 1653141849000}, + { "iob": 4.538, "activity": 0.0481, "date": 1653142149000}, + { "iob": 4.245, "activity": 0.0489, "date": 1653142449000}, + { "iob": 4.729, "activity": 0.05, "date": 1653142749000}, + { "iob": 4.426, "activity": 0.0508, "date": 1653143049000}, + { "iob": 4.353, "activity": 0.051, "date": 1653143349000}, + { "iob": 4.049, "activity": 0.0507, "date": 1653143650000}, + { "iob": 3.747, "activity": 0.0498, "date": 1653143949000}, + { "iob": 3.402, "activity": 0.0483, "date": 1653144249000}, + { "iob": 3.115, "activity": 0.0464, "date": 1653144550000}, + { "iob": 2.788, "activity": 0.0441, "date": 1653144849000}, + { "iob": 2.524, "activity": 0.0417, "date": 1653145149000}, + { "iob": 2.271, "activity": 0.0391, "date": 1653145449000}, + { "iob": 2.033, "activity": 0.0365, "date": 1653145750000}, + { "iob": 1.807, "activity": 0.0338, "date": 1653146050000}, + { "iob": 1.594, "activity": 0.0312, "date": 1653146349000}, + { "iob": 1.395, "activity": 0.0286, "date": 1653146650000}, + { "iob": 1.258, "activity": 0.0262, "date": 1653146949000}, + { "iob": 1.034, "activity": 0.0236, "date": 1653147249000}, + { "iob": 0.971, "activity": 0.0215, "date": 1653147549000}, + { "iob": 1.008, "activity": 0.0197, "date": 1653147849000}, + { "iob": 0.963, "activity": 0.0183, "date": 1653148149000}, + { "iob": 1.046, "activity": 0.0171, "date": 1653148450000}, + { "iob": 0.912, "activity": 0.0161, "date": 1653148749000}, + { "iob": 1.254, "activity": 0.0156, "date": 1653149049000}, + { "iob": 1.176, "activity": 0.0154, "date": 1653149349000}, + { "iob": 1.051, "activity": 0.0149, "date": 1653149650000}, + { "iob": 0.928, "activity": 0.0142, "date": 1653149949000}, + { "iob": 1.008, "activity": 0.0138, "date": 1653150249000}, + { "iob": 0.89, "activity": 0.0133, "date": 1653150549000}, + { "iob": 0.775, "activity": 0.0127, "date": 1653150849000}, + { "iob": 0.664, "activity": 0.0118, "date": 1653151149000}, + { "iob": 0.606, "activity": 0.011, "date": 1653151449000}, + { "iob": 0.703, "activity": 0.0105, "date": 1653151749000}, + { "iob": 0.702, "activity": 0.0101, "date": 1653152049000}, + { "iob": 0.902, "activity": 0.0101, "date": 1653152349000}, + { "iob": 0.801, "activity": 0.0101, "date": 1653152649000}, + { "iob": 0.701, "activity": 0.0098, "date": 1653152949000}, + { "iob": 0.603, "activity": 0.0094, "date": 1653153249000}, + { "iob": 0.508, "activity": 0.0088, "date": 1653153549000}, + { "iob": 0.415, "activity": 0.0081, "date": 1653153849000}, + { "iob": 0.327, "activity": 0.0074, "date": 1653154149000}, + { "iob": 0.242, "activity": 0.0066, "date": 1653154449000}, + { "iob": 0.161, "activity": 0.0058, "date": 1653154749000}, + { "iob": 0.134, "activity": 0.005, "date": 1653155049000}, + { "iob": 0.4, "activity": 0.0048, "date": 1653155349000}, + { "iob": 0.475, "activity": 0.0049, "date": 1653155649000}, + { "iob": 0.401, "activity": 0.005, "date": 1653155950000}, + { "iob": 0.327, "activity": 0.0048, "date": 1653156250000}, + { "iob": 0.203, "activity": 0.0044, "date": 1653156549000}, + { "iob": 0.132, "activity": 0.004, "date": 1653156849000}, + { "iob": 0.064, "activity": 0.0034, "date": 1653157149000}, + { "iob": -0.002, "activity": 0.0028, "date": 1653157449000}, + { "iob": -0.064, "activity": 0.0022, "date": 1653157750000}, + { "iob": -0.073, "activity": 0.0016, "date": 1653158049000}, + { "iob": -0.08, "activity": 0.0011, "date": 1653158349000}, + { "iob": -0.085, "activity": 0.0007, "date": 1653158649000}, + { "iob": -0.087, "activity": 0.0004, "date": 1653158949000}, + { "iob": -0.088, "activity": 0.0001, "date": 1653159249000}, + { "iob": -0.088, "activity": -0.0001, "date": 1653159549000}, + { "iob": -0.137, "activity": -0.0004, "date": 1653159849000}, + { "iob": -0.184, "activity": -0.0007, "date": 1653160150000}, + { "iob": -0.18, "activity": -0.001, "date": 1653160449000}, + { "iob": -0.175, "activity": -0.0012, "date": 1653160749000}, + { "iob": -0.168, "activity": -0.0014, "date": 1653161049000}, + { "iob": -0.211, "activity": -0.0015, "date": 1653161350000}, + { "iob": -0.203, "activity": -0.0017, "date": 1653161649000}, + { "iob": -0.243, "activity": -0.002, "date": 1653161950000}, + { "iob": -0.282, "activity": -0.0023, "date": 1653162250000}, + { "iob": -0.32, "activity": -0.0026, "date": 1653162549000}, + { "iob": -0.357, "activity": -0.0029, "date": 1653162850000}, + { "iob": -0.391, "activity": -0.0032, "date": 1653163150000}, + { "iob": -0.375, "activity": -0.0035, "date": 1653163449000}, + { "iob": -0.357, "activity": -0.0036, "date": 1653163749000}, + { "iob": -0.149, "activity": -0.0035, "date": 1653164049000}, + { "iob": -0.132, "activity": -0.0031, "date": 1653164350000}, + { "iob": 9.296, "activity": 0.015, "date": 1653164649000}, + { "iob": 9.123, "activity": 0.0332, "date": 1653164950000}, + { "iob": 8.96, "activity": 0.0474, "date": 1653165249000}, + { "iob": 8.644, "activity": 0.0584, "date": 1653165550000}, + { "iob": 8.282, "activity": 0.0664, "date": 1653165850000}, + { "iob": 7.835, "activity": 0.0718, "date": 1653166149000}, + { "iob": 7.416, "activity": 0.0753, "date": 1653166450000}, + { "iob": 6.984, "activity": 0.0772, "date": 1653166749000}, + { "iob": 6.547, "activity": 0.0776, "date": 1653167049000}, + { "iob": 6.061, "activity": 0.0769, "date": 1653167350000}, + { "iob": 5.68, "activity": 0.0754, "date": 1653167650000}, + { "iob": 5.458, "activity": 0.0734, "date": 1653167949000}, + { "iob": 5.046, "activity": 0.0712, "date": 1653168250000}, + { "iob": 4.925, "activity": 0.069, "date": 1653168549000}, + { "iob": 4.487, "activity": 0.0663, "date": 1653168849000}, + { "iob": 4.113, "activity": 0.0633, "date": 1653169150000}, + { "iob": 3.706, "activity": 0.0599, "date": 1653169449000}, + { "iob": 3.363, "activity": 0.0566, "date": 1653169749000}, + { "iob": 3.039, "activity": 0.053, "date": 1653170049000}, + { "iob": 2.733, "activity": 0.0494, "date": 1653170350000}, + { "iob": 2.395, "activity": 0.0457, "date": 1653170650000}, + { "iob": 2.126, "activity": 0.0421, "date": 1653170950000}, + { "iob": 1.824, "activity": 0.0385, "date": 1653171250000}, + { "iob": 1.64, "activity": 0.0351, "date": 1653171549000}, + { "iob": 1.473, "activity": 0.0319, "date": 1653171849000}, + { "iob": 1.273, "activity": 0.0288, "date": 1653172150000}, + { "iob": 1.136, "activity": 0.026, "date": 1653172450000}, + { "iob": 1.011, "activity": 0.0235, "date": 1653172749000}, + { "iob": 0.852, "activity": 0.021, "date": 1653173050000}, + { "iob": 0.752, "activity": 0.0189, "date": 1653173350000}, + { "iob": 0.662, "activity": 0.0169, "date": 1653173650000}, + { "iob": 0.534, "activity": 0.0149, "date": 1653173949000}, + { "iob": 0.463, "activity": 0.0132, "date": 1653174249000}, + { "iob": 0.352, "activity": 0.0115, "date": 1653174550000}, + { "iob": 0.298, "activity": 0.0101, "date": 1653174850000}, + { "iob": 0.25, "activity": 0.0089, "date": 1653175149000}, + { "iob": 0.329, "activity": 0.0079, "date": 1653175450000}, + { "iob": 0.34, "activity": 0.0074, "date": 1653175750000}, + { "iob": 0.304, "activity": 0.0068, "date": 1653176050000}, + { "iob": 0.272, "activity": 0.0062, "date": 1653176350000}, + { "iob": 0.512, "activity": 0.006, "date": 1653176650000}, + { "iob": 0.581, "activity": 0.0061, "date": 1653176950000}, + { "iob": 1.238, "activity": 0.0075, "date": 1653177250000}, + { "iob": 1.147, "activity": 0.0088, "date": 1653177550000}, + { "iob": 1.151, "activity": 0.0098, "date": 1653177850000}, + { "iob": 1.05, "activity": 0.0104, "date": 1653178149000}, + { "iob": 0.947, "activity": 0.0107, "date": 1653178449000}, + { "iob": 0.844, "activity": 0.0106, "date": 1653178750000}, + { "iob": 0.741, "activity": 0.0104, "date": 1653179050000}, + { "iob": 0.59, "activity": 0.0099, "date": 1653179350000}, + { "iob": 0.542, "activity": 0.0093, "date": 1653179649000}, + { "iob": 0.497, "activity": 0.0087, "date": 1653179949000}, + { "iob": 0.456, "activity": 0.0081, "date": 1653180250000}, + { "iob": 0.516, "activity": 0.0077, "date": 1653180549000}, + { "iob": 0.429, "activity": 0.0072, "date": 1653180849000}, + { "iob": 0.294, "activity": 0.0066, "date": 1653181150000}, + { "iob": 0.163, "activity": 0.0058, "date": 1653181450000}, + { "iob": 0.037, "activity": 0.0049, "date": 1653181750000}, + { "iob": -0.085, "activity": 0.0039, "date": 1653182050000}, + { "iob": -0.153, "activity": 0.0029, "date": 1653182349000}, + { "iob": -0.265, "activity": 0.0018, "date": 1653182650000}, + { "iob": -0.371, "activity": 0.0007, "date": 1653182949000}, + { "iob": -0.471, "activity": -0.0005, "date": 1653183249000}, + { "iob": -0.566, "activity": -0.0016, "date": 1653183550000}, + { "iob": -0.606, "activity": -0.0026, "date": 1653183850000}, + { "iob": -0.64, "activity": -0.0036, "date": 1653184150000}, + { "iob": -0.67, "activity": -0.0044, "date": 1653184450000} +] + diff --git a/app/src/test/res/autotune/test2/profile.pump.json b/app/src/test/res/autotune/test2/profile.pump.json new file mode 100644 index 0000000000..eefadabacb --- /dev/null +++ b/app/src/test/res/autotune/test2/profile.pump.json @@ -0,0 +1,147 @@ +{ + "name": "Tuned Dyn2", + "min_5m_carbimpact": 8, + "dia": 6, + "curve": "ultra-rapid", + "useCustomPeakTime": true, + "insulinPeakTime": 45, + "basalprofile": [ + { + "start": "00:00:00", + "minutes": 0, + "rate": 0.966 + }, + { + "start": "01:00:00", + "minutes": 60, + "rate": 0.977 + }, + { + "start": "02:00:00", + "minutes": 120, + "rate": 0.971 + }, + { + "start": "03:00:00", + "minutes": 180, + "rate": 1.111 + }, + { + "start": "04:00:00", + "minutes": 240, + "rate": 0.974 + }, + { + "start": "05:00:00", + "minutes": 300, + "rate": 0.923 + }, + { + "start": "06:00:00", + "minutes": 360, + "rate": 0.823 + }, + { + "start": "07:00:00", + "minutes": 420, + "rate": 0.855 + }, + { + "start": "08:00:00", + "minutes": 480, + "rate": 0.902 + }, + { + "start": "09:00:00", + "minutes": 540, + "rate": 0.934 + }, + { + "start": "10:00:00", + "minutes": 600, + "rate": 0.938 + }, + { + "start": "11:00:00", + "minutes": 660, + "rate": 0.903 + }, + { + "start": "12:00:00", + "minutes": 720, + "rate": 0.882 + }, + { + "start": "13:00:00", + "minutes": 780, + "rate": 0.874 + }, + { + "start": "14:00:00", + "minutes": 840, + "rate": 0.866 + }, + { + "start": "15:00:00", + "minutes": 900, + "rate": 0.848 + }, + { + "start": "16:00:00", + "minutes": 960, + "rate": 0.758 + }, + { + "start": "17:00:00", + "minutes": 1020, + "rate": 0.65 + }, + { + "start": "18:00:00", + "minutes": 1080, + "rate": 0.648 + }, + { + "start": "19:00:00", + "minutes": 1140, + "rate": 0.738 + }, + { + "start": "20:00:00", + "minutes": 1200, + "rate": 0.847 + }, + { + "start": "21:00:00", + "minutes": 1260, + "rate": 0.861 + }, + { + "start": "22:00:00", + "minutes": 1320, + "rate": 0.863 + }, + { + "start": "23:00:00", + "minutes": 1380, + "rate": 0.843 + } + ], + "isfProfile": { + "sensitivities": [ + { + "i": 0, + "start": "00:00:00", + "sensitivity": 86.2, + "offset": 0, + "x": 0, + "endoffset": 1440 + } + ] + }, + "carb_ratio": 5.75, + "autosens_max": 1.3, + "autosens_min": 0.7, + "units": "mg/dl", + "timezone": "Europe/Paris" +} diff --git a/app/src/test/res/autotune/test3/aaps-entries.2022-05-21.json b/app/src/test/res/autotune/test3/aaps-entries.2022-05-21.json new file mode 100644 index 0000000000..70c349e9d8 --- /dev/null +++ b/app/src/test/res/autotune/test3/aaps-entries.2022-05-21.json @@ -0,0 +1,2882 @@ +[ + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184750000, + "dateString": "2022-05-22T01:59:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "6289990761a8290004740388" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184450000, + "dateString": "2022-05-22T01:54:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628997d861a8290004740385" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653184150000, + "dateString": "2022-05-22T01:49:10.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628996a961a8290004740382" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183850000, + "dateString": "2022-05-22T01:44:10.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6289957b61a829000474037f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183550000, + "dateString": "2022-05-22T01:39:10.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6289945f50e51d0004429e6d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653183249000, + "dateString": "2022-05-22T01:34:09.000Z", + "isValid": true, + "sgv": 73, + "direction": "Flat", + "type": "sgv", + "_id": "6289933050e51d0004429e6b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182949000, + "dateString": "2022-05-22T01:29:09.000Z", + "isValid": true, + "sgv": 72, + "direction": "Flat", + "type": "sgv", + "_id": "6289920150e51d0004429e69" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182650000, + "dateString": "2022-05-22T01:24:10.000Z", + "isValid": true, + "sgv": 74, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628990d350e51d0004429e67" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182349000, + "dateString": "2022-05-22T01:19:09.000Z", + "isValid": true, + "sgv": 77, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898fa550e51d0004429e65" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653182050000, + "dateString": "2022-05-22T01:14:10.000Z", + "isValid": true, + "sgv": 81, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898e7650e51d0004429e63" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181750000, + "dateString": "2022-05-22T01:09:10.000Z", + "isValid": true, + "sgv": 87, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898d4750e51d0004429e5f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181450000, + "dateString": "2022-05-22T01:04:10.000Z", + "isValid": true, + "sgv": 92, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62898c2fda46aa0004d1e0fc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653181150000, + "dateString": "2022-05-22T00:59:10.000Z", + "isValid": true, + "sgv": 97, + "direction": "SingleDown", + "type": "sgv", + "_id": "62898b01da46aa0004d1e0fa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180849000, + "dateString": "2022-05-22T00:54:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "SingleDown", + "type": "sgv", + "_id": "628989d2da46aa0004d1e0f8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180549000, + "dateString": "2022-05-22T00:49:09.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628988a3da46aa0004d1e0f5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653180250000, + "dateString": "2022-05-22T00:44:10.000Z", + "isValid": true, + "sgv": 135, + "direction": "Flat", + "type": "sgv", + "_id": "62898774da46aa0004d1e0f1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179949000, + "dateString": "2022-05-22T00:39:09.000Z", + "isValid": true, + "sgv": 143, + "direction": "Flat", + "type": "sgv", + "_id": "62898645da46aa0004d1e0ee" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179649000, + "dateString": "2022-05-22T00:34:09.000Z", + "isValid": true, + "sgv": 143, + "direction": "Flat", + "type": "sgv", + "_id": "62898517da46aa0004d1e0ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179350000, + "dateString": "2022-05-22T00:29:10.000Z", + "isValid": true, + "sgv": 142, + "direction": "Flat", + "type": "sgv", + "_id": "628983f69d6f1800047cd0dd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653179050000, + "dateString": "2022-05-22T00:24:10.000Z", + "isValid": true, + "sgv": 142, + "direction": "Flat", + "type": "sgv", + "_id": "628982c89d6f1800047cd0db" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178750000, + "dateString": "2022-05-22T00:19:10.000Z", + "isValid": true, + "sgv": 144, + "direction": "Flat", + "type": "sgv", + "_id": "628981999d6f1800047cd0d8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178449000, + "dateString": "2022-05-22T00:14:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "6289806a9d6f1800047cd0d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653178149000, + "dateString": "2022-05-22T00:09:09.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62897f3b9d6f1800047cd0d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177850000, + "dateString": "2022-05-22T00:04:10.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62897e0c9d6f1800047cd0d0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177550000, + "dateString": "2022-05-21T23:59:10.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "62897cde9d6f1800047cd0cc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653177250000, + "dateString": "2022-05-21T23:54:10.000Z", + "isValid": true, + "sgv": 146, + "direction": "Flat", + "type": "sgv", + "_id": "62897bc89d6f1800047cd0c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176950000, + "dateString": "2022-05-21T23:49:10.000Z", + "isValid": true, + "sgv": 143, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62897a8771a363000480abca" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176650000, + "dateString": "2022-05-21T23:44:10.000Z", + "isValid": true, + "sgv": 139, + "direction": "Flat", + "type": "sgv", + "_id": "6289797071a363000480abc7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176350000, + "dateString": "2022-05-21T23:39:10.000Z", + "isValid": true, + "sgv": 132, + "direction": "Flat", + "type": "sgv", + "_id": "6289784271a363000480abc3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653176050000, + "dateString": "2022-05-21T23:34:10.000Z", + "isValid": true, + "sgv": 127, + "direction": "Flat", + "type": "sgv", + "_id": "6289771371a363000480abc1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175750000, + "dateString": "2022-05-21T23:29:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "628975e471a363000480abbe" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175450000, + "dateString": "2022-05-21T23:24:10.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "_id": "628974b671a363000480abbc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653175149000, + "dateString": "2022-05-21T23:19:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "6289738f37d09a00043f2b26" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174850000, + "dateString": "2022-05-21T23:14:10.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6289727a37d09a00043f2b22" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174550000, + "dateString": "2022-05-21T23:09:10.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "6289727937d09a00043f2b21" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653174249000, + "dateString": "2022-05-21T23:04:09.000Z", + "isValid": true, + "sgv": 111, + "direction": "Flat", + "type": "sgv", + "_id": "6289726037d09a00043f2b20" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173949000, + "dateString": "2022-05-21T22:59:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "6289721437d09a00043f2b1f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173650000, + "dateString": "2022-05-21T22:54:10.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "6289717d37d09a00043f2b1e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173350000, + "dateString": "2022-05-21T22:49:10.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "62896fb837d09a00043f2b1b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653173050000, + "dateString": "2022-05-21T22:44:10.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "62896f8537d09a00043f2b1a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172749000, + "dateString": "2022-05-21T22:39:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "62896e8937d09a00043f2b19" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172450000, + "dateString": "2022-05-21T22:34:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "62896d8b37d09a00043f2b17" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653172150000, + "dateString": "2022-05-21T22:29:10.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "62896cda37d09a00043f2b16" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171849000, + "dateString": "2022-05-21T22:24:09.000Z", + "isValid": true, + "sgv": 122, + "direction": "Flat", + "type": "sgv", + "_id": "62896c7537d09a00043f2b14" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171549000, + "dateString": "2022-05-21T22:19:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "62896c1037d09a00043f2b13" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653171250000, + "dateString": "2022-05-21T22:14:10.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "62896b5f6a5ecf00042d5474" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170950000, + "dateString": "2022-05-21T22:09:10.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "62896ac76a5ecf00042d5472" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170650000, + "dateString": "2022-05-21T22:04:10.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "628969fd6a5ecf00042d5471" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170350000, + "dateString": "2022-05-21T21:59:10.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "_id": "628969016a5ecf00042d5470" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653170049000, + "dateString": "2022-05-21T21:54:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "628967a06a5ecf00042d546e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169749000, + "dateString": "2022-05-21T21:49:09.000Z", + "isValid": true, + "sgv": 107, + "direction": "Flat", + "type": "sgv", + "_id": "628964906a5ecf00042d546b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169449000, + "dateString": "2022-05-21T21:44:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "_id": "628961a4fb144900043c34ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653169150000, + "dateString": "2022-05-21T21:39:10.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62895f5ffb144900043c34e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168849000, + "dateString": "2022-05-21T21:34:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "62895d98fb144900043c34e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168549000, + "dateString": "2022-05-21T21:29:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "62895b9a9bf1e6000482ffa1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653168250000, + "dateString": "2022-05-21T21:24:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628959ed9bf1e6000482ff9e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167949000, + "dateString": "2022-05-21T21:19:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6289583f9bf1e6000482ff9b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167650000, + "dateString": "2022-05-21T21:14:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628956919bf1e6000482ff96" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167350000, + "dateString": "2022-05-21T21:09:10.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "628955179bf1e6000482ff92" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653167049000, + "dateString": "2022-05-21T21:04:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628953e79bf1e6000482ff90" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166749000, + "dateString": "2022-05-21T20:59:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628952c680fc7e00041b22a9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166450000, + "dateString": "2022-05-21T20:54:10.000Z", + "isValid": true, + "sgv": 110, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6289519580fc7e00041b22a7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653166149000, + "dateString": "2022-05-21T20:49:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6289506680fc7e00041b22a5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165850000, + "dateString": "2022-05-21T20:44:10.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "62894f3880fc7e00041b22a3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165550000, + "dateString": "2022-05-21T20:39:10.000Z", + "isValid": true, + "sgv": 139, + "direction": "Flat", + "type": "sgv", + "_id": "62894e0980fc7e00041b22a0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653165249000, + "dateString": "2022-05-21T20:34:09.000Z", + "isValid": true, + "sgv": 145, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62894cdb80fc7e00041b229e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164950000, + "dateString": "2022-05-21T20:29:10.000Z", + "isValid": true, + "sgv": 143, + "direction": "SingleUp", + "type": "sgv", + "_id": "62894bab80fc7e00041b229b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164649000, + "dateString": "2022-05-21T20:24:09.000Z", + "isValid": true, + "sgv": 133, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62894a7e4493460004e63a38" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164350000, + "dateString": "2022-05-21T20:19:10.000Z", + "isValid": true, + "sgv": 120, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6289496a4493460004e63a34" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653164049000, + "dateString": "2022-05-21T20:14:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "Flat", + "type": "sgv", + "_id": "628948214493460004e63a31" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163749000, + "dateString": "2022-05-21T20:09:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "6289470c4493460004e63a2d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163449000, + "dateString": "2022-05-21T20:04:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "Flat", + "type": "sgv", + "_id": "628945dc4493460004e63a2a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653163150000, + "dateString": "2022-05-21T19:59:10.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "628944ae4493460004e63a27" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162850000, + "dateString": "2022-05-21T19:54:10.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "6289437f4493460004e63a25" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162549000, + "dateString": "2022-05-21T19:49:09.000Z", + "isValid": true, + "sgv": 88, + "direction": "Flat", + "type": "sgv", + "_id": "6289425f598f780004bb3b30" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653162250000, + "dateString": "2022-05-21T19:44:10.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "62894118598f780004bb3b2d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161950000, + "dateString": "2022-05-21T19:39:10.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "62893feb598f780004bb3b2b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161649000, + "dateString": "2022-05-21T19:34:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "62893ed7598f780004bb3b29" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161350000, + "dateString": "2022-05-21T19:29:10.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "62893daa598f780004bb3b27" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653161049000, + "dateString": "2022-05-21T19:24:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "Flat", + "type": "sgv", + "_id": "62893c7d598f780004bb3b24" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160749000, + "dateString": "2022-05-21T19:19:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "62893b4f598f780004bb3b22" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160449000, + "dateString": "2022-05-21T19:14:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "62893a1222fbc8000495b822" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653160150000, + "dateString": "2022-05-21T19:09:10.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628938fe22fbc8000495b81f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159849000, + "dateString": "2022-05-21T19:04:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628937b822fbc8000495b81d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159549000, + "dateString": "2022-05-21T18:59:09.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "628936a422fbc8000495b81a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653159249000, + "dateString": "2022-05-21T18:54:09.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "6289357622fbc8000495b818" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158949000, + "dateString": "2022-05-21T18:49:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "6289344a22fbc8000495b815" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158649000, + "dateString": "2022-05-21T18:44:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6289331c22fbc8000495b813" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158349000, + "dateString": "2022-05-21T18:39:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "628931e9840d8d0004a20bff" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653158049000, + "dateString": "2022-05-21T18:34:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "Flat", + "type": "sgv", + "_id": "628930bc840d8d0004a20bfd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157750000, + "dateString": "2022-05-21T18:29:10.000Z", + "isValid": true, + "sgv": 106, + "direction": "Flat", + "type": "sgv", + "_id": "62892f8f840d8d0004a20bfa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157449000, + "dateString": "2022-05-21T18:24:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "62892e62840d8d0004a20bf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653157149000, + "dateString": "2022-05-21T18:19:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "_id": "62892d34840d8d0004a20bf5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156849000, + "dateString": "2022-05-21T18:14:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "62892c06840d8d0004a20bf2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156549000, + "dateString": "2022-05-21T18:09:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "62892af2840d8d0004a20bf0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653156250000, + "dateString": "2022-05-21T18:04:10.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "628929ac8809e60004c644e9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155950000, + "dateString": "2022-05-21T17:59:10.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "_id": "6289287e8809e60004c644e6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155649000, + "dateString": "2022-05-21T17:54:09.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "6289276a8809e60004c644e3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155349000, + "dateString": "2022-05-21T17:49:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "NONE", + "type": "sgv", + "_id": "6289263c8809e60004c644e1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653155049000, + "dateString": "2022-05-21T17:44:09.000Z", + "isValid": true, + "sgv": 116, + "direction": "NONE", + "type": "sgv", + "_id": "6289250d8809e60004c644dd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154749000, + "dateString": "2022-05-21T17:39:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "NONE", + "type": "sgv", + "_id": "628923df8809e60004c644d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154449000, + "dateString": "2022-05-21T17:34:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628922b18809e60004c644d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653154149000, + "dateString": "2022-05-21T17:29:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "SingleDown", + "type": "sgv", + "_id": "628921861090500004ca472b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153849000, + "dateString": "2022-05-21T17:24:09.000Z", + "isValid": true, + "sgv": 96, + "direction": "SingleDown", + "type": "sgv", + "_id": "628920591090500004ca4727" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153549000, + "dateString": "2022-05-21T17:19:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "SingleDown", + "type": "sgv", + "_id": "62891f2b1090500004ca4724" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653153249000, + "dateString": "2022-05-21T17:14:09.000Z", + "isValid": true, + "sgv": 124, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62891dfd1090500004ca4722" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152949000, + "dateString": "2022-05-21T17:09:09.000Z", + "isValid": true, + "sgv": 138, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62891cd01090500004ca471f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152649000, + "dateString": "2022-05-21T17:04:09.000Z", + "isValid": true, + "sgv": 149, + "direction": "Flat", + "type": "sgv", + "_id": "62891ba31090500004ca471d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152349000, + "dateString": "2022-05-21T16:59:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "62891a811090500004ca471a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653152049000, + "dateString": "2022-05-21T16:54:09.000Z", + "isValid": true, + "sgv": 160, + "direction": "Flat", + "type": "sgv", + "_id": "628919531090500004ca4717" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151749000, + "dateString": "2022-05-21T16:49:09.000Z", + "isValid": true, + "sgv": 159, + "direction": "Flat", + "type": "sgv", + "_id": "628918261090500004ca4714" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151449000, + "dateString": "2022-05-21T16:44:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "628916f81090500004ca4710" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653151149000, + "dateString": "2022-05-21T16:39:09.000Z", + "isValid": true, + "sgv": 158, + "direction": "Flat", + "type": "sgv", + "_id": "628915ce1090500004ca470c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150849000, + "dateString": "2022-05-21T16:34:09.000Z", + "isValid": true, + "sgv": 161, + "direction": "Flat", + "type": "sgv", + "_id": "628914d01090500004ca4709" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150549000, + "dateString": "2022-05-21T16:29:09.000Z", + "isValid": true, + "sgv": 165, + "direction": "Flat", + "type": "sgv", + "_id": "628913731090500004ca4706" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653150249000, + "dateString": "2022-05-21T16:24:09.000Z", + "isValid": true, + "sgv": 170, + "direction": "Flat", + "type": "sgv", + "_id": "628913111090500004ca4704" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149949000, + "dateString": "2022-05-21T16:19:09.000Z", + "isValid": true, + "sgv": 172, + "direction": "Flat", + "type": "sgv", + "_id": "6289130f1090500004ca46ff" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149650000, + "dateString": "2022-05-21T16:14:10.000Z", + "isValid": true, + "sgv": 173, + "direction": "Flat", + "type": "sgv", + "_id": "62890fff1090500004ca46fd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149349000, + "dateString": "2022-05-21T16:09:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "_id": "62890edacf7ee10004a2b1e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653149049000, + "dateString": "2022-05-21T16:04:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890daccf7ee10004a2b1de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148749000, + "dateString": "2022-05-21T15:59:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890c64cf7ee10004a2b1da" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148450000, + "dateString": "2022-05-21T15:54:10.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "62890b36cf7ee10004a2b1d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653148149000, + "dateString": "2022-05-21T15:49:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "_id": "62890a21cf7ee10004a2b1d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147849000, + "dateString": "2022-05-21T15:44:09.000Z", + "isValid": true, + "sgv": 175, + "direction": "Flat", + "type": "sgv", + "_id": "628908f3cf7ee10004a2b1d1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147549000, + "dateString": "2022-05-21T15:39:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "628907c5cf7ee10004a2b1ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653147249000, + "dateString": "2022-05-21T15:34:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6289067fc9346b0004863369" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146949000, + "dateString": "2022-05-21T15:29:09.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6289056ac9346b0004863366" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146650000, + "dateString": "2022-05-21T15:24:10.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6289043cc9346b0004863363" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146349000, + "dateString": "2022-05-21T15:19:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6289030ec9346b0004863361" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653146050000, + "dateString": "2022-05-21T15:14:10.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "628901e0c9346b000486335f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145750000, + "dateString": "2022-05-21T15:09:10.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "628900b2c9346b000486335d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145449000, + "dateString": "2022-05-21T15:04:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6288ff9ec9346b000486335b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653145149000, + "dateString": "2022-05-21T14:59:09.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "_id": "6288fe56c9346b0004863359" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144849000, + "dateString": "2022-05-21T14:54:09.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "_id": "6288fd270e0c880004d58de7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144550000, + "dateString": "2022-05-21T14:49:10.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "_id": "6288fbf90e0c880004d58de5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653144249000, + "dateString": "2022-05-21T14:44:09.000Z", + "isValid": true, + "sgv": 180, + "direction": "Flat", + "type": "sgv", + "_id": "6288facb0e0c880004d58de3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143949000, + "dateString": "2022-05-21T14:39:09.000Z", + "isValid": true, + "sgv": 184, + "direction": "Flat", + "type": "sgv", + "_id": "6288f9b60e0c880004d58de0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143650000, + "dateString": "2022-05-21T14:34:10.000Z", + "isValid": true, + "sgv": 185, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f8880e0c880004d58dde" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143349000, + "dateString": "2022-05-21T14:29:09.000Z", + "isValid": true, + "sgv": 182, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f75a0e0c880004d58ddb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653143049000, + "dateString": "2022-05-21T14:24:09.000Z", + "isValid": true, + "sgv": 174, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f62c0e0c880004d58dd8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142749000, + "dateString": "2022-05-21T14:19:09.000Z", + "isValid": true, + "sgv": 166, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f4f72634cd0004296074" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142449000, + "dateString": "2022-05-21T14:14:09.000Z", + "isValid": true, + "sgv": 160, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f3c92634cd0004296071" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653142149000, + "dateString": "2022-05-21T14:09:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f29b2634cd000429606f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141849000, + "dateString": "2022-05-21T14:04:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f16d2634cd000429606c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141548000, + "dateString": "2022-05-21T13:59:08.000Z", + "isValid": true, + "sgv": 139, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288f03f2634cd000429606a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653141249000, + "dateString": "2022-05-21T13:54:09.000Z", + "isValid": true, + "sgv": 131, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ef2a2634cd0004296067" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140949000, + "dateString": "2022-05-21T13:49:09.000Z", + "isValid": true, + "sgv": 126, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288edfc2634cd0004296065" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140648000, + "dateString": "2022-05-21T13:44:08.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ecca0f1be700041e5a0b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140349000, + "dateString": "2022-05-21T13:39:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288eb9d0f1be700041e5a09" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653140049000, + "dateString": "2022-05-21T13:34:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "_id": "6288ea6e0f1be700041e5a06" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139749000, + "dateString": "2022-05-21T13:29:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6288e9410f1be700041e5a03" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139450000, + "dateString": "2022-05-21T13:24:10.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288e82c0f1be700041e5a00" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653139150000, + "dateString": "2022-05-21T13:19:10.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "6288e7030f1be700041e59fd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138849000, + "dateString": "2022-05-21T13:14:09.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288e5d00f1be700041e59fb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138549000, + "dateString": "2022-05-21T13:09:09.000Z", + "isValid": true, + "sgv": 95, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288e4900f1be700041e59f8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653138249000, + "dateString": "2022-05-21T13:04:09.000Z", + "isValid": true, + "sgv": 93, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288e3610f1be700041e59f6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137949000, + "dateString": "2022-05-21T12:59:09.000Z", + "isValid": true, + "sgv": 86, + "direction": "Flat", + "type": "sgv", + "_id": "6288e24c0f1be700041e59f3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137649000, + "dateString": "2022-05-21T12:54:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6288e1040f1be700041e59f0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137350000, + "dateString": "2022-05-21T12:49:10.000Z", + "isValid": true, + "sgv": 72, + "direction": "Flat", + "type": "sgv", + "_id": "6288dfd60f1be700041e59ee" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653137049000, + "dateString": "2022-05-21T12:44:09.000Z", + "isValid": true, + "sgv": 69, + "direction": "Flat", + "type": "sgv", + "_id": "6288df8a0f1be700041e59ec" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136749000, + "dateString": "2022-05-21T12:39:09.000Z", + "isValid": true, + "sgv": 68, + "direction": "Flat", + "type": "sgv", + "_id": "6288de580f1be700041e59ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136449000, + "dateString": "2022-05-21T12:34:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "6288dd270f1be700041e59e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653136149000, + "dateString": "2022-05-21T12:29:09.000Z", + "isValid": true, + "sgv": 73, + "direction": "Flat", + "type": "sgv", + "_id": "6288db8a0f1be700041e59e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135849000, + "dateString": "2022-05-21T12:24:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6288d9fb0f1be700041e59e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135549000, + "dateString": "2022-05-21T12:19:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "6288d8e00f1be700041e59e0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653135249000, + "dateString": "2022-05-21T12:14:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "6288d7ae0f1be700041e59de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134949000, + "dateString": "2022-05-21T12:09:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "6288d67f0f1be700041e59da" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134649000, + "dateString": "2022-05-21T12:04:09.000Z", + "isValid": true, + "sgv": 77, + "direction": "Flat", + "type": "sgv", + "_id": "6288d5500f1be700041e59d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134349000, + "dateString": "2022-05-21T11:59:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d4220f1be700041e59d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653134049000, + "dateString": "2022-05-21T11:54:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d3060f1be700041e59d2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133749000, + "dateString": "2022-05-21T11:49:09.000Z", + "isValid": true, + "sgv": 87, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288d1d80f1be700041e59cf" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133449000, + "dateString": "2022-05-21T11:44:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6288d0a80f1be700041e59cb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653133149000, + "dateString": "2022-05-21T11:39:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "_id": "6288cf770f1be700041e59c8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132849000, + "dateString": "2022-05-21T11:34:09.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288ce548e9ed800049b39f7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132549000, + "dateString": "2022-05-21T11:29:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288cd278e9ed800049b39f5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653132249000, + "dateString": "2022-05-21T11:24:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "6288cbf98e9ed800049b39f2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131948000, + "dateString": "2022-05-21T11:19:08.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "6288cacb8e9ed800049b39ec" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131649000, + "dateString": "2022-05-21T11:14:09.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "6288c99e8e9ed800049b39e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131349000, + "dateString": "2022-05-21T11:09:09.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "_id": "6288c86f8e9ed800049b39e5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653131049000, + "dateString": "2022-05-21T11:04:09.000Z", + "isValid": true, + "sgv": 81, + "direction": "Flat", + "type": "sgv", + "_id": "6288c7418e9ed800049b39e3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130748000, + "dateString": "2022-05-21T10:59:08.000Z", + "isValid": true, + "sgv": 84, + "direction": "Flat", + "type": "sgv", + "_id": "6288c61a1991280004dce468" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130448000, + "dateString": "2022-05-21T10:54:08.000Z", + "isValid": true, + "sgv": 88, + "direction": "Flat", + "type": "sgv", + "_id": "6288c4ec1991280004dce464" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653130149000, + "dateString": "2022-05-21T10:49:09.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "6288c3be1991280004dce461" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129848000, + "dateString": "2022-05-21T10:44:08.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "_id": "6288c2911991280004dce45e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129548000, + "dateString": "2022-05-21T10:39:08.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288c1631991280004dce45b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653129249000, + "dateString": "2022-05-21T10:34:09.000Z", + "isValid": true, + "sgv": 96, + "direction": "Flat", + "type": "sgv", + "_id": "6288c0341991280004dce459" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128948000, + "dateString": "2022-05-21T10:29:08.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "_id": "6288bf061991280004dce457" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128649000, + "dateString": "2022-05-21T10:24:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "6288bde0abbef90004616cf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128349000, + "dateString": "2022-05-21T10:19:09.000Z", + "isValid": true, + "sgv": 104, + "direction": "Flat", + "type": "sgv", + "_id": "6288bcb2abbef90004616cf6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653128049000, + "dateString": "2022-05-21T10:14:09.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "_id": "6288bb84abbef90004616cf4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127748000, + "dateString": "2022-05-21T10:09:08.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "_id": "6288ba56abbef90004616cf2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127449000, + "dateString": "2022-05-21T10:04:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288b941abbef90004616cf0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653127149000, + "dateString": "2022-05-21T09:59:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288b813abbef90004616ceb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126849000, + "dateString": "2022-05-21T09:54:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b6e9c9c02c00041f7f06" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126549000, + "dateString": "2022-05-21T09:49:09.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6288b5bbc9c02c00041f7f04" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653126249000, + "dateString": "2022-05-21T09:44:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b48dc9c02c00041f7f02" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125948000, + "dateString": "2022-05-21T09:39:08.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b35fc9c02c00041f7f00" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125649000, + "dateString": "2022-05-21T09:34:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "Flat", + "type": "sgv", + "_id": "6288b231c9c02c00041f7efe" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125349000, + "dateString": "2022-05-21T09:29:09.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "_id": "6288b103c9c02c00041f7efc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653125048000, + "dateString": "2022-05-21T09:24:08.000Z", + "isValid": true, + "sgv": 122, + "direction": "Flat", + "type": "sgv", + "_id": "6288afd5c9c02c00041f7ef8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124749000, + "dateString": "2022-05-21T09:19:09.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "_id": "6288aea799fc930004d6bdfb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124448000, + "dateString": "2022-05-21T09:14:08.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "_id": "6288ad7999fc930004d6bdfa" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653124149000, + "dateString": "2022-05-21T09:09:09.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "_id": "6288ac4b99fc930004d6bdf8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123849000, + "dateString": "2022-05-21T09:04:09.000Z", + "isValid": true, + "sgv": 113, + "direction": "Flat", + "type": "sgv", + "_id": "6288ab1d99fc930004d6bdf6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123549000, + "dateString": "2022-05-21T08:59:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "Flat", + "type": "sgv", + "_id": "6288a9f099fc930004d6bdf4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653123248000, + "dateString": "2022-05-21T08:54:08.000Z", + "isValid": true, + "sgv": 107, + "direction": "Flat", + "type": "sgv", + "_id": "6288a8db99fc930004d6bdf1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122949000, + "dateString": "2022-05-21T08:49:09.000Z", + "isValid": true, + "sgv": 108, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a7ad99fc930004d6bdef" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122649000, + "dateString": "2022-05-21T08:44:09.000Z", + "isValid": true, + "sgv": 111, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a73099fc930004d6bded" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122349000, + "dateString": "2022-05-21T08:39:09.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288a55199fc930004d6bdeb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653122049000, + "dateString": "2022-05-21T08:34:09.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "6288a42099fc930004d6bde8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121749000, + "dateString": "2022-05-21T08:29:09.000Z", + "isValid": true, + "sgv": 138, + "direction": "Flat", + "type": "sgv", + "_id": "6288a2fca4cc860004a251d2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121449000, + "dateString": "2022-05-21T08:24:09.000Z", + "isValid": true, + "sgv": 145, + "direction": "Flat", + "type": "sgv", + "_id": "6288a1cda4cc860004a251d1" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653121149000, + "dateString": "2022-05-21T08:19:09.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "_id": "6288a09fa4cc860004a251ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120849000, + "dateString": "2022-05-21T08:14:09.000Z", + "isValid": true, + "sgv": 148, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889f6fa4cc860004a251cc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120548000, + "dateString": "2022-05-21T08:09:08.000Z", + "isValid": true, + "sgv": 146, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889e41a4cc860004a251cb" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653120249000, + "dateString": "2022-05-21T08:04:09.000Z", + "isValid": true, + "sgv": 141, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889d13a4cc860004a251c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119949000, + "dateString": "2022-05-21T07:59:09.000Z", + "isValid": true, + "sgv": 132, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889be4a4cc860004a251c7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119649000, + "dateString": "2022-05-21T07:54:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62889ac27ff1e700040f17dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119349000, + "dateString": "2022-05-21T07:49:09.000Z", + "isValid": true, + "sgv": 114, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "628899957ff1e700040f17d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653119049000, + "dateString": "2022-05-21T07:44:09.000Z", + "isValid": true, + "sgv": 105, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "628898627ff1e700040f17d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118748000, + "dateString": "2022-05-21T07:39:08.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628897357ff1e700040f17d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118449000, + "dateString": "2022-05-21T07:34:09.000Z", + "isValid": true, + "sgv": 92, + "direction": "Flat", + "type": "sgv", + "_id": "6288961d7ff1e700040f17ce" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653118149000, + "dateString": "2022-05-21T07:29:09.000Z", + "isValid": true, + "sgv": 86, + "direction": "Flat", + "type": "sgv", + "_id": "628894d37ff1e700040f17cd" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117848000, + "dateString": "2022-05-21T07:24:08.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "_id": "628893bd7ff1e700040f17c9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117549000, + "dateString": "2022-05-21T07:19:09.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628892907ff1e700040f17c7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653117249000, + "dateString": "2022-05-21T07:14:09.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "_id": "628891627ff1e700040f17c6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116949000, + "dateString": "2022-05-21T07:09:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "62889024149196000412bf57" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116649000, + "dateString": "2022-05-21T07:04:09.000Z", + "isValid": true, + "sgv": 74, + "direction": "Flat", + "type": "sgv", + "_id": "62888f0f149196000412bf54" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116349000, + "dateString": "2022-05-21T06:59:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "62888de2149196000412bf51" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653116049000, + "dateString": "2022-05-21T06:54:09.000Z", + "isValid": true, + "sgv": 69, + "direction": "Flat", + "type": "sgv", + "_id": "62888ccc149196000412bf4f" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115749000, + "dateString": "2022-05-21T06:49:09.000Z", + "isValid": true, + "sgv": 70, + "direction": "Flat", + "type": "sgv", + "_id": "62888b85149196000412bf4d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115449000, + "dateString": "2022-05-21T06:44:09.000Z", + "isValid": true, + "sgv": 74, + "direction": "Flat", + "type": "sgv", + "_id": "62888a57149196000412bf4b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653115149000, + "dateString": "2022-05-21T06:39:09.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "_id": "6288892a149196000412bf49" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114849000, + "dateString": "2022-05-21T06:34:09.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "_id": "628888018ff3530004dc6070" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114549000, + "dateString": "2022-05-21T06:29:09.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "_id": "628886d28ff3530004dc606b" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653114249000, + "dateString": "2022-05-21T06:24:09.000Z", + "isValid": true, + "sgv": 85, + "direction": "Flat", + "type": "sgv", + "_id": "628885a48ff3530004dc6069" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113949000, + "dateString": "2022-05-21T06:19:09.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "_id": "628884778ff3530004dc6067" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113649000, + "dateString": "2022-05-21T06:14:09.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "_id": "6288834a8ff3530004dc6065" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113349000, + "dateString": "2022-05-21T06:09:09.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "_id": "6288821b8ff3530004dc6062" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653113049000, + "dateString": "2022-05-21T06:04:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "_id": "628880ee8ff3530004dc6060" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112749000, + "dateString": "2022-05-21T05:59:09.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "_id": "62887fcee964810004aa5666" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112449000, + "dateString": "2022-05-21T05:54:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62887ea1e964810004aa5664" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653112148000, + "dateString": "2022-05-21T05:49:08.000Z", + "isValid": true, + "sgv": 103, + "direction": "Flat", + "type": "sgv", + "_id": "62887d72e964810004aa5661" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111849000, + "dateString": "2022-05-21T05:44:09.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "_id": "62887c44e964810004aa565d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111549000, + "dateString": "2022-05-21T05:39:09.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "_id": "62887b17e964810004aa565a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653111249000, + "dateString": "2022-05-21T05:34:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628879e9e964810004aa5657" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110949000, + "dateString": "2022-05-21T05:29:09.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "_id": "628878bbe964810004aa5655" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110649000, + "dateString": "2022-05-21T05:24:09.000Z", + "isValid": true, + "sgv": 98, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628877a5363e6c0004f710e0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110348000, + "dateString": "2022-05-21T05:19:08.000Z", + "isValid": true, + "sgv": 102, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62887677363e6c0004f710de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653110049000, + "dateString": "2022-05-21T05:14:09.000Z", + "isValid": true, + "sgv": 109, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62887549363e6c0004f710dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109748000, + "dateString": "2022-05-21T05:09:08.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "_id": "6288741c363e6c0004f710d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109448000, + "dateString": "2022-05-21T05:04:08.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "_id": "628872ef363e6c0004f710d6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653109148000, + "dateString": "2022-05-21T04:59:08.000Z", + "isValid": true, + "sgv": 129, + "direction": "Flat", + "type": "sgv", + "_id": "628871c1363e6c0004f710d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108848000, + "dateString": "2022-05-21T04:54:08.000Z", + "isValid": true, + "sgv": 130, + "direction": "Flat", + "type": "sgv", + "_id": "62887093363e6c0004f710cf" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108548000, + "dateString": "2022-05-21T04:49:08.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "_id": "62886f5719e2e60004989bbc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653108249000, + "dateString": "2022-05-21T04:44:09.000Z", + "isValid": true, + "sgv": 123, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886e2919e2e60004989bba" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107948000, + "dateString": "2022-05-21T04:39:08.000Z", + "isValid": true, + "sgv": 124, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886cfc19e2e60004989bb8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107648000, + "dateString": "2022-05-21T04:34:08.000Z", + "isValid": true, + "sgv": 132, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62886be719e2e60004989bb5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107348000, + "dateString": "2022-05-21T04:29:08.000Z", + "isValid": true, + "sgv": 144, + "direction": "Flat", + "type": "sgv", + "_id": "62886ab919e2e60004989bb3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653107048000, + "dateString": "2022-05-21T04:24:08.000Z", + "isValid": true, + "sgv": 153, + "direction": "Flat", + "type": "sgv", + "_id": "6288698b19e2e60004989bb0" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106749000, + "dateString": "2022-05-21T04:19:09.000Z", + "isValid": true, + "sgv": 157, + "direction": "Flat", + "type": "sgv", + "_id": "6288685d19e2e60004989bac" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106449000, + "dateString": "2022-05-21T04:14:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "Flat", + "type": "sgv", + "_id": "6288672f42c1220004f9573a" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653106149000, + "dateString": "2022-05-21T04:09:09.000Z", + "isValid": true, + "sgv": 151, + "direction": "Flat", + "type": "sgv", + "_id": "6288660142c1220004f95736" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105848000, + "dateString": "2022-05-21T04:04:08.000Z", + "isValid": true, + "sgv": 146, + "direction": "Flat", + "type": "sgv", + "_id": "628864d342c1220004f95733" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105549000, + "dateString": "2022-05-21T03:59:09.000Z", + "isValid": true, + "sgv": 146, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "628863a542c1220004f95730" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653105248000, + "dateString": "2022-05-21T03:54:08.000Z", + "isValid": true, + "sgv": 149, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288629042c1220004f9572e" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104949000, + "dateString": "2022-05-21T03:49:09.000Z", + "isValid": true, + "sgv": 155, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288614942c1220004f9572c" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104648000, + "dateString": "2022-05-21T03:44:08.000Z", + "isValid": true, + "sgv": 162, + "direction": "Flat", + "type": "sgv", + "_id": "6288601b42c1220004f95729" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104349000, + "dateString": "2022-05-21T03:39:09.000Z", + "isValid": true, + "sgv": 167, + "direction": "Flat", + "type": "sgv", + "_id": "62885ef1293f3e00042c31e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653104049000, + "dateString": "2022-05-21T03:34:09.000Z", + "isValid": true, + "sgv": 170, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62885dc3293f3e00042c31de" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103748000, + "dateString": "2022-05-21T03:29:08.000Z", + "isValid": true, + "sgv": 171, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "62885c95293f3e00042c31db" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103448000, + "dateString": "2022-05-21T03:24:08.000Z", + "isValid": true, + "sgv": 174, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885b81293f3e00042c31d9" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653103149000, + "dateString": "2022-05-21T03:19:09.000Z", + "isValid": true, + "sgv": 182, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885a52293f3e00042c31d7" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102848000, + "dateString": "2022-05-21T03:14:08.000Z", + "isValid": true, + "sgv": 193, + "direction": "SingleDown", + "type": "sgv", + "_id": "62885924293f3e00042c31d5" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102548000, + "dateString": "2022-05-21T03:09:08.000Z", + "isValid": true, + "sgv": 204, + "direction": "SingleDown", + "type": "sgv", + "_id": "628857f7293f3e00042c31d3" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653102249000, + "dateString": "2022-05-21T03:04:09.000Z", + "isValid": true, + "sgv": 216, + "direction": "SingleDown", + "type": "sgv", + "_id": "628856da5151b5000462a1ea" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101948000, + "dateString": "2022-05-21T02:59:08.000Z", + "isValid": true, + "sgv": 228, + "direction": "SingleDown", + "type": "sgv", + "_id": "628855935151b5000462a1e8" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101648000, + "dateString": "2022-05-21T02:54:08.000Z", + "isValid": true, + "sgv": 241, + "direction": "SingleDown", + "type": "sgv", + "_id": "6288547f5151b5000462a1e6" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101348000, + "dateString": "2022-05-21T02:49:08.000Z", + "isValid": true, + "sgv": 253, + "direction": "SingleDown", + "type": "sgv", + "_id": "628853395151b5000462a1e4" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653101048000, + "dateString": "2022-05-21T02:44:08.000Z", + "isValid": true, + "sgv": 267, + "direction": "FortyFiveDown", + "type": "sgv", + "_id": "6288520b5151b5000462a1e2" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100748000, + "dateString": "2022-05-21T02:39:08.000Z", + "isValid": true, + "sgv": 283, + "direction": "Flat", + "type": "sgv", + "_id": "628850de5151b5000462a1df" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100449000, + "dateString": "2022-05-21T02:34:09.000Z", + "isValid": true, + "sgv": 297, + "direction": "Flat", + "type": "sgv", + "_id": "62884fb05151b5000462a1dc" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653100148000, + "dateString": "2022-05-21T02:29:08.000Z", + "isValid": true, + "sgv": 307, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884e9493668c0004a30517" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099848000, + "dateString": "2022-05-21T02:24:08.000Z", + "isValid": true, + "sgv": 308, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884d6793668c0004a30514" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099548000, + "dateString": "2022-05-21T02:19:08.000Z", + "isValid": true, + "sgv": 296, + "direction": "FortyFiveUp", + "type": "sgv", + "_id": "62884c3993668c0004a30510" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653099249000, + "dateString": "2022-05-21T02:14:09.000Z", + "isValid": true, + "sgv": 282, + "direction": "Flat", + "type": "sgv", + "_id": "62884b0c93668c0004a3050d" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653098948000, + "dateString": "2022-05-21T02:09:08.000Z", + "isValid": true, + "sgv": 271, + "direction": "Flat", + "type": "sgv", + "_id": "628849de93668c0004a30508" + }, + { + "device": "AndroidAPS-DexcomG6", + "date": 1653098648000, + "dateString": "2022-05-21T02:04:08.000Z", + "isValid": true, + "sgv": 271, + "direction": "Flat", + "type": "sgv", + "_id": "628848b093668c0004a30504" + } +] diff --git a/app/src/test/res/autotune/test3/aaps-treatments.2022-05-21.json b/app/src/test/res/autotune/test3/aaps-treatments.2022-05-21.json new file mode 100644 index 0000000000..b271cc80e4 --- /dev/null +++ b/app/src/test/res/autotune/test3/aaps-treatments.2022-05-21.json @@ -0,0 +1,3146 @@ +[ + { + "created_at": "2022-05-22T02:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 635539, + "type": "NORMAL", + "rate": 0.0742, + "percent": -90, + "pumpId": 454016, + "endId": 454021, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289982461a8290004740387" + }, + { + "created_at": "2022-05-22T01:55:40.718Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 259282, + "type": "NORMAL", + "rate": 0.0824, + "percent": -90, + "pumpId": 454016, + "endId": 454021, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289982461a8290004740387" + }, + { + "created_at": "2022-05-22T01:50:36.118Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303106, + "type": "NORMAL", + "rate": 0.1648, + "percent": -80, + "pumpId": 454013, + "endId": 454015, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628996f661a8290004740384" + }, + { + "created_at": "2022-05-22T01:45:35.222Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299405, + "type": "NORMAL", + "rate": 0.49439999999999995, + "percent": -40, + "pumpId": 454010, + "endId": 454012, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628995c761a8290004740381" + }, + { + "created_at": "2022-05-22T01:40:51.929Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 281796, + "type": "NORMAL", + "rate": 0.6592, + "percent": -20, + "pumpId": 454007, + "endId": 454009, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628994ab50e51d0004429e6f" + }, + { + "created_at": "2022-05-22T01:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2449437, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 454003, + "endId": 454006, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628988efda46aa0004d1e0f7" + }, + { + "created_at": "2022-05-22T00:50:32.326Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 567674, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 454003, + "endId": 454006, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628988efda46aa0004d1e0f7" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-22T00:45:47.966Z", + "date": 1653180347966, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21574, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628987c0da46aa0004d1e0f3" + }, + { + "created_at": "2022-05-22T00:45:45.232Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285608, + "type": "NORMAL", + "rate": 1.209, + "percent": 50, + "pumpId": 453998, + "endId": 454002, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628987c0da46aa0004d1e0f4" + }, + { + "created_at": "2022-05-22T00:35:30.702Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 613035, + "type": "NORMAL", + "rate": 1.0478, + "percent": 30, + "pumpId": 453995, + "endId": 453997, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62898563da46aa0004d1e0ec" + }, + { + "created_at": "2022-05-22T00:30:42.142Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 287064, + "type": "NORMAL", + "rate": 0.7254, + "percent": -10, + "pumpId": 453992, + "endId": 453994, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628984439d6f1800047cd0df" + }, + { + "created_at": "2022-05-22T00:20:44.045Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 595609, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453989, + "endId": 453991, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628981e59d6f1800047cd0da" + }, + { + "created_at": "2022-05-22T00:10:28.057Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 614498, + "type": "NORMAL", + "rate": 0.403, + "percent": -50, + "pumpId": 453986, + "endId": 453988, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897f879d6f1800047cd0d5" + }, + { + "created_at": "2022-05-22T00:06:13.096Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 252465, + "type": "NORMAL", + "rate": 0.403, + "percent": -50, + "pumpId": 453983, + "endId": 453985, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897e8b9d6f1800047cd0d2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-22T00:00:34.526Z", + "date": 1653177634526, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21573, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897d299d6f1800047cd0cd" + }, + { + "created_at": "2022-05-22T00:00:31.592Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 340013, + "type": "NORMAL", + "rate": 0.5642, + "percent": -30, + "pumpId": 453978, + "endId": 453982, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897d299d6f1800047cd0cf" + }, + { + "created_at": "2022-05-22T00:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 30096, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453974, + "endId": 453977, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897c139d6f1800047cd0ca" + }, + { + "created_at": "2022-05-21T23:55:56.658Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 243342, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453974, + "endId": 453977, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897c139d6f1800047cd0ca" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.54, + "created_at": "2022-05-21T23:50:30.757Z", + "date": 1653177030757, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21572, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62897ad171a363000480abcb" + }, + { + "created_at": "2022-05-21T23:46:13.228Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 573000, + "type": "FAKE_EXTENDED", + "rate": 2.561162303664922, + "absolute": 2.561162303664922, + "pumpId": 21571, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628979d571a363000480abc9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-21T23:40:59.180Z", + "date": 1653176459180, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21570, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289788d71a363000480abc4" + }, + { + "created_at": "2022-05-21T23:40:57.936Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304306, + "type": "NORMAL", + "rate": 1.6842000000000001, + "percent": 110, + "pumpId": 453959, + "endId": 453963, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289788e71a363000480abc6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T23:20:51.857Z", + "date": 1653175251857, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21569, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628973eb71a363000480abba" + }, + { + "created_at": "2022-05-21T23:16:23.121Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1472326, + "type": "NORMAL", + "rate": 1.1228, + "percent": 40, + "pumpId": 453954, + "endId": 453958, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628972de37d09a00043f2b24" + }, + { + "created_at": "2022-05-21T23:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 16, + "durationInMilliseconds": 983121, + "type": "NORMAL", + "rate": 0.802, + "percent": 0, + "_id": "neutral_1653171415806" + }, + { + "created_at": "2022-05-21T22:16:55.806Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 43, + "durationInMilliseconds": 2584194, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653171415806" + }, + { + "created_at": "2022-05-21T22:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 16, + "durationInMilliseconds": 1015806, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453943, + "endId": 453951, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957129bf1e6000482ff9a" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-21T21:24:43.261Z", + "date": 1653168283261, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21568, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628958a49bf1e6000482ff9c" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T21:17:49.628Z", + "date": 1653167869628, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21567, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957109bf1e6000482ff99" + }, + { + "created_at": "2022-05-21T21:17:43.507Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 42, + "durationInMilliseconds": 2536493, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453943, + "endId": 453951, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628957129bf1e6000482ff9a" + }, + { + "created_at": "2022-05-21T21:10:55.350Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 406671, + "type": "NORMAL", + "rate": 1.0049000000000001, + "percent": 30, + "pumpId": 453940, + "endId": 453942, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628955629bf1e6000482ff94" + }, + { + "created_at": "2022-05-21T21:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 653862, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453936, + "endId": 453939, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894e5580fc7e00041b22a2" + }, + { + "created_at": "2022-05-21T20:40:34.976Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1165024, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453936, + "endId": 453939, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894e5580fc7e00041b22a2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T20:30:40.892Z", + "date": 1653165040892, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21566, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894bf780fc7e00041b229d" + }, + { + "created_at": "2022-05-21T20:25:40.930Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 891567, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453931, + "endId": 453935, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894aca4493460004e63a3a" + }, + { + "eventType": "Meal Bolus", + "insulin": 9.4, + "created_at": "2022-05-21T20:19:54.209Z", + "date": 1653164394209, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21565, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628949824493460004e63a35" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T20:11:04.953Z", + "date": 1653163864953, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21564, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628947704493460004e63a30" + }, + { + "created_at": "2022-05-21T20:11:03.814Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 874625, + "type": "NORMAL", + "rate": 1.2563, + "percent": 70, + "pumpId": 453924, + "endId": 453930, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628947574493460004e63a2f" + }, + { + "created_at": "2022-05-21T20:00:37.912Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 623413, + "type": "NORMAL", + "rate": 0.9606999999999999, + "percent": 30, + "pumpId": 453921, + "endId": 453923, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628944fa4493460004e63a29" + }, + { + "created_at": "2022-05-21T20:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 35425, + "type": "NORMAL", + "rate": 0.2956, + "percent": -60, + "pumpId": 453917, + "endId": 453920, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894164598f780004bb3b2f" + }, + { + "created_at": "2022-05-21T19:45:25.759Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 874241, + "type": "NORMAL", + "rate": 0.2888, + "percent": -60, + "pumpId": 453917, + "endId": 453920, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62894164598f780004bb3b2f" + }, + { + "created_at": "2022-05-21T19:25:47.539Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1175731, + "type": "NORMAL", + "rate": 0.43320000000000003, + "percent": -40, + "pumpId": 453914, + "endId": 453916, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62893cc8598f780004bb3b25" + }, + { + "created_at": "2022-05-21T19:20:54.174Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293365, + "type": "NORMAL", + "rate": 0.722, + "percent": 0, + "_id": "neutral_1653160854174" + }, + { + "created_at": "2022-05-21T19:10:51.515Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 602659, + "type": "NORMAL", + "rate": 0.7942, + "percent": 10, + "pumpId": 453908, + "endId": 453910, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289394a22fbc8000495b821" + }, + { + "created_at": "2022-05-21T19:01:01.322Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 588703, + "type": "NORMAL", + "rate": 0.2888, + "percent": -60, + "pumpId": 453905, + "endId": 453907, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628936ef22fbc8000495b81c" + }, + { + "created_at": "2022-05-21T19:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 59826, + "type": "NORMAL", + "rate": 0.7942, + "percent": 10, + "pumpId": 453900, + "endId": 453904, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289349522fbc8000495b816" + }, + { + "created_at": "2022-05-21T18:50:58.216Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 541784, + "type": "NORMAL", + "rate": 0.77, + "percent": 10, + "pumpId": 453900, + "endId": 453904, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289349522fbc8000495b816" + }, + { + "created_at": "2022-05-21T18:46:12.499Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285717, + "type": "NORMAL", + "rate": 0.7, + "percent": 0, + "_id": "neutral_1653158772499" + }, + { + "created_at": "2022-05-21T18:30:30.651Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 941848, + "type": "NORMAL", + "rate": 0.91, + "percent": 30, + "pumpId": 453894, + "endId": 453896, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892fda840d8d0004a20bfc" + }, + { + "created_at": "2022-05-21T18:20:44.275Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 584884, + "type": "NORMAL", + "rate": 0.28, + "percent": -60, + "pumpId": 453891, + "endId": 453893, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892d80840d8d0004a20bf7" + }, + { + "created_at": "2022-05-21T18:15:30.389Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 312398, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453888, + "endId": 453890, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62892c52840d8d0004a20bf4" + }, + { + "created_at": "2022-05-21T18:00:33.832Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 895066, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453885, + "endId": 453887, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628928ca8809e60004c644e8" + }, + { + "created_at": "2022-05-21T18:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 32345, + "type": "NORMAL", + "rate": 0.35, + "percent": -50, + "pumpId": 453881, + "endId": 453884, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628927b58809e60004c644e5" + }, + { + "created_at": "2022-05-21T17:55:44.739Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 255261, + "type": "NORMAL", + "rate": 0.3295, + "percent": -50, + "pumpId": 453881, + "endId": 453884, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628927b58809e60004c644e5" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-21T17:45:48.032Z", + "date": 1653155148032, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21563, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628925588809e60004c644de" + }, + { + "created_at": "2022-05-21T17:45:45.750Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 597498, + "type": "NORMAL", + "rate": 1.5816, + "percent": 140, + "pumpId": 453876, + "endId": 453880, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628925588809e60004c644e0" + }, + { + "created_at": "2022-05-21T17:40:44.874Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299386, + "type": "NORMAL", + "rate": 0.8567, + "percent": 30, + "pumpId": 453873, + "endId": 453875, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289242b8809e60004c644db" + }, + { + "created_at": "2022-05-21T17:35:46.611Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 295766, + "type": "NORMAL", + "rate": 0.3295, + "percent": -50, + "pumpId": 453870, + "endId": 453872, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628922fe8809e60004c644d8" + }, + { + "created_at": "2022-05-21T17:25:37.912Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 607206, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453867, + "endId": 453869, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628920a41090500004ca4729" + }, + { + "created_at": "2022-05-21T17:20:42.063Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293355, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453864, + "endId": 453866, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891f771090500004ca4726" + }, + { + "created_at": "2022-05-21T17:10:30.971Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 608601, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453861, + "endId": 453863, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891d1b1090500004ca4721" + }, + { + "created_at": "2022-05-21T17:00:45.815Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 582673, + "type": "NORMAL", + "rate": 0.0659, + "percent": -90, + "pumpId": 453858, + "endId": 453860, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62891ac01090500004ca471c" + }, + { + "created_at": "2022-05-21T17:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 43325, + "type": "NORMAL", + "rate": 1.4498000000000002, + "percent": 120, + "pumpId": 453852, + "endId": 453857, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628918711090500004ca4716" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T16:55:53.346Z", + "date": 1653152153346, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21562, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289199e1090500004ca4718" + }, + { + "created_at": "2022-05-21T16:50:50.998Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 549002, + "type": "NORMAL", + "rate": 1.4322, + "percent": 120, + "pumpId": 453852, + "endId": 453857, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628918711090500004ca4716" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-21T16:45:50.105Z", + "date": 1653151550105, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21561, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628917431090500004ca4711" + }, + { + "created_at": "2022-05-21T16:45:47.200Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300314, + "type": "NORMAL", + "rate": 1.0415999999999999, + "percent": 60, + "pumpId": 453847, + "endId": 453851, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628917431090500004ca4713" + }, + { + "created_at": "2022-05-21T16:40:54.765Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 290944, + "type": "NORMAL", + "rate": 0.8463, + "percent": 30, + "pumpId": 453844, + "endId": 453846, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289161c1090500004ca470e" + }, + { + "created_at": "2022-05-21T16:35:35.684Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 317593, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453841, + "endId": 453843, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628914eb1090500004ca470b" + }, + { + "created_at": "2022-05-21T16:30:39.072Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 295126, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453838, + "endId": 453840, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913c01090500004ca4708" + }, + { + "created_at": "2022-05-21T16:25:35.342Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 301235, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453835, + "endId": 453837, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913141090500004ca4705" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-21T16:20:30.382Z", + "date": 1653150030382, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21560, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6289130f1090500004ca4700" + }, + { + "created_at": "2022-05-21T16:20:27.375Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 306478, + "type": "NORMAL", + "rate": 1.0415999999999999, + "percent": 60, + "pumpId": 453830, + "endId": 453834, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628913101090500004ca4702" + }, + { + "created_at": "2022-05-21T16:11:20.186Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 545699, + "type": "NORMAL", + "rate": 0.32550000000000007, + "percent": -50, + "pumpId": 453827, + "endId": 453829, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890f811090500004ca46fc" + }, + { + "created_at": "2022-05-21T16:06:52.798Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 265903, + "type": "NORMAL", + "rate": 0.26039999999999996, + "percent": -60, + "pumpId": 453824, + "endId": 453826, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890e29cf7ee10004a2b1e1" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-21T16:01:01.819Z", + "date": 1653148861819, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21559, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890cc9cf7ee10004a2b1dc" + }, + { + "created_at": "2022-05-21T16:00:58.172Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 344000, + "type": "FAKE_EXTENDED", + "rate": 1.9068139534883721, + "absolute": 1.9068139534883721, + "pumpId": 21558, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890cc9cf7ee10004a2b1dd" + }, + { + "created_at": "2022-05-21T16:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 46830, + "type": "NORMAL", + "rate": 0.06509999999999999, + "percent": -90, + "pumpId": 453811, + "endId": 453814, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890b82cf7ee10004a2b1d9" + }, + { + "created_at": "2022-05-21T15:55:39.147Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 260853, + "type": "NORMAL", + "rate": 0.0673, + "percent": -90, + "pumpId": 453811, + "endId": 453814, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890b82cf7ee10004a2b1d9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T15:51:00.932Z", + "date": 1653148260932, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21557, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890a6dcf7ee10004a2b1d4" + }, + { + "created_at": "2022-05-21T15:50:58.818Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 278838, + "type": "NORMAL", + "rate": 1.1441000000000001, + "percent": 70, + "pumpId": 453806, + "endId": 453810, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890a6ecf7ee10004a2b1d6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T15:40:59.961Z", + "date": 1653147659961, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21556, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890811cf7ee10004a2b1cf" + }, + { + "created_at": "2022-05-21T15:35:20.343Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 935989, + "type": "NORMAL", + "rate": 1.0095, + "percent": 50, + "pumpId": 453800, + "endId": 453805, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628906e3cf7ee10004a2b1cc" + }, + { + "created_at": "2022-05-21T15:31:00.492Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 258353, + "type": "NORMAL", + "rate": 0.0673, + "percent": -90, + "pumpId": 453797, + "endId": 453799, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628905b6c9346b0004863368" + }, + { + "created_at": "2022-05-21T15:25:55.840Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303154, + "type": "NORMAL", + "rate": 0.3365000000000001, + "percent": -50, + "pumpId": 453794, + "endId": 453796, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62890488c9346b0004863365" + }, + { + "created_at": "2022-05-21T15:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1553350, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453790, + "endId": 453793, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288fa1b0e0c880004d58de2" + }, + { + "created_at": "2022-05-21T14:41:07.802Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 18, + "durationInMilliseconds": 1132198, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453790, + "endId": 453793, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288fa1b0e0c880004d58de2" + }, + { + "created_at": "2022-05-21T14:30:59.772Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 605542, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453787, + "endId": 453789, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f7a60e0c880004d58ddd" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-21T14:25:43.954Z", + "date": 1653143143954, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21555, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f6770e0c880004d58dd9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.78, + "created_at": "2022-05-21T14:15:46.926Z", + "date": 1653142546926, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21554, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f4152634cd0004296072" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.86, + "created_at": "2022-05-21T14:05:34.493Z", + "date": 1653141934493, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21553, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288f1b82634cd000429606d" + }, + { + "created_at": "2022-05-21T14:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 30, + "durationInMilliseconds": 1857281, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453769, + "endId": 453786, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e8910f1be700041e5a02" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.58, + "created_at": "2022-05-21T13:55:47.615Z", + "date": 1653141347615, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21552, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ef752634cd0004296068" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.98, + "created_at": "2022-05-21T13:45:57.753Z", + "date": 1653140757753, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21551, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ed160f1be700041e5a0c" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.6, + "created_at": "2022-05-21T13:36:02.971Z", + "date": 1653140162971, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21550, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288ead30f1be700041e5a08" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.58, + "created_at": "2022-05-21T13:30:42.515Z", + "date": 1653139842515, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21549, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e98c0f1be700041e5a04" + }, + { + "created_at": "2022-05-21T13:26:18.959Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 33, + "durationInMilliseconds": 2021041, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453769, + "endId": 453786, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e8910f1be700041e5a02" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.74, + "created_at": "2022-05-21T13:10:43.719Z", + "date": 1653138643719, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21548, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e5520f1be700041e59f9" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.04, + "created_at": "2022-05-21T13:00:56.399Z", + "date": 1653138056399, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e2970f1be700041e59f4" + }, + { + "created_at": "2022-05-21T13:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 26, + "durationInMilliseconds": 1576482, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453759, + "endId": 453768, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288da470f1be700041e59e4" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.24, + "created_at": "2022-05-21T12:55:30.825Z", + "date": 1653137730825, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21546, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288e1500f1be700041e59f1" + }, + { + "created_at": "2022-05-21T12:25:26.042Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 34, + "durationInMilliseconds": 2073958, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453759, + "endId": 453768, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288da470f1be700041e59e4" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-21T12:10:34.513Z", + "date": 1653135034513, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21545, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288d6ca0f1be700041e59db" + }, + { + "created_at": "2022-05-21T12:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1523557, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453752, + "endId": 453758, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cc5d8e9ed800049b39f4" + }, + { + "created_at": "2022-05-21T11:26:10.112Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 33, + "durationInMilliseconds": 2029888, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453752, + "endId": 453758, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cc5d8e9ed800049b39f4" + }, + { + "eventType": "Meal Bolus", + "insulin": 8.22, + "created_at": "2022-05-21T11:23:36.043Z", + "date": 1653132216043, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21544, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cbc78e9ed800049b39ef" + }, + { + "created_at": "2022-05-21T11:21:02.281Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299000, + "type": "FAKE_EXTENDED", + "rate": 1.6932107023411371, + "absolute": 1.6932107023411371, + "pumpId": 21543, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288cb308e9ed800049b39ee" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T11:15:45.765Z", + "date": 1653131745765, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21542, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c9e98e9ed800049b39e9" + }, + { + "created_at": "2022-05-21T11:15:43.070Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 308169, + "type": "NORMAL", + "rate": 1.533, + "percent": 110, + "pumpId": 453738, + "endId": 453742, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c9e98e9ed800049b39eb" + }, + { + "created_at": "2022-05-21T11:10:35.181Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 305390, + "type": "NORMAL", + "rate": 0.073, + "percent": -90, + "pumpId": 453735, + "endId": 453737, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c8bb8e9ed800049b39e7" + }, + { + "created_at": "2022-05-21T11:00:50.721Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 582968, + "type": "NORMAL", + "rate": 0.21899999999999997, + "percent": -70, + "pumpId": 453732, + "endId": 453734, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c6661991280004dce46a" + }, + { + "created_at": "2022-05-21T11:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 49281, + "type": "NORMAL", + "rate": 1.022, + "percent": 40, + "pumpId": 453728, + "endId": 453731, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c5381991280004dce466" + }, + { + "created_at": "2022-05-21T10:55:43.162Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 256838, + "type": "NORMAL", + "rate": 1.0248, + "percent": 40, + "pumpId": 453728, + "endId": 453731, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c5381991280004dce466" + }, + { + "created_at": "2022-05-21T10:50:29.463Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 312203, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453725, + "endId": 453727, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c40a1991280004dce463" + }, + { + "created_at": "2022-05-21T10:45:42.010Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285961, + "type": "NORMAL", + "rate": 0.0732, + "percent": -90, + "pumpId": 453722, + "endId": 453724, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c2dd1991280004dce460" + }, + { + "created_at": "2022-05-21T10:40:32.888Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 306629, + "type": "NORMAL", + "rate": 0.2928, + "percent": -60, + "pumpId": 453719, + "endId": 453721, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288c1ae1991280004dce45d" + }, + { + "created_at": "2022-05-21T10:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2430396, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453715, + "endId": 453718, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288b09fc9c02c00041f7efb" + }, + { + "created_at": "2022-05-21T09:27:51.738Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 32, + "durationInMilliseconds": 1928262, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453715, + "endId": 453718, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288b09fc9c02c00041f7efb" + }, + { + "created_at": "2022-05-21T09:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 27, + "durationInMilliseconds": 1670246, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453708, + "endId": 453714, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a50699fc930004d6bdea" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-21T08:58:07.216Z", + "date": 1653123487216, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21541, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a9a499fc930004d6bdf2" + }, + { + "created_at": "2022-05-21T08:38:27.621Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 21, + "durationInMilliseconds": 1292379, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453708, + "endId": 453714, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288a50699fc930004d6bdea" + }, + { + "created_at": "2022-05-21T08:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 38, + "durationInMilliseconds": 2306129, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453704, + "endId": 453707, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889bb2a4cc860004a251c6" + }, + { + "created_at": "2022-05-21T07:58:04.003Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 1, + "durationInMilliseconds": 115997, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453704, + "endId": 453707, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889bb2a4cc860004a251c6" + }, + { + "eventType": "Meal Bolus", + "insulin": 13.56, + "created_at": "2022-05-21T07:52:52.394Z", + "date": 1653119572394, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21540, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889a5d7ff1e700040f17d9" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-21T07:38:42.955Z", + "date": 1653118722955, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21539, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288971c7ff1e700040f17d2" + }, + { + "created_at": "2022-05-21T07:38:40.317Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1153999, + "type": "FAKE_EXTENDED", + "rate": 2.251401644195532, + "absolute": 2.251401644195532, + "pumpId": 21538, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628897027ff1e700040f17d0" + }, + { + "created_at": "2022-05-21T07:28:33.763Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 595482, + "type": "NORMAL", + "rate": 0.377, + "percent": -50, + "pumpId": 453689, + "endId": 453691, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628894a17ff1e700040f17cc" + }, + { + "created_at": "2022-05-21T07:13:06.679Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 924592, + "type": "NORMAL", + "rate": 0.2262, + "percent": -70, + "pumpId": 453686, + "endId": 453688, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62889106149196000412bf59" + }, + { + "created_at": "2022-05-21T07:08:35.905Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 269284, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453683, + "endId": 453685, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288900b149196000412bf56" + }, + { + "created_at": "2022-05-21T07:03:41.224Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292184, + "type": "NORMAL", + "rate": 0.0754, + "percent": -90, + "pumpId": 453680, + "endId": 453682, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62888edd149196000412bf53" + }, + { + "created_at": "2022-05-21T07:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 3, + "durationInMilliseconds": 219733, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453676, + "endId": 453679, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628887058ff3530004dc606e" + }, + { + "created_at": "2022-05-21T06:30:07.195Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1792805, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453676, + "endId": 453679, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628887058ff3530004dc606e" + }, + { + "created_at": "2022-05-21T06:12:44.359Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1041347, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453673, + "endId": 453675, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628882e48ff3530004dc6064" + }, + { + "created_at": "2022-05-21T06:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 12, + "durationInMilliseconds": 762867, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453669, + "endId": 453672, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ea0e964810004aa5663" + }, + { + "created_at": "2022-05-21T05:54:16.341Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 343659, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453669, + "endId": 453672, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ea0e964810004aa5663" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.44, + "created_at": "2022-05-21T05:47:59.042Z", + "date": 1653112079042, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21537, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887d27e964810004aa5660" + }, + { + "created_at": "2022-05-21T05:47:56.189Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 371000, + "type": "FAKE_EXTENDED", + "rate": 3.305911051212938, + "absolute": 3.305911051212938, + "pumpId": 21536, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887d0ee964810004aa565f" + }, + { + "created_at": "2022-05-21T05:42:45.087Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299481, + "type": "NORMAL", + "rate": 0.8613000000000001, + "percent": 10, + "pumpId": 453657, + "endId": 453659, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887be0e964810004aa565c" + }, + { + "created_at": "2022-05-21T05:37:33.183Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 309411, + "type": "NORMAL", + "rate": 0.0783, + "percent": -90, + "pumpId": 453654, + "endId": 453656, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62887ab2e964810004aa5659" + }, + { + "created_at": "2022-05-21T05:12:51.790Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1479904, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453651, + "endId": 453653, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628874e5363e6c0004f710db" + }, + { + "created_at": "2022-05-21T05:07:46.012Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304280, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453648, + "endId": 453650, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628873b8363e6c0004f710d8" + }, + { + "created_at": "2022-05-21T05:02:53.773Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289742, + "type": "NORMAL", + "rate": 0.1566, + "percent": -80, + "pumpId": 453645, + "endId": 453647, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288728a363e6c0004f710d5" + }, + { + "created_at": "2022-05-21T05:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 171279, + "type": "NORMAL", + "rate": 1.5659999999999998, + "percent": 100, + "pumpId": 453639, + "endId": 453644, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715d363e6c0004f710d2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-21T04:57:53.298Z", + "date": 1653109073298, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21535, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715c363e6c0004f710d1" + }, + { + "created_at": "2022-05-21T04:57:50.147Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 129853, + "type": "NORMAL", + "rate": 1.472, + "percent": 100, + "pumpId": 453639, + "endId": 453644, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288715d363e6c0004f710d2" + }, + { + "created_at": "2022-05-21T04:52:45.360Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303299, + "type": "NORMAL", + "rate": 1.0304, + "percent": 40, + "pumpId": 453636, + "endId": 453638, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288702f363e6c0004f710ce" + }, + { + "created_at": "2022-05-21T04:37:34.478Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 909400, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453633, + "endId": 453635, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62886c9719e2e60004989bb7" + }, + { + "created_at": "2022-05-21T04:27:51.392Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 581589, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453630, + "endId": 453632, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62886a5519e2e60004989bb2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-21T04:23:04.285Z", + "date": 1653106984285, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21534, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288694019e2e60004989baf" + }, + { + "created_at": "2022-05-21T04:23:00.631Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289268, + "type": "NORMAL", + "rate": 0.4416, + "percent": -40, + "pumpId": 453625, + "endId": 453629, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288692719e2e60004989bae" + }, + { + "created_at": "2022-05-21T04:18:00.399Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 291000, + "type": "FAKE_EXTENDED", + "rate": 3.210226804123711, + "absolute": 3.210226804123711, + "pumpId": 21533, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288681219e2e60004989bab" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.66, + "created_at": "2022-05-21T04:13:03.102Z", + "date": 1653106383102, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21532, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628866e342c1220004f95738" + }, + { + "created_at": "2022-05-21T04:13:00.412Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299987, + "type": "FAKE_EXTENDED", + "rate": 3.3759999999999994, + "absolute": 3.3759999999999994, + "pumpId": 21531, + "endId": 21533, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628866e342c1220004f95739" + }, + { + "created_at": "2022-05-21T04:07:39.846Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 307758, + "type": "NORMAL", + "rate": 1.0304, + "percent": 40, + "pumpId": 453609, + "endId": 453611, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288659d42c1220004f95735" + }, + { + "created_at": "2022-05-21T04:02:57.240Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 280112, + "type": "NORMAL", + "rate": 0.368, + "percent": -50, + "pumpId": 453606, + "endId": 453608, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288648842c1220004f95732" + }, + { + "created_at": "2022-05-21T04:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 175749, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453602, + "endId": 453605, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628860fe42c1220004f9572b" + }, + { + "created_at": "2022-05-21T03:47:49.532Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 12, + "durationInMilliseconds": 730468, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453602, + "endId": 453605, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628860fe42c1220004f9572b" + }, + { + "created_at": "2022-05-21T03:43:04.365Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283670, + "type": "NORMAL", + "rate": 0.7001999999999999, + "percent": -10, + "pumpId": 453599, + "endId": 453601, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885fcf42c1220004f95728" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.52, + "created_at": "2022-05-21T03:38:07.812Z", + "date": 1653104287812, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21530, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885ea5293f3e00042c31e0" + }, + { + "created_at": "2022-05-21T03:38:05.030Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 290000, + "type": "FAKE_EXTENDED", + "rate": 3.2607586206896553, + "absolute": 3.2607586206896553, + "pumpId": 21529, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885ea5293f3e00042c31e1" + }, + { + "created_at": "2022-05-21T03:32:50.531Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303634, + "type": "NORMAL", + "rate": 0.2334, + "percent": -70, + "pumpId": 453587, + "endId": 453589, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62885d78293f3e00042c31dd" + }, + { + "created_at": "2022-05-21T03:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 32, + "durationInMilliseconds": 1969040, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453583, + "endId": 453586, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628851a75151b5000462a1e1" + }, + { + "created_at": "2022-05-21T02:42:42.383Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1037617, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453583, + "endId": 453586, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628851a75151b5000462a1e1" + }, + { + "created_at": "2022-05-21T02:37:54.170Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 286717, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453580, + "endId": 453582, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628850925151b5000462a1de" + }, + { + "created_at": "2022-05-21T02:32:55.252Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 297423, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453577, + "endId": 453579, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884f645151b5000462a1db" + }, + { + "created_at": "2022-05-21T02:28:10.152Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283605, + "type": "NORMAL", + "rate": 0.2968, + "percent": -60, + "pumpId": 453574, + "endId": 453576, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884e4993668c0004a30516" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.5, + "created_at": "2022-05-21T02:23:08.766Z", + "date": 1653099788766, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21528, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884d1b93668c0004a30512" + }, + { + "created_at": "2022-05-21T02:23:06.229Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294000, + "type": "FAKE_EXTENDED", + "rate": 7.10934693877551, + "absolute": 7.10934693877551, + "pumpId": 21527, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884d1b93668c0004a30513" + }, + { + "created_at": "2022-05-21T02:17:55.333Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299966, + "type": "NORMAL", + "rate": 0.5936, + "percent": -20, + "pumpId": 453562, + "endId": 453564, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884bd493668c0004a3050f" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.92, + "created_at": "2022-05-21T02:13:06.284Z", + "date": 1653099186284, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21526, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884ac093668c0004a3050b" + }, + { + "created_at": "2022-05-21T02:13:03.301Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283000, + "type": "FAKE_EXTENDED", + "rate": 3.0317526501766783, + "absolute": 3.0317526501766783, + "pumpId": 21525, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62884ac093668c0004a3050c" + }, + { + "created_at": "2022-05-21T02:02:49.661Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 601864, + "type": "NORMAL", + "rate": 0.5201, + "percent": -30, + "pumpId": 453548, + "endId": 453552, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288484c93668c0004a30503" + }, + { + "created_at": "2022-05-21T02:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 168169, + "type": "NORMAL", + "rate": 0.6687000000000001, + "percent": -10, + "pumpId": 453542, + "endId": 453547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a30500" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-21T01:57:52.501Z", + "date": 1653098272501, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21524, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a304ff" + }, + { + "created_at": "2022-05-21T01:57:50.546Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 129454, + "type": "NORMAL", + "rate": 0.7155, + "percent": -10, + "pumpId": 453542, + "endId": 453547, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288473793668c0004a30500" + }, + { + "created_at": "2022-05-21T01:52:49.925Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300621, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653097969925" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-21T01:47:59.874Z", + "date": 1653097679874, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21523, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628844e49d7ff00004aaf0c0" + }, + { + "created_at": "2022-05-21T01:47:56.925Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293000, + "type": "FAKE_EXTENDED", + "rate": 3.00660409556314, + "absolute": 3.00660409556314, + "pumpId": 21522, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628844e49d7ff00004aaf0c1" + }, + { + "created_at": "2022-05-21T01:42:53.604Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292860, + "type": "NORMAL", + "rate": 0.3975, + "percent": -50, + "pumpId": 453530, + "endId": 453532, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628843b79d7ff00004aaf0bd" + }, + { + "created_at": "2022-05-21T01:37:38.923Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 313186, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453527, + "endId": 453529, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628842709d7ff00004aaf0ba" + }, + { + "created_at": "2022-05-21T01:32:51.444Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284984, + "type": "NORMAL", + "rate": 0.318, + "percent": -60, + "pumpId": 453524, + "endId": 453526, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288415b9d7ff00004aaf0b7" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.5, + "created_at": "2022-05-21T01:27:52.076Z", + "date": 1653096472076, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21521, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288402d9d7ff00004aaf0b4" + }, + { + "eventType": "Correction Bolus", + "insulin": 1.6, + "created_at": "2022-05-21T01:18:07.619Z", + "date": 1653095887619, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21520, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62883de332ad2e0004b68cca" + }, + { + "created_at": "2022-05-21T01:18:05.464Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 876000, + "type": "FAKE_EXTENDED", + "rate": 5.068972602739726, + "absolute": 5.068972602739726, + "pumpId": 21519, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62883de332ad2e0004b68cc9" + }, + { + "created_at": "2022-05-21T01:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 18, + "durationInMilliseconds": 1085464, + "type": "NORMAL", + "rate": 0.795, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-21T00:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0.76, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T23:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0.738, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T22:37:56.443Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 22, + "durationInMilliseconds": 1323557, + "type": "NORMAL", + "rate": 0.7239999999999999, + "percent": 0, + "_id": "neutral_1653086276443" + }, + { + "created_at": "2022-05-20T22:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 37, + "durationInMilliseconds": 2276443, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453504, + "endId": 453510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ad" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-20T21:38:36.984Z", + "date": 1653082716984, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21518, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ac" + }, + { + "created_at": "2022-05-20T21:38:35.831Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 21, + "durationInMilliseconds": 1284169, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453504, + "endId": 453510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "62880a6b1664860004cb51ad" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-20T21:28:21.755Z", + "date": 1653082101755, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21517, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628807f71664860004cb51a6" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.18, + "created_at": "2022-05-20T21:18:34.069Z", + "date": 1653081514069, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21516, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "628805b61664860004cb51a2" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-20T21:08:33.702Z", + "date": 1653080913702, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21515, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288035c1664860004cb519c" + }, + { + "created_at": "2022-05-20T21:08:31.728Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 30, + "durationInMilliseconds": 1801610, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453495, + "endId": 453503, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6288035c1664860004cb519d" + }, + { + "created_at": "2022-05-20T21:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 8, + "durationInMilliseconds": 510237, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-20T20:53:24.438Z", + "date": 1653080004438, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21514, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ffd41664860004cb5195" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-20T20:43:26.220Z", + "date": 1653079406220, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21513, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287fd7ba2dcb700046b8728" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-20T20:33:38.526Z", + "date": 1653078818526, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21512, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287fb3aa2dcb700046b8724" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-20T20:22:54.311Z", + "date": 1653078174311, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21511, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f8aba2dcb700046b871e" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-20T20:17:40.808Z", + "date": 1653077860808, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21510, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f765a2dcb700046b871b" + }, + { + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-20T20:08:27.325Z", + "date": 1653077307325, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21509, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287f54db2af570004d8c046" + }, + { + "created_at": "2022-05-20T20:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3600000, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "created_at": "2022-05-20T19:32:50.116Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 27, + "durationInMilliseconds": 1629884, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453478, + "endId": 453494, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287ece572b1ae0004593ff0" + }, + { + "eventType": "Meal Bolus", + "insulin": 9.58, + "created_at": "2022-05-20T19:27:22.747Z", + "date": 1653074842747, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21508, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287eb9d72b1ae0004593fea" + }, + { + "created_at": "2022-05-20T19:08:06.145Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1481495, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453473, + "endId": 453477, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287e73072b1ae0004593fe2" + }, + { + "created_at": "2022-05-20T19:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 8, + "durationInMilliseconds": 484657, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453469, + "endId": 453472, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287dedc72b1ae0004593fd2" + }, + { + "created_at": "2022-05-20T18:33:00.960Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 26, + "durationInMilliseconds": 1619040, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 453469, + "endId": 453472, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287dedc72b1ae0004593fd2" + }, + { + "created_at": "2022-05-20T18:17:39.957Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 918518, + "type": "NORMAL", + "rate": 0.5591999999999999, + "percent": -20, + "pumpId": 453466, + "endId": 453468, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "_id": "6287db4963f1e20004e4e5a7" + }, + { + "created_at": "2022-05-20T18:00:00.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 17, + "durationInMilliseconds": 1059957, + "type": "NORMAL", + "rate": 0.699, + "percent": 0, + "_id": "neutral_1653069600000" + } +] diff --git a/app/src/test/res/autotune/test3/aapsorefautotune_recommendations.log b/app/src/test/res/autotune/test3/aapsorefautotune_recommendations.log new file mode 100644 index 0000000000..b17d6072da --- /dev/null +++ b/app/src/test/res/autotune/test3/aapsorefautotune_recommendations.log @@ -0,0 +1,53 @@ +Parameter | Pump | Autotune | Days Missing +--------------------------------------------------------- +ISF [mg/dL/U] | 86.200 | 93.589 | +Carb Ratio[g/U]| 5.750 | 5.750 | +Basals [U/hr] | - | | + 00:00 | 0.966 | 1.039 | 0 + 00:30 | | | + 01:00 | 0.977 | 1.091 | 0 + 01:30 | | | + 02:00 | 0.971 | 1.118 | 0 + 02:30 | | | + 03:00 | 1.111 | 1.321 | 0 + 03:30 | | | + 04:00 | 0.974 | 1.091 | 0 + 04:30 | | | + 05:00 | 0.923 | 0.965 | 0 + 05:30 | | | + 06:00 | 0.823 | 0.848 | 0 + 06:30 | | | + 07:00 | 0.855 | 1.112 | 0 + 07:30 | | | + 08:00 | 0.902 | 1.173 | 0 + 08:30 | | | + 09:00 | 0.934 | 1.214 | 0 + 09:30 | | | + 10:00 | 0.938 | 1.219 | 0 + 10:30 | | | + 11:00 | 0.903 | 1.070 | 0 + 11:30 | | | + 12:00 | 0.882 | 1.147 | 0 + 12:30 | | | + 13:00 | 0.874 | 1.136 | 0 + 13:30 | | | + 14:00 | 0.866 | 1.126 | 0 + 14:30 | | | + 15:00 | 0.848 | 1.102 | 0 + 15:30 | | | + 16:00 | 0.758 | 0.928 | 0 + 16:30 | | | + 17:00 | 0.650 | 0.710 | 0 + 17:30 | | | + 18:00 | 0.648 | 0.654 | 0 + 18:30 | | | + 19:00 | 0.738 | 0.878 | 0 + 19:30 | | | + 20:00 | 0.847 | 1.101 | 0 + 20:30 | | | + 21:00 | 0.861 | 1.119 | 0 + 21:30 | | | + 22:00 | 0.863 | 1.122 | 0 + 22:30 | | | + 23:00 | 0.843 | 1.047 | 0 + 23:30 | | | diff --git a/app/src/test/res/autotune/test3/aapsorefprofile.2022-05-21.json b/app/src/test/res/autotune/test3/aapsorefprofile.2022-05-21.json new file mode 100644 index 0000000000..eefadabacb --- /dev/null +++ b/app/src/test/res/autotune/test3/aapsorefprofile.2022-05-21.json @@ -0,0 +1,147 @@ +{ + "name": "Tuned Dyn2", + "min_5m_carbimpact": 8, + "dia": 6, + "curve": "ultra-rapid", + "useCustomPeakTime": true, + "insulinPeakTime": 45, + "basalprofile": [ + { + "start": "00:00:00", + "minutes": 0, + "rate": 0.966 + }, + { + "start": "01:00:00", + "minutes": 60, + "rate": 0.977 + }, + { + "start": "02:00:00", + "minutes": 120, + "rate": 0.971 + }, + { + "start": "03:00:00", + "minutes": 180, + "rate": 1.111 + }, + { + "start": "04:00:00", + "minutes": 240, + "rate": 0.974 + }, + { + "start": "05:00:00", + "minutes": 300, + "rate": 0.923 + }, + { + "start": "06:00:00", + "minutes": 360, + "rate": 0.823 + }, + { + "start": "07:00:00", + "minutes": 420, + "rate": 0.855 + }, + { + "start": "08:00:00", + "minutes": 480, + "rate": 0.902 + }, + { + "start": "09:00:00", + "minutes": 540, + "rate": 0.934 + }, + { + "start": "10:00:00", + "minutes": 600, + "rate": 0.938 + }, + { + "start": "11:00:00", + "minutes": 660, + "rate": 0.903 + }, + { + "start": "12:00:00", + "minutes": 720, + "rate": 0.882 + }, + { + "start": "13:00:00", + "minutes": 780, + "rate": 0.874 + }, + { + "start": "14:00:00", + "minutes": 840, + "rate": 0.866 + }, + { + "start": "15:00:00", + "minutes": 900, + "rate": 0.848 + }, + { + "start": "16:00:00", + "minutes": 960, + "rate": 0.758 + }, + { + "start": "17:00:00", + "minutes": 1020, + "rate": 0.65 + }, + { + "start": "18:00:00", + "minutes": 1080, + "rate": 0.648 + }, + { + "start": "19:00:00", + "minutes": 1140, + "rate": 0.738 + }, + { + "start": "20:00:00", + "minutes": 1200, + "rate": 0.847 + }, + { + "start": "21:00:00", + "minutes": 1260, + "rate": 0.861 + }, + { + "start": "22:00:00", + "minutes": 1320, + "rate": 0.863 + }, + { + "start": "23:00:00", + "minutes": 1380, + "rate": 0.843 + } + ], + "isfProfile": { + "sensitivities": [ + { + "i": 0, + "start": "00:00:00", + "sensitivity": 86.2, + "offset": 0, + "x": 0, + "endoffset": 1440 + } + ] + }, + "carb_ratio": 5.75, + "autosens_max": 1.3, + "autosens_min": 0.7, + "units": "mg/dl", + "timezone": "Europe/Paris" +} diff --git a/app/src/test/res/autotune/test3/aapsorefprofile.json b/app/src/test/res/autotune/test3/aapsorefprofile.json new file mode 100644 index 0000000000..e7ae1b4e0e --- /dev/null +++ b/app/src/test/res/autotune/test3/aapsorefprofile.json @@ -0,0 +1,173 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 1.039, + "start": "00:00:00" + }, + { + "i": 1, + "minutes": 60, + "rate": 1.091, + "start": "01:00:00" + }, + { + "i": 2, + "minutes": 120, + "rate": 1.118, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.321, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 1.091, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.965, + "start": "05:00:00" + }, + { + "i": 6, + "minutes": 360, + "rate": 0.848, + "start": "06:00:00" + }, + { + "i": 7, + "minutes": 420, + "rate": 1.112, + "start": "07:00:00" + }, + { + "i": 8, + "minutes": 480, + "rate": 1.173, + "start": "08:00:00" + }, + { + "i": 9, + "minutes": 540, + "rate": 1.214, + "start": "09:00:00" + }, + { + "i": 10, + "minutes": 600, + "rate": 1.219, + "start": "10:00:00" + }, + { + "i": 11, + "minutes": 660, + "rate": 1.07, + "start": "11:00:00" + }, + { + "i": 12, + "minutes": 720, + "rate": 1.147, + "start": "12:00:00" + }, + { + "i": 13, + "minutes": 780, + "rate": 1.136, + "start": "13:00:00" + }, + { + "i": 14, + "minutes": 840, + "rate": 1.126, + "start": "14:00:00" + }, + { + "i": 15, + "minutes": 900, + "rate": 1.102, + "start": "15:00:00" + }, + { + "i": 16, + "minutes": 960, + "rate": 0.928, + "start": "16:00:00" + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.71, + "start": "17:00:00" + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.654, + "start": "18:00:00" + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.878, + "start": "19:00:00" + }, + { + "i": 20, + "minutes": 1200, + "rate": 1.101, + "start": "20:00:00" + }, + { + "i": 21, + "minutes": 1260, + "rate": 1.119, + "start": "21:00:00" + }, + { + "i": 22, + "minutes": 1320, + "rate": 1.122, + "start": "22:00:00" + }, + { + "i": 23, + "minutes": 1380, + "rate": 1.047, + "start": "23:00:00" + } + ], + "carb_ratio": 5.75, + "csf": 14.991, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 93.589, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 93.589, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test3/autotune.2022-05-21.json b/app/src/test/res/autotune/test3/autotune.2022-05-21.json new file mode 100644 index 0000000000..deb6b431f6 --- /dev/null +++ b/app/src/test/res/autotune/test3/autotune.2022-05-21.json @@ -0,0 +1 @@ +{"CRData":[],"CSFGlucoseData":[],"ISFGlucoseData":[{"device":"AndroidAPS-DexcomG6","date":1653108249000,"dateString":"2022-05-21T04:44:09.000Z","isValid":true,"sgv":123,"direction":"FortyFiveDown","type":"sgv","_id":"62886e2919e2e60004989bba","glucose":123,"avgDelta":"-7.50","BGI":-7.59,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653108548000,"dateString":"2022-05-21T04:49:08.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","_id":"62886f5719e2e60004989bbc","glucose":128,"avgDelta":"-4.00","BGI":-7.2,"deviation":"3.20"},{"device":"AndroidAPS-DexcomG6","date":1653110649000,"dateString":"2022-05-21T05:24:09.000Z","isValid":true,"sgv":98,"direction":"FortyFiveDown","type":"sgv","_id":"628877a5363e6c0004f710e0","glucose":98,"avgDelta":"-6.75","BGI":-4.44,"deviation":"-2.31"},{"device":"AndroidAPS-DexcomG6","date":1653110949000,"dateString":"2022-05-21T05:29:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628878bbe964810004aa5655","glucose":97,"avgDelta":"-5.00","BGI":-3.92,"deviation":"-1.08"},{"device":"AndroidAPS-DexcomG6","date":1653111249000,"dateString":"2022-05-21T05:34:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628879e9e964810004aa5657","glucose":97,"avgDelta":"-3.00","BGI":-3.45,"deviation":"0.45"},{"device":"AndroidAPS-DexcomG6","date":1653111549000,"dateString":"2022-05-21T05:39:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"62887b17e964810004aa565a","glucose":100,"avgDelta":"-0.50","BGI":-2.84,"deviation":"2.34"},{"device":"AndroidAPS-DexcomG6","date":1653111849000,"dateString":"2022-05-21T05:44:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62887c44e964810004aa565d","glucose":102,"avgDelta":"1.00","BGI":-2.37,"deviation":"3.37"},{"device":"AndroidAPS-DexcomG6","date":1653112148000,"dateString":"2022-05-21T05:49:08.000Z","isValid":true,"sgv":103,"direction":"Flat","type":"sgv","_id":"62887d72e964810004aa5661","glucose":103,"avgDelta":"1.50","BGI":-2.07,"deviation":"3.57"},{"device":"AndroidAPS-DexcomG6","date":1653112449000,"dateString":"2022-05-21T05:54:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62887ea1e964810004aa5664","glucose":102,"avgDelta":"1.25","BGI":-2.28,"deviation":"3.53"},{"device":"AndroidAPS-DexcomG6","date":1653112749000,"dateString":"2022-05-21T05:59:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"62887fcee964810004aa5666","glucose":101,"avgDelta":"0.25","BGI":-2.46,"deviation":"2.71"},{"device":"AndroidAPS-DexcomG6","date":1653113049000,"dateString":"2022-05-21T06:04:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628880ee8ff3530004dc6060","glucose":98,"avgDelta":"-1.00","BGI":-2.5,"deviation":"1.50"},{"device":"AndroidAPS-DexcomG6","date":1653113349000,"dateString":"2022-05-21T06:09:09.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288821b8ff3530004dc6062","glucose":94,"avgDelta":"-2.25","BGI":-2.46,"deviation":"0.21"},{"device":"AndroidAPS-DexcomG6","date":1653113649000,"dateString":"2022-05-21T06:14:09.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"6288834a8ff3530004dc6065","glucose":91,"avgDelta":"-2.75","BGI":-2.28,"deviation":"-0.47"},{"device":"AndroidAPS-DexcomG6","date":1653113949000,"dateString":"2022-05-21T06:19:09.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"628884778ff3530004dc6067","glucose":89,"avgDelta":"-3.00","BGI":-2.07,"deviation":"-0.93"},{"device":"AndroidAPS-DexcomG6","date":1653114249000,"dateString":"2022-05-21T06:24:09.000Z","isValid":true,"sgv":85,"direction":"Flat","type":"sgv","_id":"628885a48ff3530004dc6069","glucose":85,"avgDelta":"-3.25","BGI":-1.77,"deviation":"-1.48"},{"device":"AndroidAPS-DexcomG6","date":1653153249000,"dateString":"2022-05-21T17:14:09.000Z","isValid":true,"sgv":124,"direction":"FortyFiveDown","type":"sgv","_id":"62891dfd1090500004ca4722","glucose":124,"avgDelta":"-9.00","BGI":-4.05,"deviation":"-4.95"},{"device":"AndroidAPS-DexcomG6","date":1653153549000,"dateString":"2022-05-21T17:19:09.000Z","isValid":true,"sgv":110,"direction":"SingleDown","type":"sgv","_id":"62891f2b1090500004ca4724","glucose":110,"avgDelta":"-12.00","BGI":-3.79,"deviation":"-8.21"},{"device":"AndroidAPS-DexcomG6","date":1653153849000,"dateString":"2022-05-21T17:24:09.000Z","isValid":true,"sgv":96,"direction":"SingleDown","type":"sgv","_id":"628920591090500004ca4727","glucose":96,"avgDelta":"-13.25","BGI":-3.49,"deviation":"-9.76"},{"device":"AndroidAPS-DexcomG6","date":1653154149000,"dateString":"2022-05-21T17:29:09.000Z","isValid":true,"sgv":93,"direction":"SingleDown","type":"sgv","_id":"628921861090500004ca472b","glucose":93,"avgDelta":"-11.25","BGI":-3.19,"deviation":"-8.06"},{"device":"AndroidAPS-DexcomG6","date":1653154449000,"dateString":"2022-05-21T17:34:09.000Z","isValid":true,"sgv":97,"direction":"FortyFiveDown","type":"sgv","_id":"628922b18809e60004c644d6","glucose":97,"avgDelta":"-6.75","BGI":-2.84,"deviation":"-3.91"},{"device":"AndroidAPS-DexcomG6","date":1653154749000,"dateString":"2022-05-21T17:39:09.000Z","isValid":true,"sgv":108,"direction":"NONE","type":"sgv","_id":"628923df8809e60004c644d9","glucose":108,"avgDelta":"-0.50","BGI":-2.5,"deviation":"2.00"},{"device":"AndroidAPS-DexcomG6","date":1653156849000,"dateString":"2022-05-21T18:14:09.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"62892c06840d8d0004a20bf2","glucose":110,"avgDelta":"-3.50","BGI":-1.72,"deviation":"-1.78"},{"device":"AndroidAPS-DexcomG6","date":1653180849000,"dateString":"2022-05-22T00:54:09.000Z","isValid":true,"sgv":105,"direction":"SingleDown","type":"sgv","_id":"628989d2da46aa0004d1e0f8","glucose":105,"avgDelta":"-9.50","BGI":-3.1,"deviation":"-6.40"},{"device":"AndroidAPS-DexcomG6","date":1653181150000,"dateString":"2022-05-22T00:59:10.000Z","isValid":true,"sgv":97,"direction":"SingleDown","type":"sgv","_id":"62898b01da46aa0004d1e0fa","glucose":97,"avgDelta":"-11.50","BGI":-2.84,"deviation":"-8.66"},{"device":"AndroidAPS-DexcomG6","date":1653181450000,"dateString":"2022-05-22T01:04:10.000Z","isValid":true,"sgv":92,"direction":"FortyFiveDown","type":"sgv","_id":"62898c2fda46aa0004d1e0fc","glucose":92,"avgDelta":"-10.75","BGI":-2.5,"deviation":"-8.25"},{"device":"AndroidAPS-DexcomG6","date":1653181750000,"dateString":"2022-05-22T01:09:10.000Z","isValid":true,"sgv":87,"direction":"FortyFiveDown","type":"sgv","_id":"62898d4750e51d0004429e5f","glucose":87,"avgDelta":"-8.50","BGI":-2.11,"deviation":"-6.39"}],"basalGlucoseData":[{"device":"AndroidAPS-DexcomG6","date":1653114549000,"dateString":"2022-05-21T06:29:09.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628886d28ff3530004dc606b","glucose":80,"avgDelta":"-3.50","BGI":-1.47,"deviation":"-2.03"},{"device":"AndroidAPS-DexcomG6","date":1653114849000,"dateString":"2022-05-21T06:34:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"628888018ff3530004dc6070","glucose":78,"avgDelta":"-3.25","BGI":-1.12,"deviation":"-2.13"},{"device":"AndroidAPS-DexcomG6","date":1653115149000,"dateString":"2022-05-21T06:39:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6288892a149196000412bf49","glucose":76,"avgDelta":"-3.25","BGI":-0.78,"deviation":"-2.47"},{"device":"AndroidAPS-DexcomG6","date":1653115449000,"dateString":"2022-05-21T06:44:09.000Z","isValid":true,"sgv":74,"direction":"Flat","type":"sgv","_id":"62888a57149196000412bf4b","glucose":74,"avgDelta":"-2.75","BGI":-0.34,"deviation":"-2.41"},{"device":"AndroidAPS-DexcomG6","date":1653115749000,"dateString":"2022-05-21T06:49:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"62888b85149196000412bf4d","glucose":70,"avgDelta":"-2.50","BGI":0,"deviation":"-2.50"},{"device":"AndroidAPS-DexcomG6","date":1653116049000,"dateString":"2022-05-21T06:54:09.000Z","isValid":true,"sgv":69,"direction":"Flat","type":"sgv","_id":"62888ccc149196000412bf4f","glucose":69,"avgDelta":"-2.25","BGI":0.43,"deviation":"-2.68"},{"device":"AndroidAPS-DexcomG6","date":1653116349000,"dateString":"2022-05-21T06:59:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"62888de2149196000412bf51","glucose":70,"avgDelta":"-1.50","BGI":0.78,"deviation":"-2.28"},{"device":"AndroidAPS-DexcomG6","date":1653116649000,"dateString":"2022-05-21T07:04:09.000Z","isValid":true,"sgv":74,"direction":"Flat","type":"sgv","_id":"62888f0f149196000412bf54","glucose":74,"avgDelta":"0.00","BGI":1.12,"deviation":"-1.12"},{"device":"AndroidAPS-DexcomG6","date":1653116949000,"dateString":"2022-05-21T07:09:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"62889024149196000412bf57","glucose":76,"avgDelta":"1.50","BGI":1.47,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653117249000,"dateString":"2022-05-21T07:14:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"628891627ff1e700040f17c6","glucose":79,"avgDelta":"2.50","BGI":1.77,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653117549000,"dateString":"2022-05-21T07:19:09.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628892907ff1e700040f17c7","glucose":80,"avgDelta":"2.50","BGI":2.11,"deviation":"0.39"},{"device":"AndroidAPS-DexcomG6","date":1653117848000,"dateString":"2022-05-21T07:24:08.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","_id":"628893bd7ff1e700040f17c9","glucose":82,"avgDelta":"2.00","BGI":2.37,"deviation":"-0.37"},{"device":"AndroidAPS-DexcomG6","date":1653118149000,"dateString":"2022-05-21T07:29:09.000Z","isValid":true,"sgv":86,"direction":"Flat","type":"sgv","_id":"628894d37ff1e700040f17cd","glucose":86,"avgDelta":"2.50","BGI":2.63,"deviation":"-0.13"},{"device":"AndroidAPS-DexcomG6","date":1653118449000,"dateString":"2022-05-21T07:34:09.000Z","isValid":true,"sgv":92,"direction":"Flat","type":"sgv","_id":"6288961d7ff1e700040f17ce","glucose":92,"avgDelta":"3.25","BGI":2.84,"deviation":"0.41"},{"device":"AndroidAPS-DexcomG6","date":1653118748000,"dateString":"2022-05-21T07:39:08.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"628897357ff1e700040f17d3","glucose":97,"avgDelta":"4.25","BGI":3.06,"deviation":"1.19"},{"device":"AndroidAPS-DexcomG6","date":1653119049000,"dateString":"2022-05-21T07:44:09.000Z","isValid":true,"sgv":105,"direction":"FortyFiveUp","type":"sgv","_id":"628898627ff1e700040f17d5","glucose":105,"avgDelta":"5.75","BGI":2.76,"deviation":"2.99"},{"device":"AndroidAPS-DexcomG6","date":1653119349000,"dateString":"2022-05-21T07:49:09.000Z","isValid":true,"sgv":114,"direction":"FortyFiveUp","type":"sgv","_id":"628899957ff1e700040f17d7","glucose":114,"avgDelta":"7.00","BGI":2.37,"deviation":"4.63"},{"device":"AndroidAPS-DexcomG6","date":1653131349000,"dateString":"2022-05-21T11:09:09.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","_id":"6288c86f8e9ed800049b39e5","glucose":82,"avgDelta":"-2.25","BGI":-1.25,"deviation":"-1.00"},{"device":"AndroidAPS-DexcomG6","date":1653131649000,"dateString":"2022-05-21T11:14:09.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"6288c99e8e9ed800049b39e8","glucose":89,"avgDelta":"0.25","BGI":-0.65,"deviation":"0.90"},{"device":"AndroidAPS-DexcomG6","date":1653131948000,"dateString":"2022-05-21T11:19:08.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"6288cacb8e9ed800049b39ec","glucose":98,"avgDelta":"3.50","BGI":-0.3,"deviation":"3.80"},{"device":"AndroidAPS-DexcomG6","date":1653157149000,"dateString":"2022-05-21T18:19:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"62892d34840d8d0004a20bf5","glucose":108,"avgDelta":"-3.75","BGI":-1.47,"deviation":"-2.28"},{"device":"AndroidAPS-DexcomG6","date":1653157449000,"dateString":"2022-05-21T18:24:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"62892e62840d8d0004a20bf8","glucose":108,"avgDelta":"-2.75","BGI":-1.21,"deviation":"-1.54"},{"device":"AndroidAPS-DexcomG6","date":1653157750000,"dateString":"2022-05-21T18:29:10.000Z","isValid":true,"sgv":106,"direction":"Flat","type":"sgv","_id":"62892f8f840d8d0004a20bfa","glucose":106,"avgDelta":"-2.00","BGI":-0.95,"deviation":"-1.05"},{"device":"AndroidAPS-DexcomG6","date":1653158049000,"dateString":"2022-05-21T18:34:09.000Z","isValid":true,"sgv":104,"direction":"Flat","type":"sgv","_id":"628930bc840d8d0004a20bfd","glucose":104,"avgDelta":"-1.50","BGI":-0.69,"deviation":"-0.81"},{"device":"AndroidAPS-DexcomG6","date":1653158349000,"dateString":"2022-05-21T18:39:09.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"628931e9840d8d0004a20bff","glucose":102,"avgDelta":"-1.50","BGI":-0.47,"deviation":"-1.03"},{"device":"AndroidAPS-DexcomG6","date":1653158649000,"dateString":"2022-05-21T18:44:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6289331c22fbc8000495b813","glucose":101,"avgDelta":"-1.75","BGI":-0.3,"deviation":"-1.45"},{"device":"AndroidAPS-DexcomG6","date":1653158949000,"dateString":"2022-05-21T18:49:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"6289344a22fbc8000495b815","glucose":100,"avgDelta":"-1.50","BGI":-0.17,"deviation":"-1.33"},{"device":"AndroidAPS-DexcomG6","date":1653159249000,"dateString":"2022-05-21T18:54:09.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"6289357622fbc8000495b818","glucose":99,"avgDelta":"-1.25","BGI":-0.04,"deviation":"-1.21"},{"device":"AndroidAPS-DexcomG6","date":1653159549000,"dateString":"2022-05-21T18:59:09.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"628936a422fbc8000495b81a","glucose":99,"avgDelta":"-0.75","BGI":0.04,"deviation":"-0.79"},{"device":"AndroidAPS-DexcomG6","date":1653159849000,"dateString":"2022-05-21T19:04:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628937b822fbc8000495b81d","glucose":98,"avgDelta":"-0.75","BGI":0.17,"deviation":"-0.92"},{"device":"AndroidAPS-DexcomG6","date":1653160150000,"dateString":"2022-05-21T19:09:10.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628938fe22fbc8000495b81f","glucose":98,"avgDelta":"-0.50","BGI":0.3,"deviation":"-0.80"},{"device":"AndroidAPS-DexcomG6","date":1653160449000,"dateString":"2022-05-21T19:14:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"62893a1222fbc8000495b822","glucose":98,"avgDelta":"-0.25","BGI":0.43,"deviation":"-0.68"},{"device":"AndroidAPS-DexcomG6","date":1653160749000,"dateString":"2022-05-21T19:19:09.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","_id":"62893b4f598f780004bb3b22","glucose":97,"avgDelta":"-0.50","BGI":0.52,"deviation":"-1.02"},{"device":"AndroidAPS-DexcomG6","date":1653161049000,"dateString":"2022-05-21T19:24:09.000Z","isValid":true,"sgv":95,"direction":"Flat","type":"sgv","_id":"62893c7d598f780004bb3b24","glucose":95,"avgDelta":"-0.75","BGI":0.6,"deviation":"-1.35"},{"device":"AndroidAPS-DexcomG6","date":1653161350000,"dateString":"2022-05-21T19:29:10.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"62893daa598f780004bb3b27","glucose":94,"avgDelta":"-1.00","BGI":0.65,"deviation":"-1.65"},{"device":"AndroidAPS-DexcomG6","date":1653161649000,"dateString":"2022-05-21T19:34:09.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"62893ed7598f780004bb3b29","glucose":93,"avgDelta":"-1.25","BGI":0.73,"deviation":"-1.98"},{"device":"AndroidAPS-DexcomG6","date":1653161950000,"dateString":"2022-05-21T19:39:10.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"62893feb598f780004bb3b2b","glucose":91,"avgDelta":"-1.50","BGI":0.86,"deviation":"-2.36"},{"device":"AndroidAPS-DexcomG6","date":1653162250000,"dateString":"2022-05-21T19:44:10.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"62894118598f780004bb3b2d","glucose":89,"avgDelta":"-1.50","BGI":0.99,"deviation":"-2.49"},{"device":"AndroidAPS-DexcomG6","date":1653162549000,"dateString":"2022-05-21T19:49:09.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","_id":"6289425f598f780004bb3b30","glucose":88,"avgDelta":"-1.50","BGI":1.12,"deviation":"-2.62"},{"device":"AndroidAPS-DexcomG6","date":1653162850000,"dateString":"2022-05-21T19:54:10.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","_id":"6289437f4493460004e63a25","glucose":89,"avgDelta":"-1.00","BGI":1.25,"deviation":"-2.25"},{"device":"AndroidAPS-DexcomG6","date":1653163150000,"dateString":"2022-05-21T19:59:10.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"628944ae4493460004e63a27","glucose":91,"avgDelta":"0.00","BGI":1.38,"deviation":"-1.38"},{"device":"AndroidAPS-DexcomG6","date":1653163449000,"dateString":"2022-05-21T20:04:09.000Z","isValid":true,"sgv":95,"direction":"Flat","type":"sgv","_id":"628945dc4493460004e63a2a","glucose":95,"avgDelta":"1.50","BGI":1.51,"deviation":"-0.01"},{"device":"AndroidAPS-DexcomG6","date":1653163749000,"dateString":"2022-05-21T20:09:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"6289470c4493460004e63a2d","glucose":100,"avgDelta":"3.00","BGI":1.55,"deviation":"1.45"},{"device":"AndroidAPS-DexcomG6","date":1653164049000,"dateString":"2022-05-21T20:14:09.000Z","isValid":true,"sgv":109,"direction":"Flat","type":"sgv","_id":"628948214493460004e63a31","glucose":109,"avgDelta":"5.00","BGI":1.51,"deviation":"3.49"},{"device":"AndroidAPS-DexcomG6","date":1653164350000,"dateString":"2022-05-21T20:19:10.000Z","isValid":true,"sgv":120,"direction":"FortyFiveUp","type":"sgv","_id":"6289496a4493460004e63a34","glucose":120,"avgDelta":"7.25","BGI":1.34,"deviation":"5.91"},{"device":"AndroidAPS-DexcomG6","date":1653182050000,"dateString":"2022-05-22T01:14:10.000Z","isValid":true,"sgv":81,"direction":"FortyFiveDown","type":"sgv","_id":"62898e7650e51d0004429e63","glucose":81,"avgDelta":"-6.00","BGI":-1.68,"deviation":"-4.32"},{"device":"AndroidAPS-DexcomG6","date":1653182349000,"dateString":"2022-05-22T01:19:09.000Z","isValid":true,"sgv":77,"direction":"FortyFiveDown","type":"sgv","_id":"62898fa550e51d0004429e65","glucose":77,"avgDelta":"-5.00","BGI":-1.25,"deviation":"-3.75"},{"device":"AndroidAPS-DexcomG6","date":1653182650000,"dateString":"2022-05-22T01:24:10.000Z","isValid":true,"sgv":74,"direction":"FortyFiveDown","type":"sgv","_id":"628990d350e51d0004429e67","glucose":74,"avgDelta":"-4.50","BGI":-0.78,"deviation":"-3.72"},{"device":"AndroidAPS-DexcomG6","date":1653182949000,"dateString":"2022-05-22T01:29:09.000Z","isValid":true,"sgv":72,"direction":"Flat","type":"sgv","_id":"6289920150e51d0004429e69","glucose":72,"avgDelta":"-3.75","BGI":-0.3,"deviation":"-3.45"},{"device":"AndroidAPS-DexcomG6","date":1653183249000,"dateString":"2022-05-22T01:34:09.000Z","isValid":true,"sgv":73,"direction":"Flat","type":"sgv","_id":"6289933050e51d0004429e6b","glucose":73,"avgDelta":"-2.00","BGI":0.22,"deviation":"-2.22"},{"device":"AndroidAPS-DexcomG6","date":1653183550000,"dateString":"2022-05-22T01:39:10.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6289945f50e51d0004429e6d","glucose":76,"avgDelta":"-0.25","BGI":0.69,"deviation":"-0.94"},{"device":"AndroidAPS-DexcomG6","date":1653183850000,"dateString":"2022-05-22T01:44:10.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6289957b61a829000474037f","glucose":79,"avgDelta":"1.25","BGI":1.12,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653184150000,"dateString":"2022-05-22T01:49:10.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628996a961a8290004740382","glucose":80,"avgDelta":"2.00","BGI":1.55,"deviation":"0.45"},{"device":"AndroidAPS-DexcomG6","date":1653184450000,"dateString":"2022-05-22T01:54:10.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","_id":"628997d861a8290004740385","glucose":80,"avgDelta":"1.75","BGI":1.9,"deviation":"-0.15"},{"device":"AndroidAPS-DexcomG6","date":1653099848000,"dateString":"2022-05-21T02:24:08.000Z","isValid":true,"sgv":308,"direction":"FortyFiveUp","type":"sgv","_id":"62884d6793668c0004a30514","glucose":308,"avgDelta":"9.25","BGI":-16.85,"deviation":"26.10","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653100148000,"dateString":"2022-05-21T02:29:08.000Z","isValid":true,"sgv":307,"direction":"FortyFiveUp","type":"sgv","_id":"62884e9493668c0004a30517","glucose":307,"avgDelta":"9.00","BGI":-18.88,"deviation":"27.88"},{"device":"AndroidAPS-DexcomG6","date":1653100449000,"dateString":"2022-05-21T02:34:09.000Z","isValid":true,"sgv":297,"direction":"Flat","type":"sgv","_id":"62884fb05151b5000462a1dc","glucose":297,"avgDelta":"3.75","BGI":-20.26,"deviation":"24.01"},{"device":"AndroidAPS-DexcomG6","date":1653100748000,"dateString":"2022-05-21T02:39:08.000Z","isValid":true,"sgv":283,"direction":"Flat","type":"sgv","_id":"628850de5151b5000462a1df","glucose":283,"avgDelta":"-3.25","BGI":-21.08,"deviation":"17.83"},{"device":"AndroidAPS-DexcomG6","date":1653101048000,"dateString":"2022-05-21T02:44:08.000Z","isValid":true,"sgv":267,"direction":"FortyFiveDown","type":"sgv","_id":"6288520b5151b5000462a1e2","glucose":267,"avgDelta":"-10.25","BGI":-21.46,"deviation":"11.21"},{"device":"AndroidAPS-DexcomG6","date":1653101348000,"dateString":"2022-05-21T02:49:08.000Z","isValid":true,"sgv":253,"direction":"SingleDown","type":"sgv","_id":"628853395151b5000462a1e4","glucose":253,"avgDelta":"-13.50","BGI":-21.46,"deviation":"7.96"},{"device":"AndroidAPS-DexcomG6","date":1653101648000,"dateString":"2022-05-21T02:54:08.000Z","isValid":true,"sgv":241,"direction":"SingleDown","type":"sgv","_id":"6288547f5151b5000462a1e6","glucose":241,"avgDelta":"-14.00","BGI":-21.16,"deviation":"7.16"},{"device":"AndroidAPS-DexcomG6","date":1653101948000,"dateString":"2022-05-21T02:59:08.000Z","isValid":true,"sgv":228,"direction":"SingleDown","type":"sgv","_id":"628855935151b5000462a1e8","glucose":228,"avgDelta":"-13.75","BGI":-20.52,"deviation":"6.77"},{"device":"AndroidAPS-DexcomG6","date":1653102249000,"dateString":"2022-05-21T03:04:09.000Z","isValid":true,"sgv":216,"direction":"SingleDown","type":"sgv","_id":"628856da5151b5000462a1ea","glucose":216,"avgDelta":"-12.75","BGI":-19.7,"deviation":"6.95"},{"device":"AndroidAPS-DexcomG6","date":1653102548000,"dateString":"2022-05-21T03:09:08.000Z","isValid":true,"sgv":204,"direction":"SingleDown","type":"sgv","_id":"628857f7293f3e00042c31d3","glucose":204,"avgDelta":"-12.25","BGI":-18.79,"deviation":"6.54"},{"device":"AndroidAPS-DexcomG6","date":1653102848000,"dateString":"2022-05-21T03:14:08.000Z","isValid":true,"sgv":193,"direction":"SingleDown","type":"sgv","_id":"62885924293f3e00042c31d5","glucose":193,"avgDelta":"-12.00","BGI":-17.71,"deviation":"5.71"},{"device":"AndroidAPS-DexcomG6","date":1653103149000,"dateString":"2022-05-21T03:19:09.000Z","isValid":true,"sgv":182,"direction":"SingleDown","type":"sgv","_id":"62885a52293f3e00042c31d7","glucose":182,"avgDelta":"-11.50","BGI":-16.64,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653103448000,"dateString":"2022-05-21T03:24:08.000Z","isValid":true,"sgv":174,"direction":"SingleDown","type":"sgv","_id":"62885b81293f3e00042c31d9","glucose":174,"avgDelta":"-10.50","BGI":-15.43,"deviation":"4.93"},{"device":"AndroidAPS-DexcomG6","date":1653103748000,"dateString":"2022-05-21T03:29:08.000Z","isValid":true,"sgv":171,"direction":"FortyFiveDown","type":"sgv","_id":"62885c95293f3e00042c31db","glucose":171,"avgDelta":"-8.25","BGI":-14.31,"deviation":"6.06"},{"device":"AndroidAPS-DexcomG6","date":1653104049000,"dateString":"2022-05-21T03:34:09.000Z","isValid":true,"sgv":170,"direction":"FortyFiveDown","type":"sgv","_id":"62885dc3293f3e00042c31de","glucose":170,"avgDelta":"-5.75","BGI":-13.1,"deviation":"7.35"},{"device":"AndroidAPS-DexcomG6","date":1653104349000,"dateString":"2022-05-21T03:39:09.000Z","isValid":true,"sgv":167,"direction":"Flat","type":"sgv","_id":"62885ef1293f3e00042c31e2","glucose":167,"avgDelta":"-3.75","BGI":-12.07,"deviation":"8.32"},{"device":"AndroidAPS-DexcomG6","date":1653104648000,"dateString":"2022-05-21T03:44:08.000Z","isValid":true,"sgv":162,"direction":"Flat","type":"sgv","_id":"6288601b42c1220004f95729","glucose":162,"avgDelta":"-3.00","BGI":-11.64,"deviation":"8.64"},{"device":"AndroidAPS-DexcomG6","date":1653104949000,"dateString":"2022-05-21T03:49:09.000Z","isValid":true,"sgv":155,"direction":"FortyFiveDown","type":"sgv","_id":"6288614942c1220004f9572c","glucose":155,"avgDelta":"-4.00","BGI":-11.12,"deviation":"7.12"},{"device":"AndroidAPS-DexcomG6","date":1653105248000,"dateString":"2022-05-21T03:54:08.000Z","isValid":true,"sgv":149,"direction":"FortyFiveDown","type":"sgv","_id":"6288629042c1220004f9572e","glucose":149,"avgDelta":"-5.25","BGI":-10.56,"deviation":"5.31"},{"device":"AndroidAPS-DexcomG6","date":1653105549000,"dateString":"2022-05-21T03:59:09.000Z","isValid":true,"sgv":146,"direction":"FortyFiveDown","type":"sgv","_id":"628863a542c1220004f95730","glucose":146,"avgDelta":"-5.25","BGI":-9.87,"deviation":"4.62"},{"device":"AndroidAPS-DexcomG6","date":1653105848000,"dateString":"2022-05-21T04:04:08.000Z","isValid":true,"sgv":146,"direction":"Flat","type":"sgv","_id":"628864d342c1220004f95733","glucose":146,"avgDelta":"-4.00","BGI":-9.14,"deviation":"5.14"},{"device":"AndroidAPS-DexcomG6","date":1653106149000,"dateString":"2022-05-21T04:09:09.000Z","isValid":true,"sgv":151,"direction":"Flat","type":"sgv","_id":"6288660142c1220004f95736","glucose":151,"avgDelta":"-1.00","BGI":-8.36,"deviation":"7.36"},{"device":"AndroidAPS-DexcomG6","date":1653106449000,"dateString":"2022-05-21T04:14:09.000Z","isValid":true,"sgv":155,"direction":"Flat","type":"sgv","_id":"6288672f42c1220004f9573a","glucose":155,"avgDelta":"1.50","BGI":-7.8,"deviation":"9.30"},{"device":"AndroidAPS-DexcomG6","date":1653106749000,"dateString":"2022-05-21T04:19:09.000Z","isValid":true,"sgv":157,"direction":"Flat","type":"sgv","_id":"6288685d19e2e60004989bac","glucose":157,"avgDelta":"2.75","BGI":-7.93,"deviation":"10.68"},{"device":"AndroidAPS-DexcomG6","date":1653107048000,"dateString":"2022-05-21T04:24:08.000Z","isValid":true,"sgv":153,"direction":"Flat","type":"sgv","_id":"6288698b19e2e60004989bb0","glucose":153,"avgDelta":"1.75","BGI":-8.06,"deviation":"9.81"},{"device":"AndroidAPS-DexcomG6","date":1653107348000,"dateString":"2022-05-21T04:29:08.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"62886ab919e2e60004989bb3","glucose":144,"avgDelta":"-1.75","BGI":-8.19,"deviation":"6.44"},{"device":"AndroidAPS-DexcomG6","date":1653107648000,"dateString":"2022-05-21T04:34:08.000Z","isValid":true,"sgv":132,"direction":"FortyFiveDown","type":"sgv","_id":"62886be719e2e60004989bb5","glucose":132,"avgDelta":"-5.75","BGI":-8.1,"deviation":"2.35"},{"device":"AndroidAPS-DexcomG6","date":1653107948000,"dateString":"2022-05-21T04:39:08.000Z","isValid":true,"sgv":124,"direction":"FortyFiveDown","type":"sgv","_id":"62886cfc19e2e60004989bb8","glucose":124,"avgDelta":"-8.25","BGI":-7.89,"deviation":"-0.36"},{"device":"AndroidAPS-DexcomG6","date":1653108848000,"dateString":"2022-05-21T04:54:08.000Z","isValid":true,"sgv":130,"direction":"Flat","type":"sgv","_id":"62887093363e6c0004f710cf","glucose":130,"avgDelta":"-0.50","BGI":-6.72,"deviation":"6.22","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653109148000,"dateString":"2022-05-21T04:59:08.000Z","isValid":true,"sgv":129,"direction":"Flat","type":"sgv","_id":"628871c1363e6c0004f710d3","glucose":129,"avgDelta":"1.25","BGI":-6.34,"deviation":"7.59"},{"device":"AndroidAPS-DexcomG6","date":1653109448000,"dateString":"2022-05-21T05:04:08.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","_id":"628872ef363e6c0004f710d6","glucose":125,"avgDelta":"0.50","BGI":-6.08,"deviation":"6.58"},{"device":"AndroidAPS-DexcomG6","date":1653109748000,"dateString":"2022-05-21T05:09:08.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6288741c363e6c0004f710d9","glucose":117,"avgDelta":"-2.75","BGI":-5.73,"deviation":"2.98"},{"device":"AndroidAPS-DexcomG6","date":1653110049000,"dateString":"2022-05-21T05:14:09.000Z","isValid":true,"sgv":109,"direction":"FortyFiveDown","type":"sgv","_id":"62887549363e6c0004f710dc","glucose":109,"avgDelta":"-5.25","BGI":-5.34,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653110348000,"dateString":"2022-05-21T05:19:08.000Z","isValid":true,"sgv":102,"direction":"FortyFiveDown","type":"sgv","_id":"62887677363e6c0004f710de","glucose":102,"avgDelta":"-6.75","BGI":-4.91,"deviation":"-1.84"},{"device":"AndroidAPS-DexcomG6","date":1653119649000,"dateString":"2022-05-21T07:54:09.000Z","isValid":true,"sgv":123,"direction":"FortyFiveUp","type":"sgv","_id":"62889ac27ff1e700040f17dc","glucose":123,"avgDelta":"7.75","BGI":-0.99,"deviation":"8.74","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653119949000,"dateString":"2022-05-21T07:59:09.000Z","isValid":true,"sgv":132,"direction":"FortyFiveUp","type":"sgv","_id":"62889be4a4cc860004a251c7","glucose":132,"avgDelta":"8.75","BGI":-14.27,"deviation":"23.02"},{"device":"AndroidAPS-DexcomG6","date":1653120249000,"dateString":"2022-05-21T08:04:09.000Z","isValid":true,"sgv":141,"direction":"FortyFiveUp","type":"sgv","_id":"62889d13a4cc860004a251c9","glucose":141,"avgDelta":"9.00","BGI":-24.7,"deviation":"33.70"},{"device":"AndroidAPS-DexcomG6","date":1653120548000,"dateString":"2022-05-21T08:09:08.000Z","isValid":true,"sgv":146,"direction":"FortyFiveUp","type":"sgv","_id":"62889e41a4cc860004a251cb","glucose":146,"avgDelta":"8.00","BGI":-32.76,"deviation":"40.76"},{"device":"AndroidAPS-DexcomG6","date":1653120849000,"dateString":"2022-05-21T08:14:09.000Z","isValid":true,"sgv":148,"direction":"FortyFiveUp","type":"sgv","_id":"62889f6fa4cc860004a251cc","glucose":148,"avgDelta":"6.25","BGI":-38.79,"deviation":"45.04"},{"device":"AndroidAPS-DexcomG6","date":1653121149000,"dateString":"2022-05-21T08:19:09.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"6288a09fa4cc860004a251ce","glucose":147,"avgDelta":"3.75","BGI":-43.14,"deviation":"46.89"},{"device":"AndroidAPS-DexcomG6","date":1653121449000,"dateString":"2022-05-21T08:24:09.000Z","isValid":true,"sgv":145,"direction":"Flat","type":"sgv","_id":"6288a1cda4cc860004a251d1","glucose":145,"avgDelta":"1.00","BGI":-46.03,"deviation":"47.03"},{"device":"AndroidAPS-DexcomG6","date":1653121749000,"dateString":"2022-05-21T08:29:09.000Z","isValid":true,"sgv":138,"direction":"Flat","type":"sgv","_id":"6288a2fca4cc860004a251d2","glucose":138,"avgDelta":"-2.00","BGI":-47.84,"deviation":"45.84"},{"device":"AndroidAPS-DexcomG6","date":1653122049000,"dateString":"2022-05-21T08:34:09.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","_id":"6288a42099fc930004d6bde8","glucose":128,"avgDelta":"-5.00","BGI":-48.66,"deviation":"43.66"},{"device":"AndroidAPS-DexcomG6","date":1653122349000,"dateString":"2022-05-21T08:39:09.000Z","isValid":true,"sgv":118,"direction":"FortyFiveDown","type":"sgv","_id":"6288a55199fc930004d6bdeb","glucose":118,"avgDelta":"-7.25","BGI":-48.66,"deviation":"41.41"},{"device":"AndroidAPS-DexcomG6","date":1653122649000,"dateString":"2022-05-21T08:44:09.000Z","isValid":true,"sgv":111,"direction":"FortyFiveDown","type":"sgv","_id":"6288a73099fc930004d6bded","glucose":111,"avgDelta":"-8.50","BGI":-48.01,"deviation":"39.51"},{"device":"AndroidAPS-DexcomG6","date":1653122949000,"dateString":"2022-05-21T08:49:09.000Z","isValid":true,"sgv":108,"direction":"FortyFiveDown","type":"sgv","_id":"6288a7ad99fc930004d6bdef","glucose":108,"avgDelta":"-7.50","BGI":-46.89,"deviation":"39.39"},{"device":"AndroidAPS-DexcomG6","date":1653123248000,"dateString":"2022-05-21T08:54:08.000Z","isValid":true,"sgv":107,"direction":"Flat","type":"sgv","_id":"6288a8db99fc930004d6bdf1","glucose":107,"avgDelta":"-5.25","BGI":-45.38,"deviation":"40.13"},{"device":"AndroidAPS-DexcomG6","date":1653123549000,"dateString":"2022-05-21T08:59:09.000Z","isValid":true,"sgv":109,"direction":"Flat","type":"sgv","_id":"6288a9f099fc930004d6bdf4","glucose":109,"avgDelta":"-2.25","BGI":-43.62,"deviation":"41.37"},{"device":"AndroidAPS-DexcomG6","date":1653123849000,"dateString":"2022-05-21T09:04:09.000Z","isValid":true,"sgv":113,"direction":"Flat","type":"sgv","_id":"6288ab1d99fc930004d6bdf6","glucose":113,"avgDelta":"0.50","BGI":-41.85,"deviation":"42.35"},{"device":"AndroidAPS-DexcomG6","date":1653124149000,"dateString":"2022-05-21T09:09:09.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"6288ac4b99fc930004d6bdf8","glucose":119,"avgDelta":"2.75","BGI":-39.95,"deviation":"42.70"},{"device":"AndroidAPS-DexcomG6","date":1653124448000,"dateString":"2022-05-21T09:14:08.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"6288ad7999fc930004d6bdfa","glucose":124,"avgDelta":"4.25","BGI":-37.84,"deviation":"42.09"},{"device":"AndroidAPS-DexcomG6","date":1653124749000,"dateString":"2022-05-21T09:19:09.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","_id":"6288aea799fc930004d6bdfb","glucose":125,"avgDelta":"4.00","BGI":-35.69,"deviation":"39.69"},{"device":"AndroidAPS-DexcomG6","date":1653125048000,"dateString":"2022-05-21T09:24:08.000Z","isValid":true,"sgv":122,"direction":"Flat","type":"sgv","_id":"6288afd5c9c02c00041f7ef8","glucose":122,"avgDelta":"2.25","BGI":-33.4,"deviation":"35.65"},{"device":"AndroidAPS-DexcomG6","date":1653125349000,"dateString":"2022-05-21T09:29:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"6288b103c9c02c00041f7efc","glucose":120,"avgDelta":"0.25","BGI":-31.2,"deviation":"31.45"},{"device":"AndroidAPS-DexcomG6","date":1653125649000,"dateString":"2022-05-21T09:34:09.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b231c9c02c00041f7efe","glucose":118,"avgDelta":"-1.50","BGI":-28.96,"deviation":"27.46"},{"device":"AndroidAPS-DexcomG6","date":1653125948000,"dateString":"2022-05-21T09:39:08.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b35fc9c02c00041f7f00","glucose":118,"avgDelta":"-1.75","BGI":-26.77,"deviation":"25.02"},{"device":"AndroidAPS-DexcomG6","date":1653126249000,"dateString":"2022-05-21T09:44:09.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b48dc9c02c00041f7f02","glucose":118,"avgDelta":"-1.00","BGI":-24.61,"deviation":"23.61"},{"device":"AndroidAPS-DexcomG6","date":1653126549000,"dateString":"2022-05-21T09:49:09.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6288b5bbc9c02c00041f7f04","glucose":117,"avgDelta":"-0.75","BGI":-22.5,"deviation":"21.75"},{"device":"AndroidAPS-DexcomG6","date":1653126849000,"dateString":"2022-05-21T09:54:09.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"6288b6e9c9c02c00041f7f06","glucose":118,"avgDelta":"0.00","BGI":-20.52,"deviation":"20.52"},{"device":"AndroidAPS-DexcomG6","date":1653127149000,"dateString":"2022-05-21T09:59:09.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"6288b813abbef90004616ceb","glucose":119,"avgDelta":"0.25","BGI":-18.58,"deviation":"18.83"},{"device":"AndroidAPS-DexcomG6","date":1653127449000,"dateString":"2022-05-21T10:04:09.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"6288b941abbef90004616cf0","glucose":119,"avgDelta":"0.25","BGI":-16.72,"deviation":"16.97"},{"device":"AndroidAPS-DexcomG6","date":1653127748000,"dateString":"2022-05-21T10:09:08.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","_id":"6288ba56abbef90004616cf2","glucose":115,"avgDelta":"-0.50","BGI":-14.96,"deviation":"14.46"},{"device":"AndroidAPS-DexcomG6","date":1653128049000,"dateString":"2022-05-21T10:14:09.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"6288bb84abbef90004616cf4","glucose":110,"avgDelta":"-2.00","BGI":-13.32,"deviation":"11.32"},{"device":"AndroidAPS-DexcomG6","date":1653128349000,"dateString":"2022-05-21T10:19:09.000Z","isValid":true,"sgv":104,"direction":"Flat","type":"sgv","_id":"6288bcb2abbef90004616cf6","glucose":104,"avgDelta":"-3.75","BGI":-11.72,"deviation":"7.97"},{"device":"AndroidAPS-DexcomG6","date":1653128649000,"dateString":"2022-05-21T10:24:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6288bde0abbef90004616cf8","glucose":101,"avgDelta":"-4.50","BGI":-10.3,"deviation":"5.80"},{"device":"AndroidAPS-DexcomG6","date":1653128948000,"dateString":"2022-05-21T10:29:08.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"6288bf061991280004dce457","glucose":99,"avgDelta":"-4.00","BGI":-8.88,"deviation":"4.88"},{"device":"AndroidAPS-DexcomG6","date":1653129249000,"dateString":"2022-05-21T10:34:09.000Z","isValid":true,"sgv":96,"direction":"Flat","type":"sgv","_id":"6288c0341991280004dce459","glucose":96,"avgDelta":"-3.50","BGI":-7.59,"deviation":"4.09"},{"device":"AndroidAPS-DexcomG6","date":1653129548000,"dateString":"2022-05-21T10:39:08.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288c1631991280004dce45b","glucose":94,"avgDelta":"-2.50","BGI":-6.38,"deviation":"3.88"},{"device":"AndroidAPS-DexcomG6","date":1653129848000,"dateString":"2022-05-21T10:44:08.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"6288c2911991280004dce45e","glucose":93,"avgDelta":"-2.00","BGI":-5.26,"deviation":"3.26"},{"device":"AndroidAPS-DexcomG6","date":1653130149000,"dateString":"2022-05-21T10:49:09.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","_id":"6288c3be1991280004dce461","glucose":91,"avgDelta":"-2.00","BGI":-4.27,"deviation":"2.27"},{"device":"AndroidAPS-DexcomG6","date":1653130448000,"dateString":"2022-05-21T10:54:08.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","_id":"6288c4ec1991280004dce464","glucose":88,"avgDelta":"-2.00","BGI":-3.36,"deviation":"1.36"},{"device":"AndroidAPS-DexcomG6","date":1653130748000,"dateString":"2022-05-21T10:59:08.000Z","isValid":true,"sgv":84,"direction":"Flat","type":"sgv","_id":"6288c61a1991280004dce468","glucose":84,"avgDelta":"-2.50","BGI":-2.59,"deviation":"0.09"},{"device":"AndroidAPS-DexcomG6","date":1653131049000,"dateString":"2022-05-21T11:04:09.000Z","isValid":true,"sgv":81,"direction":"Flat","type":"sgv","_id":"6288c7418e9ed800049b39e3","glucose":81,"avgDelta":"-3.00","BGI":-1.9,"deviation":"-1.10"},{"device":"AndroidAPS-DexcomG6","date":1653132249000,"dateString":"2022-05-21T11:24:09.000Z","isValid":true,"sgv":109,"direction":"FortyFiveUp","type":"sgv","_id":"6288cbf98e9ed800049b39f2","glucose":109,"avgDelta":"7.00","BGI":-1.94,"deviation":"8.94","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653132549000,"dateString":"2022-05-21T11:29:09.000Z","isValid":true,"sgv":118,"direction":"FortyFiveUp","type":"sgv","_id":"6288cd278e9ed800049b39f5","glucose":118,"avgDelta":"9.00","BGI":-9.57,"deviation":"18.57"},{"device":"AndroidAPS-DexcomG6","date":1653132849000,"dateString":"2022-05-21T11:34:09.000Z","isValid":true,"sgv":121,"direction":"FortyFiveUp","type":"sgv","_id":"6288ce548e9ed800049b39f7","glucose":121,"avgDelta":"8.00","BGI":-15.47,"deviation":"23.47"},{"device":"AndroidAPS-DexcomG6","date":1653133149000,"dateString":"2022-05-21T11:39:09.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"6288cf770f1be700041e59c8","glucose":114,"avgDelta":"4.00","BGI":-20.04,"deviation":"24.04"},{"device":"AndroidAPS-DexcomG6","date":1653133449000,"dateString":"2022-05-21T11:44:09.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","_id":"6288d0a80f1be700041e59cb","glucose":101,"avgDelta":"-2.00","BGI":-23.32,"deviation":"21.32"},{"device":"AndroidAPS-DexcomG6","date":1653133749000,"dateString":"2022-05-21T11:49:09.000Z","isValid":true,"sgv":87,"direction":"FortyFiveDown","type":"sgv","_id":"6288d1d80f1be700041e59cf","glucose":87,"avgDelta":"-7.75","BGI":-25.69,"deviation":"17.94"},{"device":"AndroidAPS-DexcomG6","date":1653134049000,"dateString":"2022-05-21T11:54:09.000Z","isValid":true,"sgv":79,"direction":"FortyFiveDown","type":"sgv","_id":"6288d3060f1be700041e59d2","glucose":79,"avgDelta":"-10.50","BGI":-27.28,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134349000,"dateString":"2022-05-21T11:59:09.000Z","isValid":true,"sgv":76,"direction":"FortyFiveDown","type":"sgv","_id":"6288d4220f1be700041e59d5","glucose":76,"avgDelta":"-9.50","BGI":-28.06,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134649000,"dateString":"2022-05-21T12:04:09.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","_id":"6288d5500f1be700041e59d7","glucose":77,"avgDelta":"-6.00","BGI":-28.32,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653134949000,"dateString":"2022-05-21T12:09:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d67f0f1be700041e59da","glucose":78,"avgDelta":"-2.25","BGI":-28.14,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135249000,"dateString":"2022-05-21T12:14:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288d7ae0f1be700041e59de","glucose":79,"avgDelta":"0.00","BGI":-27.76,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135549000,"dateString":"2022-05-21T12:19:09.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","_id":"6288d8e00f1be700041e59e0","glucose":78,"avgDelta":"0.50","BGI":-27.02,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653135849000,"dateString":"2022-05-21T12:24:09.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","_id":"6288d9fb0f1be700041e59e2","glucose":76,"avgDelta":"-0.25","BGI":-26.12,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136149000,"dateString":"2022-05-21T12:29:09.000Z","isValid":true,"sgv":73,"direction":"Flat","type":"sgv","_id":"6288db8a0f1be700041e59e5","glucose":73,"avgDelta":"-1.25","BGI":-25,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136449000,"dateString":"2022-05-21T12:34:09.000Z","isValid":true,"sgv":70,"direction":"Flat","type":"sgv","_id":"6288dd270f1be700041e59e8","glucose":70,"avgDelta":"-2.25","BGI":-23.7,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653136749000,"dateString":"2022-05-21T12:39:09.000Z","isValid":true,"sgv":68,"direction":"Flat","type":"sgv","_id":"6288de580f1be700041e59ea","glucose":68,"avgDelta":"-2.50","BGI":-22.37,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137049000,"dateString":"2022-05-21T12:44:09.000Z","isValid":true,"sgv":69,"direction":"Flat","type":"sgv","_id":"6288df8a0f1be700041e59ec","glucose":69,"avgDelta":"-1.75","BGI":-20.95,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137350000,"dateString":"2022-05-21T12:49:10.000Z","isValid":true,"sgv":72,"direction":"Flat","type":"sgv","_id":"6288dfd60f1be700041e59ee","glucose":72,"avgDelta":"-0.25","BGI":-19.52,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137649000,"dateString":"2022-05-21T12:54:09.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","_id":"6288e1040f1be700041e59f0","glucose":79,"avgDelta":"2.25","BGI":-18.02,"deviation":"0.00"},{"device":"AndroidAPS-DexcomG6","date":1653137949000,"dateString":"2022-05-21T12:59:09.000Z","isValid":true,"sgv":86,"direction":"Flat","type":"sgv","_id":"6288e24c0f1be700041e59f3","glucose":86,"avgDelta":"4.50","BGI":-17.54,"deviation":"22.04"},{"device":"AndroidAPS-DexcomG6","date":1653138249000,"dateString":"2022-05-21T13:04:09.000Z","isValid":true,"sgv":93,"direction":"FortyFiveUp","type":"sgv","_id":"6288e3610f1be700041e59f6","glucose":93,"avgDelta":"6.00","BGI":-17.8,"deviation":"23.80"},{"device":"AndroidAPS-DexcomG6","date":1653138549000,"dateString":"2022-05-21T13:09:09.000Z","isValid":true,"sgv":95,"direction":"FortyFiveUp","type":"sgv","_id":"6288e4900f1be700041e59f8","glucose":95,"avgDelta":"5.75","BGI":-18.1,"deviation":"23.85"},{"device":"AndroidAPS-DexcomG6","date":1653138849000,"dateString":"2022-05-21T13:14:09.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288e5d00f1be700041e59fb","glucose":94,"avgDelta":"3.75","BGI":-18.53,"deviation":"22.28"},{"device":"AndroidAPS-DexcomG6","date":1653139150000,"dateString":"2022-05-21T13:19:10.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","_id":"6288e7030f1be700041e59fd","glucose":93,"avgDelta":"1.75","BGI":-18.83,"deviation":"20.58"},{"device":"AndroidAPS-DexcomG6","date":1653139450000,"dateString":"2022-05-21T13:24:10.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","_id":"6288e82c0f1be700041e5a00","glucose":94,"avgDelta":"0.25","BGI":-18.83,"deviation":"19.08"},{"device":"AndroidAPS-DexcomG6","date":1653139749000,"dateString":"2022-05-21T13:29:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"6288e9410f1be700041e5a03","glucose":98,"avgDelta":"0.75","BGI":-18.58,"deviation":"19.33"},{"device":"AndroidAPS-DexcomG6","date":1653140049000,"dateString":"2022-05-21T13:34:09.000Z","isValid":true,"sgv":105,"direction":"Flat","type":"sgv","_id":"6288ea6e0f1be700041e5a06","glucose":105,"avgDelta":"2.75","BGI":-18.45,"deviation":"21.20"},{"device":"AndroidAPS-DexcomG6","date":1653140349000,"dateString":"2022-05-21T13:39:09.000Z","isValid":true,"sgv":114,"direction":"FortyFiveUp","type":"sgv","_id":"6288eb9d0f1be700041e5a09","glucose":114,"avgDelta":"5.25","BGI":-18.58,"deviation":"23.83"},{"device":"AndroidAPS-DexcomG6","date":1653140648000,"dateString":"2022-05-21T13:44:08.000Z","isValid":true,"sgv":121,"direction":"FortyFiveUp","type":"sgv","_id":"6288ecca0f1be700041e5a0b","glucose":121,"avgDelta":"6.75","BGI":-18.71,"deviation":"25.46"},{"device":"AndroidAPS-DexcomG6","date":1653140949000,"dateString":"2022-05-21T13:49:09.000Z","isValid":true,"sgv":126,"direction":"FortyFiveUp","type":"sgv","_id":"6288edfc2634cd0004296065","glucose":126,"avgDelta":"7.00","BGI":-19.05,"deviation":"26.05"},{"device":"AndroidAPS-DexcomG6","date":1653141249000,"dateString":"2022-05-21T13:54:09.000Z","isValid":true,"sgv":131,"direction":"FortyFiveUp","type":"sgv","_id":"6288ef2a2634cd0004296067","glucose":131,"avgDelta":"6.50","BGI":-19.48,"deviation":"25.98"},{"device":"AndroidAPS-DexcomG6","date":1653141548000,"dateString":"2022-05-21T13:59:08.000Z","isValid":true,"sgv":139,"direction":"FortyFiveUp","type":"sgv","_id":"6288f03f2634cd000429606a","glucose":139,"avgDelta":"6.25","BGI":-19.91,"deviation":"26.16"},{"device":"AndroidAPS-DexcomG6","date":1653141849000,"dateString":"2022-05-21T14:04:09.000Z","isValid":true,"sgv":147,"direction":"FortyFiveUp","type":"sgv","_id":"6288f16d2634cd000429606c","glucose":147,"avgDelta":"6.50","BGI":-20.17,"deviation":"26.67"},{"device":"AndroidAPS-DexcomG6","date":1653142149000,"dateString":"2022-05-21T14:09:09.000Z","isValid":true,"sgv":155,"direction":"FortyFiveUp","type":"sgv","_id":"6288f29b2634cd000429606f","glucose":155,"avgDelta":"7.25","BGI":-20.73,"deviation":"27.98"},{"device":"AndroidAPS-DexcomG6","date":1653142449000,"dateString":"2022-05-21T14:14:09.000Z","isValid":true,"sgv":160,"direction":"FortyFiveUp","type":"sgv","_id":"6288f3c92634cd0004296071","glucose":160,"avgDelta":"7.25","BGI":-21.08,"deviation":"28.33"},{"device":"AndroidAPS-DexcomG6","date":1653142749000,"dateString":"2022-05-21T14:19:09.000Z","isValid":true,"sgv":166,"direction":"FortyFiveUp","type":"sgv","_id":"6288f4f72634cd0004296074","glucose":166,"avgDelta":"6.75","BGI":-21.55,"deviation":"28.30"},{"device":"AndroidAPS-DexcomG6","date":1653143049000,"dateString":"2022-05-21T14:24:09.000Z","isValid":true,"sgv":174,"direction":"FortyFiveUp","type":"sgv","_id":"6288f62c0e0c880004d58dd8","glucose":174,"avgDelta":"6.75","BGI":-21.89,"deviation":"28.64"},{"device":"AndroidAPS-DexcomG6","date":1653143349000,"dateString":"2022-05-21T14:29:09.000Z","isValid":true,"sgv":182,"direction":"FortyFiveUp","type":"sgv","_id":"6288f75a0e0c880004d58ddb","glucose":182,"avgDelta":"6.75","BGI":-21.98,"deviation":"28.73"},{"device":"AndroidAPS-DexcomG6","date":1653143650000,"dateString":"2022-05-21T14:34:10.000Z","isValid":true,"sgv":185,"direction":"FortyFiveUp","type":"sgv","_id":"6288f8880e0c880004d58dde","glucose":185,"avgDelta":"6.25","BGI":-21.85,"deviation":"28.10"},{"device":"AndroidAPS-DexcomG6","date":1653143949000,"dateString":"2022-05-21T14:39:09.000Z","isValid":true,"sgv":184,"direction":"Flat","type":"sgv","_id":"6288f9b60e0c880004d58de0","glucose":184,"avgDelta":"4.50","BGI":-21.46,"deviation":"25.96"},{"device":"AndroidAPS-DexcomG6","date":1653144249000,"dateString":"2022-05-21T14:44:09.000Z","isValid":true,"sgv":180,"direction":"Flat","type":"sgv","_id":"6288facb0e0c880004d58de3","glucose":180,"avgDelta":"1.50","BGI":-20.82,"deviation":"22.32"},{"device":"AndroidAPS-DexcomG6","date":1653144550000,"dateString":"2022-05-21T14:49:10.000Z","isValid":true,"sgv":178,"direction":"Flat","type":"sgv","_id":"6288fbf90e0c880004d58de5","glucose":178,"avgDelta":"-1.00","BGI":-20,"deviation":"19.00"},{"device":"AndroidAPS-DexcomG6","date":1653144849000,"dateString":"2022-05-21T14:54:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6288fd270e0c880004d58de7","glucose":177,"avgDelta":"-2.00","BGI":-19.01,"deviation":"17.01"},{"device":"AndroidAPS-DexcomG6","date":1653145149000,"dateString":"2022-05-21T14:59:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"6288fe56c9346b0004863359","glucose":176,"avgDelta":"-2.00","BGI":-17.97,"deviation":"15.97"},{"device":"AndroidAPS-DexcomG6","date":1653145449000,"dateString":"2022-05-21T15:04:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6288ff9ec9346b000486335b","glucose":177,"avgDelta":"-0.75","BGI":-16.85,"deviation":"16.10"},{"device":"AndroidAPS-DexcomG6","date":1653145750000,"dateString":"2022-05-21T15:09:10.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"628900b2c9346b000486335d","glucose":177,"avgDelta":"-0.25","BGI":-15.73,"deviation":"15.48"},{"device":"AndroidAPS-DexcomG6","date":1653146050000,"dateString":"2022-05-21T15:14:10.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"628901e0c9346b000486335f","glucose":177,"avgDelta":"0.00","BGI":-14.57,"deviation":"14.57"},{"device":"AndroidAPS-DexcomG6","date":1653146349000,"dateString":"2022-05-21T15:19:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6289030ec9346b0004863361","glucose":177,"avgDelta":"0.25","BGI":-13.45,"deviation":"13.70"},{"device":"AndroidAPS-DexcomG6","date":1653146650000,"dateString":"2022-05-21T15:24:10.000Z","isValid":true,"sgv":178,"direction":"Flat","type":"sgv","_id":"6289043cc9346b0004863363","glucose":178,"avgDelta":"0.25","BGI":-12.33,"deviation":"12.58"},{"device":"AndroidAPS-DexcomG6","date":1653146949000,"dateString":"2022-05-21T15:29:09.000Z","isValid":true,"sgv":178,"direction":"Flat","type":"sgv","_id":"6289056ac9346b0004863366","glucose":178,"avgDelta":"0.25","BGI":-11.29,"deviation":"11.54"},{"device":"AndroidAPS-DexcomG6","date":1653147249000,"dateString":"2022-05-21T15:34:09.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","_id":"6289067fc9346b0004863369","glucose":177,"avgDelta":"0.00","BGI":-10.17,"deviation":"10.17"},{"device":"AndroidAPS-DexcomG6","date":1653147549000,"dateString":"2022-05-21T15:39:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"628907c5cf7ee10004a2b1ce","glucose":176,"avgDelta":"-0.25","BGI":-9.27,"deviation":"9.02"},{"device":"AndroidAPS-DexcomG6","date":1653147849000,"dateString":"2022-05-21T15:44:09.000Z","isValid":true,"sgv":175,"direction":"Flat","type":"sgv","_id":"628908f3cf7ee10004a2b1d1","glucose":175,"avgDelta":"-0.75","BGI":-8.49,"deviation":"7.74"},{"device":"AndroidAPS-DexcomG6","date":1653148149000,"dateString":"2022-05-21T15:49:09.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","_id":"62890a21cf7ee10004a2b1d3","glucose":174,"avgDelta":"-1.00","BGI":-7.89,"deviation":"6.89"},{"device":"AndroidAPS-DexcomG6","date":1653148450000,"dateString":"2022-05-21T15:54:10.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890b36cf7ee10004a2b1d7","glucose":176,"avgDelta":"-0.25","BGI":-7.37,"deviation":"7.12"},{"device":"AndroidAPS-DexcomG6","date":1653148749000,"dateString":"2022-05-21T15:59:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890c64cf7ee10004a2b1da","glucose":176,"avgDelta":"0.00","BGI":-6.94,"deviation":"6.94"},{"device":"AndroidAPS-DexcomG6","date":1653149049000,"dateString":"2022-05-21T16:04:09.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","_id":"62890daccf7ee10004a2b1de","glucose":176,"avgDelta":"0.25","BGI":-6.72,"deviation":"6.97"},{"device":"AndroidAPS-DexcomG6","date":1653149349000,"dateString":"2022-05-21T16:09:09.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","_id":"62890edacf7ee10004a2b1e2","glucose":174,"avgDelta":"0.00","BGI":-6.64,"deviation":"6.64"},{"device":"AndroidAPS-DexcomG6","date":1653149650000,"dateString":"2022-05-21T16:14:10.000Z","isValid":true,"sgv":173,"direction":"Flat","type":"sgv","_id":"62890fff1090500004ca46fd","glucose":173,"avgDelta":"-0.75","BGI":-6.42,"deviation":"5.67"},{"device":"AndroidAPS-DexcomG6","date":1653149949000,"dateString":"2022-05-21T16:19:09.000Z","isValid":true,"sgv":172,"direction":"Flat","type":"sgv","_id":"6289130f1090500004ca46ff","glucose":172,"avgDelta":"-1.00","BGI":-6.12,"deviation":"5.12"},{"device":"AndroidAPS-DexcomG6","date":1653150249000,"dateString":"2022-05-21T16:24:09.000Z","isValid":true,"sgv":170,"direction":"Flat","type":"sgv","_id":"628913111090500004ca4704","glucose":170,"avgDelta":"-1.50","BGI":-5.95,"deviation":"4.45"},{"device":"AndroidAPS-DexcomG6","date":1653150549000,"dateString":"2022-05-21T16:29:09.000Z","isValid":true,"sgv":165,"direction":"Flat","type":"sgv","_id":"628913731090500004ca4706","glucose":165,"avgDelta":"-2.25","BGI":-5.73,"deviation":"3.48"},{"device":"AndroidAPS-DexcomG6","date":1653150849000,"dateString":"2022-05-21T16:34:09.000Z","isValid":true,"sgv":161,"direction":"Flat","type":"sgv","_id":"628914d01090500004ca4709","glucose":161,"avgDelta":"-3.00","BGI":-5.47,"deviation":"2.47"},{"device":"AndroidAPS-DexcomG6","date":1653151149000,"dateString":"2022-05-21T16:39:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628915ce1090500004ca470c","glucose":158,"avgDelta":"-3.50","BGI":-5.09,"deviation":"1.59"},{"device":"AndroidAPS-DexcomG6","date":1653151449000,"dateString":"2022-05-21T16:44:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"628916f81090500004ca4710","glucose":158,"avgDelta":"-3.00","BGI":-4.74,"deviation":"1.74"},{"device":"AndroidAPS-DexcomG6","date":1653151749000,"dateString":"2022-05-21T16:49:09.000Z","isValid":true,"sgv":159,"direction":"Flat","type":"sgv","_id":"628918261090500004ca4714","glucose":159,"avgDelta":"-1.50","BGI":-4.53,"deviation":"3.03"},{"device":"AndroidAPS-DexcomG6","date":1653152049000,"dateString":"2022-05-21T16:54:09.000Z","isValid":true,"sgv":160,"direction":"Flat","type":"sgv","_id":"628919531090500004ca4717","glucose":160,"avgDelta":"-0.25","BGI":-4.35,"deviation":"4.10"},{"device":"AndroidAPS-DexcomG6","date":1653152349000,"dateString":"2022-05-21T16:59:09.000Z","isValid":true,"sgv":158,"direction":"Flat","type":"sgv","_id":"62891a811090500004ca471a","glucose":158,"avgDelta":"0.00","BGI":-4.35,"deviation":"4.35"},{"device":"AndroidAPS-DexcomG6","date":1653152649000,"dateString":"2022-05-21T17:04:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62891ba31090500004ca471d","glucose":149,"avgDelta":"-2.25","BGI":-4.35,"deviation":"2.10"},{"device":"AndroidAPS-DexcomG6","date":1653152949000,"dateString":"2022-05-21T17:09:09.000Z","isValid":true,"sgv":138,"direction":"FortyFiveDown","type":"sgv","_id":"62891cd01090500004ca471f","glucose":138,"avgDelta":"-5.25","BGI":-4.22,"deviation":"-1.03"},{"device":"AndroidAPS-DexcomG6","date":1653155049000,"dateString":"2022-05-21T17:44:09.000Z","isValid":true,"sgv":116,"direction":"NONE","type":"sgv","_id":"6289250d8809e60004c644dd","glucose":116,"avgDelta":"5.00","BGI":-2.16,"deviation":"7.16","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653155349000,"dateString":"2022-05-21T17:49:09.000Z","isValid":true,"sgv":123,"direction":"NONE","type":"sgv","_id":"6289263c8809e60004c644e1","glucose":123,"avgDelta":"7.50","BGI":-2.07,"deviation":"9.57"},{"device":"AndroidAPS-DexcomG6","date":1653155649000,"dateString":"2022-05-21T17:54:09.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"6289276a8809e60004c644e3","glucose":124,"avgDelta":"6.75","BGI":-2.11,"deviation":"8.86"},{"device":"AndroidAPS-DexcomG6","date":1653155950000,"dateString":"2022-05-21T17:59:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"6289287e8809e60004c644e6","glucose":123,"avgDelta":"3.75","BGI":-2.16,"deviation":"5.91"},{"device":"AndroidAPS-DexcomG6","date":1653156250000,"dateString":"2022-05-21T18:04:10.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","_id":"628929ac8809e60004c644e9","glucose":119,"avgDelta":"0.75","BGI":-2.07,"deviation":"2.82"},{"device":"AndroidAPS-DexcomG6","date":1653156549000,"dateString":"2022-05-21T18:09:09.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"62892af2840d8d0004a20bf0","glucose":114,"avgDelta":"-2.25","BGI":-1.9,"deviation":"-0.35"},{"device":"AndroidAPS-DexcomG6","date":1653164649000,"dateString":"2022-05-21T20:24:09.000Z","isValid":true,"sgv":133,"direction":"FortyFiveUp","type":"sgv","_id":"62894a7e4493460004e63a38","glucose":133,"avgDelta":"9.50","BGI":-6.46,"deviation":"15.96","uamAbsorption":"start"},{"device":"AndroidAPS-DexcomG6","date":1653164950000,"dateString":"2022-05-21T20:29:10.000Z","isValid":true,"sgv":143,"direction":"SingleUp","type":"sgv","_id":"62894bab80fc7e00041b229b","glucose":143,"avgDelta":"10.75","BGI":-14.31,"deviation":"25.06"},{"device":"AndroidAPS-DexcomG6","date":1653165249000,"dateString":"2022-05-21T20:34:09.000Z","isValid":true,"sgv":145,"direction":"FortyFiveUp","type":"sgv","_id":"62894cdb80fc7e00041b229e","glucose":145,"avgDelta":"9.00","BGI":-20.43,"deviation":"29.43"},{"device":"AndroidAPS-DexcomG6","date":1653165550000,"dateString":"2022-05-21T20:39:10.000Z","isValid":true,"sgv":139,"direction":"Flat","type":"sgv","_id":"62894e0980fc7e00041b22a0","glucose":139,"avgDelta":"4.75","BGI":-25.17,"deviation":"29.92"},{"device":"AndroidAPS-DexcomG6","date":1653165850000,"dateString":"2022-05-21T20:44:10.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","_id":"62894f3880fc7e00041b22a3","glucose":128,"avgDelta":"-1.25","BGI":-28.62,"deviation":"27.37"},{"device":"AndroidAPS-DexcomG6","date":1653166149000,"dateString":"2022-05-21T20:49:09.000Z","isValid":true,"sgv":118,"direction":"FortyFiveDown","type":"sgv","_id":"6289506680fc7e00041b22a5","glucose":118,"avgDelta":"-6.25","BGI":-30.95,"deviation":"24.70"},{"device":"AndroidAPS-DexcomG6","date":1653166450000,"dateString":"2022-05-21T20:54:10.000Z","isValid":true,"sgv":110,"direction":"FortyFiveDown","type":"sgv","_id":"6289519580fc7e00041b22a7","glucose":110,"avgDelta":"-8.75","BGI":-32.45,"deviation":"23.70"},{"device":"AndroidAPS-DexcomG6","date":1653166749000,"dateString":"2022-05-21T20:59:09.000Z","isValid":true,"sgv":104,"direction":"FortyFiveDown","type":"sgv","_id":"628952c680fc7e00041b22a9","glucose":104,"avgDelta":"-8.75","BGI":-33.27,"deviation":"24.52"},{"device":"AndroidAPS-DexcomG6","date":1653167049000,"dateString":"2022-05-21T21:04:09.000Z","isValid":true,"sgv":101,"direction":"FortyFiveDown","type":"sgv","_id":"628953e79bf1e6000482ff90","glucose":101,"avgDelta":"-6.75","BGI":-33.45,"deviation":"26.70"},{"device":"AndroidAPS-DexcomG6","date":1653167350000,"dateString":"2022-05-21T21:09:10.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","_id":"628955179bf1e6000482ff92","glucose":99,"avgDelta":"-4.75","BGI":-33.14,"deviation":"28.39"},{"device":"AndroidAPS-DexcomG6","date":1653167650000,"dateString":"2022-05-21T21:14:10.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628956919bf1e6000482ff96","glucose":98,"avgDelta":"-3.00","BGI":-32.5,"deviation":"29.50"},{"device":"AndroidAPS-DexcomG6","date":1653167949000,"dateString":"2022-05-21T21:19:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"6289583f9bf1e6000482ff9b","glucose":98,"avgDelta":"-1.50","BGI":-31.64,"deviation":"30.14"},{"device":"AndroidAPS-DexcomG6","date":1653168250000,"dateString":"2022-05-21T21:24:10.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"628959ed9bf1e6000482ff9e","glucose":98,"avgDelta":"-0.75","BGI":-30.69,"deviation":"29.94"},{"device":"AndroidAPS-DexcomG6","date":1653168549000,"dateString":"2022-05-21T21:29:09.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","_id":"62895b9a9bf1e6000482ffa1","glucose":98,"avgDelta":"-0.25","BGI":-29.74,"deviation":"29.49"},{"device":"AndroidAPS-DexcomG6","date":1653168849000,"dateString":"2022-05-21T21:34:09.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","_id":"62895d98fb144900043c34e5","glucose":100,"avgDelta":"0.50","BGI":-28.58,"deviation":"29.08"},{"device":"AndroidAPS-DexcomG6","date":1653169150000,"dateString":"2022-05-21T21:39:10.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","_id":"62895f5ffb144900043c34e8","glucose":102,"avgDelta":"1.00","BGI":-27.28,"deviation":"28.28"},{"device":"AndroidAPS-DexcomG6","date":1653169449000,"dateString":"2022-05-21T21:44:09.000Z","isValid":true,"sgv":105,"direction":"Flat","type":"sgv","_id":"628961a4fb144900043c34ea","glucose":105,"avgDelta":"1.75","BGI":-25.82,"deviation":"27.57"},{"device":"AndroidAPS-DexcomG6","date":1653169749000,"dateString":"2022-05-21T21:49:09.000Z","isValid":true,"sgv":107,"direction":"Flat","type":"sgv","_id":"628964906a5ecf00042d546b","glucose":107,"avgDelta":"2.25","BGI":-24.39,"deviation":"26.64"},{"device":"AndroidAPS-DexcomG6","date":1653170049000,"dateString":"2022-05-21T21:54:09.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"628967a06a5ecf00042d546e","glucose":110,"avgDelta":"2.50","BGI":-22.84,"deviation":"25.34"},{"device":"AndroidAPS-DexcomG6","date":1653170350000,"dateString":"2022-05-21T21:59:10.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","_id":"628969016a5ecf00042d5470","glucose":112,"avgDelta":"2.50","BGI":-21.29,"deviation":"23.79"},{"device":"AndroidAPS-DexcomG6","date":1653170650000,"dateString":"2022-05-21T22:04:10.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","_id":"628969fd6a5ecf00042d5471","glucose":115,"avgDelta":"2.50","BGI":-19.7,"deviation":"22.20"},{"device":"AndroidAPS-DexcomG6","date":1653170950000,"dateString":"2022-05-21T22:09:10.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"62896ac76a5ecf00042d5472","glucose":117,"avgDelta":"2.50","BGI":-18.15,"deviation":"20.65"},{"device":"AndroidAPS-DexcomG6","date":1653171250000,"dateString":"2022-05-21T22:14:10.000Z","isValid":true,"sgv":118,"direction":"Flat","type":"sgv","_id":"62896b5f6a5ecf00042d5474","glucose":118,"avgDelta":"2.00","BGI":-16.59,"deviation":"18.59"},{"device":"AndroidAPS-DexcomG6","date":1653171549000,"dateString":"2022-05-21T22:19:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"62896c1037d09a00043f2b13","glucose":120,"avgDelta":"2.00","BGI":-15.13,"deviation":"17.13"},{"device":"AndroidAPS-DexcomG6","date":1653171849000,"dateString":"2022-05-21T22:24:09.000Z","isValid":true,"sgv":122,"direction":"Flat","type":"sgv","_id":"62896c7537d09a00043f2b14","glucose":122,"avgDelta":"1.75","BGI":-13.75,"deviation":"15.50"},{"device":"AndroidAPS-DexcomG6","date":1653172150000,"dateString":"2022-05-21T22:29:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"62896cda37d09a00043f2b16","glucose":124,"avgDelta":"1.75","BGI":-12.41,"deviation":"14.16"},{"device":"AndroidAPS-DexcomG6","date":1653172450000,"dateString":"2022-05-21T22:34:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"62896d8b37d09a00043f2b17","glucose":124,"avgDelta":"1.50","BGI":-11.21,"deviation":"12.71"},{"device":"AndroidAPS-DexcomG6","date":1653172749000,"dateString":"2022-05-21T22:39:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"62896e8937d09a00043f2b19","glucose":120,"avgDelta":"0.00","BGI":-10.13,"deviation":"10.13"},{"device":"AndroidAPS-DexcomG6","date":1653173050000,"dateString":"2022-05-21T22:44:10.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","_id":"62896f8537d09a00043f2b1a","glucose":115,"avgDelta":"-1.75","BGI":-9.05,"deviation":"7.30"},{"device":"AndroidAPS-DexcomG6","date":1653173350000,"dateString":"2022-05-21T22:49:10.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","_id":"62896fb837d09a00043f2b1b","glucose":110,"avgDelta":"-3.50","BGI":-8.15,"deviation":"4.65"},{"device":"AndroidAPS-DexcomG6","date":1653173650000,"dateString":"2022-05-21T22:54:10.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289717d37d09a00043f2b1e","glucose":108,"avgDelta":"-4.00","BGI":-7.28,"deviation":"3.28"},{"device":"AndroidAPS-DexcomG6","date":1653173949000,"dateString":"2022-05-21T22:59:09.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","_id":"6289721437d09a00043f2b1f","glucose":108,"avgDelta":"-3.00","BGI":-6.42,"deviation":"3.42"},{"device":"AndroidAPS-DexcomG6","date":1653174249000,"dateString":"2022-05-21T23:04:09.000Z","isValid":true,"sgv":111,"direction":"Flat","type":"sgv","_id":"6289726037d09a00043f2b20","glucose":111,"avgDelta":"-1.00","BGI":-5.69,"deviation":"4.69"},{"device":"AndroidAPS-DexcomG6","date":1653174550000,"dateString":"2022-05-21T23:09:10.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","_id":"6289727937d09a00043f2b21","glucose":114,"avgDelta":"1.00","BGI":-4.96,"deviation":"5.96"},{"device":"AndroidAPS-DexcomG6","date":1653174850000,"dateString":"2022-05-21T23:14:10.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","_id":"6289727a37d09a00043f2b22","glucose":117,"avgDelta":"2.25","BGI":-4.35,"deviation":"6.60"},{"device":"AndroidAPS-DexcomG6","date":1653175149000,"dateString":"2022-05-21T23:19:09.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","_id":"6289738f37d09a00043f2b26","glucose":120,"avgDelta":"3.00","BGI":-3.84,"deviation":"6.84"},{"device":"AndroidAPS-DexcomG6","date":1653175450000,"dateString":"2022-05-21T23:24:10.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","_id":"628974b671a363000480abbc","glucose":123,"avgDelta":"3.00","BGI":-3.4,"deviation":"6.40"},{"device":"AndroidAPS-DexcomG6","date":1653175750000,"dateString":"2022-05-21T23:29:10.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","_id":"628975e471a363000480abbe","glucose":124,"avgDelta":"2.50","BGI":-3.19,"deviation":"5.69"},{"device":"AndroidAPS-DexcomG6","date":1653176050000,"dateString":"2022-05-21T23:34:10.000Z","isValid":true,"sgv":127,"direction":"Flat","type":"sgv","_id":"6289771371a363000480abc1","glucose":127,"avgDelta":"2.50","BGI":-2.93,"deviation":"5.43"},{"device":"AndroidAPS-DexcomG6","date":1653176350000,"dateString":"2022-05-21T23:39:10.000Z","isValid":true,"sgv":132,"direction":"Flat","type":"sgv","_id":"6289784271a363000480abc3","glucose":132,"avgDelta":"3.00","BGI":-2.67,"deviation":"5.67"},{"device":"AndroidAPS-DexcomG6","date":1653176650000,"dateString":"2022-05-21T23:44:10.000Z","isValid":true,"sgv":139,"direction":"Flat","type":"sgv","_id":"6289797071a363000480abc7","glucose":139,"avgDelta":"4.00","BGI":-2.59,"deviation":"6.59"},{"device":"AndroidAPS-DexcomG6","date":1653176950000,"dateString":"2022-05-21T23:49:10.000Z","isValid":true,"sgv":143,"direction":"FortyFiveUp","type":"sgv","_id":"62897a8771a363000480abca","glucose":143,"avgDelta":"4.75","BGI":-2.63,"deviation":"7.38"},{"device":"AndroidAPS-DexcomG6","date":1653177250000,"dateString":"2022-05-21T23:54:10.000Z","isValid":true,"sgv":146,"direction":"Flat","type":"sgv","_id":"62897bc89d6f1800047cd0c9","glucose":146,"avgDelta":"4.75","BGI":-3.23,"deviation":"7.98"},{"device":"AndroidAPS-DexcomG6","date":1653177550000,"dateString":"2022-05-21T23:59:10.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"62897cde9d6f1800047cd0cc","glucose":147,"avgDelta":"3.75","BGI":-3.79,"deviation":"7.54"},{"device":"AndroidAPS-DexcomG6","date":1653177850000,"dateString":"2022-05-22T00:04:10.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62897e0c9d6f1800047cd0d0","glucose":149,"avgDelta":"2.50","BGI":-4.22,"deviation":"6.72"},{"device":"AndroidAPS-DexcomG6","date":1653178149000,"dateString":"2022-05-22T00:09:09.000Z","isValid":true,"sgv":149,"direction":"Flat","type":"sgv","_id":"62897f3b9d6f1800047cd0d3","glucose":149,"avgDelta":"1.50","BGI":-4.48,"deviation":"5.98"},{"device":"AndroidAPS-DexcomG6","date":1653178449000,"dateString":"2022-05-22T00:14:09.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","_id":"6289806a9d6f1800047cd0d6","glucose":147,"avgDelta":"0.25","BGI":-4.61,"deviation":"4.86"},{"device":"AndroidAPS-DexcomG6","date":1653178750000,"dateString":"2022-05-22T00:19:10.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","_id":"628981999d6f1800047cd0d8","glucose":144,"avgDelta":"-0.75","BGI":-4.57,"deviation":"3.82"},{"device":"AndroidAPS-DexcomG6","date":1653179050000,"dateString":"2022-05-22T00:24:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628982c89d6f1800047cd0db","glucose":142,"avgDelta":"-1.75","BGI":-4.48,"deviation":"2.73"},{"device":"AndroidAPS-DexcomG6","date":1653179350000,"dateString":"2022-05-22T00:29:10.000Z","isValid":true,"sgv":142,"direction":"Flat","type":"sgv","_id":"628983f69d6f1800047cd0dd","glucose":142,"avgDelta":"-1.75","BGI":-4.27,"deviation":"2.52"},{"device":"AndroidAPS-DexcomG6","date":1653179649000,"dateString":"2022-05-22T00:34:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898517da46aa0004d1e0ea","glucose":143,"avgDelta":"-1.00","BGI":-4.01,"deviation":"3.01"},{"device":"AndroidAPS-DexcomG6","date":1653179949000,"dateString":"2022-05-22T00:39:09.000Z","isValid":true,"sgv":143,"direction":"Flat","type":"sgv","_id":"62898645da46aa0004d1e0ee","glucose":143,"avgDelta":"-0.25","BGI":-3.75,"deviation":"3.50"},{"device":"AndroidAPS-DexcomG6","date":1653180250000,"dateString":"2022-05-22T00:44:10.000Z","isValid":true,"sgv":135,"direction":"Flat","type":"sgv","_id":"62898774da46aa0004d1e0f1","glucose":135,"avgDelta":"-1.75","BGI":-3.49,"deviation":"1.74"},{"device":"AndroidAPS-DexcomG6","date":1653180549000,"dateString":"2022-05-22T00:49:09.000Z","isValid":true,"sgv":121,"direction":"FortyFiveDown","type":"sgv","_id":"628988a3da46aa0004d1e0f5","glucose":121,"avgDelta":"-5.25","BGI":-3.32,"deviation":"-1.93"}]} diff --git a/app/src/test/res/autotune/test3/autotune.2022-06-25-111350.log b/app/src/test/res/autotune/test3/autotune.2022-06-25-111350.log new file mode 100644 index 0000000000..49e1010a9a --- /dev/null +++ b/app/src/test/res/autotune/test3/autotune.2022-06-25-111350.log @@ -0,0 +1,425 @@ +Autotune disk usage: +160K . +Overall disk used/avail: +Filesystem Size Used Avail Use% Mounted on +rootfs 930G 431G 500G 47% / +Grabbing AAPS treatments.json and entries/sgv.json for date range... +oref0-autotune-prep --categorize_uam_as_basal ns-treatments.2022-05-21.json profile.json ns-entries.2022-05-21.json profile.pump.json > autotune.2022-05-21.json +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -16.9 IOB: 5.249 Activity: 0.0391 at 04:24:08 dev: 26.10 avgDelta: 9.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -18.9 IOB: 5.292 Activity: 0.0438 at 04:29:08 dev: 27.88 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -20.3 IOB: 4.964 Activity: 0.047 at 04:34:09 dev: 24.01 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.1 IOB: 4.674 Activity: 0.0489 at 04:39:08 dev: 17.83 avgDelta: -3.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.5 IOB: 4.377 Activity: 0.0498 at 04:44:08 dev: 11.21 avgDelta: -10.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.5 IOB: 4.077 Activity: 0.0498 at 04:49:08 dev: 7.96 avgDelta: -13.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -21.2 IOB: 3.73 Activity: 0.0491 at 04:54:08 dev: 7.16 avgDelta: -14.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -20.5 IOB: 3.389 Activity: 0.0476 at 04:59:08 dev: 6.77 avgDelta: -13.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -19.7 IOB: 3.055 Activity: 0.0457 at 05:04:09 dev: 6.95 avgDelta: -12.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -18.8 IOB: 2.782 Activity: 0.0436 at 05:09:08 dev: 6.54 avgDelta: -12.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -17.7 IOB: 2.47 Activity: 0.0411 at 05:14:08 dev: 5.71 avgDelta: -12.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -16.6 IOB: 2.22 Activity: 0.0386 at 05:19:09 dev: 5.14 avgDelta: -11.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -15.4 IOB: 1.935 Activity: 0.0358 at 05:24:08 dev: 4.93 avgDelta: -10.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -14.3 IOB: 1.711 Activity: 0.0332 at 05:29:08 dev: 6.06 avgDelta: -8.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -13.1 IOB: 1.452 Activity: 0.0304 at 05:34:09 dev: 7.35 avgDelta: -5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -12.1 IOB: 1.927 Activity: 0.028 at 05:39:09 dev: 8.32 avgDelta: -3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -11.6 IOB: 1.84 Activity: 0.027 at 05:44:08 dev: 8.64 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -11.1 IOB: 1.658 Activity: 0.0258 at 05:49:09 dev: 7.12 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -10.6 IOB: 1.482 Activity: 0.0245 at 05:54:08 dev: 5.31 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.6 BGI: -9.9 IOB: 1.264 Activity: 0.0229 at 05:59:09 dev: 4.62 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -9.1 IOB: 1.104 Activity: 0.0212 at 06:04:08 dev: 5.14 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.4 IOB: 0.952 Activity: 0.0194 at 06:09:09 dev: 7.36 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.8 IOB: 1.619 Activity: 0.0181 at 06:14:09 dev: 9.30 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.9 IOB: 1.678 Activity: 0.0184 at 06:19:09 dev: 10.68 avgDelta: 2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.1 IOB: 1.775 Activity: 0.0187 at 06:24:08 dev: 9.81 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.2 IOB: 1.581 Activity: 0.019 at 06:29:08 dev: 6.44 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -8.1 IOB: 1.437 Activity: 0.0188 at 06:34:08 dev: 2.35 avgDelta: -5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.9 IOB: 1.294 Activity: 0.0183 at 06:39:08 dev: -0.36 avgDelta: -8.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.6 IOB: 1.153 Activity: 0.0176 at 06:44:09 dev: 0.09 avgDelta: -7.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -7.2 IOB: 1.017 Activity: 0.0167 at 06:49:08 dev: 3.20 avgDelta: -4.00 ISF +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -6.7 IOB: 0.887 Activity: 0.0156 at 06:54:08 dev: 6.22 avgDelta: -0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -6.3 IOB: 1.011 Activity: 0.0147 at 06:59:08 dev: 7.59 avgDelta: 1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -6.1 IOB: 0.889 Activity: 0.0141 at 07:04:08 dev: 6.58 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -5.7 IOB: 0.771 Activity: 0.0133 at 07:09:08 dev: 2.98 avgDelta: -2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -5.3 IOB: 0.656 Activity: 0.0124 at 07:14:09 dev: 0.09 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -4.9 IOB: 0.547 Activity: 0.0114 at 07:19:08 dev: -1.84 avgDelta: -6.75 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -4.4 IOB: 0.392 Activity: 0.0103 at 07:24:09 dev: -2.31 avgDelta: -6.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.9 IOB: 0.294 Activity: 0.0091 at 07:29:09 dev: -1.08 avgDelta: -5.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.5 IOB: 0.2 Activity: 0.008 at 07:34:09 dev: 0.45 avgDelta: -3.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.8 IOB: 0.065 Activity: 0.0066 at 07:39:09 dev: 2.34 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.4 IOB: 0.034 Activity: 0.0055 at 07:44:09 dev: 3.37 avgDelta: 1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.1 IOB: 0.549 Activity: 0.0048 at 07:49:08 dev: 3.57 avgDelta: 1.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.3 IOB: 0.674 Activity: 0.0053 at 07:54:09 dev: 3.53 avgDelta: 1.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.5 IOB: 0.597 Activity: 0.0057 at 07:59:09 dev: 2.71 avgDelta: 0.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.5 IOB: 0.468 Activity: 0.0058 at 08:04:09 dev: 1.50 avgDelta: -1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.5 IOB: 0.389 Activity: 0.0057 at 08:09:09 dev: 0.21 avgDelta: -2.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.3 IOB: 0.262 Activity: 0.0053 at 08:14:09 dev: -0.47 avgDelta: -2.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -2.1 IOB: 0.186 Activity: 0.0048 at 08:19:09 dev: -0.93 avgDelta: -3.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.8 IOB: 0.064 Activity: 0.0041 at 08:24:09 dev: -1.48 avgDelta: -3.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.5 IOB: -0.005 Activity: 0.0034 at 08:29:09 dev: -2.03 avgDelta: -3.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -1.1 IOB: -0.12 Activity: 0.0026 at 08:34:09 dev: -2.13 avgDelta: -3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -0.8 IOB: -0.181 Activity: 0.0018 at 08:39:09 dev: -2.47 avgDelta: -3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -0.3 IOB: -0.287 Activity: 0.0008 at 08:44:09 dev: -2.41 avgDelta: -2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.0 IOB: -0.34 Activity: 0 at 08:49:09 dev: -2.50 avgDelta: -2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.4 IOB: -0.436 Activity: -0.001 at 08:54:09 dev: -2.68 avgDelta: -2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 0.8 IOB: -0.48 Activity: -0.0018 at 08:59:09 dev: -2.28 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.1 IOB: -0.519 Activity: -0.0026 at 09:04:09 dev: -1.12 avgDelta: 0.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.5 IOB: -0.554 Activity: -0.0034 at 09:09:09 dev: 0.00 avgDelta: 1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 1.8 IOB: -0.585 Activity: -0.0041 at 09:14:09 dev: 0.00 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.1 IOB: -0.662 Activity: -0.0049 at 09:19:09 dev: 0.39 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.4 IOB: -0.687 Activity: -0.0055 at 09:24:08 dev: -0.37 avgDelta: 2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.6 IOB: -0.708 Activity: -0.0061 at 09:29:09 dev: -0.13 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.8 IOB: -0.726 Activity: -0.0066 at 09:34:09 dev: 0.41 avgDelta: 3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 3.1 IOB: -0.351 Activity: -0.0071 at 09:39:08 dev: 1.19 avgDelta: 4.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.8 IOB: -0.218 Activity: -0.0064 at 09:44:09 dev: 2.99 avgDelta: 5.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: 2.4 IOB: -0.088 Activity: -0.0055 at 09:49:09 dev: 4.63 avgDelta: 7.00 basal +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -1.0 IOB: 13.594 Activity: 0.0023 at 09:54:09 dev: 8.74 avgDelta: 7.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -14.3 IOB: 13.552 Activity: 0.0331 at 09:59:09 dev: 23.02 avgDelta: 8.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -24.7 IOB: 13.224 Activity: 0.0573 at 10:04:09 dev: 33.70 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -32.8 IOB: 12.838 Activity: 0.076 at 10:09:08 dev: 40.76 avgDelta: 8.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -38.8 IOB: 12.322 Activity: 0.09 at 10:14:09 dev: 45.04 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -43.1 IOB: 11.794 Activity: 0.1001 at 10:19:09 dev: 46.89 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -46.0 IOB: 11.177 Activity: 0.1068 at 10:24:09 dev: 47.03 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -47.8 IOB: 10.58 Activity: 0.111 at 10:29:09 dev: 45.84 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -48.7 IOB: 9.919 Activity: 0.1129 at 10:34:09 dev: 43.66 avgDelta: -5.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -48.7 IOB: 9.254 Activity: 0.1129 at 10:39:09 dev: 41.41 avgDelta: -7.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -48.0 IOB: 8.643 Activity: 0.1114 at 10:44:09 dev: 39.51 avgDelta: -8.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -46.9 IOB: 7.992 Activity: 0.1088 at 10:49:09 dev: 39.39 avgDelta: -7.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -45.4 IOB: 7.406 Activity: 0.1053 at 10:54:08 dev: 40.13 avgDelta: -5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.7 BGI: -43.6 IOB: 7.111 Activity: 0.1012 at 10:59:09 dev: 41.37 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -41.9 IOB: 6.515 Activity: 0.0971 at 11:04:09 dev: 42.35 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -40.0 IOB: 5.99 Activity: 0.0927 at 11:09:09 dev: 42.70 avgDelta: 2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -37.8 IOB: 5.439 Activity: 0.0878 at 11:14:08 dev: 42.09 avgDelta: 4.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -35.7 IOB: 4.962 Activity: 0.0828 at 11:19:09 dev: 39.69 avgDelta: 4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -33.4 IOB: 4.462 Activity: 0.0775 at 11:24:08 dev: 35.65 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -31.2 IOB: 4.036 Activity: 0.0724 at 11:29:09 dev: 31.45 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -29.0 IOB: 3.638 Activity: 0.0672 at 11:34:09 dev: 27.46 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -26.8 IOB: 3.214 Activity: 0.0621 at 11:39:08 dev: 25.02 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -24.6 IOB: 2.866 Activity: 0.0571 at 11:44:09 dev: 23.61 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -22.5 IOB: 2.494 Activity: 0.0522 at 11:49:09 dev: 21.75 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -20.5 IOB: 2.193 Activity: 0.0476 at 11:54:09 dev: 20.52 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: -18.6 IOB: 1.867 Activity: 0.0431 at 11:59:09 dev: 18.83 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -16.7 IOB: 1.563 Activity: 0.0388 at 12:04:09 dev: 16.97 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -15.0 IOB: 1.329 Activity: 0.0347 at 12:09:08 dev: 14.46 avgDelta: -0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -13.3 IOB: 1.115 Activity: 0.0309 at 12:14:09 dev: 11.32 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -11.7 IOB: 0.87 Activity: 0.0272 at 12:19:09 dev: 7.97 avgDelta: -3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -10.3 IOB: 0.692 Activity: 0.0239 at 12:24:09 dev: 5.80 avgDelta: -4.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -8.9 IOB: 0.482 Activity: 0.0206 at 12:29:08 dev: 4.88 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -7.6 IOB: 0.287 Activity: 0.0176 at 12:34:09 dev: 4.09 avgDelta: -3.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -6.4 IOB: 0.156 Activity: 0.0148 at 12:39:08 dev: 3.88 avgDelta: -2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -5.3 IOB: 0.038 Activity: 0.0122 at 12:44:08 dev: 3.26 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -4.3 IOB: -0.067 Activity: 0.0099 at 12:49:09 dev: 2.27 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -3.4 IOB: -0.161 Activity: 0.0078 at 12:54:08 dev: 1.36 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -2.6 IOB: -0.195 Activity: 0.006 at 12:59:08 dev: 0.09 avgDelta: -2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -1.9 IOB: -0.271 Activity: 0.0044 at 13:04:09 dev: -1.10 avgDelta: -3.00 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -1.3 IOB: -0.339 Activity: 0.0029 at 13:09:09 dev: -1.00 avgDelta: -2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -0.7 IOB: -0.4 Activity: 0.0015 at 13:14:09 dev: 0.90 avgDelta: 0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -0.3 IOB: -0.155 Activity: 0.0007 at 13:19:08 dev: 3.80 avgDelta: 3.50 basal +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -1.9 IOB: 8.11 Activity: 0.0045 at 13:24:09 dev: 8.94 avgDelta: 7.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -9.6 IOB: 7.992 Activity: 0.0222 at 13:29:09 dev: 18.57 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -15.5 IOB: 7.745 Activity: 0.0359 at 13:34:09 dev: 23.47 avgDelta: 8.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -20.0 IOB: 7.488 Activity: 0.0465 at 13:39:09 dev: 24.04 avgDelta: 4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -23.3 IOB: 7.136 Activity: 0.0541 at 13:44:09 dev: 21.32 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -25.7 IOB: 6.8 Activity: 0.0596 at 13:49:09 dev: 17.94 avgDelta: -7.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -27.3 IOB: 6.441 Activity: 0.0633 at 13:54:09 dev: 0.00 avgDelta: -10.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.3 BGI: -28.1 IOB: 6.022 Activity: 0.0651 at 13:59:09 dev: 0.00 avgDelta: -9.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -28.3 IOB: 5.644 Activity: 0.0657 at 14:04:09 dev: 0.00 avgDelta: -6.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -28.1 IOB: 5.216 Activity: 0.0653 at 14:09:09 dev: 0.00 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -27.8 IOB: 4.962 Activity: 0.0644 at 14:14:09 dev: 0.00 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -27.0 IOB: 4.544 Activity: 0.0627 at 14:19:09 dev: 0.00 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -26.1 IOB: 4.185 Activity: 0.0606 at 14:24:09 dev: 0.00 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -25.0 IOB: 3.839 Activity: 0.058 at 14:29:09 dev: 0.00 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -23.7 IOB: 3.456 Activity: 0.055 at 14:34:09 dev: 0.00 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -22.4 IOB: 3.139 Activity: 0.0519 at 14:39:09 dev: 0.00 avgDelta: -2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -20.9 IOB: 2.788 Activity: 0.0486 at 14:44:09 dev: 0.00 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -19.5 IOB: 2.503 Activity: 0.0453 at 14:49:10 dev: 0.00 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -18.0 IOB: 2.186 Activity: 0.0418 at 14:54:09 dev: 0.00 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -17.5 IOB: 3.17 Activity: 0.0407 at 14:59:09 dev: 22.04 avgDelta: 4.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -17.8 IOB: 3.956 Activity: 0.0413 at 15:04:09 dev: 23.80 avgDelta: 6.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.1 IOB: 3.648 Activity: 0.042 at 15:09:09 dev: 23.85 avgDelta: 5.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.5 IOB: 4.126 Activity: 0.043 at 15:14:09 dev: 22.28 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.8 IOB: 3.81 Activity: 0.0437 at 15:19:10 dev: 20.58 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.8 IOB: 3.541 Activity: 0.0437 at 15:24:10 dev: 19.08 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.6 IOB: 3.272 Activity: 0.0431 at 15:29:09 dev: 19.33 avgDelta: 0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.4 IOB: 3.588 Activity: 0.0428 at 15:34:09 dev: 21.20 avgDelta: 2.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.6 IOB: 3.875 Activity: 0.0431 at 15:39:09 dev: 23.83 avgDelta: 5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -18.7 IOB: 3.608 Activity: 0.0434 at 15:44:08 dev: 25.46 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -19.1 IOB: 4.271 Activity: 0.0442 at 15:49:09 dev: 26.05 avgDelta: 7.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -19.5 IOB: 3.996 Activity: 0.0452 at 15:54:09 dev: 25.98 avgDelta: 6.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -19.9 IOB: 4.298 Activity: 0.0462 at 15:59:08 dev: 26.16 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.2 IOB: 4.015 Activity: 0.0468 at 16:04:09 dev: 26.67 avgDelta: 6.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.7 IOB: 4.538 Activity: 0.0481 at 16:09:09 dev: 27.98 avgDelta: 7.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.1 IOB: 4.245 Activity: 0.0489 at 16:14:09 dev: 28.33 avgDelta: 7.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.6 IOB: 4.729 Activity: 0.05 at 16:19:09 dev: 28.30 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.9 IOB: 4.426 Activity: 0.0508 at 16:24:09 dev: 28.64 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -22.0 IOB: 4.353 Activity: 0.051 at 16:29:09 dev: 28.73 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.9 IOB: 4.049 Activity: 0.0507 at 16:34:10 dev: 28.10 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -21.5 IOB: 3.747 Activity: 0.0498 at 16:39:09 dev: 25.96 avgDelta: 4.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.8 IOB: 3.402 Activity: 0.0483 at 16:44:09 dev: 22.32 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -20.0 IOB: 3.115 Activity: 0.0464 at 16:49:10 dev: 19.00 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -19.0 IOB: 2.788 Activity: 0.0441 at 16:54:09 dev: 17.01 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -18.0 IOB: 2.524 Activity: 0.0417 at 16:59:09 dev: 15.97 avgDelta: -2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -16.9 IOB: 2.271 Activity: 0.0391 at 17:04:09 dev: 16.10 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -15.7 IOB: 2.033 Activity: 0.0365 at 17:09:10 dev: 15.48 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -14.6 IOB: 1.807 Activity: 0.0338 at 17:14:10 dev: 14.57 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -13.4 IOB: 1.594 Activity: 0.0312 at 17:19:09 dev: 13.70 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -12.3 IOB: 1.395 Activity: 0.0286 at 17:24:10 dev: 12.58 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -11.3 IOB: 1.258 Activity: 0.0262 at 17:29:09 dev: 11.54 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -10.2 IOB: 1.034 Activity: 0.0236 at 17:34:09 dev: 10.17 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -9.3 IOB: 0.971 Activity: 0.0215 at 17:39:09 dev: 9.02 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -8.5 IOB: 1.008 Activity: 0.0197 at 17:44:09 dev: 7.74 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -7.9 IOB: 0.963 Activity: 0.0183 at 17:49:09 dev: 6.89 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -7.4 IOB: 1.046 Activity: 0.0171 at 17:54:10 dev: 7.12 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.9 IOB: 0.912 Activity: 0.0161 at 17:59:09 dev: 6.94 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.7 IOB: 1.254 Activity: 0.0156 at 18:04:09 dev: 6.97 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.6 IOB: 1.176 Activity: 0.0154 at 18:09:09 dev: 6.64 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.4 IOB: 1.051 Activity: 0.0149 at 18:14:10 dev: 5.67 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.1 IOB: 0.928 Activity: 0.0142 at 18:19:09 dev: 5.12 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -6.0 IOB: 1.008 Activity: 0.0138 at 18:24:09 dev: 4.45 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -5.7 IOB: 0.89 Activity: 0.0133 at 18:29:09 dev: 3.48 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -5.5 IOB: 0.775 Activity: 0.0127 at 18:34:09 dev: 2.47 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -5.1 IOB: 0.664 Activity: 0.0118 at 18:39:09 dev: 1.59 avgDelta: -3.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.7 IOB: 0.606 Activity: 0.011 at 18:44:09 dev: 1.74 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.5 IOB: 0.703 Activity: 0.0105 at 18:49:09 dev: 3.03 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.3 IOB: 0.702 Activity: 0.0101 at 18:54:09 dev: 4.10 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 4.7 BGI: -4.3 IOB: 0.902 Activity: 0.0101 at 18:59:09 dev: 4.35 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -4.3 IOB: 0.801 Activity: 0.0101 at 19:04:09 dev: 2.10 avgDelta: -2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -4.2 IOB: 0.701 Activity: 0.0098 at 19:09:09 dev: -1.03 avgDelta: -5.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -4.0 IOB: 0.603 Activity: 0.0094 at 19:14:09 dev: -4.95 avgDelta: -9.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -3.8 IOB: 0.508 Activity: 0.0088 at 19:19:09 dev: -8.21 avgDelta: -12.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -3.5 IOB: 0.415 Activity: 0.0081 at 19:24:09 dev: -9.76 avgDelta: -13.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -3.2 IOB: 0.327 Activity: 0.0074 at 19:29:09 dev: -8.06 avgDelta: -11.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.8 IOB: 0.242 Activity: 0.0066 at 19:34:09 dev: -3.91 avgDelta: -6.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.5 IOB: 0.161 Activity: 0.0058 at 19:39:09 dev: 2.00 avgDelta: -0.50 ISF +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.2 IOB: 0.134 Activity: 0.005 at 19:44:09 dev: 7.16 avgDelta: 5.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.1 IOB: 0.4 Activity: 0.0048 at 19:49:09 dev: 9.57 avgDelta: 7.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.1 IOB: 0.475 Activity: 0.0049 at 19:54:09 dev: 8.86 avgDelta: 6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.3 BGI: -2.2 IOB: 0.401 Activity: 0.005 at 19:59:10 dev: 5.91 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.1 IOB: 0.327 Activity: 0.0048 at 20:04:10 dev: 2.82 avgDelta: 0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.9 IOB: 0.203 Activity: 0.0044 at 20:09:09 dev: -0.35 avgDelta: -2.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.7 IOB: 0.132 Activity: 0.004 at 20:14:09 dev: -1.78 avgDelta: -3.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.5 IOB: 0.064 Activity: 0.0034 at 20:19:09 dev: -2.28 avgDelta: -3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.2 IOB: -0.002 Activity: 0.0028 at 20:24:09 dev: -1.54 avgDelta: -2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.9 IOB: -0.064 Activity: 0.0022 at 20:29:10 dev: -1.05 avgDelta: -2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.7 IOB: -0.073 Activity: 0.0016 at 20:34:09 dev: -0.81 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.5 IOB: -0.08 Activity: 0.0011 at 20:39:09 dev: -1.03 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.3 IOB: -0.085 Activity: 0.0007 at 20:44:09 dev: -1.45 avgDelta: -1.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.2 IOB: -0.087 Activity: 0.0004 at 20:49:09 dev: -1.33 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.0 IOB: -0.088 Activity: 0.0001 at 20:54:09 dev: -1.21 avgDelta: -1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 0.0 IOB: -0.088 Activity: -0.0001 at 20:59:09 dev: -0.79 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.2 IOB: -0.137 Activity: -0.0004 at 21:04:09 dev: -0.92 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.3 IOB: -0.184 Activity: -0.0007 at 21:09:10 dev: -0.80 avgDelta: -0.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.4 IOB: -0.18 Activity: -0.001 at 21:14:09 dev: -0.68 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.5 IOB: -0.175 Activity: -0.0012 at 21:19:09 dev: -1.02 avgDelta: -0.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.6 IOB: -0.168 Activity: -0.0014 at 21:24:09 dev: -1.35 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.7 IOB: -0.211 Activity: -0.0015 at 21:29:10 dev: -1.65 avgDelta: -1.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.7 IOB: -0.203 Activity: -0.0017 at 21:34:09 dev: -1.98 avgDelta: -1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 0.9 IOB: -0.243 Activity: -0.002 at 21:39:10 dev: -2.36 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.0 IOB: -0.282 Activity: -0.0023 at 21:44:10 dev: -2.49 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.1 IOB: -0.32 Activity: -0.0026 at 21:49:09 dev: -2.62 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.3 IOB: -0.357 Activity: -0.0029 at 21:54:10 dev: -2.25 avgDelta: -1.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.4 IOB: -0.391 Activity: -0.0032 at 21:59:10 dev: -1.38 avgDelta: 0.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.5 IOB: -0.375 Activity: -0.0035 at 22:04:09 dev: -0.01 avgDelta: 1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.6 IOB: -0.357 Activity: -0.0036 at 22:09:09 dev: 1.45 avgDelta: 3.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.5 IOB: -0.149 Activity: -0.0035 at 22:14:09 dev: 3.49 avgDelta: 5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: 1.3 IOB: -0.132 Activity: -0.0031 at 22:19:10 dev: 5.91 avgDelta: 7.25 basal +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -6.5 IOB: 9.296 Activity: 0.015 at 22:24:09 dev: 15.96 avgDelta: 9.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -14.3 IOB: 9.123 Activity: 0.0332 at 22:29:10 dev: 25.06 avgDelta: 10.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -20.4 IOB: 8.96 Activity: 0.0474 at 22:34:09 dev: 29.43 avgDelta: 9.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -25.2 IOB: 8.644 Activity: 0.0584 at 22:39:10 dev: 29.92 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -28.6 IOB: 8.282 Activity: 0.0664 at 22:44:10 dev: 27.37 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -30.9 IOB: 7.835 Activity: 0.0718 at 22:49:09 dev: 24.70 avgDelta: -6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -32.5 IOB: 7.416 Activity: 0.0753 at 22:54:10 dev: 23.70 avgDelta: -8.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.2 BGI: -33.3 IOB: 6.984 Activity: 0.0772 at 22:59:09 dev: 24.52 avgDelta: -8.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -33.5 IOB: 6.547 Activity: 0.0776 at 23:04:09 dev: 26.70 avgDelta: -6.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -33.1 IOB: 6.061 Activity: 0.0769 at 23:09:10 dev: 28.39 avgDelta: -4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -32.5 IOB: 5.68 Activity: 0.0754 at 23:14:10 dev: 29.50 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -31.6 IOB: 5.458 Activity: 0.0734 at 23:19:09 dev: 30.14 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -30.7 IOB: 5.046 Activity: 0.0712 at 23:24:10 dev: 29.94 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -29.7 IOB: 4.925 Activity: 0.069 at 23:29:09 dev: 29.49 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -28.6 IOB: 4.487 Activity: 0.0663 at 23:34:09 dev: 29.08 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -27.3 IOB: 4.113 Activity: 0.0633 at 23:39:10 dev: 28.28 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -25.8 IOB: 3.706 Activity: 0.0599 at 23:44:09 dev: 27.57 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -24.4 IOB: 3.363 Activity: 0.0566 at 23:49:09 dev: 26.64 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -22.8 IOB: 3.039 Activity: 0.053 at 23:54:09 dev: 25.34 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -21.3 IOB: 2.733 Activity: 0.0494 at 23:59:10 dev: 23.79 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -19.7 IOB: 2.395 Activity: 0.0457 at 00:04:10 dev: 22.20 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -18.1 IOB: 2.126 Activity: 0.0421 at 00:09:10 dev: 20.65 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -16.6 IOB: 1.824 Activity: 0.0385 at 00:14:10 dev: 18.59 avgDelta: 2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -15.1 IOB: 1.64 Activity: 0.0351 at 00:19:09 dev: 17.13 avgDelta: 2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -13.8 IOB: 1.473 Activity: 0.0319 at 00:24:09 dev: 15.50 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -12.4 IOB: 1.273 Activity: 0.0288 at 00:29:10 dev: 14.16 avgDelta: 1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -11.2 IOB: 1.136 Activity: 0.026 at 00:34:10 dev: 12.71 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -10.1 IOB: 1.011 Activity: 0.0235 at 00:39:09 dev: 10.13 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -9.1 IOB: 0.852 Activity: 0.021 at 00:44:10 dev: 7.30 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -8.2 IOB: 0.752 Activity: 0.0189 at 00:49:10 dev: 4.65 avgDelta: -3.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -7.3 IOB: 0.662 Activity: 0.0169 at 00:54:10 dev: 3.28 avgDelta: -4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.9 BGI: -6.4 IOB: 0.534 Activity: 0.0149 at 00:59:09 dev: 3.42 avgDelta: -3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -5.7 IOB: 0.463 Activity: 0.0132 at 01:04:09 dev: 4.69 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -5.0 IOB: 0.352 Activity: 0.0115 at 01:09:10 dev: 5.96 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.3 IOB: 0.298 Activity: 0.0101 at 01:14:10 dev: 6.60 avgDelta: 2.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 0.25 Activity: 0.0089 at 01:19:09 dev: 6.84 avgDelta: 3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.4 IOB: 0.329 Activity: 0.0079 at 01:24:10 dev: 6.40 avgDelta: 3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.2 IOB: 0.34 Activity: 0.0074 at 01:29:10 dev: 5.69 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.9 IOB: 0.304 Activity: 0.0068 at 01:34:10 dev: 5.43 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.7 IOB: 0.272 Activity: 0.0062 at 01:39:10 dev: 5.67 avgDelta: 3.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.6 IOB: 0.512 Activity: 0.006 at 01:44:10 dev: 6.59 avgDelta: 4.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.6 IOB: 0.581 Activity: 0.0061 at 01:49:10 dev: 7.38 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.2 IOB: 1.238 Activity: 0.0075 at 01:54:10 dev: 7.98 avgDelta: 4.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 1.147 Activity: 0.0088 at 01:59:10 dev: 7.54 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.2 IOB: 1.151 Activity: 0.0098 at 02:04:10 dev: 6.72 avgDelta: 2.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.5 IOB: 1.05 Activity: 0.0104 at 02:09:09 dev: 5.98 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.6 IOB: 0.947 Activity: 0.0107 at 02:14:09 dev: 4.86 avgDelta: 0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.6 IOB: 0.844 Activity: 0.0106 at 02:19:10 dev: 3.82 avgDelta: -0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.5 IOB: 0.741 Activity: 0.0104 at 02:24:10 dev: 2.73 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.3 IOB: 0.59 Activity: 0.0099 at 02:29:10 dev: 2.52 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -4.0 IOB: 0.542 Activity: 0.0093 at 02:34:09 dev: 3.01 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.8 IOB: 0.497 Activity: 0.0087 at 02:39:09 dev: 3.50 avgDelta: -0.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.5 IOB: 0.456 Activity: 0.0081 at 02:44:10 dev: 1.74 avgDelta: -1.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.3 IOB: 0.516 Activity: 0.0077 at 02:49:09 dev: -1.93 avgDelta: -5.25 uam +end unannounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -3.1 IOB: 0.429 Activity: 0.0072 at 02:54:09 dev: -6.40 avgDelta: -9.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 7.0 BGI: -2.8 IOB: 0.294 Activity: 0.0066 at 02:59:10 dev: -8.66 avgDelta: -11.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -2.5 IOB: 0.163 Activity: 0.0058 at 03:04:10 dev: -8.25 avgDelta: -10.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -2.1 IOB: 0.037 Activity: 0.0049 at 03:09:10 dev: -6.39 avgDelta: -8.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -1.7 IOB: -0.085 Activity: 0.0039 at 03:14:10 dev: -4.32 avgDelta: -6.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -1.3 IOB: -0.153 Activity: 0.0029 at 03:19:09 dev: -3.75 avgDelta: -5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -0.8 IOB: -0.265 Activity: 0.0018 at 03:24:10 dev: -3.72 avgDelta: -4.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: -0.3 IOB: -0.371 Activity: 0.0007 at 03:29:09 dev: -3.45 avgDelta: -3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 0.2 IOB: -0.471 Activity: -0.0005 at 03:34:09 dev: -2.22 avgDelta: -2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 0.7 IOB: -0.566 Activity: -0.0016 at 03:39:10 dev: -0.94 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.1 IOB: -0.606 Activity: -0.0026 at 03:44:10 dev: 0.00 avgDelta: 1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.6 IOB: -0.64 Activity: -0.0036 at 03:49:10 dev: 0.45 avgDelta: 2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 8.0 BGI: 1.9 IOB: -0.67 Activity: -0.0044 at 03:54:10 dev: -0.15 avgDelta: 1.75 basal +--categorize-uam-as-basal=true set: categorizing all UAM data as basal. +oref0-autotune-core autotune.2022-05-21.json profile.json profile.pump.json > newprofile.2022-05-21.json +CRTotalCarbs: 0 CRTotalInsulin: 0 totalCR: NaN +Hour 0 total deviations: 149.72 mg/dL +Hour 0 basal adjustment needed: 0.35 U/hr +Hour 1 total deviations: 76.77 mg/dL +Hour 1 basal adjustment needed: 0.18 U/hr +Hour 2 total deviations: 32.95 mg/dL +Hour 2 basal adjustment needed: 0.08 U/hr +Hour 3 total deviations: -18.1 mg/dL +Hour 3 basal adjustment needed: -0.04 U/hr +Hour 4 total deviations: 128.92 mg/dL +Hour 4 basal adjustment needed: 0.3 U/hr +Hour 5 total deviations: 76.69 mg/dL +Hour 5 basal adjustment needed: 0.18 U/hr +Hour 6 total deviations: 64.53 mg/dL +Hour 6 basal adjustment needed: 0.15 U/hr +Hour 7 total deviations: 7.81 mg/dL +Hour 7 basal adjustment needed: 0.02 U/hr +Hour 8 total deviations: -16.5 mg/dL +Hour 8 basal adjustment needed: -0.04 U/hr +Hour 9 total deviations: 39.75 mg/dL +Hour 9 basal adjustment needed: 0.09 U/hr +Hour 10 total deviations: 504.73 mg/dL +Hour 10 basal adjustment needed: 1.17 U/hr +Hour 11 total deviations: 371.12 mg/dL +Hour 11 basal adjustment needed: 0.86 U/hr +Hour 12 total deviations: 76.35 mg/dL +Hour 12 basal adjustment needed: 0.18 U/hr +Hour 13 total deviations: 116.88 mg/dL +Hour 13 basal adjustment needed: 0.27 U/hr +Hour 14 total deviations: 22.04 mg/dL +Hour 14 basal adjustment needed: 0.05 U/hr +Hour 15 total deviations: 277.6 mg/dL +Hour 15 basal adjustment needed: 0.64 U/hr +Hour 16 total deviations: 297.01 mg/dL +Hour 16 basal adjustment needed: 0.69 U/hr +Hour 17 total deviations: 131.85 mg/dL +Hour 17 basal adjustment needed: 0.31 U/hr +Hour 18 total deviations: 49.61 mg/dL +Hour 18 basal adjustment needed: 0.12 U/hr +Hour 19 total deviations: 32.57 mg/dL +Hour 19 basal adjustment needed: 0.08 U/hr +Hour 20 total deviations: -9.02 mg/dL +Hour 20 basal adjustment needed: -0.02 U/hr +Hour 21 total deviations: -19.5 mg/dL +Hour 21 basal adjustment needed: -0.05 U/hr +Hour 22 total deviations: 211.5 mg/dL +Hour 22 basal adjustment needed: 0.49 U/hr +Hour 23 total deviations: 334.86 mg/dL +Hour 23 basal adjustment needed: 0.78 U/hr +Limiting hour 7 basal to 1.11 (which is 1.3 * pump basal of 0.855 ) +Limiting hour 8 basal to 1.17 (which is 1.3 * pump basal of 0.902 ) +Limiting hour 9 basal to 1.21 (which is 1.3 * pump basal of 0.934 ) +Limiting hour 10 basal to 1.22 (which is 1.3 * pump basal of 0.938 ) +Limiting hour 12 basal to 1.15 (which is 1.3 * pump basal of 0.882 ) +Limiting hour 13 basal to 1.14 (which is 1.3 * pump basal of 0.874 ) +Limiting hour 14 basal to 1.13 (which is 1.3 * pump basal of 0.866 ) +Limiting hour 15 basal to 1.10 (which is 1.3 * pump basal of 0.848 ) +Limiting hour 20 basal to 1.10 (which is 1.3 * pump basal of 0.847 ) +Limiting hour 21 basal to 1.12 (which is 1.3 * pump basal of 0.861 ) +Limiting hour 22 basal to 1.12 (which is 1.3 * pump basal of 0.863 ) +[ { start: '00:00:00', minutes: 0, rate: 1.039, i: 0 }, + { start: '01:00:00', minutes: 60, rate: 1.091, i: 1 }, + { start: '02:00:00', minutes: 120, rate: 1.118, i: 2 }, + { start: '03:00:00', minutes: 180, rate: 1.321, i: 3 }, + { start: '04:00:00', minutes: 240, rate: 1.091, i: 4 }, + { start: '05:00:00', minutes: 300, rate: 0.965, i: 5 }, + { start: '06:00:00', minutes: 360, rate: 0.848, i: 6 }, + { start: '07:00:00', minutes: 420, rate: 1.112, i: 7 }, + { start: '08:00:00', minutes: 480, rate: 1.173, i: 8 }, + { start: '09:00:00', minutes: 540, rate: 1.214, i: 9 }, + { start: '10:00:00', minutes: 600, rate: 1.219, i: 10 }, + { start: '11:00:00', minutes: 660, rate: 1.07, i: 11 }, + { start: '12:00:00', minutes: 720, rate: 1.147, i: 12 }, + { start: '13:00:00', minutes: 780, rate: 1.136, i: 13 }, + { start: '14:00:00', minutes: 840, rate: 1.126, i: 14 }, + { start: '15:00:00', minutes: 900, rate: 1.102, i: 15 }, + { start: '16:00:00', minutes: 960, rate: 0.928, i: 16 }, + { start: '17:00:00', minutes: 1020, rate: 0.71, i: 17 }, + { start: '18:00:00', minutes: 1080, rate: 0.654, i: 18 }, + { start: '19:00:00', minutes: 1140, rate: 0.878, i: 19 }, + { start: '20:00:00', minutes: 1200, rate: 1.101, i: 20 }, + { start: '21:00:00', minutes: 1260, rate: 1.119, i: 21 }, + { start: '22:00:00', minutes: 1320, rate: 1.122, i: 22 }, + { start: '23:00:00', minutes: 1380, rate: 1.047, i: 23 } ] +totalMealCarbs: 0 totalDeviations: 0 oldCSF 14.991 fullNewCSF: 14.991304347826087 newCSF: 14.991 +oldCR: 5.75 fullNewCR: NaN newCR: NaN +Limiting adjusted ISF of 124.90 to 123.14 (which is pump ISF of 86.2 / 0.7 ) +p50deviation: -0.93 p50BGI -2.5 p50ratios: 1.449 Old ISF: 86.2 fullNewISF: 124.904 adjustedISF: 123.143 newISF: 93.589 newDIA: 6 newPeak: 45 + +Autotune pump profile recommendations: +--------------------------------------------------------- +Recommendations Log File: /home/titi/aaps/autotune/aapsorefautotune_recommendations.log + +Parameter | Pump | Autotune | Days Missing +--------------------------------------------------------- +ISF [mg/dL/U] | 86.200 | 93.589 | +Carb Ratio[g/U]| 5.750 | 5.750 | + 00:00 | 0.966 | 1.039 | 0 + 01:00 | 0.977 | 1.091 | 0 + 02:00 | 0.971 | 1.118 | 0 + 03:00 | 1.111 | 1.321 | 0 + 04:00 | 0.974 | 1.091 | 0 + 05:00 | 0.923 | 0.965 | 0 + 06:00 | 0.823 | 0.848 | 0 + 07:00 | 0.855 | 1.112 | 0 + 08:00 | 0.902 | 1.173 | 0 + 09:00 | 0.934 | 1.214 | 0 + 10:00 | 0.938 | 1.219 | 0 + 11:00 | 0.903 | 1.070 | 0 + 12:00 | 0.882 | 1.147 | 0 + 13:00 | 0.874 | 1.136 | 0 + 14:00 | 0.866 | 1.126 | 0 + 15:00 | 0.848 | 1.102 | 0 + 16:00 | 0.758 | 0.928 | 0 + 17:00 | 0.650 | 0.710 | 0 + 18:00 | 0.648 | 0.654 | 0 + 19:00 | 0.738 | 0.878 | 0 + 20:00 | 0.847 | 1.101 | 0 + 21:00 | 0.861 | 1.119 | 0 + 22:00 | 0.863 | 1.122 | 0 + 23:00 | 0.843 | 1.047 | 0 diff --git a/app/src/test/res/autotune/test3/newaapsorefprofile.2022-05-21.json b/app/src/test/res/autotune/test3/newaapsorefprofile.2022-05-21.json new file mode 100644 index 0000000000..e7ae1b4e0e --- /dev/null +++ b/app/src/test/res/autotune/test3/newaapsorefprofile.2022-05-21.json @@ -0,0 +1,173 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 1.039, + "start": "00:00:00" + }, + { + "i": 1, + "minutes": 60, + "rate": 1.091, + "start": "01:00:00" + }, + { + "i": 2, + "minutes": 120, + "rate": 1.118, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.321, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 1.091, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.965, + "start": "05:00:00" + }, + { + "i": 6, + "minutes": 360, + "rate": 0.848, + "start": "06:00:00" + }, + { + "i": 7, + "minutes": 420, + "rate": 1.112, + "start": "07:00:00" + }, + { + "i": 8, + "minutes": 480, + "rate": 1.173, + "start": "08:00:00" + }, + { + "i": 9, + "minutes": 540, + "rate": 1.214, + "start": "09:00:00" + }, + { + "i": 10, + "minutes": 600, + "rate": 1.219, + "start": "10:00:00" + }, + { + "i": 11, + "minutes": 660, + "rate": 1.07, + "start": "11:00:00" + }, + { + "i": 12, + "minutes": 720, + "rate": 1.147, + "start": "12:00:00" + }, + { + "i": 13, + "minutes": 780, + "rate": 1.136, + "start": "13:00:00" + }, + { + "i": 14, + "minutes": 840, + "rate": 1.126, + "start": "14:00:00" + }, + { + "i": 15, + "minutes": 900, + "rate": 1.102, + "start": "15:00:00" + }, + { + "i": 16, + "minutes": 960, + "rate": 0.928, + "start": "16:00:00" + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.71, + "start": "17:00:00" + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.654, + "start": "18:00:00" + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.878, + "start": "19:00:00" + }, + { + "i": 20, + "minutes": 1200, + "rate": 1.101, + "start": "20:00:00" + }, + { + "i": 21, + "minutes": 1260, + "rate": 1.119, + "start": "21:00:00" + }, + { + "i": 22, + "minutes": 1320, + "rate": 1.122, + "start": "22:00:00" + }, + { + "i": 23, + "minutes": 1380, + "rate": 1.047, + "start": "23:00:00" + } + ], + "carb_ratio": 5.75, + "csf": 14.991, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 93.589, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 93.589, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test3/oaps-iobCalc.2022-05-21.json b/app/src/test/res/autotune/test3/oaps-iobCalc.2022-05-21.json new file mode 100644 index 0000000000..92304dbf45 --- /dev/null +++ b/app/src/test/res/autotune/test3/oaps-iobCalc.2022-05-21.json @@ -0,0 +1,286 @@ +[ + { "iob": 5.249, "activity": 0.0391, "date": 1653099848000}, + { "iob": 5.292, "activity": 0.0438, "date": 1653100148000}, + { "iob": 4.964, "activity": 0.047, "date": 1653100449000}, + { "iob": 4.674, "activity": 0.0489, "date": 1653100748000}, + { "iob": 4.377, "activity": 0.0498, "date": 1653101048000}, + { "iob": 4.077, "activity": 0.0498, "date": 1653101348000}, + { "iob": 3.73, "activity": 0.0491, "date": 1653101648000}, + { "iob": 3.389, "activity": 0.0476, "date": 1653101948000}, + { "iob": 3.055, "activity": 0.0457, "date": 1653102249000}, + { "iob": 2.782, "activity": 0.0436, "date": 1653102548000}, + { "iob": 2.47, "activity": 0.0411, "date": 1653102848000}, + { "iob": 2.22, "activity": 0.0386, "date": 1653103149000}, + { "iob": 1.935, "activity": 0.0358, "date": 1653103448000}, + { "iob": 1.711, "activity": 0.0332, "date": 1653103748000}, + { "iob": 1.452, "activity": 0.0304, "date": 1653104049000}, + { "iob": 1.927, "activity": 0.028, "date": 1653104349000}, + { "iob": 1.84, "activity": 0.027, "date": 1653104648000}, + { "iob": 1.658, "activity": 0.0258, "date": 1653104949000}, + { "iob": 1.482, "activity": 0.0245, "date": 1653105248000}, + { "iob": 1.264, "activity": 0.0229, "date": 1653105549000}, + { "iob": 1.104, "activity": 0.0212, "date": 1653105848000}, + { "iob": 0.952, "activity": 0.0194, "date": 1653106149000}, + { "iob": 1.619, "activity": 0.0181, "date": 1653106449000}, + { "iob": 1.678, "activity": 0.0184, "date": 1653106749000}, + { "iob": 1.775, "activity": 0.0187, "date": 1653107048000}, + { "iob": 1.581, "activity": 0.019, "date": 1653107348000}, + { "iob": 1.437, "activity": 0.0188, "date": 1653107648000}, + { "iob": 1.294, "activity": 0.0183, "date": 1653107948000}, + { "iob": 1.153, "activity": 0.0176, "date": 1653108249000}, + { "iob": 1.017, "activity": 0.0167, "date": 1653108548000}, + { "iob": 0.887, "activity": 0.0156, "date": 1653108848000}, + { "iob": 1.011, "activity": 0.0147, "date": 1653109148000}, + { "iob": 0.889, "activity": 0.0141, "date": 1653109448000}, + { "iob": 0.771, "activity": 0.0133, "date": 1653109748000}, + { "iob": 0.656, "activity": 0.0124, "date": 1653110049000}, + { "iob": 0.547, "activity": 0.0114, "date": 1653110348000}, + { "iob": 0.392, "activity": 0.0103, "date": 1653110649000}, + { "iob": 0.294, "activity": 0.0091, "date": 1653110949000}, + { "iob": 0.2, "activity": 0.008, "date": 1653111249000}, + { "iob": 0.065, "activity": 0.0066, "date": 1653111549000}, + { "iob": 0.034, "activity": 0.0055, "date": 1653111849000}, + { "iob": 0.549, "activity": 0.0048, "date": 1653112148000}, + { "iob": 0.674, "activity": 0.0053, "date": 1653112449000}, + { "iob": 0.597, "activity": 0.0057, "date": 1653112749000}, + { "iob": 0.468, "activity": 0.0058, "date": 1653113049000}, + { "iob": 0.389, "activity": 0.0057, "date": 1653113349000}, + { "iob": 0.262, "activity": 0.0053, "date": 1653113649000}, + { "iob": 0.186, "activity": 0.0048, "date": 1653113949000}, + { "iob": 0.064, "activity": 0.0041, "date": 1653114249000}, + { "iob": -0.005, "activity": 0.0034, "date": 1653114549000}, + { "iob": -0.12, "activity": 0.0026, "date": 1653114849000}, + { "iob": -0.181, "activity": 0.0018, "date": 1653115149000}, + { "iob": -0.287, "activity": 0.0008, "date": 1653115449000}, + { "iob": -0.34, "activity": 0, "date": 1653115749000}, + { "iob": -0.436, "activity": -0.001, "date": 1653116049000}, + { "iob": -0.48, "activity": -0.0018, "date": 1653116349000}, + { "iob": -0.519, "activity": -0.0026, "date": 1653116649000}, + { "iob": -0.554, "activity": -0.0034, "date": 1653116949000}, + { "iob": -0.585, "activity": -0.0041, "date": 1653117249000}, + { "iob": -0.662, "activity": -0.0049, "date": 1653117549000}, + { "iob": -0.687, "activity": -0.0055, "date": 1653117848000}, + { "iob": -0.708, "activity": -0.0061, "date": 1653118149000}, + { "iob": -0.726, "activity": -0.0066, "date": 1653118449000}, + { "iob": -0.351, "activity": -0.0071, "date": 1653118748000}, + { "iob": -0.218, "activity": -0.0064, "date": 1653119049000}, + { "iob": -0.088, "activity": -0.0055, "date": 1653119349000}, + { "iob": 13.594, "activity": 0.0023, "date": 1653119649000}, + { "iob": 13.552, "activity": 0.0331, "date": 1653119949000}, + { "iob": 13.224, "activity": 0.0573, "date": 1653120249000}, + { "iob": 12.838, "activity": 0.076, "date": 1653120548000}, + { "iob": 12.322, "activity": 0.09, "date": 1653120849000}, + { "iob": 11.794, "activity": 0.1001, "date": 1653121149000}, + { "iob": 11.177, "activity": 0.1068, "date": 1653121449000}, + { "iob": 10.58, "activity": 0.111, "date": 1653121749000}, + { "iob": 9.919, "activity": 0.1129, "date": 1653122049000}, + { "iob": 9.254, "activity": 0.1129, "date": 1653122349000}, + { "iob": 8.643, "activity": 0.1114, "date": 1653122649000}, + { "iob": 7.992, "activity": 0.1088, "date": 1653122949000}, + { "iob": 7.406, "activity": 0.1053, "date": 1653123248000}, + { "iob": 7.111, "activity": 0.1012, "date": 1653123549000}, + { "iob": 6.515, "activity": 0.0971, "date": 1653123849000}, + { "iob": 5.99, "activity": 0.0927, "date": 1653124149000}, + { "iob": 5.439, "activity": 0.0878, "date": 1653124448000}, + { "iob": 4.962, "activity": 0.0828, "date": 1653124749000}, + { "iob": 4.462, "activity": 0.0775, "date": 1653125048000}, + { "iob": 4.036, "activity": 0.0724, "date": 1653125349000}, + { "iob": 3.638, "activity": 0.0672, "date": 1653125649000}, + { "iob": 3.214, "activity": 0.0621, "date": 1653125948000}, + { "iob": 2.866, "activity": 0.0571, "date": 1653126249000}, + { "iob": 2.494, "activity": 0.0522, "date": 1653126549000}, + { "iob": 2.193, "activity": 0.0476, "date": 1653126849000}, + { "iob": 1.867, "activity": 0.0431, "date": 1653127149000}, + { "iob": 1.563, "activity": 0.0388, "date": 1653127449000}, + { "iob": 1.329, "activity": 0.0347, "date": 1653127748000}, + { "iob": 1.115, "activity": 0.0309, "date": 1653128049000}, + { "iob": 0.87, "activity": 0.0272, "date": 1653128349000}, + { "iob": 0.692, "activity": 0.0239, "date": 1653128649000}, + { "iob": 0.482, "activity": 0.0206, "date": 1653128948000}, + { "iob": 0.287, "activity": 0.0176, "date": 1653129249000}, + { "iob": 0.156, "activity": 0.0148, "date": 1653129548000}, + { "iob": 0.038, "activity": 0.0122, "date": 1653129848000}, + { "iob": -0.067, "activity": 0.0099, "date": 1653130149000}, + { "iob": -0.161, "activity": 0.0078, "date": 1653130448000}, + { "iob": -0.195, "activity": 0.006, "date": 1653130748000}, + { "iob": -0.271, "activity": 0.0044, "date": 1653131049000}, + { "iob": -0.339, "activity": 0.0029, "date": 1653131349000}, + { "iob": -0.4, "activity": 0.0015, "date": 1653131649000}, + { "iob": -0.155, "activity": 0.0007, "date": 1653131948000}, + { "iob": 8.11, "activity": 0.0045, "date": 1653132249000}, + { "iob": 7.992, "activity": 0.0222, "date": 1653132549000}, + { "iob": 7.745, "activity": 0.0359, "date": 1653132849000}, + { "iob": 7.488, "activity": 0.0465, "date": 1653133149000}, + { "iob": 7.136, "activity": 0.0541, "date": 1653133449000}, + { "iob": 6.8, "activity": 0.0596, "date": 1653133749000}, + { "iob": 6.441, "activity": 0.0633, "date": 1653134049000}, + { "iob": 6.022, "activity": 0.0651, "date": 1653134349000}, + { "iob": 5.644, "activity": 0.0657, "date": 1653134649000}, + { "iob": 5.216, "activity": 0.0653, "date": 1653134949000}, + { "iob": 4.962, "activity": 0.0644, "date": 1653135249000}, + { "iob": 4.544, "activity": 0.0627, "date": 1653135549000}, + { "iob": 4.185, "activity": 0.0606, "date": 1653135849000}, + { "iob": 3.839, "activity": 0.058, "date": 1653136149000}, + { "iob": 3.456, "activity": 0.055, "date": 1653136449000}, + { "iob": 3.139, "activity": 0.0519, "date": 1653136749000}, + { "iob": 2.788, "activity": 0.0486, "date": 1653137049000}, + { "iob": 2.503, "activity": 0.0453, "date": 1653137350000}, + { "iob": 2.186, "activity": 0.0418, "date": 1653137649000}, + { "iob": 3.17, "activity": 0.0407, "date": 1653137949000}, + { "iob": 3.956, "activity": 0.0413, "date": 1653138249000}, + { "iob": 3.648, "activity": 0.042, "date": 1653138549000}, + { "iob": 4.126, "activity": 0.043, "date": 1653138849000}, + { "iob": 3.81, "activity": 0.0437, "date": 1653139150000}, + { "iob": 3.541, "activity": 0.0437, "date": 1653139450000}, + { "iob": 3.272, "activity": 0.0431, "date": 1653139749000}, + { "iob": 3.588, "activity": 0.0428, "date": 1653140049000}, + { "iob": 3.875, "activity": 0.0431, "date": 1653140349000}, + { "iob": 3.608, "activity": 0.0434, "date": 1653140648000}, + { "iob": 4.271, "activity": 0.0442, "date": 1653140949000}, + { "iob": 3.996, "activity": 0.0452, "date": 1653141249000}, + { "iob": 4.298, "activity": 0.0462, "date": 1653141548000}, + { "iob": 4.015, "activity": 0.0468, "date": 1653141849000}, + { "iob": 4.538, "activity": 0.0481, "date": 1653142149000}, + { "iob": 4.245, "activity": 0.0489, "date": 1653142449000}, + { "iob": 4.729, "activity": 0.05, "date": 1653142749000}, + { "iob": 4.426, "activity": 0.0508, "date": 1653143049000}, + { "iob": 4.353, "activity": 0.051, "date": 1653143349000}, + { "iob": 4.049, "activity": 0.0507, "date": 1653143650000}, + { "iob": 3.747, "activity": 0.0498, "date": 1653143949000}, + { "iob": 3.402, "activity": 0.0483, "date": 1653144249000}, + { "iob": 3.115, "activity": 0.0464, "date": 1653144550000}, + { "iob": 2.788, "activity": 0.0441, "date": 1653144849000}, + { "iob": 2.524, "activity": 0.0417, "date": 1653145149000}, + { "iob": 2.271, "activity": 0.0391, "date": 1653145449000}, + { "iob": 2.033, "activity": 0.0365, "date": 1653145750000}, + { "iob": 1.807, "activity": 0.0338, "date": 1653146050000}, + { "iob": 1.594, "activity": 0.0312, "date": 1653146349000}, + { "iob": 1.395, "activity": 0.0286, "date": 1653146650000}, + { "iob": 1.258, "activity": 0.0262, "date": 1653146949000}, + { "iob": 1.034, "activity": 0.0236, "date": 1653147249000}, + { "iob": 0.971, "activity": 0.0215, "date": 1653147549000}, + { "iob": 1.008, "activity": 0.0197, "date": 1653147849000}, + { "iob": 0.963, "activity": 0.0183, "date": 1653148149000}, + { "iob": 1.046, "activity": 0.0171, "date": 1653148450000}, + { "iob": 0.912, "activity": 0.0161, "date": 1653148749000}, + { "iob": 1.254, "activity": 0.0156, "date": 1653149049000}, + { "iob": 1.176, "activity": 0.0154, "date": 1653149349000}, + { "iob": 1.051, "activity": 0.0149, "date": 1653149650000}, + { "iob": 0.928, "activity": 0.0142, "date": 1653149949000}, + { "iob": 1.008, "activity": 0.0138, "date": 1653150249000}, + { "iob": 0.89, "activity": 0.0133, "date": 1653150549000}, + { "iob": 0.775, "activity": 0.0127, "date": 1653150849000}, + { "iob": 0.664, "activity": 0.0118, "date": 1653151149000}, + { "iob": 0.606, "activity": 0.011, "date": 1653151449000}, + { "iob": 0.703, "activity": 0.0105, "date": 1653151749000}, + { "iob": 0.702, "activity": 0.0101, "date": 1653152049000}, + { "iob": 0.902, "activity": 0.0101, "date": 1653152349000}, + { "iob": 0.801, "activity": 0.0101, "date": 1653152649000}, + { "iob": 0.701, "activity": 0.0098, "date": 1653152949000}, + { "iob": 0.603, "activity": 0.0094, "date": 1653153249000}, + { "iob": 0.508, "activity": 0.0088, "date": 1653153549000}, + { "iob": 0.415, "activity": 0.0081, "date": 1653153849000}, + { "iob": 0.327, "activity": 0.0074, "date": 1653154149000}, + { "iob": 0.242, "activity": 0.0066, "date": 1653154449000}, + { "iob": 0.161, "activity": 0.0058, "date": 1653154749000}, + { "iob": 0.134, "activity": 0.005, "date": 1653155049000}, + { "iob": 0.4, "activity": 0.0048, "date": 1653155349000}, + { "iob": 0.475, "activity": 0.0049, "date": 1653155649000}, + { "iob": 0.401, "activity": 0.005, "date": 1653155950000}, + { "iob": 0.327, "activity": 0.0048, "date": 1653156250000}, + { "iob": 0.203, "activity": 0.0044, "date": 1653156549000}, + { "iob": 0.132, "activity": 0.004, "date": 1653156849000}, + { "iob": 0.064, "activity": 0.0034, "date": 1653157149000}, + { "iob": -0.002, "activity": 0.0028, "date": 1653157449000}, + { "iob": -0.064, "activity": 0.0022, "date": 1653157750000}, + { "iob": -0.073, "activity": 0.0016, "date": 1653158049000}, + { "iob": -0.08, "activity": 0.0011, "date": 1653158349000}, + { "iob": -0.085, "activity": 0.0007, "date": 1653158649000}, + { "iob": -0.087, "activity": 0.0004, "date": 1653158949000}, + { "iob": -0.088, "activity": 0.0001, "date": 1653159249000}, + { "iob": -0.088, "activity": -0.0001, "date": 1653159549000}, + { "iob": -0.137, "activity": -0.0004, "date": 1653159849000}, + { "iob": -0.184, "activity": -0.0007, "date": 1653160150000}, + { "iob": -0.18, "activity": -0.001, "date": 1653160449000}, + { "iob": -0.175, "activity": -0.0012, "date": 1653160749000}, + { "iob": -0.168, "activity": -0.0014, "date": 1653161049000}, + { "iob": -0.211, "activity": -0.0015, "date": 1653161350000}, + { "iob": -0.203, "activity": -0.0017, "date": 1653161649000}, + { "iob": -0.243, "activity": -0.002, "date": 1653161950000}, + { "iob": -0.282, "activity": -0.0023, "date": 1653162250000}, + { "iob": -0.32, "activity": -0.0026, "date": 1653162549000}, + { "iob": -0.357, "activity": -0.0029, "date": 1653162850000}, + { "iob": -0.391, "activity": -0.0032, "date": 1653163150000}, + { "iob": -0.375, "activity": -0.0035, "date": 1653163449000}, + { "iob": -0.357, "activity": -0.0036, "date": 1653163749000}, + { "iob": -0.149, "activity": -0.0035, "date": 1653164049000}, + { "iob": -0.132, "activity": -0.0031, "date": 1653164350000}, + { "iob": 9.296, "activity": 0.015, "date": 1653164649000}, + { "iob": 9.123, "activity": 0.0332, "date": 1653164950000}, + { "iob": 8.96, "activity": 0.0474, "date": 1653165249000}, + { "iob": 8.644, "activity": 0.0584, "date": 1653165550000}, + { "iob": 8.282, "activity": 0.0664, "date": 1653165850000}, + { "iob": 7.835, "activity": 0.0718, "date": 1653166149000}, + { "iob": 7.416, "activity": 0.0753, "date": 1653166450000}, + { "iob": 6.984, "activity": 0.0772, "date": 1653166749000}, + { "iob": 6.547, "activity": 0.0776, "date": 1653167049000}, + { "iob": 6.061, "activity": 0.0769, "date": 1653167350000}, + { "iob": 5.68, "activity": 0.0754, "date": 1653167650000}, + { "iob": 5.458, "activity": 0.0734, "date": 1653167949000}, + { "iob": 5.046, "activity": 0.0712, "date": 1653168250000}, + { "iob": 4.925, "activity": 0.069, "date": 1653168549000}, + { "iob": 4.487, "activity": 0.0663, "date": 1653168849000}, + { "iob": 4.113, "activity": 0.0633, "date": 1653169150000}, + { "iob": 3.706, "activity": 0.0599, "date": 1653169449000}, + { "iob": 3.363, "activity": 0.0566, "date": 1653169749000}, + { "iob": 3.039, "activity": 0.053, "date": 1653170049000}, + { "iob": 2.733, "activity": 0.0494, "date": 1653170350000}, + { "iob": 2.395, "activity": 0.0457, "date": 1653170650000}, + { "iob": 2.126, "activity": 0.0421, "date": 1653170950000}, + { "iob": 1.824, "activity": 0.0385, "date": 1653171250000}, + { "iob": 1.64, "activity": 0.0351, "date": 1653171549000}, + { "iob": 1.473, "activity": 0.0319, "date": 1653171849000}, + { "iob": 1.273, "activity": 0.0288, "date": 1653172150000}, + { "iob": 1.136, "activity": 0.026, "date": 1653172450000}, + { "iob": 1.011, "activity": 0.0235, "date": 1653172749000}, + { "iob": 0.852, "activity": 0.021, "date": 1653173050000}, + { "iob": 0.752, "activity": 0.0189, "date": 1653173350000}, + { "iob": 0.662, "activity": 0.0169, "date": 1653173650000}, + { "iob": 0.534, "activity": 0.0149, "date": 1653173949000}, + { "iob": 0.463, "activity": 0.0132, "date": 1653174249000}, + { "iob": 0.352, "activity": 0.0115, "date": 1653174550000}, + { "iob": 0.298, "activity": 0.0101, "date": 1653174850000}, + { "iob": 0.25, "activity": 0.0089, "date": 1653175149000}, + { "iob": 0.329, "activity": 0.0079, "date": 1653175450000}, + { "iob": 0.34, "activity": 0.0074, "date": 1653175750000}, + { "iob": 0.304, "activity": 0.0068, "date": 1653176050000}, + { "iob": 0.272, "activity": 0.0062, "date": 1653176350000}, + { "iob": 0.512, "activity": 0.006, "date": 1653176650000}, + { "iob": 0.581, "activity": 0.0061, "date": 1653176950000}, + { "iob": 1.238, "activity": 0.0075, "date": 1653177250000}, + { "iob": 1.147, "activity": 0.0088, "date": 1653177550000}, + { "iob": 1.151, "activity": 0.0098, "date": 1653177850000}, + { "iob": 1.05, "activity": 0.0104, "date": 1653178149000}, + { "iob": 0.947, "activity": 0.0107, "date": 1653178449000}, + { "iob": 0.844, "activity": 0.0106, "date": 1653178750000}, + { "iob": 0.741, "activity": 0.0104, "date": 1653179050000}, + { "iob": 0.59, "activity": 0.0099, "date": 1653179350000}, + { "iob": 0.542, "activity": 0.0093, "date": 1653179649000}, + { "iob": 0.497, "activity": 0.0087, "date": 1653179949000}, + { "iob": 0.456, "activity": 0.0081, "date": 1653180250000}, + { "iob": 0.516, "activity": 0.0077, "date": 1653180549000}, + { "iob": 0.429, "activity": 0.0072, "date": 1653180849000}, + { "iob": 0.294, "activity": 0.0066, "date": 1653181150000}, + { "iob": 0.163, "activity": 0.0058, "date": 1653181450000}, + { "iob": 0.037, "activity": 0.0049, "date": 1653181750000}, + { "iob": -0.085, "activity": 0.0039, "date": 1653182050000}, + { "iob": -0.153, "activity": 0.0029, "date": 1653182349000}, + { "iob": -0.265, "activity": 0.0018, "date": 1653182650000}, + { "iob": -0.371, "activity": 0.0007, "date": 1653182949000}, + { "iob": -0.471, "activity": -0.0005, "date": 1653183249000}, + { "iob": -0.566, "activity": -0.0016, "date": 1653183550000}, + { "iob": -0.606, "activity": -0.0026, "date": 1653183850000}, + { "iob": -0.64, "activity": -0.0036, "date": 1653184150000}, + { "iob": -0.67, "activity": -0.0044, "date": 1653184450000} +] + diff --git a/app/src/test/res/autotune/test3/profile.pump.json b/app/src/test/res/autotune/test3/profile.pump.json new file mode 100644 index 0000000000..eefadabacb --- /dev/null +++ b/app/src/test/res/autotune/test3/profile.pump.json @@ -0,0 +1,147 @@ +{ + "name": "Tuned Dyn2", + "min_5m_carbimpact": 8, + "dia": 6, + "curve": "ultra-rapid", + "useCustomPeakTime": true, + "insulinPeakTime": 45, + "basalprofile": [ + { + "start": "00:00:00", + "minutes": 0, + "rate": 0.966 + }, + { + "start": "01:00:00", + "minutes": 60, + "rate": 0.977 + }, + { + "start": "02:00:00", + "minutes": 120, + "rate": 0.971 + }, + { + "start": "03:00:00", + "minutes": 180, + "rate": 1.111 + }, + { + "start": "04:00:00", + "minutes": 240, + "rate": 0.974 + }, + { + "start": "05:00:00", + "minutes": 300, + "rate": 0.923 + }, + { + "start": "06:00:00", + "minutes": 360, + "rate": 0.823 + }, + { + "start": "07:00:00", + "minutes": 420, + "rate": 0.855 + }, + { + "start": "08:00:00", + "minutes": 480, + "rate": 0.902 + }, + { + "start": "09:00:00", + "minutes": 540, + "rate": 0.934 + }, + { + "start": "10:00:00", + "minutes": 600, + "rate": 0.938 + }, + { + "start": "11:00:00", + "minutes": 660, + "rate": 0.903 + }, + { + "start": "12:00:00", + "minutes": 720, + "rate": 0.882 + }, + { + "start": "13:00:00", + "minutes": 780, + "rate": 0.874 + }, + { + "start": "14:00:00", + "minutes": 840, + "rate": 0.866 + }, + { + "start": "15:00:00", + "minutes": 900, + "rate": 0.848 + }, + { + "start": "16:00:00", + "minutes": 960, + "rate": 0.758 + }, + { + "start": "17:00:00", + "minutes": 1020, + "rate": 0.65 + }, + { + "start": "18:00:00", + "minutes": 1080, + "rate": 0.648 + }, + { + "start": "19:00:00", + "minutes": 1140, + "rate": 0.738 + }, + { + "start": "20:00:00", + "minutes": 1200, + "rate": 0.847 + }, + { + "start": "21:00:00", + "minutes": 1260, + "rate": 0.861 + }, + { + "start": "22:00:00", + "minutes": 1320, + "rate": 0.863 + }, + { + "start": "23:00:00", + "minutes": 1380, + "rate": 0.843 + } + ], + "isfProfile": { + "sensitivities": [ + { + "i": 0, + "start": "00:00:00", + "sensitivity": 86.2, + "offset": 0, + "x": 0, + "endoffset": 1440 + } + ] + }, + "carb_ratio": 5.75, + "autosens_max": 1.3, + "autosens_min": 0.7, + "units": "mg/dl", + "timezone": "Europe/Paris" +} From 9bfbbcf442a30a95d600a20a8195dd42c8396968 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sat, 25 Jun 2022 20:19:33 +0200 Subject: [PATCH 62/71] Add Unit Test to check AutotsensMax limitation (note here OAPS calculation done with NS Queries) --- .../general/autotune/AutotuneCoreTest.kt | 24 +- .../general/autotune/AutotunePrepTest.kt | 1 - .../autotune/test4/autotune.2022-05-30.json | 1 + .../test4/autotune.2022-06-25-195325.log | 454 + .../autotune/test4/newprofile.2022-05-30.json | 194 + .../autotune/test4/ns-entries.2022-05-30.json | 2906 +++++++ .../test4/ns-treatments.2022-05-30.json | 7512 +++++++++++++++++ .../autotune/test4/profile.2022-05-30.json | 192 + .../test/res/autotune/test4/profile.pump.json | 147 + 9 files changed, 11429 insertions(+), 2 deletions(-) create mode 100644 app/src/test/res/autotune/test4/autotune.2022-05-30.json create mode 100644 app/src/test/res/autotune/test4/autotune.2022-06-25-195325.log create mode 100644 app/src/test/res/autotune/test4/newprofile.2022-05-30.json create mode 100644 app/src/test/res/autotune/test4/ns-entries.2022-05-30.json create mode 100644 app/src/test/res/autotune/test4/ns-treatments.2022-05-30.json create mode 100644 app/src/test/res/autotune/test4/profile.2022-05-30.json create mode 100644 app/src/test/res/autotune/test4/profile.pump.json diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt index fccbc12121..2eb422e717 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt @@ -41,7 +41,7 @@ class AutotuneCoreTest : TestBaseWithProfile() { } @Test - fun autotuneCoreTest() { // Test if load from file of OpenAPS categorisation is Ok + fun autotuneCoreTest1() { // Test if AutotuneCore with input files of OpenAPS categorisation gives correct ouput profile val prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! @@ -62,6 +62,28 @@ class AutotuneCoreTest : TestBaseWithProfile() { ?:Assert.fail() } + @Test + fun autotuneCoreTest4() { // Test if limiting modification with Min Max Autosens parameter works (18h on basal and on ISF value) + val prepjson = File("src/test/res/autotune/test4/autotune.2022-05-30.json").readText() + val inputProfileJson = File("src/test/res/autotune/test4/profile.2022-05-30.json").readText() + val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! + val pumpProfileJson = File("src/test/res/autotune/test4/profile.pump.json").readText() + val pumpProfile = atProfileFromOapsJson(JSONObject(pumpProfileJson), dateUtil)!! + val prep = PreppedGlucose(JSONObject(prepjson), dateUtil) + `when`(sp.getDouble(R.string.key_openapsama_autosens_max, 1.2)).thenReturn(autotuneMax) + `when`(sp.getDouble(R.string.key_openapsama_autosens_min, 0.7)).thenReturn(autotuneMin) + `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) + val OapsOutputProfileJson = File("src/test/res/autotune/test4/newprofile.2022-05-30.json").readText() + val OapsOutputProfile = atProfileFromOapsJson(JSONObject(OapsOutputProfileJson),dateUtil) + val outProfile = autotuneCore.tuneAllTheThings(prep, inputProfile, pumpProfile) + OapsOutputProfile?.let { + Assert.assertEquals(OapsOutputProfile.isf, outProfile.isf, 0.0) + Assert.assertEquals(OapsOutputProfile.ic, outProfile.ic, 0.0) + for (i in 0..23) + Assert.assertEquals(OapsOutputProfile.basal[i], outProfile.basal[i], 0.0) + } + ?:Assert.fail() + } /** diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt index e36843b2da..9ac1c3272f 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt @@ -44,7 +44,6 @@ class AutotunePrepTest : TestBaseWithProfile() { var autotuneMax = 0.0 var startDayTime = 0L - @Before fun initData() { TimeZone.setDefault(TimeZone.getTimeZone("GMT+2")) diff --git a/app/src/test/res/autotune/test4/autotune.2022-05-30.json b/app/src/test/res/autotune/test4/autotune.2022-05-30.json new file mode 100644 index 0000000000..461ffc542c --- /dev/null +++ b/app/src/test/res/autotune/test4/autotune.2022-05-30.json @@ -0,0 +1 @@ +{"CRData":[{"CRInitialIOB":-0.087,"CRInitialBG":92,"CRInitialCarbTime":"2022-05-30T06:09:21.000Z","CREndIOB":0.396,"CREndBG":131,"CREndTime":"2022-05-30T09:29:21.000Z","CRCarbs":75,"CRInsulin":14.47},{"CRInitialIOB":-0.454,"CRInitialBG":77,"CRInitialCarbTime":"2022-05-30T10:44:21.000Z","CREndIOB":0.339,"CREndBG":100,"CREndTime":"2022-05-30T14:14:22.000Z","CRCarbs":50,"CRInsulin":10.84},{"CRInitialIOB":-0.947,"CRInitialBG":87,"CRInitialCarbTime":"2022-05-30T16:04:22.000Z","CREndIOB":-0.346,"CREndBG":130,"CREndTime":"2022-05-30T17:44:22.000Z","CRCarbs":10,"CRInsulin":0.01}],"CSFGlucoseData":[{"_id":"62945faad2cadd0004350d89","device":"AndroidAPS-DexcomG6","date":1653890961000,"dateString":"2022-05-30T06:09:21.000Z","isValid":true,"sgv":92,"direction":"Flat","type":"sgv","created_at":"2022-05-30T06:09:46.664Z","glucose":92,"avgDelta":"-0.50","BGI":-0.62,"deviation":"0.12","mealAbsorption":"start","mealCarbs":75},{"_id":"629460cdb82b320004ef5ec4","device":"AndroidAPS-DexcomG6","date":1653891261000,"dateString":"2022-05-30T06:14:21.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","created_at":"2022-05-30T06:14:37.040Z","glucose":101,"avgDelta":"2.25","BGI":-0.42,"deviation":"2.67","mealCarbs":75},{"_id":"62946214b82b320004ef5ec6","device":"AndroidAPS-DexcomG6","date":1653891561000,"dateString":"2022-05-30T06:19:21.000Z","isValid":true,"sgv":118,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T06:20:04.840Z","glucose":118,"avgDelta":"7.00","BGI":-0.21,"deviation":"7.21","mealCarbs":75},{"_id":"6294632ab82b320004ef5ecc","device":"AndroidAPS-DexcomG6","date":1653891861000,"dateString":"2022-05-30T06:24:21.000Z","isValid":true,"sgv":137,"direction":"SingleUp","type":"sgv","created_at":"2022-05-30T06:24:42.093Z","glucose":137,"avgDelta":"12.00","BGI":-12.66,"deviation":"24.66","mealCarbs":75},{"_id":"62946458b82b320004ef5ecf","device":"AndroidAPS-DexcomG6","date":1653892161000,"dateString":"2022-05-30T06:29:21.000Z","isValid":true,"sgv":157,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T06:29:44.223Z","glucose":157,"avgDelta":"16.25","BGI":-25.36,"deviation":"41.61","mealCarbs":75},{"_id":"62946586b82b320004ef5ed1","device":"AndroidAPS-DexcomG6","date":1653892461000,"dateString":"2022-05-30T06:34:21.000Z","isValid":true,"sgv":173,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T06:34:46.169Z","glucose":173,"avgDelta":"18.00","BGI":-35.2,"deviation":"53.20","mealCarbs":75},{"_id":"629466b3b82b320004ef5ed3","device":"AndroidAPS-DexcomG6","date":1653892761000,"dateString":"2022-05-30T06:39:21.000Z","isValid":true,"sgv":185,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T06:39:47.469Z","glucose":185,"avgDelta":"16.75","BGI":-42.67,"deviation":"59.42","mealCarbs":75},{"_id":"629467e1b82b320004ef5ed5","device":"AndroidAPS-DexcomG6","date":1653893061000,"dateString":"2022-05-30T06:44:21.000Z","isValid":true,"sgv":193,"direction":"SingleUp","type":"sgv","created_at":"2022-05-30T06:44:49.181Z","glucose":193,"avgDelta":"14.00","BGI":-48.07,"deviation":"62.07","mealCarbs":75},{"_id":"629469166e1b8e0004363dfc","device":"AndroidAPS-DexcomG6","date":1653893361000,"dateString":"2022-05-30T06:49:21.000Z","isValid":true,"sgv":198,"direction":"SingleUp","type":"sgv","created_at":"2022-05-30T06:49:58.419Z","glucose":198,"avgDelta":"10.25","BGI":-51.84,"deviation":"62.09","mealCarbs":75},{"_id":"62946a5e6e1b8e0004363dfe","device":"AndroidAPS-DexcomG6","date":1653893661000,"dateString":"2022-05-30T06:54:21.000Z","isValid":true,"sgv":201,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T06:55:26.117Z","glucose":201,"avgDelta":"7.00","BGI":-54.17,"deviation":"61.17","mealCarbs":75},{"_id":"62946b8a6e1b8e0004363e01","device":"AndroidAPS-DexcomG6","date":1653893961000,"dateString":"2022-05-30T06:59:21.000Z","isValid":true,"sgv":203,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T07:00:26.210Z","glucose":203,"avgDelta":"4.50","BGI":-55.41,"deviation":"59.91","mealCarbs":75},{"_id":"62946c9e6e1b8e0004363e03","device":"AndroidAPS-DexcomG6","date":1653894260000,"dateString":"2022-05-30T07:04:20.000Z","isValid":true,"sgv":203,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:05:02.549Z","glucose":203,"avgDelta":"2.50","BGI":-55.7,"deviation":"58.20","mealCarbs":75},{"_id":"62946db36e1b8e0004363e05","device":"AndroidAPS-DexcomG6","date":1653894562000,"dateString":"2022-05-30T07:09:22.000Z","isValid":true,"sgv":202,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:09:39.329Z","glucose":202,"avgDelta":"1.00","BGI":-55.25,"deviation":"56.25","mealCarbs":75},{"_id":"62946ee06e1b8e0004363e07","device":"AndroidAPS-DexcomG6","date":1653894861000,"dateString":"2022-05-30T07:14:21.000Z","isValid":true,"sgv":201,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:14:40.201Z","glucose":201,"avgDelta":"0.00","BGI":-54.21,"deviation":"54.21","mealCarbs":75},{"_id":"6294700d6e1b8e0004363e09","device":"AndroidAPS-DexcomG6","date":1653895162000,"dateString":"2022-05-30T07:19:22.000Z","isValid":true,"sgv":202,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:19:41.498Z","glucose":202,"avgDelta":"-0.25","BGI":-52.63,"deviation":"52.38","mealCarbs":75},{"_id":"629471377e1237000471bf42","device":"AndroidAPS-DexcomG6","date":1653895461000,"dateString":"2022-05-30T07:24:21.000Z","isValid":true,"sgv":204,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:24:39.113Z","glucose":204,"avgDelta":"0.25","BGI":-50.76,"deviation":"51.01","mealCarbs":75},{"_id":"629472647e1237000471bf44","device":"AndroidAPS-DexcomG6","date":1653895761000,"dateString":"2022-05-30T07:29:21.000Z","isValid":true,"sgv":208,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:29:40.917Z","glucose":208,"avgDelta":"1.50","BGI":-48.56,"deviation":"50.06","mealCarbs":75},{"_id":"629473927e1237000471bf46","device":"AndroidAPS-DexcomG6","date":1653896061000,"dateString":"2022-05-30T07:34:21.000Z","isValid":true,"sgv":213,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:34:42.398Z","glucose":213,"avgDelta":"3.00","BGI":-46.24,"deviation":"49.24","mealCarbs":75},{"_id":"629474c07e1237000471bf48","device":"AndroidAPS-DexcomG6","date":1653896361000,"dateString":"2022-05-30T07:39:21.000Z","isValid":true,"sgv":217,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:39:44.449Z","glucose":217,"avgDelta":"3.75","BGI":-43.87,"deviation":"47.62","mealCarbs":75},{"_id":"629475ed7e1237000471bf4a","device":"AndroidAPS-DexcomG6","date":1653896662000,"dateString":"2022-05-30T07:44:22.000Z","isValid":true,"sgv":218,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:44:45.778Z","glucose":218,"avgDelta":"3.50","BGI":-41.47,"deviation":"44.97","mealCarbs":75},{"_id":"6294771a7e1237000471bf4c","device":"AndroidAPS-DexcomG6","date":1653896961000,"dateString":"2022-05-30T07:49:21.000Z","isValid":true,"sgv":219,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:49:46.684Z","glucose":219,"avgDelta":"2.75","BGI":-39.06,"deviation":"41.81","mealCarbs":75},{"_id":"629478477e1237000471bf4e","device":"AndroidAPS-DexcomG6","date":1653897262000,"dateString":"2022-05-30T07:54:22.000Z","isValid":true,"sgv":219,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:54:47.898Z","glucose":219,"avgDelta":"1.50","BGI":-36.69,"deviation":"38.19","mealCarbs":75},{"_id":"62947975d10aeb0004cd3fe5","device":"AndroidAPS-DexcomG6","date":1653897561000,"dateString":"2022-05-30T07:59:21.000Z","isValid":true,"sgv":217,"direction":"Flat","type":"sgv","created_at":"2022-05-30T07:59:49.147Z","glucose":217,"avgDelta":"0.00","BGI":-33.21,"deviation":"33.21","mealCarbs":75},{"_id":"62947aa2d10aeb0004cd3fe7","device":"AndroidAPS-DexcomG6","date":1653897861000,"dateString":"2022-05-30T08:04:21.000Z","isValid":true,"sgv":213,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:04:50.320Z","glucose":213,"avgDelta":"-1.25","BGI":-30.67,"deviation":"29.42","mealCarbs":75},{"_id":"62947bcfd10aeb0004cd3fe9","device":"AndroidAPS-DexcomG6","date":1653898161000,"dateString":"2022-05-30T08:09:21.000Z","isValid":true,"sgv":209,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:09:51.204Z","glucose":209,"avgDelta":"-2.50","BGI":-28.22,"deviation":"25.72","mealCarbs":75},{"_id":"62947cfcd10aeb0004cd3feb","device":"AndroidAPS-DexcomG6","date":1653898461000,"dateString":"2022-05-30T08:14:21.000Z","isValid":true,"sgv":207,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:14:52.631Z","glucose":207,"avgDelta":"-3.00","BGI":-25.86,"deviation":"22.86","mealCarbs":75},{"_id":"62947e29d10aeb0004cd3fed","device":"AndroidAPS-DexcomG6","date":1653898761000,"dateString":"2022-05-30T08:19:21.000Z","isValid":true,"sgv":206,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:19:53.852Z","glucose":206,"avgDelta":"-2.75","BGI":-23.58,"deviation":"20.83","mealCarbs":75},{"_id":"62947f56d10aeb0004cd3ff0","device":"AndroidAPS-DexcomG6","date":1653899062000,"dateString":"2022-05-30T08:24:22.000Z","isValid":true,"sgv":205,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:24:54.980Z","glucose":205,"avgDelta":"-2.00","BGI":-21.42,"deviation":"19.42","mealCarbs":75},{"_id":"62948083d10aeb0004cd3ff4","device":"AndroidAPS-DexcomG6","date":1653899361000,"dateString":"2022-05-30T08:29:21.000Z","isValid":true,"sgv":202,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:29:55.869Z","glucose":202,"avgDelta":"-1.75","BGI":-19.47,"deviation":"17.72","mealCarbs":75},{"_id":"629481a58ecbb3000401e2cd","device":"AndroidAPS-DexcomG6","date":1653899661000,"dateString":"2022-05-30T08:34:21.000Z","isValid":true,"sgv":199,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:34:45.627Z","glucose":199,"avgDelta":"-2.00","BGI":-17.72,"deviation":"15.72","mealCarbs":75},{"_id":"629482d28ecbb3000401e2d0","device":"AndroidAPS-DexcomG6","date":1653899961000,"dateString":"2022-05-30T08:39:21.000Z","isValid":true,"sgv":197,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:39:46.821Z","glucose":197,"avgDelta":"-2.25","BGI":-16.02,"deviation":"13.77","mealCarbs":75},{"_id":"629484008ecbb3000401e2d3","device":"AndroidAPS-DexcomG6","date":1653900261000,"dateString":"2022-05-30T08:44:21.000Z","isValid":true,"sgv":195,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:44:48.348Z","glucose":195,"avgDelta":"-2.50","BGI":-14.49,"deviation":"11.99","mealCarbs":75},{"_id":"6294852d8ecbb3000401e2d7","device":"AndroidAPS-DexcomG6","date":1653900561000,"dateString":"2022-05-30T08:49:21.000Z","isValid":true,"sgv":193,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:49:49.550Z","glucose":193,"avgDelta":"-2.25","BGI":-13.28,"deviation":"11.03","mealCarbs":75},{"_id":"6294865a8ecbb3000401e2da","device":"AndroidAPS-DexcomG6","date":1653900861000,"dateString":"2022-05-30T08:54:21.000Z","isValid":true,"sgv":189,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:54:50.449Z","glucose":189,"avgDelta":"-2.50","BGI":-12.2,"deviation":"9.70","mealCarbs":75},{"_id":"629487878ecbb3000401e2dc","device":"AndroidAPS-DexcomG6","date":1653901161000,"dateString":"2022-05-30T08:59:21.000Z","isValid":true,"sgv":183,"direction":"Flat","type":"sgv","created_at":"2022-05-30T08:59:51.963Z","glucose":183,"avgDelta":"-3.50","BGI":-11.21,"deviation":"7.71","mealCarbs":75},{"_id":"629488b58ecbb3000401e2de","device":"AndroidAPS-DexcomG6","date":1653901461000,"dateString":"2022-05-30T09:04:21.000Z","isValid":true,"sgv":175,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:04:53.220Z","glucose":175,"avgDelta":"-5.00","BGI":-10.29,"deviation":"5.29","mealCarbs":75},{"_id":"62948a0776174b0004fbd21d","device":"AndroidAPS-DexcomG6","date":1653901761000,"dateString":"2022-05-30T09:09:21.000Z","isValid":true,"sgv":166,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:10:31.409Z","glucose":166,"avgDelta":"-6.75","BGI":-9.38,"deviation":"2.63","mealCarbs":75},{"_id":"62948b0276174b0004fbd21f","device":"AndroidAPS-DexcomG6","date":1653902061000,"dateString":"2022-05-30T09:14:21.000Z","isValid":true,"sgv":156,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:14:42.378Z","glucose":156,"avgDelta":"-8.25","BGI":-8.47,"deviation":"0.22","mealCarbs":75},{"_id":"62948c4876174b0004fbd222","device":"AndroidAPS-DexcomG6","date":1653902361000,"dateString":"2022-05-30T09:19:21.000Z","isValid":true,"sgv":146,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:20:08.645Z","glucose":146,"avgDelta":"-9.25","BGI":-7.6,"deviation":"-1.65","mealCarbs":0,"mealAbsorption":"end"},{"_id":"6294a02dc2e464000413b7a6","device":"AndroidAPS-DexcomG6","date":1653907461000,"dateString":"2022-05-30T10:44:21.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:45:01.559Z","glucose":77,"avgDelta":"-1.25","BGI":1.45,"deviation":"-2.70","mealAbsorption":"start","mealCarbs":50},{"_id":"6294a15bc2e464000413b7a8","device":"AndroidAPS-DexcomG6","date":1653907762000,"dateString":"2022-05-30T10:49:22.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:50:03.007Z","glucose":76,"avgDelta":"-1.00","BGI":1.66,"deviation":"-2.66","mealCarbs":50},{"_id":"6294a274ac54000004308874","device":"AndroidAPS-DexcomG6","date":1653908062000,"dateString":"2022-05-30T10:54:22.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:54:44.532Z","glucose":77,"avgDelta":"-0.50","BGI":1.78,"deviation":"-2.28","mealCarbs":50},{"_id":"6294a3a3ac54000004308877","device":"AndroidAPS-DexcomG6","date":1653908361000,"dateString":"2022-05-30T10:59:21.000Z","isValid":true,"sgv":81,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:59:47.232Z","glucose":81,"avgDelta":"0.75","BGI":1.87,"deviation":"-1.12","mealCarbs":50},{"_id":"6294a4d1ac5400000430887a","device":"AndroidAPS-DexcomG6","date":1653908662000,"dateString":"2022-05-30T11:04:22.000Z","isValid":true,"sgv":88,"direction":"Flat","type":"sgv","created_at":"2022-05-30T11:04:49.434Z","glucose":88,"avgDelta":"2.75","BGI":1.95,"deviation":"0.80","mealCarbs":50},{"_id":"6294a60eac5400000430887d","device":"AndroidAPS-DexcomG6","date":1653908962000,"dateString":"2022-05-30T11:09:22.000Z","isValid":true,"sgv":102,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T11:10:06.733Z","glucose":102,"avgDelta":"6.50","BGI":1.99,"deviation":"4.51","mealCarbs":50},{"_id":"6294a723ac54000004308881","device":"AndroidAPS-DexcomG6","date":1653909261000,"dateString":"2022-05-30T11:14:21.000Z","isValid":true,"sgv":122,"direction":"SingleUp","type":"sgv","created_at":"2022-05-30T11:14:43.529Z","glucose":122,"avgDelta":"11.25","BGI":1.66,"deviation":"9.59","mealCarbs":50},{"_id":"6294a851ac54000004308883","device":"AndroidAPS-DexcomG6","date":1653909561000,"dateString":"2022-05-30T11:19:21.000Z","isValid":true,"sgv":146,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T11:19:45.466Z","glucose":146,"avgDelta":"16.25","BGI":1,"deviation":"15.25","mealCarbs":50},{"_id":"6294a97eac54000004308887","device":"AndroidAPS-DexcomG6","date":1653909861000,"dateString":"2022-05-30T11:24:21.000Z","isValid":true,"sgv":172,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T11:24:46.490Z","glucose":172,"avgDelta":"21.00","BGI":-0.46,"deviation":"21.46","mealCarbs":50},{"_id":"6294aaabac5400000430888a","device":"AndroidAPS-DexcomG6","date":1653910161000,"dateString":"2022-05-30T11:29:21.000Z","isValid":true,"sgv":195,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T11:29:47.695Z","glucose":195,"avgDelta":"23.25","BGI":-2.2,"deviation":"25.45","mealCarbs":50},{"_id":"6294abd9ac5400000430888e","device":"AndroidAPS-DexcomG6","date":1653910462000,"dateString":"2022-05-30T11:34:22.000Z","isValid":true,"sgv":215,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T11:34:49.146Z","glucose":215,"avgDelta":"23.25","BGI":-3.86,"deviation":"27.11","mealCarbs":50},{"_id":"6294ad1b0f39100004ec41e2","device":"AndroidAPS-DexcomG6","date":1653910761000,"dateString":"2022-05-30T11:39:21.000Z","isValid":true,"sgv":230,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T11:40:11.205Z","glucose":230,"avgDelta":"21.00","BGI":-5.27,"deviation":"26.27","mealCarbs":50},{"_id":"6294ae2f0f39100004ec41e7","device":"AndroidAPS-DexcomG6","date":1653911061000,"dateString":"2022-05-30T11:44:21.000Z","isValid":true,"sgv":240,"direction":"DoubleUp","type":"sgv","created_at":"2022-05-30T11:44:47.323Z","glucose":240,"avgDelta":"17.00","BGI":-14.24,"deviation":"31.24","mealCarbs":50},{"_id":"6294af5c0f39100004ec41ed","device":"AndroidAPS-DexcomG6","date":1653911361000,"dateString":"2022-05-30T11:49:21.000Z","isValid":true,"sgv":246,"direction":"SingleUp","type":"sgv","created_at":"2022-05-30T11:49:48.926Z","glucose":246,"avgDelta":"12.75","BGI":-22.99,"deviation":"35.74","mealCarbs":50},{"_id":"6294b08a0f39100004ec41ef","device":"AndroidAPS-DexcomG6","date":1653911662000,"dateString":"2022-05-30T11:54:22.000Z","isValid":true,"sgv":249,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T11:54:50.545Z","glucose":249,"avgDelta":"8.50","BGI":-29.72,"deviation":"38.22","mealCarbs":50},{"_id":"6294b1d10f39100004ec41f1","device":"AndroidAPS-DexcomG6","date":1653911961000,"dateString":"2022-05-30T11:59:21.000Z","isValid":true,"sgv":251,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T12:00:17.223Z","glucose":251,"avgDelta":"5.25","BGI":-34.7,"deviation":"39.95","mealCarbs":50},{"_id":"6294b2e50f39100004ec41f3","device":"AndroidAPS-DexcomG6","date":1653912261000,"dateString":"2022-05-30T12:04:21.000Z","isValid":true,"sgv":251,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T12:04:53.216Z","glucose":251,"avgDelta":"2.75","BGI":-38.27,"deviation":"41.02","mealCarbs":50},{"_id":"6294b4130f39100004ec41f5","device":"AndroidAPS-DexcomG6","date":1653912562000,"dateString":"2022-05-30T12:09:22.000Z","isValid":true,"sgv":248,"direction":"Flat","type":"sgv","created_at":"2022-05-30T12:09:55.708Z","glucose":248,"avgDelta":"0.50","BGI":-40.64,"deviation":"41.14","mealCarbs":50},{"_id":"6294b53dff39db0004546852","device":"AndroidAPS-DexcomG6","date":1653912862000,"dateString":"2022-05-30T12:14:22.000Z","isValid":true,"sgv":242,"direction":"Flat","type":"sgv","created_at":"2022-05-30T12:14:53.986Z","glucose":242,"avgDelta":"-1.75","BGI":-42.05,"deviation":"40.30","mealCarbs":50},{"_id":"6294b66bff39db0004546853","device":"AndroidAPS-DexcomG6","date":1653913162000,"dateString":"2022-05-30T12:19:22.000Z","isValid":true,"sgv":232,"direction":"Flat","type":"sgv","created_at":"2022-05-30T12:19:55.640Z","glucose":232,"avgDelta":"-4.75","BGI":-42.67,"deviation":"37.92","mealCarbs":50},{"_id":"6294b799ff39db0004546858","device":"AndroidAPS-DexcomG6","date":1653913462000,"dateString":"2022-05-30T12:24:22.000Z","isValid":true,"sgv":223,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:24:57.749Z","glucose":223,"avgDelta":"-7.00","BGI":-42.63,"deviation":"35.63","mealCarbs":50},{"_id":"6294b8c7ff39db000454685b","device":"AndroidAPS-DexcomG6","date":1653913762000,"dateString":"2022-05-30T12:29:22.000Z","isValid":true,"sgv":213,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:29:59.741Z","glucose":213,"avgDelta":"-8.75","BGI":-42.09,"deviation":"33.34","mealCarbs":50},{"_id":"6294b9f6ff39db000454685e","device":"AndroidAPS-DexcomG6","date":1653914062000,"dateString":"2022-05-30T12:34:22.000Z","isValid":true,"sgv":203,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:35:02.052Z","glucose":203,"avgDelta":"-9.75","BGI":-41.09,"deviation":"31.34","mealCarbs":50},{"_id":"6294bb0bff39db0004546861","device":"AndroidAPS-DexcomG6","date":1653914362000,"dateString":"2022-05-30T12:39:22.000Z","isValid":true,"sgv":195,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:39:39.194Z","glucose":195,"avgDelta":"-9.25","BGI":-39.72,"deviation":"30.47","mealCarbs":50},{"_id":"6294bc52ff39db0004546864","device":"AndroidAPS-DexcomG6","date":1653914661000,"dateString":"2022-05-30T12:44:21.000Z","isValid":true,"sgv":188,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:45:06.129Z","glucose":188,"avgDelta":"-8.75","BGI":-38.19,"deviation":"29.44","mealCarbs":50},{"_id":"6294bd7352bed20004c9a2ac","device":"AndroidAPS-DexcomG6","date":1653914962000,"dateString":"2022-05-30T12:49:22.000Z","isValid":true,"sgv":182,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:49:55.775Z","glucose":182,"avgDelta":"-7.75","BGI":-36.4,"deviation":"28.65","mealCarbs":50},{"_id":"6294bea052bed20004c9a2af","device":"AndroidAPS-DexcomG6","date":1653915262000,"dateString":"2022-05-30T12:54:22.000Z","isValid":true,"sgv":176,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:54:56.765Z","glucose":176,"avgDelta":"-6.75","BGI":-34.41,"deviation":"27.66","mealCarbs":50},{"_id":"6294bfce52bed20004c9a2b2","device":"AndroidAPS-DexcomG6","date":1653915561000,"dateString":"2022-05-30T12:59:21.000Z","isValid":true,"sgv":170,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T12:59:58.302Z","glucose":170,"avgDelta":"-6.25","BGI":-32.42,"deviation":"26.17","mealCarbs":50},{"_id":"6294c0fb52bed20004c9a2b5","device":"AndroidAPS-DexcomG6","date":1653915862000,"dateString":"2022-05-30T13:04:22.000Z","isValid":true,"sgv":164,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:04:59.247Z","glucose":164,"avgDelta":"-6.00","BGI":-30.38,"deviation":"24.38","mealCarbs":50},{"_id":"6294c22852bed20004c9a2b7","device":"AndroidAPS-DexcomG6","date":1653916162000,"dateString":"2022-05-30T13:09:22.000Z","isValid":true,"sgv":158,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:10:00.478Z","glucose":158,"avgDelta":"-6.00","BGI":-28.31,"deviation":"22.31","mealCarbs":50},{"_id":"6294c35552bed20004c9a2ba","device":"AndroidAPS-DexcomG6","date":1653916461000,"dateString":"2022-05-30T13:14:21.000Z","isValid":true,"sgv":152,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:15:01.720Z","glucose":152,"avgDelta":"-6.00","BGI":-26.23,"deviation":"20.23","mealCarbs":50},{"_id":"6294c48252bed20004c9a2bc","device":"AndroidAPS-DexcomG6","date":1653916762000,"dateString":"2022-05-30T13:19:22.000Z","isValid":true,"sgv":147,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:20:02.947Z","glucose":147,"avgDelta":"-5.75","BGI":-24.2,"deviation":"18.45","mealCarbs":50},{"_id":"6294c5a6b8c0c10004ff0007","device":"AndroidAPS-DexcomG6","date":1653917062000,"dateString":"2022-05-30T13:24:22.000Z","isValid":true,"sgv":141,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:24:54.571Z","glucose":141,"avgDelta":"-5.75","BGI":-22.21,"deviation":"16.46","mealCarbs":50},{"_id":"6294c6d3b8c0c10004ff0009","device":"AndroidAPS-DexcomG6","date":1653917362000,"dateString":"2022-05-30T13:29:22.000Z","isValid":true,"sgv":136,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:29:55.794Z","glucose":136,"avgDelta":"-5.50","BGI":-20.34,"deviation":"14.84","mealCarbs":50},{"_id":"6294c801b8c0c10004ff000b","device":"AndroidAPS-DexcomG6","date":1653917662000,"dateString":"2022-05-30T13:34:22.000Z","isValid":true,"sgv":130,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:34:57.267Z","glucose":130,"avgDelta":"-5.50","BGI":-18.47,"deviation":"12.97","mealCarbs":50},{"_id":"6294c92eb8c0c10004ff000d","device":"AndroidAPS-DexcomG6","date":1653917962000,"dateString":"2022-05-30T13:39:22.000Z","isValid":true,"sgv":126,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:39:58.439Z","glucose":126,"avgDelta":"-5.25","BGI":-16.73,"deviation":"11.48","mealCarbs":50},{"_id":"6294ca5bb8c0c10004ff0010","device":"AndroidAPS-DexcomG6","date":1653918262000,"dateString":"2022-05-30T13:44:22.000Z","isValid":true,"sgv":121,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T13:44:59.703Z","glucose":121,"avgDelta":"-5.00","BGI":-15.11,"deviation":"10.11","mealCarbs":50},{"_id":"6294cb88b8c0c10004ff0012","device":"AndroidAPS-DexcomG6","date":1653918561000,"dateString":"2022-05-30T13:49:21.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","created_at":"2022-05-30T13:50:00.678Z","glucose":117,"avgDelta":"-4.75","BGI":-13.49,"deviation":"8.74","mealCarbs":50},{"_id":"6294cc9cb8c0c10004ff0014","device":"AndroidAPS-DexcomG6","date":1653918862000,"dateString":"2022-05-30T13:54:22.000Z","isValid":true,"sgv":113,"direction":"Flat","type":"sgv","created_at":"2022-05-30T13:54:36.799Z","glucose":113,"avgDelta":"-4.25","BGI":-12.04,"deviation":"7.79","mealCarbs":50},{"_id":"6294cdccdac1e20004fde58d","device":"AndroidAPS-DexcomG6","date":1653919161000,"dateString":"2022-05-30T13:59:21.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","created_at":"2022-05-30T13:59:40.487Z","glucose":110,"avgDelta":"-4.00","BGI":-10.63,"deviation":"6.63","mealCarbs":50},{"_id":"6294cf12dac1e20004fde58f","device":"AndroidAPS-DexcomG6","date":1653919462000,"dateString":"2022-05-30T14:04:22.000Z","isValid":true,"sgv":106,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:05:06.902Z","glucose":106,"avgDelta":"-3.75","BGI":-9.26,"deviation":"5.51","mealCarbs":50},{"_id":"6294d026dac1e20004fde592","device":"AndroidAPS-DexcomG6","date":1653919761000,"dateString":"2022-05-30T14:09:21.000Z","isValid":true,"sgv":103,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:09:42.740Z","glucose":103,"avgDelta":"-3.50","BGI":-7.97,"deviation":"4.47","mealCarbs":50},{"_id":"6294d154dac1e20004fde594","device":"AndroidAPS-DexcomG6","date":1653920062000,"dateString":"2022-05-30T14:14:22.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:14:44.142Z","glucose":100,"avgDelta":"-3.25","BGI":-6.85,"deviation":"3.60","mealCarbs":0,"mealAbsorption":"end"},{"_id":"6294eb2bb23f340004e841d8","device":"AndroidAPS-DexcomG6","date":1653926662000,"dateString":"2022-05-30T16:04:22.000Z","isValid":true,"sgv":87,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:04:59.310Z","glucose":87,"avgDelta":"2.25","BGI":3.86,"deviation":"-1.61","mealAbsorption":"start","mealCarbs":10},{"_id":"6294ec59b23f340004e841da","device":"AndroidAPS-DexcomG6","date":1653926962000,"dateString":"2022-05-30T16:09:22.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:10:01.438Z","glucose":97,"avgDelta":"4.50","BGI":4.03,"deviation":"0.47","mealCarbs":10},{"_id":"6294ed6eb23f340004e841de","device":"AndroidAPS-DexcomG6","date":1653927262000,"dateString":"2022-05-30T16:14:22.000Z","isValid":true,"sgv":111,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T16:14:38.319Z","glucose":111,"avgDelta":"7.50","BGI":4.07,"deviation":"3.43","mealCarbs":10},{"_id":"6294eeb5b23f340004e841e1","device":"AndroidAPS-DexcomG6","date":1653927562000,"dateString":"2022-05-30T16:19:22.000Z","isValid":true,"sgv":123,"direction":"SingleUp","type":"sgv","created_at":"2022-05-30T16:20:05.391Z","glucose":123,"avgDelta":"10.25","BGI":3.94,"deviation":"6.31","mealCarbs":10},{"_id":"6294efcab23f340004e841e5","device":"AndroidAPS-DexcomG6","date":1653927861000,"dateString":"2022-05-30T16:24:21.000Z","isValid":true,"sgv":131,"direction":"SingleUp","type":"sgv","created_at":"2022-05-30T16:24:42.057Z","glucose":131,"avgDelta":"11.00","BGI":3.49,"deviation":"7.51","mealCarbs":10},{"_id":"6294f0f8b23f340004e841e8","device":"AndroidAPS-DexcomG6","date":1653928161000,"dateString":"2022-05-30T16:29:21.000Z","isValid":true,"sgv":133,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T16:29:44.123Z","glucose":133,"avgDelta":"9.00","BGI":2.91,"deviation":"6.09","mealCarbs":10},{"_id":"6294f23fb23f340004e841eb","device":"AndroidAPS-DexcomG6","date":1653928462000,"dateString":"2022-05-30T16:34:22.000Z","isValid":true,"sgv":132,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:35:11.666Z","glucose":132,"avgDelta":"5.25","BGI":2.49,"deviation":"2.76","mealCarbs":10},{"_id":"6294f35555b9dd00048a547a","device":"AndroidAPS-DexcomG6","date":1653928761000,"dateString":"2022-05-30T16:39:21.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:39:49.489Z","glucose":128,"avgDelta":"1.25","BGI":2.2,"deviation":"-0.95","mealCarbs":10},{"_id":"6294f4db55b9dd00048a547d","device":"AndroidAPS-DexcomG6","date":1653929062000,"dateString":"2022-05-30T16:44:22.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:46:19.989Z","glucose":125,"avgDelta":"-1.50","BGI":1.95,"deviation":"-3.45","mealCarbs":10},{"_id":"6294f5bd55b9dd00048a547f","device":"AndroidAPS-DexcomG6","date":1653929361000,"dateString":"2022-05-30T16:49:21.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:50:05.068Z","glucose":123,"avgDelta":"-2.50","BGI":1.83,"deviation":"-4.33","mealCarbs":10},{"_id":"6294f6ea55b9dd00048a5481","device":"AndroidAPS-DexcomG6","date":1653929662000,"dateString":"2022-05-30T16:54:22.000Z","isValid":true,"sgv":121,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:55:06.087Z","glucose":121,"avgDelta":"-2.75","BGI":1.83,"deviation":"-4.58","mealCarbs":10},{"_id":"6294f7fe55b9dd00048a5483","device":"AndroidAPS-DexcomG6","date":1653929962000,"dateString":"2022-05-30T16:59:22.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:59:42.653Z","glucose":120,"avgDelta":"-2.00","BGI":1.78,"deviation":"-3.78","mealCarbs":10},{"_id":"6294f92d55b9dd00048a5486","device":"AndroidAPS-DexcomG6","date":1653930261000,"dateString":"2022-05-30T17:04:21.000Z","isValid":true,"sgv":120,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:04:45.622Z","glucose":120,"avgDelta":"-1.25","BGI":1.78,"deviation":"-3.03","mealCarbs":10},{"_id":"6294fa6255b9dd00048a5488","device":"AndroidAPS-DexcomG6","date":1653930562000,"dateString":"2022-05-30T17:09:22.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:09:54.701Z","glucose":119,"avgDelta":"-1.00","BGI":1.91,"deviation":"-2.91","mealCarbs":10},{"_id":"6294fb9155b9dd00048a548a","device":"AndroidAPS-DexcomG6","date":1653930862000,"dateString":"2022-05-30T17:14:22.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:14:57.054Z","glucose":119,"avgDelta":"-0.50","BGI":1.95,"deviation":"-2.45","mealCarbs":10},{"_id":"6294fcbf55b9dd00048a548c","device":"AndroidAPS-DexcomG6","date":1653931162000,"dateString":"2022-05-30T17:19:22.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:19:59.153Z","glucose":119,"avgDelta":"-0.25","BGI":1.99,"deviation":"-2.24","mealCarbs":10},{"_id":"6294fded55b9dd00048a548e","device":"AndroidAPS-DexcomG6","date":1653931462000,"dateString":"2022-05-30T17:24:22.000Z","isValid":true,"sgv":121,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:25:01.436Z","glucose":121,"avgDelta":"0.25","BGI":2.03,"deviation":"-1.78","mealCarbs":10},{"_id":"6294ff1c55b9dd00048a5490","device":"AndroidAPS-DexcomG6","date":1653931761000,"dateString":"2022-05-30T17:29:21.000Z","isValid":true,"sgv":123,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:30:04.244Z","glucose":123,"avgDelta":"1.00","BGI":1.99,"deviation":"-0.99","mealCarbs":10},{"_id":"6295003055b9dd00048a5493","device":"AndroidAPS-DexcomG6","date":1653932061000,"dateString":"2022-05-30T17:34:21.000Z","isValid":true,"sgv":125,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:34:40.905Z","glucose":125,"avgDelta":"1.50","BGI":1.95,"deviation":"-0.45","mealCarbs":10},{"_id":"6295015e55b9dd00048a5495","device":"AndroidAPS-DexcomG6","date":1653932362000,"dateString":"2022-05-30T17:39:22.000Z","isValid":true,"sgv":127,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:39:42.833Z","glucose":127,"avgDelta":"2.00","BGI":1.99,"deviation":"0.01","mealCarbs":10},{"_id":"6295029d409703000484d1b7","device":"AndroidAPS-DexcomG6","date":1653932662000,"dateString":"2022-05-30T17:44:22.000Z","isValid":true,"sgv":130,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:45:01.816Z","glucose":130,"avgDelta":"2.25","BGI":1.95,"deviation":"0.30","mealCarbs":0,"mealAbsorption":"end"},{"_id":"62953178e3aedd00046f3879","device":"AndroidAPS-DexcomG6","date":1653944662000,"dateString":"2022-05-30T21:04:22.000Z","isValid":true,"sgv":163,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:04:56.492Z","glucose":163,"avgDelta":"-2.50","BGI":-6.64,"deviation":"4.14","mealAbsorption":"start","mealCarbs":35},{"_id":"629532a6e3aedd00046f387c","device":"AndroidAPS-DexcomG6","date":1653944962000,"dateString":"2022-05-30T21:09:22.000Z","isValid":true,"sgv":161,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:09:58.543Z","glucose":161,"avgDelta":"-2.50","BGI":-11.7,"deviation":"9.20","mealCarbs":35},{"_id":"629533d3e3aedd00046f387e","device":"AndroidAPS-DexcomG6","date":1653945263000,"dateString":"2022-05-30T21:14:23.000Z","isValid":true,"sgv":162,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:14:59.957Z","glucose":162,"avgDelta":"-1.75","BGI":-15.52,"deviation":"13.77","mealCarbs":35},{"_id":"62953501e3aedd00046f3880","device":"AndroidAPS-DexcomG6","date":1653945562000,"dateString":"2022-05-30T21:19:22.000Z","isValid":true,"sgv":167,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:20:01.384Z","glucose":167,"avgDelta":"0.25","BGI":-18.39,"deviation":"18.64","mealCarbs":35},{"_id":"6295362fe3aedd00046f3884","device":"AndroidAPS-DexcomG6","date":1653945863000,"dateString":"2022-05-30T21:24:23.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:25:03.893Z","glucose":176,"avgDelta":"3.25","BGI":-20.5,"deviation":"23.75","mealCarbs":35},{"_id":"6295374986a3df0004eb44f6","device":"AndroidAPS-DexcomG6","date":1653946162000,"dateString":"2022-05-30T21:29:22.000Z","isValid":true,"sgv":187,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T21:29:45.117Z","glucose":187,"avgDelta":"6.50","BGI":-21.87,"deviation":"28.37","mealCarbs":35},{"_id":"6295387786a3df0004eb44f9","device":"AndroidAPS-DexcomG6","date":1653946462000,"dateString":"2022-05-30T21:34:22.000Z","isValid":true,"sgv":192,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T21:34:47.953Z","glucose":192,"avgDelta":"7.50","BGI":-22.83,"deviation":"30.33","mealCarbs":35},{"_id":"629539a586a3df0004eb44fb","device":"AndroidAPS-DexcomG6","date":1653946762000,"dateString":"2022-05-30T21:39:22.000Z","isValid":true,"sgv":188,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:39:49.822Z","glucose":188,"avgDelta":"5.25","BGI":-23.37,"deviation":"28.62","mealCarbs":35},{"_id":"62953ad486a3df0004eb44fd","device":"AndroidAPS-DexcomG6","date":1653947062000,"dateString":"2022-05-30T21:44:22.000Z","isValid":true,"sgv":181,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:44:52.471Z","glucose":181,"avgDelta":"1.25","BGI":-23.33,"deviation":"24.58","mealCarbs":35},{"_id":"62953c0286a3df0004eb4500","device":"AndroidAPS-DexcomG6","date":1653947361000,"dateString":"2022-05-30T21:49:21.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:49:54.555Z","glucose":177,"avgDelta":"-2.50","BGI":-23.08,"deviation":"20.58","mealCarbs":35},{"_id":"62953d3086a3df0004eb4502","device":"AndroidAPS-DexcomG6","date":1653947662000,"dateString":"2022-05-30T21:54:22.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:54:56.505Z","glucose":177,"avgDelta":"-3.75","BGI":-22.5,"deviation":"18.75","mealCarbs":35},{"_id":"62953e5d86a3df0004eb4504","device":"AndroidAPS-DexcomG6","date":1653947962000,"dateString":"2022-05-30T21:59:22.000Z","isValid":true,"sgv":181,"direction":"Flat","type":"sgv","created_at":"2022-05-30T21:59:57.963Z","glucose":181,"avgDelta":"-1.75","BGI":-21.71,"deviation":"19.96","mealCarbs":35},{"_id":"62953f7e1ded00000454b737","device":"AndroidAPS-DexcomG6","date":1653948262000,"dateString":"2022-05-30T22:04:22.000Z","isValid":true,"sgv":185,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:04:46.798Z","glucose":185,"avgDelta":"1.00","BGI":-20.8,"deviation":"21.80","mealCarbs":35},{"_id":"629540ac1ded00000454b739","device":"AndroidAPS-DexcomG6","date":1653948562000,"dateString":"2022-05-30T22:09:22.000Z","isValid":true,"sgv":188,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:09:48.384Z","glucose":188,"avgDelta":"2.75","BGI":-19.72,"deviation":"22.47","mealCarbs":35},{"_id":"629541da1ded00000454b73d","device":"AndroidAPS-DexcomG6","date":1653948861000,"dateString":"2022-05-30T22:14:21.000Z","isValid":true,"sgv":189,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:14:50.845Z","glucose":189,"avgDelta":"3.00","BGI":-18.64,"deviation":"21.64","mealCarbs":35},{"_id":"629543081ded00000454b740","device":"AndroidAPS-DexcomG6","date":1653949162000,"dateString":"2022-05-30T22:19:22.000Z","isValid":true,"sgv":188,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:19:52.210Z","glucose":188,"avgDelta":"1.75","BGI":-17.47,"deviation":"19.22","mealCarbs":35},{"_id":"629544361ded00000454b742","device":"AndroidAPS-DexcomG6","date":1653949462000,"dateString":"2022-05-30T22:24:22.000Z","isValid":true,"sgv":186,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:24:54.381Z","glucose":186,"avgDelta":"0.25","BGI":-16.27,"deviation":"16.52","mealCarbs":35},{"_id":"629545651ded00000454b744","device":"AndroidAPS-DexcomG6","date":1653949762000,"dateString":"2022-05-30T22:29:22.000Z","isValid":true,"sgv":183,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:29:57.528Z","glucose":183,"avgDelta":"-1.25","BGI":-15.03,"deviation":"13.78","mealCarbs":35},{"_id":"629546941ded00000454b746","device":"AndroidAPS-DexcomG6","date":1653950062000,"dateString":"2022-05-30T22:34:22.000Z","isValid":true,"sgv":180,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:35:00.013Z","glucose":180,"avgDelta":"-2.25","BGI":-13.82,"deviation":"11.57","mealCarbs":35},{"_id":"629547acf89bc40004df9f57","device":"AndroidAPS-DexcomG6","date":1653950362000,"dateString":"2022-05-30T22:39:22.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:39:40.750Z","glucose":177,"avgDelta":"-2.75","BGI":-12.58,"deviation":"9.83","mealCarbs":35},{"_id":"629548f3f89bc40004df9f5a","device":"AndroidAPS-DexcomG6","date":1653950662000,"dateString":"2022-05-30T22:44:22.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:45:07.405Z","glucose":174,"avgDelta":"-3.00","BGI":-11.41,"deviation":"8.41","mealCarbs":35},{"_id":"62954a21f89bc40004df9f5d","device":"AndroidAPS-DexcomG6","date":1653950961000,"dateString":"2022-05-30T22:49:21.000Z","isValid":true,"sgv":172,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:50:09.405Z","glucose":172,"avgDelta":"-2.75","BGI":-10.34,"deviation":"7.59","mealCarbs":35},{"_id":"62954b36f89bc40004df9f60","device":"AndroidAPS-DexcomG6","date":1653951262000,"dateString":"2022-05-30T22:54:22.000Z","isValid":true,"sgv":170,"direction":"Flat","type":"sgv","created_at":"2022-05-30T22:54:46.692Z","glucose":170,"avgDelta":"-2.50","BGI":-9.3,"deviation":"6.80","mealCarbs":35},{"_id":"6295687de4f1e400046e05b4","device":"AndroidAPS-DexcomG6","date":1653958762000,"dateString":"2022-05-31T00:59:22.000Z","isValid":true,"sgv":121,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-31T00:59:41.709Z","glucose":121,"avgDelta":"-14.00","BGI":-0.91,"deviation":"-13.09","mealCarbs":35},{"_id":"629569abe4f1e400046e05b8","device":"AndroidAPS-DexcomG6","date":1653959062000,"dateString":"2022-05-31T01:04:22.000Z","isValid":true,"sgv":117,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-31T01:04:43.046Z","glucose":117,"avgDelta":"-14.25","BGI":-0.95,"deviation":"-13.30","mealCarbs":35},{"_id":"62956adae4f1e400046e05bb","device":"AndroidAPS-DexcomG6","date":1653959362000,"dateString":"2022-05-31T01:09:22.000Z","isValid":true,"sgv":112,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-31T01:09:46.322Z","glucose":112,"avgDelta":"-15.00","BGI":-1,"deviation":"-14.00","mealCarbs":35},{"_id":"62956c07e4f1e400046e05be","device":"AndroidAPS-DexcomG6","date":1653959662000,"dateString":"2022-05-31T01:14:22.000Z","isValid":true,"sgv":108,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-31T01:14:47.990Z","glucose":108,"avgDelta":"-15.50","BGI":-1,"deviation":"-14.50","mealCarbs":35},{"_id":"62956d35e4f1e400046e05c1","device":"AndroidAPS-DexcomG6","date":1653959962000,"dateString":"2022-05-31T01:19:22.000Z","isValid":true,"sgv":105,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:19:49.260Z","glucose":105,"avgDelta":"-4.00","BGI":-0.91,"deviation":"-3.09","mealCarbs":35},{"_id":"62956e62e4f1e400046e05c3","device":"AndroidAPS-DexcomG6","date":1653960262000,"dateString":"2022-05-31T01:24:22.000Z","isValid":true,"sgv":107,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:24:50.951Z","glucose":107,"avgDelta":"-2.50","BGI":-0.75,"deviation":"-1.75","mealCarbs":35},{"_id":"62956f90e4f1e400046e05c7","device":"AndroidAPS-DexcomG6","date":1653960561000,"dateString":"2022-05-31T01:29:21.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:29:52.070Z","glucose":112,"avgDelta":"0.00","BGI":-0.54,"deviation":"0.54","mealCarbs":35},{"_id":"629570bb9bc0370004b42b77","device":"AndroidAPS-DexcomG6","date":1653960862000,"dateString":"2022-05-31T01:34:22.000Z","isValid":true,"sgv":116,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:34:51.145Z","glucose":116,"avgDelta":"2.00","BGI":-0.5,"deviation":"2.50","mealCarbs":35},{"_id":"629571e89bc0370004b42b7a","device":"AndroidAPS-DexcomG6","date":1653961162000,"dateString":"2022-05-31T01:39:22.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:39:52.509Z","glucose":119,"avgDelta":"3.50","BGI":-0.58,"deviation":"4.08","mealCarbs":35},{"_id":"629573159bc0370004b42b7d","device":"AndroidAPS-DexcomG6","date":1653961462000,"dateString":"2022-05-31T01:44:22.000Z","isValid":true,"sgv":117,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:44:53.650Z","glucose":117,"avgDelta":"2.50","BGI":-0.71,"deviation":"3.21","mealCarbs":35},{"_id":"629574429bc0370004b42b80","device":"AndroidAPS-DexcomG6","date":1653961763000,"dateString":"2022-05-31T01:49:23.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:49:54.739Z","glucose":112,"avgDelta":"0.00","BGI":-0.83,"deviation":"0.83","mealCarbs":35},{"_id":"6295756f9bc0370004b42b83","device":"AndroidAPS-DexcomG6","date":1653962062000,"dateString":"2022-05-31T01:54:22.000Z","isValid":true,"sgv":103,"direction":"Flat","type":"sgv","created_at":"2022-05-31T01:54:55.893Z","glucose":103,"avgDelta":"-3.25","BGI":-0.83,"deviation":"-2.42","mealCarbs":35}],"ISFGlucoseData":[{"_id":"62943b53a743da00044e28e2","device":"AndroidAPS-DexcomG6","date":1653881661000,"dateString":"2022-05-30T03:34:21.000Z","isValid":true,"sgv":131,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:34:43.850Z","glucose":131,"avgDelta":"1.50","BGI":-1.62,"deviation":"3.12"},{"_id":"62943c81a743da00044e28e5","device":"AndroidAPS-DexcomG6","date":1653881961000,"dateString":"2022-05-30T03:39:21.000Z","isValid":true,"sgv":128,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:39:45.390Z","glucose":128,"avgDelta":"0.00","BGI":-2.32,"deviation":"2.32"},{"_id":"62943daea743da00044e28e7","device":"AndroidAPS-DexcomG6","date":1653882261000,"dateString":"2022-05-30T03:44:21.000Z","isValid":true,"sgv":126,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:44:46.579Z","glucose":126,"avgDelta":"-1.25","BGI":-2.78,"deviation":"1.53"},{"_id":"62943edca743da00044e28e9","device":"AndroidAPS-DexcomG6","date":1653882561000,"dateString":"2022-05-30T03:49:21.000Z","isValid":true,"sgv":124,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:49:48.266Z","glucose":124,"avgDelta":"-1.75","BGI":-3.07,"deviation":"1.32"},{"_id":"6294400aa743da00044e28eb","device":"AndroidAPS-DexcomG6","date":1653882861000,"dateString":"2022-05-30T03:54:21.000Z","isValid":true,"sgv":121,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:54:50.162Z","glucose":121,"avgDelta":"-2.50","BGI":-3.15,"deviation":"0.65"},{"_id":"6294413fc319020004344fb0","device":"AndroidAPS-DexcomG6","date":1653883161000,"dateString":"2022-05-30T03:59:21.000Z","isValid":true,"sgv":119,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:59:59.474Z","glucose":119,"avgDelta":"-2.25","BGI":-3.15,"deviation":"0.90"},{"_id":"6294426dc319020004344fb4","device":"AndroidAPS-DexcomG6","date":1653883461000,"dateString":"2022-05-30T04:04:21.000Z","isValid":true,"sgv":116,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:05:01.284Z","glucose":116,"avgDelta":"-2.50","BGI":-3.07,"deviation":"0.57"},{"_id":"6294439ac319020004344fb7","device":"AndroidAPS-DexcomG6","date":1653883761000,"dateString":"2022-05-30T04:09:21.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:10:02.526Z","glucose":115,"avgDelta":"-2.25","BGI":-2.95,"deviation":"0.70"},{"_id":"629444afc319020004344fba","device":"AndroidAPS-DexcomG6","date":1653884061000,"dateString":"2022-05-30T04:14:21.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:14:39.235Z","glucose":114,"avgDelta":"-1.75","BGI":-2.82,"deviation":"1.07"},{"_id":"629445f6c319020004344fbe","device":"AndroidAPS-DexcomG6","date":1653884361000,"dateString":"2022-05-30T04:19:21.000Z","isValid":true,"sgv":115,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:20:06.094Z","glucose":115,"avgDelta":"-1.00","BGI":-2.78,"deviation":"1.78"},{"_id":"6294470ac319020004344fc1","device":"AndroidAPS-DexcomG6","date":1653884661000,"dateString":"2022-05-30T04:24:21.000Z","isValid":true,"sgv":114,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:24:42.523Z","glucose":114,"avgDelta":"-0.50","BGI":-2.82,"deviation":"2.32"},{"_id":"62944846c0f24700048ea5e4","device":"AndroidAPS-DexcomG6","date":1653884961000,"dateString":"2022-05-30T04:29:21.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:29:58.536Z","glucose":112,"avgDelta":"-0.75","BGI":-2.99,"deviation":"2.24"},{"_id":"62944973c0f24700048ea5e7","device":"AndroidAPS-DexcomG6","date":1653885261000,"dateString":"2022-05-30T04:34:21.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:34:59.937Z","glucose":112,"avgDelta":"-0.50","BGI":-3.03,"deviation":"2.53"},{"_id":"62944aa1c0f24700048ea5e9","device":"AndroidAPS-DexcomG6","date":1653885561000,"dateString":"2022-05-30T04:39:21.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:40:01.830Z","glucose":112,"avgDelta":"-0.75","BGI":-2.99,"deviation":"2.24"},{"_id":"62944bb6c0f24700048ea5ee","device":"AndroidAPS-DexcomG6","date":1653885861000,"dateString":"2022-05-30T04:44:21.000Z","isValid":true,"sgv":112,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:44:38.372Z","glucose":112,"avgDelta":"-0.50","BGI":-3.03,"deviation":"2.53"},{"_id":"62944ce3c0f24700048ea5f1","device":"AndroidAPS-DexcomG6","date":1653886161000,"dateString":"2022-05-30T04:49:21.000Z","isValid":true,"sgv":110,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:49:39.435Z","glucose":110,"avgDelta":"-0.50","BGI":-3.11,"deviation":"2.61"},{"_id":"62944e11c0f24700048ea5f3","device":"AndroidAPS-DexcomG6","date":1653886461000,"dateString":"2022-05-30T04:54:21.000Z","isValid":true,"sgv":108,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:54:41.186Z","glucose":108,"avgDelta":"-1.00","BGI":-3.07,"deviation":"2.07"},{"_id":"62944f3fc0f24700048ea5f6","device":"AndroidAPS-DexcomG6","date":1653886761000,"dateString":"2022-05-30T04:59:21.000Z","isValid":true,"sgv":105,"direction":"Flat","type":"sgv","created_at":"2022-05-30T04:59:43.617Z","glucose":105,"avgDelta":"-1.75","BGI":-2.95,"deviation":"1.20"},{"_id":"6294506dc0f24700048ea5f8","device":"AndroidAPS-DexcomG6","date":1653887061000,"dateString":"2022-05-30T05:04:21.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:04:45.582Z","glucose":102,"avgDelta":"-2.50","BGI":-2.82,"deviation":"0.32"},{"_id":"629451ab13be4d00048f99d4","device":"AndroidAPS-DexcomG6","date":1653887361000,"dateString":"2022-05-30T05:09:21.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:10:03.174Z","glucose":99,"avgDelta":"-2.75","BGI":-2.66,"deviation":"-0.09"},{"_id":"629452bf13be4d00048f99d7","device":"AndroidAPS-DexcomG6","date":1653887661000,"dateString":"2022-05-30T05:14:21.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:14:39.295Z","glucose":98,"avgDelta":"-2.50","BGI":-2.45,"deviation":"-0.05"},{"_id":"6294540513be4d00048f99d9","device":"AndroidAPS-DexcomG6","date":1653887961000,"dateString":"2022-05-30T05:19:21.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:20:05.981Z","glucose":99,"avgDelta":"-1.50","BGI":-2.2,"deviation":"0.70"},{"_id":"6294551a13be4d00048f99dd","device":"AndroidAPS-DexcomG6","date":1653888261000,"dateString":"2022-05-30T05:24:21.000Z","isValid":true,"sgv":100,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:24:42.074Z","glucose":100,"avgDelta":"-0.50","BGI":-1.99,"deviation":"1.49"},{"_id":"6294564813be4d00048f99e0","device":"AndroidAPS-DexcomG6","date":1653888561000,"dateString":"2022-05-30T05:29:21.000Z","isValid":true,"sgv":101,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:29:44.188Z","glucose":101,"avgDelta":"0.50","BGI":-1.99,"deviation":"2.49"},{"_id":"6294577513be4d00048f99e3","device":"AndroidAPS-DexcomG6","date":1653888862000,"dateString":"2022-05-30T05:34:22.000Z","isValid":true,"sgv":99,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:34:45.547Z","glucose":99,"avgDelta":"0.25","BGI":-1.91,"deviation":"2.16"},{"_id":"629458b0d2cadd0004350d76","device":"AndroidAPS-DexcomG6","date":1653889161000,"dateString":"2022-05-30T05:39:21.000Z","isValid":true,"sgv":98,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:40:00.401Z","glucose":98,"avgDelta":"-0.25","BGI":-1.83,"deviation":"1.58"},{"_id":"629459ddd2cadd0004350d7a","device":"AndroidAPS-DexcomG6","date":1653889461000,"dateString":"2022-05-30T05:44:21.000Z","isValid":true,"sgv":96,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:45:01.449Z","glucose":96,"avgDelta":"-1.00","BGI":-1.66,"deviation":"0.66"},{"_id":"62945b0bd2cadd0004350d7d","device":"AndroidAPS-DexcomG6","date":1653889761000,"dateString":"2022-05-30T05:49:21.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:50:03.127Z","glucose":94,"avgDelta":"-1.75","BGI":-1.49,"deviation":"-0.26"},{"_id":"62948d5d76174b0004fbd225","device":"AndroidAPS-DexcomG6","date":1653902661000,"dateString":"2022-05-30T09:24:21.000Z","isValid":true,"sgv":138,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:24:45.006Z","glucose":138,"avgDelta":"-9.25","BGI":-6.77,"deviation":"-2.48"},{"_id":"62948ebc76174b0004fbd227","device":"AndroidAPS-DexcomG6","date":1653902961000,"dateString":"2022-05-30T09:29:21.000Z","isValid":true,"sgv":131,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:30:36.089Z","glucose":131,"avgDelta":"-8.75","BGI":-5.94,"deviation":"-2.81"},{"_id":"62948fb776174b0004fbd229","device":"AndroidAPS-DexcomG6","date":1653903261000,"dateString":"2022-05-30T09:34:21.000Z","isValid":true,"sgv":125,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:34:47.315Z","glucose":125,"avgDelta":"-7.75","BGI":-5.19,"deviation":"-2.56"},{"_id":"629490e476174b0004fbd22b","device":"AndroidAPS-DexcomG6","date":1653903561000,"dateString":"2022-05-30T09:39:21.000Z","isValid":true,"sgv":119,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:39:48.475Z","glucose":119,"avgDelta":"-6.75","BGI":-4.44,"deviation":"-2.31"},{"_id":"6294920b5989a90004f0c223","device":"AndroidAPS-DexcomG6","date":1653903861000,"dateString":"2022-05-30T09:44:21.000Z","isValid":true,"sgv":112,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:44:43.997Z","glucose":112,"avgDelta":"-6.50","BGI":-3.65,"deviation":"-2.85"},{"_id":"629493395989a90004f0c225","device":"AndroidAPS-DexcomG6","date":1653904161000,"dateString":"2022-05-30T09:49:21.000Z","isValid":true,"sgv":107,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:49:45.193Z","glucose":107,"avgDelta":"-6.00","BGI":-2.99,"deviation":"-3.01"},{"_id":"629494665989a90004f0c228","device":"AndroidAPS-DexcomG6","date":1653904461000,"dateString":"2022-05-30T09:54:21.000Z","isValid":true,"sgv":102,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T09:54:46.582Z","glucose":102,"avgDelta":"-5.75","BGI":-2.32,"deviation":"-3.43"},{"_id":"629495ac5989a90004f0c22a","device":"AndroidAPS-DexcomG6","date":1653904761000,"dateString":"2022-05-30T09:59:21.000Z","isValid":true,"sgv":99,"direction":"FortyFiveDown","type":"sgv","created_at":"2022-05-30T10:00:12.873Z","glucose":99,"avgDelta":"-5.00","BGI":-1.66,"deviation":"-3.34"},{"_id":"6294d281dac1e20004fde596","device":"AndroidAPS-DexcomG6","date":1653920361000,"dateString":"2022-05-30T14:19:21.000Z","isValid":true,"sgv":97,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:19:45.303Z","glucose":97,"avgDelta":"-3.25","BGI":-5.85,"deviation":"2.60"},{"_id":"6294d3aedac1e20004fde598","device":"AndroidAPS-DexcomG6","date":1653920661000,"dateString":"2022-05-30T14:24:21.000Z","isValid":true,"sgv":93,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:24:46.261Z","glucose":93,"avgDelta":"-3.25","BGI":-4.98,"deviation":"1.73"},{"_id":"6294d4dbdac1e20004fde59a","device":"AndroidAPS-DexcomG6","date":1653920961000,"dateString":"2022-05-30T14:29:21.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:29:47.439Z","glucose":89,"avgDelta":"-3.50","BGI":-4.23,"deviation":"0.73"},{"_id":"6294d6005f047100042886ba","device":"AndroidAPS-DexcomG6","date":1653921261000,"dateString":"2022-05-30T14:34:21.000Z","isValid":true,"sgv":87,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:34:40.716Z","glucose":87,"avgDelta":"-3.25","BGI":-3.53,"deviation":"0.28"},{"_id":"6294d72e5f047100042886bc","device":"AndroidAPS-DexcomG6","date":1653921561000,"dateString":"2022-05-30T14:39:21.000Z","isValid":true,"sgv":85,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:39:42.170Z","glucose":85,"avgDelta":"-3.00","BGI":-2.82,"deviation":"-0.18"},{"_id":"6294d85b5f047100042886be","device":"AndroidAPS-DexcomG6","date":1653921862000,"dateString":"2022-05-30T14:44:22.000Z","isValid":true,"sgv":84,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:44:43.154Z","glucose":84,"avgDelta":"-2.25","BGI":-2.2,"deviation":"-0.05"},{"_id":"6294da065f047100042886c0","device":"AndroidAPS-DexcomG6","date":1653922161000,"dateString":"2022-05-30T14:49:21.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:51:50.006Z","glucose":82,"avgDelta":"-1.75","BGI":-1.62,"deviation":"-0.13"}],"basalGlucoseData":[{"_id":"62942af6ee9e6e00046d7fe8","device":"AndroidAPS-DexcomG6","date":1653877461000,"dateString":"2022-05-30T02:24:21.000Z","isValid":true,"sgv":76,"direction":"Flat","type":"sgv","created_at":"2022-05-30T02:24:54.787Z","glucose":76,"avgDelta":"2.25","BGI":6.52,"deviation":"-4.27"},{"_id":"62942c24ee9e6e00046d7fea","device":"AndroidAPS-DexcomG6","date":1653877761000,"dateString":"2022-05-30T02:29:21.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","created_at":"2022-05-30T02:29:56.392Z","glucose":78,"avgDelta":"1.75","BGI":6.56,"deviation":"-4.81"},{"_id":"62942d51ee9e6e00046d7fec","device":"AndroidAPS-DexcomG6","date":1653878061000,"dateString":"2022-05-30T02:34:21.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","created_at":"2022-05-30T02:34:57.498Z","glucose":82,"avgDelta":"2.00","BGI":6.56,"deviation":"-4.56"},{"_id":"62942e7fee9e6e00046d7fef","device":"AndroidAPS-DexcomG6","date":1653878361000,"dateString":"2022-05-30T02:39:21.000Z","isValid":true,"sgv":86,"direction":"Flat","type":"sgv","created_at":"2022-05-30T02:39:59.070Z","glucose":86,"avgDelta":"2.75","BGI":6.56,"deviation":"-3.81"},{"_id":"62942facee9e6e00046d7ff2","device":"AndroidAPS-DexcomG6","date":1653878661000,"dateString":"2022-05-30T02:44:21.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","created_at":"2022-05-30T02:45:00.369Z","glucose":91,"avgDelta":"3.75","BGI":6.52,"deviation":"-2.77"},{"_id":"629430c1ee9e6e00046d7ff7","device":"AndroidAPS-DexcomG6","date":1653878961000,"dateString":"2022-05-30T02:49:21.000Z","isValid":true,"sgv":96,"direction":"Flat","type":"sgv","created_at":"2022-05-30T02:49:37.117Z","glucose":96,"avgDelta":"4.50","BGI":6.27,"deviation":"-1.77"},{"_id":"629431f9a365640004d83cb9","device":"AndroidAPS-DexcomG6","date":1653879261000,"dateString":"2022-05-30T02:54:21.000Z","isValid":true,"sgv":102,"direction":"Flat","type":"sgv","created_at":"2022-05-30T02:54:49.321Z","glucose":102,"avgDelta":"5.00","BGI":5.77,"deviation":"-0.77"},{"_id":"62943327a365640004d83cbe","device":"AndroidAPS-DexcomG6","date":1653879561000,"dateString":"2022-05-30T02:59:21.000Z","isValid":true,"sgv":108,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T02:59:51.442Z","glucose":108,"avgDelta":"5.50","BGI":5.11,"deviation":"0.39"},{"_id":"62943454a365640004d83cc0","device":"AndroidAPS-DexcomG6","date":1653879861000,"dateString":"2022-05-30T03:04:21.000Z","isValid":true,"sgv":114,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T03:04:52.790Z","glucose":114,"avgDelta":"5.75","BGI":4.23,"deviation":"1.52"},{"_id":"62943582a365640004d83cc3","device":"AndroidAPS-DexcomG6","date":1653880161000,"dateString":"2022-05-30T03:09:21.000Z","isValid":true,"sgv":119,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T03:09:54.494Z","glucose":119,"avgDelta":"5.75","BGI":3.32,"deviation":"2.43"},{"_id":"629436b0a365640004d83cc5","device":"AndroidAPS-DexcomG6","date":1653880461000,"dateString":"2022-05-30T03:14:21.000Z","isValid":true,"sgv":125,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T03:14:56.027Z","glucose":125,"avgDelta":"5.75","BGI":2.41,"deviation":"3.34"},{"_id":"629437dfa365640004d83cc9","device":"AndroidAPS-DexcomG6","date":1653880761000,"dateString":"2022-05-30T03:19:21.000Z","isValid":true,"sgv":128,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T03:19:59.695Z","glucose":128,"avgDelta":"5.00","BGI":1.37,"deviation":"3.63"},{"_id":"629438f8a743da00044e28dc","device":"AndroidAPS-DexcomG6","date":1653881062000,"dateString":"2022-05-30T03:24:22.000Z","isValid":true,"sgv":131,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:24:40.834Z","glucose":131,"avgDelta":"4.25","BGI":0.17,"deviation":"4.08"},{"_id":"62943a26a743da00044e28de","device":"AndroidAPS-DexcomG6","date":1653881361000,"dateString":"2022-05-30T03:29:21.000Z","isValid":true,"sgv":131,"direction":"Flat","type":"sgv","created_at":"2022-05-30T03:29:42.328Z","glucose":131,"avgDelta":"3.00","BGI":-0.75,"deviation":"3.75"},{"_id":"62945c38d2cadd0004350d80","device":"AndroidAPS-DexcomG6","date":1653890061000,"dateString":"2022-05-30T05:54:21.000Z","isValid":true,"sgv":92,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:55:04.735Z","glucose":92,"avgDelta":"-1.75","BGI":-1.25,"deviation":"-0.50"},{"_id":"62945d4dd2cadd0004350d83","device":"AndroidAPS-DexcomG6","date":1653890361000,"dateString":"2022-05-30T05:59:21.000Z","isValid":true,"sgv":90,"direction":"Flat","type":"sgv","created_at":"2022-05-30T05:59:41.863Z","glucose":90,"avgDelta":"-2.00","BGI":-1.08,"deviation":"-0.92"},{"_id":"62945e7cd2cadd0004350d86","device":"AndroidAPS-DexcomG6","date":1653890661000,"dateString":"2022-05-30T06:04:21.000Z","isValid":true,"sgv":89,"direction":"Flat","type":"sgv","created_at":"2022-05-30T06:04:44.141Z","glucose":89,"avgDelta":"-1.75","BGI":-0.83,"deviation":"-0.92"},{"_id":"629496c15989a90004f0c22d","device":"AndroidAPS-DexcomG6","date":1653905061000,"dateString":"2022-05-30T10:04:21.000Z","isValid":true,"sgv":94,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:04:49.010Z","glucose":94,"avgDelta":"-4.50","BGI":-1.12,"deviation":"-3.38"},{"_id":"629497ee5989a90004f0c230","device":"AndroidAPS-DexcomG6","date":1653905362000,"dateString":"2022-05-30T10:09:22.000Z","isValid":true,"sgv":91,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:09:50.202Z","glucose":91,"avgDelta":"-4.00","BGI":-0.62,"deviation":"-3.38"},{"_id":"6294991b5989a90004f0c233","device":"AndroidAPS-DexcomG6","date":1653905661000,"dateString":"2022-05-30T10:14:21.000Z","isValid":true,"sgv":87,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:14:51.432Z","glucose":87,"avgDelta":"-3.75","BGI":-0.21,"deviation":"-3.54"},{"_id":"62949a4ac2e464000413b79a","device":"AndroidAPS-DexcomG6","date":1653905961000,"dateString":"2022-05-30T10:19:21.000Z","isValid":true,"sgv":84,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:19:54.421Z","glucose":84,"avgDelta":"-3.75","BGI":0.17,"deviation":"-3.92"},{"_id":"62949b77c2e464000413b79d","device":"AndroidAPS-DexcomG6","date":1653906262000,"dateString":"2022-05-30T10:24:22.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:24:55.547Z","glucose":82,"avgDelta":"-3.00","BGI":0.46,"deviation":"-3.46"},{"_id":"62949ca4c2e464000413b79f","device":"AndroidAPS-DexcomG6","date":1653906561000,"dateString":"2022-05-30T10:29:21.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:29:56.711Z","glucose":80,"avgDelta":"-2.75","BGI":0.79,"deviation":"-3.54"},{"_id":"62949debc2e464000413b7a1","device":"AndroidAPS-DexcomG6","date":1653906861000,"dateString":"2022-05-30T10:34:21.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:35:23.163Z","glucose":79,"avgDelta":"-2.00","BGI":1,"deviation":"-3.00"},{"_id":"62949f00c2e464000413b7a3","device":"AndroidAPS-DexcomG6","date":1653907162000,"dateString":"2022-05-30T10:39:22.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","created_at":"2022-05-30T10:40:00.055Z","glucose":78,"avgDelta":"-1.50","BGI":1.29,"deviation":"-2.79"},{"_id":"6294db4c5f047100042886c3","device":"AndroidAPS-DexcomG6","date":1653922461000,"dateString":"2022-05-30T14:54:21.000Z","isValid":true,"sgv":81,"direction":"Flat","type":"sgv","created_at":"2022-05-30T14:57:16.389Z","glucose":81,"avgDelta":"-1.50","BGI":-1,"deviation":"-0.50"},{"_id":"6294dcde5f047100042886c5","device":"AndroidAPS-DexcomG6","date":1653922761000,"dateString":"2022-05-30T14:59:21.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:03:58.124Z","glucose":79,"avgDelta":"-1.50","BGI":-0.46,"deviation":"-1.04"},{"_id":"6294ddc7706f120004b7d152","device":"AndroidAPS-DexcomG6","date":1653923061000,"dateString":"2022-05-30T15:04:21.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:07:51.780Z","glucose":79,"avgDelta":"-1.25","BGI":0.04,"deviation":"-1.29"},{"_id":"6294df40706f120004b7d154","device":"AndroidAPS-DexcomG6","date":1653923361000,"dateString":"2022-05-30T15:09:21.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:14:08.395Z","glucose":79,"avgDelta":"-0.75","BGI":0.5,"deviation":"-1.25"},{"_id":"6294dfbd706f120004b7d156","device":"AndroidAPS-DexcomG6","date":1653923662000,"dateString":"2022-05-30T15:14:22.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:16:13.728Z","glucose":80,"avgDelta":"-0.25","BGI":0.95,"deviation":"-1.20"},{"_id":"6294e09f706f120004b7d158","device":"AndroidAPS-DexcomG6","date":1653923961000,"dateString":"2022-05-30T15:19:21.000Z","isValid":true,"sgv":80,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:19:59.752Z","glucose":80,"avgDelta":"0.25","BGI":1.33,"deviation":"-1.08"},{"_id":"6294e1cd706f120004b7d15a","device":"AndroidAPS-DexcomG6","date":1653924262000,"dateString":"2022-05-30T15:24:22.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:25:01.236Z","glucose":79,"avgDelta":"0.00","BGI":1.66,"deviation":"-1.66"},{"_id":"6294e2fa706f120004b7d15c","device":"AndroidAPS-DexcomG6","date":1653924562000,"dateString":"2022-05-30T15:29:22.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:30:02.194Z","glucose":78,"avgDelta":"-0.25","BGI":2.08,"deviation":"-2.33"},{"_id":"6294e427706f120004b7d15f","device":"AndroidAPS-DexcomG6","date":1653924862000,"dateString":"2022-05-30T15:34:22.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:35:03.426Z","glucose":77,"avgDelta":"-0.75","BGI":2.41,"deviation":"-3.16"},{"_id":"6294e554706f120004b7d161","device":"AndroidAPS-DexcomG6","date":1653925162000,"dateString":"2022-05-30T15:39:22.000Z","isValid":true,"sgv":77,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:40:04.657Z","glucose":77,"avgDelta":"-0.75","BGI":2.7,"deviation":"-3.45"},{"_id":"6294e66eb23f340004e841cf","device":"AndroidAPS-DexcomG6","date":1653925462000,"dateString":"2022-05-30T15:44:22.000Z","isValid":true,"sgv":78,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:44:46.677Z","glucose":78,"avgDelta":"-0.25","BGI":2.99,"deviation":"-3.24"},{"_id":"6294e79bb23f340004e841d1","device":"AndroidAPS-DexcomG6","date":1653925761000,"dateString":"2022-05-30T15:49:21.000Z","isValid":true,"sgv":79,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:49:47.886Z","glucose":79,"avgDelta":"0.25","BGI":3.24,"deviation":"-2.99"},{"_id":"6294e8c9b23f340004e841d3","device":"AndroidAPS-DexcomG6","date":1653926062000,"dateString":"2022-05-30T15:54:22.000Z","isValid":true,"sgv":81,"direction":"Flat","type":"sgv","created_at":"2022-05-30T15:54:49.400Z","glucose":81,"avgDelta":"1.00","BGI":3.4,"deviation":"-2.40"},{"_id":"6294ea10b23f340004e841d5","device":"AndroidAPS-DexcomG6","date":1653926362000,"dateString":"2022-05-30T15:59:22.000Z","isValid":true,"sgv":82,"direction":"Flat","type":"sgv","created_at":"2022-05-30T16:00:16.597Z","glucose":82,"avgDelta":"1.25","BGI":3.69,"deviation":"-2.44"},{"_id":"629503cb409703000484d1ba","device":"AndroidAPS-DexcomG6","date":1653932962000,"dateString":"2022-05-30T17:49:22.000Z","isValid":true,"sgv":133,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:50:03.997Z","glucose":133,"avgDelta":"2.50","BGI":1.87,"deviation":"0.63"},{"_id":"629504e1409703000484d1be","device":"AndroidAPS-DexcomG6","date":1653933262000,"dateString":"2022-05-30T17:54:22.000Z","isValid":true,"sgv":135,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:54:41.141Z","glucose":135,"avgDelta":"2.50","BGI":1.74,"deviation":"0.76"},{"_id":"6295060f409703000484d1c1","device":"AndroidAPS-DexcomG6","date":1653933562000,"dateString":"2022-05-30T17:59:22.000Z","isValid":true,"sgv":136,"direction":"Flat","type":"sgv","created_at":"2022-05-30T17:59:43.089Z","glucose":136,"avgDelta":"2.25","BGI":1.62,"deviation":"0.63"},{"_id":"6295073d409703000484d1c4","device":"AndroidAPS-DexcomG6","date":1653933862000,"dateString":"2022-05-30T18:04:22.000Z","isValid":true,"sgv":137,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:04:45.808Z","glucose":137,"avgDelta":"1.75","BGI":1.58,"deviation":"0.17"},{"_id":"6295086b409703000484d1c6","device":"AndroidAPS-DexcomG6","date":1653934162000,"dateString":"2022-05-30T18:09:22.000Z","isValid":true,"sgv":140,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:09:47.806Z","glucose":140,"avgDelta":"1.75","BGI":1.49,"deviation":"0.26"},{"_id":"6295099a409703000484d1c9","device":"AndroidAPS-DexcomG6","date":1653934461000,"dateString":"2022-05-30T18:14:21.000Z","isValid":true,"sgv":144,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:14:50.027Z","glucose":144,"avgDelta":"2.25","BGI":1.45,"deviation":"0.80"},{"_id":"62950acb0f8c2e000428308d","device":"AndroidAPS-DexcomG6","date":1653934761000,"dateString":"2022-05-30T18:19:21.000Z","isValid":true,"sgv":147,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:19:55.662Z","glucose":147,"avgDelta":"2.75","BGI":1.37,"deviation":"1.38"},{"_id":"62950bf90f8c2e0004283091","device":"AndroidAPS-DexcomG6","date":1653935062000,"dateString":"2022-05-30T18:24:22.000Z","isValid":true,"sgv":150,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:24:57.761Z","glucose":150,"avgDelta":"3.25","BGI":1.16,"deviation":"2.09"},{"_id":"62950d280f8c2e0004283094","device":"AndroidAPS-DexcomG6","date":1653935363000,"dateString":"2022-05-30T18:29:23.000Z","isValid":true,"sgv":156,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:30:00.224Z","glucose":156,"avgDelta":"4.00","BGI":0.91,"deviation":"3.09"},{"_id":"62950e3d0f8c2e0004283099","device":"AndroidAPS-DexcomG6","date":1653935663000,"dateString":"2022-05-30T18:34:23.000Z","isValid":true,"sgv":164,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T18:34:37.460Z","glucose":164,"avgDelta":"5.00","BGI":0.58,"deviation":"4.42"},{"_id":"62950f6b0f8c2e000428309c","device":"AndroidAPS-DexcomG6","date":1653935962000,"dateString":"2022-05-30T18:39:22.000Z","isValid":true,"sgv":172,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T18:39:39.460Z","glucose":172,"avgDelta":"6.25","BGI":0.12,"deviation":"6.13","uamAbsorption":"start"},{"_id":"629510990f8c2e000428309f","device":"AndroidAPS-DexcomG6","date":1653936262000,"dateString":"2022-05-30T18:44:22.000Z","isValid":true,"sgv":175,"direction":"FortyFiveUp","type":"sgv","created_at":"2022-05-30T18:44:41.570Z","glucose":175,"avgDelta":"6.25","BGI":-1.04,"deviation":"7.29"},{"_id":"629511c70f8c2e00042830a2","device":"AndroidAPS-DexcomG6","date":1653936563000,"dateString":"2022-05-30T18:49:23.000Z","isValid":true,"sgv":177,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:49:43.497Z","glucose":177,"avgDelta":"5.25","BGI":-2.08,"deviation":"7.33"},{"_id":"629512fcf63c010004ea5cf7","device":"AndroidAPS-DexcomG6","date":1653936863000,"dateString":"2022-05-30T18:54:23.000Z","isValid":true,"sgv":179,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:54:52.395Z","glucose":179,"avgDelta":"3.75","BGI":-2.86,"deviation":"6.61"},{"_id":"6295142af63c010004ea5cfa","device":"AndroidAPS-DexcomG6","date":1653937162000,"dateString":"2022-05-30T18:59:22.000Z","isValid":true,"sgv":180,"direction":"Flat","type":"sgv","created_at":"2022-05-30T18:59:54.428Z","glucose":180,"avgDelta":"2.00","BGI":-3.45,"deviation":"5.45"},{"_id":"62951558f63c010004ea5cfc","device":"AndroidAPS-DexcomG6","date":1653937462000,"dateString":"2022-05-30T19:04:22.000Z","isValid":true,"sgv":181,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:04:56.708Z","glucose":181,"avgDelta":"1.50","BGI":-3.78,"deviation":"5.28"},{"_id":"62951683f63c010004ea5cff","device":"AndroidAPS-DexcomG6","date":1653937762000,"dateString":"2022-05-30T19:09:22.000Z","isValid":true,"sgv":181,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:09:55.010Z","glucose":181,"avgDelta":"1.00","BGI":-4.03,"deviation":"5.03"},{"_id":"629517b0f63c010004ea5d01","device":"AndroidAPS-DexcomG6","date":1653938062000,"dateString":"2022-05-30T19:14:22.000Z","isValid":true,"sgv":182,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:14:56.712Z","glucose":182,"avgDelta":"0.75","BGI":-4.11,"deviation":"4.86"},{"_id":"629518def63c010004ea5d04","device":"AndroidAPS-DexcomG6","date":1653938362000,"dateString":"2022-05-30T19:19:22.000Z","isValid":true,"sgv":183,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:19:58.457Z","glucose":183,"avgDelta":"0.75","BGI":-4.11,"deviation":"4.86"},{"_id":"62951a0ef63c010004ea5d08","device":"AndroidAPS-DexcomG6","date":1653938661000,"dateString":"2022-05-30T19:24:21.000Z","isValid":true,"sgv":184,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:25:02.070Z","glucose":184,"avgDelta":"0.75","BGI":-4.23,"deviation":"4.98"},{"_id":"62951b23f63c010004ea5d0b","device":"AndroidAPS-DexcomG6","date":1653938962000,"dateString":"2022-05-30T19:29:22.000Z","isValid":true,"sgv":185,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:29:39.093Z","glucose":185,"avgDelta":"1.00","BGI":-4.32,"deviation":"5.32"},{"_id":"62951c51f63c010004ea5d0f","device":"AndroidAPS-DexcomG6","date":1653939262000,"dateString":"2022-05-30T19:34:22.000Z","isValid":true,"sgv":186,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:34:41.514Z","glucose":186,"avgDelta":"1.00","BGI":-4.48,"deviation":"5.48"},{"_id":"62951d7ff63c010004ea5d12","device":"AndroidAPS-DexcomG6","date":1653939561000,"dateString":"2022-05-30T19:39:21.000Z","isValid":true,"sgv":187,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:39:43.397Z","glucose":187,"avgDelta":"1.00","BGI":-4.57,"deviation":"5.57"},{"_id":"62951eddf63c010004ea5d16","device":"AndroidAPS-DexcomG6","date":1653939861000,"dateString":"2022-05-30T19:44:21.000Z","isValid":true,"sgv":186,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:45:33.306Z","glucose":186,"avgDelta":"0.50","BGI":-4.73,"deviation":"5.23"},{"_id":"62951fd8f63c010004ea5d1a","device":"AndroidAPS-DexcomG6","date":1653940161000,"dateString":"2022-05-30T19:49:21.000Z","isValid":true,"sgv":185,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:49:44.530Z","glucose":185,"avgDelta":"0.00","BGI":-4.9,"deviation":"4.90"},{"_id":"6295211ef63c010004ea5d1c","device":"AndroidAPS-DexcomG6","date":1653940461000,"dateString":"2022-05-30T19:54:21.000Z","isValid":true,"sgv":184,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:55:10.510Z","glucose":184,"avgDelta":"-0.50","BGI":-4.98,"deviation":"4.48"},{"_id":"62952232f63c010004ea5d1f","device":"AndroidAPS-DexcomG6","date":1653940762000,"dateString":"2022-05-30T19:59:22.000Z","isValid":true,"sgv":183,"direction":"Flat","type":"sgv","created_at":"2022-05-30T19:59:46.536Z","glucose":183,"avgDelta":"-1.00","BGI":-4.94,"deviation":"3.94"},{"_id":"62952379f63c010004ea5d22","device":"AndroidAPS-DexcomG6","date":1653941062000,"dateString":"2022-05-30T20:04:22.000Z","isValid":true,"sgv":182,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:05:13.099Z","glucose":182,"avgDelta":"-1.00","BGI":-4.77,"deviation":"3.77"},{"_id":"629524a6f63c010004ea5d26","device":"AndroidAPS-DexcomG6","date":1653941361000,"dateString":"2022-05-30T20:09:21.000Z","isValid":true,"sgv":181,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:10:14.057Z","glucose":181,"avgDelta":"-1.00","BGI":-4.65,"deviation":"3.65"},{"_id":"629525baf63c010004ea5d29","device":"AndroidAPS-DexcomG6","date":1653941662000,"dateString":"2022-05-30T20:14:22.000Z","isValid":true,"sgv":180,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:14:50.164Z","glucose":180,"avgDelta":"-1.00","BGI":-4.44,"deviation":"3.44"},{"_id":"629526eee3aedd00046f3855","device":"AndroidAPS-DexcomG6","date":1653941961000,"dateString":"2022-05-30T20:19:21.000Z","isValid":true,"sgv":179,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:19:58.496Z","glucose":179,"avgDelta":"-1.00","BGI":-4.36,"deviation":"3.36"},{"_id":"6295284ee3aedd00046f3858","device":"AndroidAPS-DexcomG6","date":1653942262000,"dateString":"2022-05-30T20:24:22.000Z","isValid":true,"sgv":178,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:25:50.333Z","glucose":178,"avgDelta":"-1.00","BGI":-4.32,"deviation":"3.32"},{"_id":"62952949e3aedd00046f385c","device":"AndroidAPS-DexcomG6","date":1653942563000,"dateString":"2022-05-30T20:29:23.000Z","isValid":true,"sgv":176,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:30:01.193Z","glucose":176,"avgDelta":"-1.25","BGI":-4.28,"deviation":"3.03"},{"_id":"62952a5de3aedd00046f385f","device":"AndroidAPS-DexcomG6","date":1653942863000,"dateString":"2022-05-30T20:34:23.000Z","isValid":true,"sgv":175,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:34:37.302Z","glucose":175,"avgDelta":"-1.25","BGI":-4.28,"deviation":"3.03"},{"_id":"62952b89e3aedd00046f3866","device":"AndroidAPS-DexcomG6","date":1653943162000,"dateString":"2022-05-30T20:39:22.000Z","isValid":true,"sgv":174,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:39:37.778Z","glucose":174,"avgDelta":"-1.25","BGI":-4.23,"deviation":"2.98"},{"_id":"62952cb7e3aedd00046f386a","device":"AndroidAPS-DexcomG6","date":1653943462000,"dateString":"2022-05-30T20:44:22.000Z","isValid":true,"sgv":173,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:44:39.868Z","glucose":173,"avgDelta":"-1.25","BGI":-4.19,"deviation":"2.94"},{"_id":"62952de5e3aedd00046f386d","device":"AndroidAPS-DexcomG6","date":1653943762000,"dateString":"2022-05-30T20:49:22.000Z","isValid":true,"sgv":171,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:49:41.125Z","glucose":171,"avgDelta":"-1.25","BGI":-4.28,"deviation":"3.03"},{"_id":"62952f1be3aedd00046f3871","device":"AndroidAPS-DexcomG6","date":1653944062000,"dateString":"2022-05-30T20:54:22.000Z","isValid":true,"sgv":169,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:54:51.953Z","glucose":169,"avgDelta":"-1.50","BGI":-4.32,"deviation":"2.82"},{"_id":"62953049e3aedd00046f3874","device":"AndroidAPS-DexcomG6","date":1653944362000,"dateString":"2022-05-30T20:59:22.000Z","isValid":true,"sgv":166,"direction":"Flat","type":"sgv","created_at":"2022-05-30T20:59:53.874Z","glucose":166,"avgDelta":"-2.00","BGI":-4.32,"deviation":"2.32"}]} diff --git a/app/src/test/res/autotune/test4/autotune.2022-06-25-195325.log b/app/src/test/res/autotune/test4/autotune.2022-06-25-195325.log new file mode 100644 index 0000000000..02c7015e02 --- /dev/null +++ b/app/src/test/res/autotune/test4/autotune.2022-06-25-195325.log @@ -0,0 +1,454 @@ +Compressing old json and log files to save space... +gzip: ns-*.json: No such file or directory +gzip: autotune*.json: No such file or directory +Autotune disk usage: +8.0K . +Overall disk used/avail: +Filesystem Size Used Avail Use% Mounted on +rootfs 930G 432G 499G 47% / +Grabbing NIGHTSCOUT treatments.json and entries/sgv.json for date range... +Query: https://xxxxxxxxxxxx.com entries/sgv.json find%5Bdate%5D%5B%24gte%5D=1653444000000&find%5Bdate%5D%5B%24lte%5D=1653530400000&count=1500 +-rw-r--r-- 1 titi titi 82011 Jun 25 19:53 ns-entries.2022-05-25.json +Query: https://xxxxxxxxxxxx.com treatments.json find%5Bcreated_at%5D%5B%24gte%5D=2022-05-24T06:00+02:00&find%5Bcreated_at%5D%5B%24lte%5D=2022-05-26T18:00+02:00 +-rw-r--r-- 1 titi titi 216847 Jun 25 19:53 ns-treatments.2022-05-25.json + +Log information from 2022-05-25 to 2022-05-29 removed for unit test + +Query: https://xxxxxxxxxxxx.com entries/sgv.json find%5Bdate%5D%5B%24gte%5D=1653876000000&find%5Bdate%5D%5B%24lte%5D=1653962400000&count=1500 +-rw-r--r-- 1 titi titi 75423 Jun 25 19:53 ns-entries.2022-05-30.json +Query: https://xxxxxxxxxxxx.com treatments.json find%5Bcreated_at%5D%5B%24gte%5D=2022-05-29T06:00+02:00&find%5Bcreated_at%5D%5B%24lte%5D=2022-05-31T18:00+02:00 +-rw-r--r-- 1 titi titi 229319 Jun 25 19:53 ns-treatments.2022-05-30.json +oref0-autotune-prep ns-treatments.2022-05-30.json profile.json ns-entries.2022-05-30.json profile.pump.json > autotune.2022-05-30.json +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 6.5 IOB: -1.341 Activity: -0.0157 at 04:24:21 dev: -4.27 avgDelta: 2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 6.6 IOB: -1.362 Activity: -0.0158 at 04:29:21 dev: -4.81 avgDelta: 1.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 6.6 IOB: -1.333 Activity: -0.0158 at 04:34:21 dev: -4.56 avgDelta: 2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 6.6 IOB: -1.304 Activity: -0.0158 at 04:39:21 dev: -3.81 avgDelta: 2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 6.5 IOB: -1.275 Activity: -0.0157 at 04:44:21 dev: -2.77 avgDelta: 3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 6.3 IOB: -0.888 Activity: -0.0151 at 04:49:21 dev: -1.77 avgDelta: 4.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 5.8 IOB: -0.715 Activity: -0.0139 at 04:54:21 dev: -0.77 avgDelta: 5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.5 BGI: 5.1 IOB: -0.279 Activity: -0.0123 at 04:59:21 dev: 0.39 avgDelta: 5.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 4.2 IOB: -0.073 Activity: -0.0102 at 05:04:21 dev: 1.52 avgDelta: 5.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 3.3 IOB: 0.233 Activity: -0.008 at 05:09:21 dev: 2.43 avgDelta: 5.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 2.4 IOB: 0.367 Activity: -0.0058 at 05:14:21 dev: 3.34 avgDelta: 5.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 1.4 IOB: 1.021 Activity: -0.0033 at 05:19:21 dev: 3.63 avgDelta: 5.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: 0.2 IOB: 0.98 Activity: -0.0004 at 05:24:22 dev: 4.08 avgDelta: 4.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.8 IOB: 0.926 Activity: 0.0018 at 05:29:21 dev: 3.75 avgDelta: 3.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -1.6 IOB: 1.122 Activity: 0.0039 at 05:34:21 dev: 3.12 avgDelta: 1.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.3 IOB: 1.048 Activity: 0.0056 at 05:39:21 dev: 2.32 avgDelta: 0.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -2.8 IOB: 0.917 Activity: 0.0067 at 05:44:21 dev: 1.53 avgDelta: -1.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.1 IOB: 0.832 Activity: 0.0074 at 05:49:21 dev: 1.32 avgDelta: -1.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.1 IOB: 0.695 Activity: 0.0076 at 05:54:21 dev: 0.65 avgDelta: -2.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -3.1 IOB: 0.606 Activity: 0.0076 at 05:59:21 dev: 0.90 avgDelta: -2.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.1 IOB: 0.518 Activity: 0.0074 at 06:04:21 dev: 0.57 avgDelta: -2.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.0 IOB: 0.482 Activity: 0.0071 at 06:09:21 dev: 0.70 avgDelta: -2.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -2.8 IOB: 0.447 Activity: 0.0068 at 06:14:21 dev: 1.07 avgDelta: -1.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -2.8 IOB: 0.584 Activity: 0.0067 at 06:19:21 dev: 1.78 avgDelta: -1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -2.8 IOB: 0.67 Activity: 0.0068 at 06:24:21 dev: 2.32 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.0 IOB: 0.685 Activity: 0.0072 at 06:29:21 dev: 2.24 avgDelta: -0.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.0 IOB: 0.649 Activity: 0.0073 at 06:34:21 dev: 2.53 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.0 IOB: 0.563 Activity: 0.0072 at 06:39:21 dev: 2.24 avgDelta: -0.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.0 IOB: 0.737 Activity: 0.0073 at 06:44:21 dev: 2.53 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.1 IOB: 0.65 Activity: 0.0075 at 06:49:21 dev: 2.61 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.1 IOB: 0.562 Activity: 0.0074 at 06:54:21 dev: 2.07 avgDelta: -1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: -3.0 IOB: 0.476 Activity: 0.0071 at 06:59:21 dev: 1.20 avgDelta: -1.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.8 IOB: 0.441 Activity: 0.0068 at 07:04:21 dev: 0.32 avgDelta: -2.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.7 IOB: 0.358 Activity: 0.0064 at 07:09:21 dev: -0.09 avgDelta: -2.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.5 IOB: 0.277 Activity: 0.0059 at 07:14:21 dev: -0.05 avgDelta: -2.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.2 IOB: 0.199 Activity: 0.0053 at 07:19:21 dev: 0.70 avgDelta: -1.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.0 IOB: 0.274 Activity: 0.0048 at 07:24:21 dev: 1.49 avgDelta: -0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.0 IOB: 0.35 Activity: 0.0048 at 07:29:21 dev: 2.49 avgDelta: 0.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.9 IOB: 0.327 Activity: 0.0046 at 07:34:22 dev: 2.16 avgDelta: 0.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.8 IOB: 0.254 Activity: 0.0044 at 07:39:21 dev: 1.58 avgDelta: -0.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.7 IOB: 0.183 Activity: 0.004 at 07:44:21 dev: 0.66 avgDelta: -1.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.5 IOB: 0.114 Activity: 0.0036 at 07:49:21 dev: -0.26 avgDelta: -1.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.3 IOB: 0.048 Activity: 0.003 at 07:54:21 dev: -0.50 avgDelta: -1.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.1 IOB: 0.034 Activity: 0.0026 at 07:59:21 dev: -0.92 avgDelta: -2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.1 BGI: -0.8 IOB: -0.028 Activity: 0.002 at 08:04:21 dev: -0.92 avgDelta: -1.75 basal +CRInitialIOB: -0.087 CRInitialBG: 92 CRInitialCarbTime: 2022-05-30T06:09:21.000Z +start carb absorption +0 mealCOB: 74.5 mealCarbs: 75 basalBGI: 6.1 BGI: -0.6 IOB: -0.087 Activity: 0.0015 at 08:09:21 dev: 0.12 avgDelta: -0.50 csf +0 mealCOB: 74.0 mealCarbs: 75 basalBGI: 6.1 BGI: -0.4 IOB: -0.093 Activity: 0.001 at 08:14:21 dev: 2.67 avgDelta: 2.25 csf +0 mealCOB: 73.5 mealCarbs: 75 basalBGI: 6.1 BGI: -0.2 IOB: -0.147 Activity: 0.0005 at 08:19:21 dev: 7.21 avgDelta: 7.00 csf +1 mealCOB: 72.1 mealCarbs: 75 basalBGI: 6.1 BGI: -12.7 IOB: 16.05 Activity: 0.0305 at 08:24:21 dev: 24.66 avgDelta: 12.00 csf +1 mealCOB: 69.5 mealCarbs: 75 basalBGI: 6.1 BGI: -25.4 IOB: 15.767 Activity: 0.0611 at 08:29:21 dev: 41.61 avgDelta: 16.25 csf +1 mealCOB: 66.3 mealCarbs: 75 basalBGI: 6.1 BGI: -35.2 IOB: 15.3 Activity: 0.0848 at 08:34:21 dev: 53.20 avgDelta: 18.00 csf +1 mealCOB: 62.7 mealCarbs: 75 basalBGI: 6.1 BGI: -42.7 IOB: 14.779 Activity: 0.1028 at 08:39:21 dev: 59.42 avgDelta: 16.75 csf +1 mealCOB: 59.0 mealCarbs: 75 basalBGI: 6.1 BGI: -48.1 IOB: 14.131 Activity: 0.1158 at 08:44:21 dev: 62.07 avgDelta: 14.00 csf +1 mealCOB: 55.2 mealCarbs: 75 basalBGI: 6.1 BGI: -51.8 IOB: 13.477 Activity: 0.1249 at 08:49:21 dev: 62.09 avgDelta: 10.25 csf +1 mealCOB: 51.5 mealCarbs: 75 basalBGI: 6.1 BGI: -54.2 IOB: 12.739 Activity: 0.1305 at 08:54:21 dev: 61.17 avgDelta: 7.00 csf +1 mealCOB: 47.9 mealCarbs: 75 basalBGI: 6.1 BGI: -55.4 IOB: 12.027 Activity: 0.1335 at 08:59:21 dev: 59.91 avgDelta: 4.50 csf +1 mealCOB: 44.4 mealCarbs: 75 basalBGI: 6.1 BGI: -55.7 IOB: 11.307 Activity: 0.1342 at 09:04:20 dev: 58.20 avgDelta: 2.50 csf +1 mealCOB: 41.0 mealCarbs: 75 basalBGI: 6.1 BGI: -55.3 IOB: 10.538 Activity: 0.1331 at 09:09:22 dev: 56.25 avgDelta: 1.00 csf +1 mealCOB: 37.7 mealCarbs: 75 basalBGI: 6.1 BGI: -54.2 IOB: 9.828 Activity: 0.1306 at 09:14:21 dev: 54.21 avgDelta: 0.00 csf +1 mealCOB: 34.5 mealCarbs: 75 basalBGI: 6.1 BGI: -52.6 IOB: 9.085 Activity: 0.1268 at 09:19:22 dev: 52.38 avgDelta: -0.25 csf +1 mealCOB: 31.4 mealCarbs: 75 basalBGI: 6.1 BGI: -50.8 IOB: 8.411 Activity: 0.1223 at 09:24:21 dev: 51.01 avgDelta: 0.25 csf +1 mealCOB: 28.4 mealCarbs: 75 basalBGI: 6.1 BGI: -48.6 IOB: 7.764 Activity: 0.117 at 09:29:21 dev: 50.06 avgDelta: 1.50 csf +1 mealCOB: 25.4 mealCarbs: 75 basalBGI: 6.1 BGI: -46.2 IOB: 7.193 Activity: 0.1114 at 09:34:21 dev: 49.24 avgDelta: 3.00 csf +1 mealCOB: 22.6 mealCarbs: 75 basalBGI: 6.1 BGI: -43.9 IOB: 6.65 Activity: 0.1057 at 09:39:21 dev: 47.62 avgDelta: 3.75 csf +1 mealCOB: 19.8 mealCarbs: 75 basalBGI: 6.1 BGI: -41.5 IOB: 6.136 Activity: 0.0999 at 09:44:22 dev: 44.97 avgDelta: 3.50 csf +1 mealCOB: 17.3 mealCarbs: 75 basalBGI: 6.1 BGI: -39.1 IOB: 5.651 Activity: 0.0941 at 09:49:21 dev: 41.81 avgDelta: 2.75 csf +1 mealCOB: 15.0 mealCarbs: 75 basalBGI: 6.1 BGI: -36.7 IOB: 5.194 Activity: 0.0884 at 09:54:22 dev: 38.19 avgDelta: 1.50 csf +1 mealCOB: 13.0 mealCarbs: 75 basalBGI: 6.1 BGI: -33.2 IOB: 4.302 Activity: 0.08 at 09:59:21 dev: 33.21 avgDelta: 0.00 csf +1 mealCOB: 11.2 mealCarbs: 75 basalBGI: 6.1 BGI: -30.7 IOB: 3.868 Activity: 0.0739 at 10:04:21 dev: 29.42 avgDelta: -1.25 csf +1 mealCOB: 9.7 mealCarbs: 75 basalBGI: 6.1 BGI: -28.2 IOB: 3.413 Activity: 0.068 at 10:09:21 dev: 25.72 avgDelta: -2.50 csf +1 mealCOB: 8.3 mealCarbs: 75 basalBGI: 6.1 BGI: -25.9 IOB: 3.037 Activity: 0.0623 at 10:14:21 dev: 22.86 avgDelta: -3.00 csf +1 mealCOB: 7.0 mealCarbs: 75 basalBGI: 6.1 BGI: -23.6 IOB: 2.64 Activity: 0.0568 at 10:19:21 dev: 20.83 avgDelta: -2.75 csf +1 mealCOB: 5.8 mealCarbs: 75 basalBGI: 6.1 BGI: -21.4 IOB: 2.319 Activity: 0.0516 at 10:24:22 dev: 19.42 avgDelta: -2.00 csf +1 mealCOB: 4.8 mealCarbs: 75 basalBGI: 6.1 BGI: -19.5 IOB: 2.193 Activity: 0.0469 at 10:29:21 dev: 17.72 avgDelta: -1.75 csf +1 mealCOB: 3.8 mealCarbs: 75 basalBGI: 6.1 BGI: -17.7 IOB: 1.919 Activity: 0.0427 at 10:34:21 dev: 15.72 avgDelta: -2.00 csf +1 mealCOB: 3.0 mealCarbs: 75 basalBGI: 6.1 BGI: -16.0 IOB: 1.666 Activity: 0.0386 at 10:39:21 dev: 13.77 avgDelta: -2.25 csf +1 mealCOB: 2.3 mealCarbs: 75 basalBGI: 6.1 BGI: -14.5 IOB: 1.483 Activity: 0.0349 at 10:44:21 dev: 11.99 avgDelta: -2.50 csf +1 mealCOB: 1.6 mealCarbs: 75 basalBGI: 6.1 BGI: -13.3 IOB: 1.606 Activity: 0.032 at 10:49:21 dev: 11.03 avgDelta: -2.25 csf +1 mealCOB: 1.0 mealCarbs: 75 basalBGI: 6.1 BGI: -12.2 IOB: 1.452 Activity: 0.0294 at 10:54:21 dev: 9.70 avgDelta: -2.50 csf +1 mealCOB: 0.5 mealCarbs: 75 basalBGI: 6.1 BGI: -11.2 IOB: 1.311 Activity: 0.027 at 10:59:21 dev: 7.71 avgDelta: -3.50 csf +1 mealCOB: 0.0 mealCarbs: 75 basalBGI: 6.0 BGI: -10.3 IOB: 1.182 Activity: 0.0248 at 11:04:21 dev: 5.29 avgDelta: -5.00 csf +1 mealCOB: 0.0 mealCarbs: 75 basalBGI: 6.0 BGI: -9.4 IOB: 1.013 Activity: 0.0226 at 11:09:21 dev: 2.63 avgDelta: -6.75 csf +1 mealCOB: 0.0 mealCarbs: 75 basalBGI: 6.0 BGI: -8.5 IOB: 0.856 Activity: 0.0204 at 11:14:21 dev: 0.22 avgDelta: -8.25 csf +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -7.6 IOB: 0.709 Activity: 0.0183 at 11:19:21 dev: -1.65 avgDelta: -9.25 csf +end carb absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -6.8 IOB: 0.572 Activity: 0.0163 at 11:24:21 dev: -2.48 avgDelta: -9.25 ISF +CREndIOB: 0.396 CREndBG: 131 CREndTime: 2022-05-30T09:29:21.000Z +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -5.9 IOB: 0.396 Activity: 0.0143 at 11:29:21 dev: -2.81 avgDelta: -8.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -5.2 IOB: 0.278 Activity: 0.0125 at 11:34:21 dev: -2.56 avgDelta: -7.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -4.4 IOB: 0.17 Activity: 0.0107 at 11:39:21 dev: -2.31 avgDelta: -6.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -3.6 IOB: 0.022 Activity: 0.0088 at 11:44:21 dev: -2.85 avgDelta: -6.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -3.0 IOB: -0.068 Activity: 0.0072 at 11:49:21 dev: -3.01 avgDelta: -6.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -2.3 IOB: -0.15 Activity: 0.0056 at 11:54:21 dev: -3.43 avgDelta: -5.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -1.7 IOB: -0.274 Activity: 0.004 at 11:59:21 dev: -3.34 avgDelta: -5.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -1.1 IOB: -0.29 Activity: 0.0027 at 12:04:21 dev: -3.38 avgDelta: -4.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -0.6 IOB: -0.301 Activity: 0.0015 at 12:09:22 dev: -3.38 avgDelta: -4.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: -0.2 IOB: -0.356 Activity: 0.0005 at 12:14:21 dev: -3.54 avgDelta: -3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: 0.2 IOB: -0.356 Activity: -0.0004 at 12:19:21 dev: -3.92 avgDelta: -3.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: 0.5 IOB: -0.402 Activity: -0.0011 at 12:24:22 dev: -3.46 avgDelta: -3.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: 0.8 IOB: -0.445 Activity: -0.0019 at 12:29:21 dev: -3.54 avgDelta: -2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: 1.0 IOB: -0.435 Activity: -0.0024 at 12:34:21 dev: -3.00 avgDelta: -2.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 6.0 BGI: 1.3 IOB: -0.47 Activity: -0.0031 at 12:39:22 dev: -2.79 avgDelta: -1.50 basal +CRInitialIOB: -0.454 CRInitialBG: 77 CRInitialCarbTime: 2022-05-30T10:44:21.000Z +start carb absorption +0 mealCOB: 49.5 mealCarbs: 50 basalBGI: 6.0 BGI: 1.4 IOB: -0.454 Activity: -0.0035 at 12:44:21 dev: -2.70 avgDelta: -1.25 csf +0 mealCOB: 49.0 mealCarbs: 50 basalBGI: 6.0 BGI: 1.7 IOB: -0.484 Activity: -0.004 at 12:49:22 dev: -2.66 avgDelta: -1.00 csf +0 mealCOB: 48.5 mealCarbs: 50 basalBGI: 6.0 BGI: 1.8 IOB: -0.464 Activity: -0.0043 at 12:54:22 dev: -2.28 avgDelta: -0.50 csf +0 mealCOB: 48.1 mealCarbs: 50 basalBGI: 6.0 BGI: 1.9 IOB: -0.442 Activity: -0.0045 at 12:59:21 dev: -1.12 avgDelta: 0.75 csf +0 mealCOB: 47.6 mealCarbs: 50 basalBGI: 5.9 BGI: 1.9 IOB: -0.469 Activity: -0.0047 at 13:04:22 dev: 0.80 avgDelta: 2.75 csf +0 mealCOB: 47.1 mealCarbs: 50 basalBGI: 5.9 BGI: 2.0 IOB: -0.445 Activity: -0.0048 at 13:09:22 dev: 4.51 avgDelta: 6.50 csf +0 mealCOB: 46.5 mealCarbs: 50 basalBGI: 5.9 BGI: 1.7 IOB: 0.287 Activity: -0.004 at 13:14:21 dev: 9.59 avgDelta: 11.25 csf +1 mealCOB: 45.6 mealCarbs: 50 basalBGI: 5.9 BGI: 1.0 IOB: 0.453 Activity: -0.0024 at 13:19:21 dev: 15.25 avgDelta: 16.25 csf +1 mealCOB: 44.3 mealCarbs: 50 basalBGI: 5.9 BGI: -0.5 IOB: 1.958 Activity: 0.0011 at 13:24:21 dev: 21.46 avgDelta: 21.00 csf +1 mealCOB: 42.8 mealCarbs: 50 basalBGI: 5.9 BGI: -2.2 IOB: 1.892 Activity: 0.0053 at 13:29:21 dev: 25.45 avgDelta: 23.25 csf +1 mealCOB: 41.1 mealCarbs: 50 basalBGI: 5.9 BGI: -3.9 IOB: 2.367 Activity: 0.0093 at 13:34:22 dev: 27.11 avgDelta: 23.25 csf +1 mealCOB: 39.5 mealCarbs: 50 basalBGI: 5.9 BGI: -5.3 IOB: 2.261 Activity: 0.0127 at 13:39:21 dev: 26.27 avgDelta: 21.00 csf +1 mealCOB: 37.6 mealCarbs: 50 basalBGI: 5.9 BGI: -14.2 IOB: 12.271 Activity: 0.0343 at 13:44:21 dev: 31.24 avgDelta: 17.00 csf +1 mealCOB: 35.5 mealCarbs: 50 basalBGI: 5.9 BGI: -23.0 IOB: 11.995 Activity: 0.0554 at 13:49:21 dev: 35.74 avgDelta: 12.75 csf +1 mealCOB: 33.2 mealCarbs: 50 basalBGI: 5.9 BGI: -29.7 IOB: 11.576 Activity: 0.0716 at 13:54:22 dev: 38.22 avgDelta: 8.50 csf +1 mealCOB: 30.7 mealCarbs: 50 basalBGI: 5.9 BGI: -34.7 IOB: 11.136 Activity: 0.0836 at 13:59:21 dev: 39.95 avgDelta: 5.25 csf +1 mealCOB: 28.3 mealCarbs: 50 basalBGI: 5.9 BGI: -38.3 IOB: 10.645 Activity: 0.0922 at 14:04:21 dev: 41.02 avgDelta: 2.75 csf +1 mealCOB: 25.8 mealCarbs: 50 basalBGI: 5.9 BGI: -40.6 IOB: 10.069 Activity: 0.0979 at 14:09:22 dev: 41.14 avgDelta: 0.50 csf +1 mealCOB: 23.3 mealCarbs: 50 basalBGI: 5.9 BGI: -42.0 IOB: 9.52 Activity: 0.1013 at 14:14:22 dev: 40.30 avgDelta: -1.75 csf +1 mealCOB: 21.0 mealCarbs: 50 basalBGI: 5.9 BGI: -42.7 IOB: 9.009 Activity: 0.1028 at 14:19:22 dev: 37.92 avgDelta: -4.75 csf +1 mealCOB: 18.9 mealCarbs: 50 basalBGI: 5.9 BGI: -42.6 IOB: 8.445 Activity: 0.1027 at 14:24:22 dev: 35.63 avgDelta: -7.00 csf +1 mealCOB: 16.9 mealCarbs: 50 basalBGI: 5.9 BGI: -42.1 IOB: 7.834 Activity: 0.1014 at 14:29:22 dev: 33.34 avgDelta: -8.75 csf +1 mealCOB: 15.0 mealCarbs: 50 basalBGI: 5.9 BGI: -41.1 IOB: 7.283 Activity: 0.099 at 14:34:22 dev: 31.34 avgDelta: -9.75 csf +1 mealCOB: 13.1 mealCarbs: 50 basalBGI: 5.9 BGI: -39.7 IOB: 6.696 Activity: 0.0957 at 14:39:22 dev: 30.47 avgDelta: -9.25 csf +1 mealCOB: 11.4 mealCarbs: 50 basalBGI: 5.9 BGI: -38.2 IOB: 6.176 Activity: 0.092 at 14:44:21 dev: 29.44 avgDelta: -8.75 csf +1 mealCOB: 9.6 mealCarbs: 50 basalBGI: 5.9 BGI: -36.4 IOB: 5.676 Activity: 0.0877 at 14:49:22 dev: 28.65 avgDelta: -7.75 csf +1 mealCOB: 8.0 mealCarbs: 50 basalBGI: 5.9 BGI: -34.4 IOB: 5.152 Activity: 0.0829 at 14:54:22 dev: 27.66 avgDelta: -6.75 csf +1 mealCOB: 6.4 mealCarbs: 50 basalBGI: 5.9 BGI: -32.4 IOB: 4.65 Activity: 0.0781 at 14:59:21 dev: 26.17 avgDelta: -6.25 csf +1 mealCOB: 4.9 mealCarbs: 50 basalBGI: 5.9 BGI: -30.4 IOB: 4.222 Activity: 0.0732 at 15:04:22 dev: 24.38 avgDelta: -6.00 csf +1 mealCOB: 3.5 mealCarbs: 50 basalBGI: 5.9 BGI: -28.3 IOB: 3.769 Activity: 0.0682 at 15:09:22 dev: 22.31 avgDelta: -6.00 csf +1 mealCOB: 2.3 mealCarbs: 50 basalBGI: 5.9 BGI: -26.2 IOB: 3.39 Activity: 0.0632 at 15:14:21 dev: 20.23 avgDelta: -6.00 csf +1 mealCOB: 1.2 mealCarbs: 50 basalBGI: 5.9 BGI: -24.2 IOB: 2.987 Activity: 0.0583 at 15:19:22 dev: 18.45 avgDelta: -5.75 csf +1 mealCOB: 0.2 mealCarbs: 50 basalBGI: 5.9 BGI: -22.2 IOB: 2.657 Activity: 0.0535 at 15:24:22 dev: 16.46 avgDelta: -5.75 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.9 BGI: -20.3 IOB: 2.351 Activity: 0.049 at 15:29:22 dev: 14.84 avgDelta: -5.50 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.9 BGI: -18.5 IOB: 2.018 Activity: 0.0445 at 15:34:22 dev: 12.97 avgDelta: -5.50 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.9 BGI: -16.7 IOB: 1.755 Activity: 0.0403 at 15:39:22 dev: 11.48 avgDelta: -5.25 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.9 BGI: -15.1 IOB: 1.513 Activity: 0.0364 at 15:44:22 dev: 10.11 avgDelta: -5.00 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.9 BGI: -13.5 IOB: 1.241 Activity: 0.0325 at 15:49:21 dev: 8.74 avgDelta: -4.75 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.9 BGI: -12.0 IOB: 1.037 Activity: 0.029 at 15:54:22 dev: 7.79 avgDelta: -4.25 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.9 BGI: -10.6 IOB: 0.851 Activity: 0.0256 at 15:59:21 dev: 6.63 avgDelta: -4.00 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.7 BGI: -9.3 IOB: 0.632 Activity: 0.0223 at 16:04:22 dev: 5.51 avgDelta: -3.75 csf +1 mealCOB: 0.0 mealCarbs: 50 basalBGI: 5.7 BGI: -8.0 IOB: 0.428 Activity: 0.0192 at 16:09:21 dev: 4.47 avgDelta: -3.50 csf +CREndIOB: 0.339 CREndBG: 100 CREndTime: 2022-05-30T14:14:22.000Z +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -6.8 IOB: 0.339 Activity: 0.0165 at 16:14:22 dev: 3.60 avgDelta: -3.25 csf +end carb absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -5.8 IOB: 0.262 Activity: 0.0141 at 16:19:21 dev: 2.60 avgDelta: -3.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -5.0 IOB: 0.197 Activity: 0.012 at 16:24:21 dev: 1.73 avgDelta: -3.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -4.2 IOB: 0.142 Activity: 0.0102 at 16:29:21 dev: 0.73 avgDelta: -3.50 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -3.5 IOB: 0.046 Activity: 0.0085 at 16:34:21 dev: 0.28 avgDelta: -3.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.8 IOB: -0.093 Activity: 0.0068 at 16:39:21 dev: -0.18 avgDelta: -3.00 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -2.2 IOB: -0.173 Activity: 0.0053 at 16:44:22 dev: -0.05 avgDelta: -2.25 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.6 IOB: -0.246 Activity: 0.0039 at 16:49:21 dev: -0.13 avgDelta: -1.75 ISF +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -1.0 IOB: -0.361 Activity: 0.0024 at 16:54:21 dev: -0.50 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.7 BGI: -0.5 IOB: -0.42 Activity: 0.0011 at 16:59:21 dev: -1.04 avgDelta: -1.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 0.0 IOB: -0.474 Activity: -0.0001 at 17:04:21 dev: -1.29 avgDelta: -1.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 0.5 IOB: -0.52 Activity: -0.0012 at 17:09:21 dev: -1.25 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 0.9 IOB: -0.611 Activity: -0.0023 at 17:14:22 dev: -1.20 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 1.3 IOB: -0.648 Activity: -0.0032 at 17:19:21 dev: -1.08 avgDelta: 0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 1.7 IOB: -0.68 Activity: -0.004 at 17:24:22 dev: -1.66 avgDelta: 0.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 2.1 IOB: -0.755 Activity: -0.005 at 17:29:22 dev: -2.33 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 2.4 IOB: -0.778 Activity: -0.0058 at 17:34:22 dev: -3.16 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 2.7 IOB: -0.798 Activity: -0.0065 at 17:39:22 dev: -3.45 avgDelta: -0.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 3.0 IOB: -0.863 Activity: -0.0072 at 17:44:22 dev: -3.24 avgDelta: -0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 3.2 IOB: -0.877 Activity: -0.0078 at 17:49:21 dev: -2.99 avgDelta: 0.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 3.4 IOB: -0.887 Activity: -0.0082 at 17:54:22 dev: -2.40 avgDelta: 1.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.4 BGI: 3.7 IOB: -0.942 Activity: -0.0089 at 17:59:22 dev: -2.44 avgDelta: 1.25 basal +CRInitialIOB: -0.947 CRInitialBG: 87 CRInitialCarbTime: 2022-05-30T16:04:22.000Z +start carb absorption +0 mealCOB: 9.5 mealCarbs: 10 basalBGI: 5.4 BGI: 3.9 IOB: -0.947 Activity: -0.0093 at 18:04:22 dev: -1.61 avgDelta: 2.25 csf +0 mealCOB: 9.0 mealCarbs: 10 basalBGI: 5.4 BGI: 4.0 IOB: -0.949 Activity: -0.0097 at 18:09:22 dev: 0.47 avgDelta: 4.50 csf +0 mealCOB: 8.5 mealCarbs: 10 basalBGI: 5.4 BGI: 4.1 IOB: -0.78 Activity: -0.0098 at 18:14:22 dev: 3.43 avgDelta: 7.50 csf +0 mealCOB: 8.1 mealCarbs: 10 basalBGI: 5.4 BGI: 3.9 IOB: -0.682 Activity: -0.0095 at 18:19:22 dev: 6.31 avgDelta: 10.25 csf +0 mealCOB: 7.6 mealCarbs: 10 basalBGI: 5.4 BGI: 3.5 IOB: -0.097 Activity: -0.0084 at 18:24:21 dev: 7.51 avgDelta: 11.00 csf +0 mealCOB: 7.1 mealCarbs: 10 basalBGI: 5.4 BGI: 2.9 IOB: -0.108 Activity: -0.007 at 18:29:21 dev: 6.09 avgDelta: 9.00 csf +0 mealCOB: 6.6 mealCarbs: 10 basalBGI: 5.4 BGI: 2.5 IOB: -0.126 Activity: -0.006 at 18:34:22 dev: 2.76 avgDelta: 5.25 csf +0 mealCOB: 6.1 mealCarbs: 10 basalBGI: 5.4 BGI: 2.2 IOB: -0.198 Activity: -0.0053 at 18:39:21 dev: -0.95 avgDelta: 1.25 csf +0 mealCOB: 5.6 mealCarbs: 10 basalBGI: 5.4 BGI: 1.9 IOB: -0.223 Activity: -0.0047 at 18:44:22 dev: -3.45 avgDelta: -1.50 csf +0 mealCOB: 5.2 mealCarbs: 10 basalBGI: 5.4 BGI: 1.8 IOB: -0.25 Activity: -0.0044 at 18:49:21 dev: -4.33 avgDelta: -2.50 csf +0 mealCOB: 4.7 mealCarbs: 10 basalBGI: 5.4 BGI: 1.8 IOB: -0.328 Activity: -0.0044 at 18:54:22 dev: -4.58 avgDelta: -2.75 csf +0 mealCOB: 4.2 mealCarbs: 10 basalBGI: 5.4 BGI: 1.8 IOB: -0.356 Activity: -0.0043 at 18:59:22 dev: -3.78 avgDelta: -2.00 csf +0 mealCOB: 3.7 mealCarbs: 10 basalBGI: 5.6 BGI: 1.8 IOB: -0.386 Activity: -0.0043 at 19:04:21 dev: -3.03 avgDelta: -1.25 csf +0 mealCOB: 3.2 mealCarbs: 10 basalBGI: 5.6 BGI: 1.9 IOB: -0.463 Activity: -0.0046 at 19:09:22 dev: -2.91 avgDelta: -1.00 csf +0 mealCOB: 2.7 mealCarbs: 10 basalBGI: 5.6 BGI: 1.9 IOB: -0.44 Activity: -0.0047 at 19:14:22 dev: -2.45 avgDelta: -0.50 csf +0 mealCOB: 2.3 mealCarbs: 10 basalBGI: 5.6 BGI: 2.0 IOB: -0.416 Activity: -0.0048 at 19:19:22 dev: -2.24 avgDelta: -0.25 csf +0 mealCOB: 1.8 mealCarbs: 10 basalBGI: 5.6 BGI: 2.0 IOB: -0.392 Activity: -0.0049 at 19:24:22 dev: -1.78 avgDelta: 0.25 csf +0 mealCOB: 1.3 mealCarbs: 10 basalBGI: 5.6 BGI: 2.0 IOB: -0.368 Activity: -0.0048 at 19:29:21 dev: -0.99 avgDelta: 1.00 csf +0 mealCOB: 0.8 mealCarbs: 10 basalBGI: 5.6 BGI: 1.9 IOB: -0.344 Activity: -0.0047 at 19:34:21 dev: -0.45 avgDelta: 1.50 csf +0 mealCOB: 0.3 mealCarbs: 10 basalBGI: 5.6 BGI: 2.0 IOB: -0.37 Activity: -0.0048 at 19:39:22 dev: 0.01 avgDelta: 2.00 csf +CREndIOB: -0.346 CREndBG: 130 CREndTime: 2022-05-30T17:44:22.000Z +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.6 BGI: 1.9 IOB: -0.346 Activity: -0.0047 at 19:44:22 dev: 0.30 avgDelta: 2.25 csf +end carb absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.6 BGI: 1.9 IOB: -0.323 Activity: -0.0045 at 19:49:22 dev: 0.63 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.6 BGI: 1.7 IOB: -0.201 Activity: -0.0042 at 19:54:22 dev: 0.76 avgDelta: 2.50 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.6 BGI: 1.6 IOB: -0.18 Activity: -0.0039 at 19:59:22 dev: 0.63 avgDelta: 2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 1.6 IOB: -0.261 Activity: -0.0038 at 20:04:22 dev: 0.17 avgDelta: 1.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 1.5 IOB: -0.242 Activity: -0.0036 at 20:09:22 dev: 0.26 avgDelta: 1.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 1.4 IOB: -0.225 Activity: -0.0035 at 20:14:21 dev: 0.80 avgDelta: 2.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 1.4 IOB: -0.208 Activity: -0.0033 at 20:19:21 dev: 1.38 avgDelta: 2.75 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 1.2 IOB: 0.048 Activity: -0.0028 at 20:24:22 dev: 2.09 avgDelta: 3.25 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 0.9 IOB: 0.01 Activity: -0.0022 at 20:29:23 dev: 3.09 avgDelta: 4.00 basal +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 0.6 IOB: 0.269 Activity: -0.0014 at 20:34:23 dev: 4.42 avgDelta: 5.00 basal +start uannnounced meal absorption +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: 0.1 IOB: 0.474 Activity: -0.0003 at 20:39:22 dev: 6.13 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -1.0 IOB: 1.379 Activity: 0.0025 at 20:44:22 dev: 7.29 avgDelta: 6.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -2.1 IOB: 1.31 Activity: 0.005 at 20:49:23 dev: 7.33 avgDelta: 5.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -2.9 IOB: 1.229 Activity: 0.0069 at 20:54:23 dev: 6.61 avgDelta: 3.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -3.5 IOB: 1.141 Activity: 0.0083 at 20:59:22 dev: 5.45 avgDelta: 2.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -3.8 IOB: 1.048 Activity: 0.0091 at 21:04:22 dev: 5.28 avgDelta: 1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.0 IOB: 1 Activity: 0.0097 at 21:09:22 dev: 5.03 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.1 IOB: 0.902 Activity: 0.0099 at 21:14:22 dev: 4.86 avgDelta: 0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.1 IOB: 0.803 Activity: 0.0099 at 21:19:22 dev: 4.86 avgDelta: 0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.2 IOB: 1.047 Activity: 0.0102 at 21:24:21 dev: 4.98 avgDelta: 0.75 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.3 IOB: 0.941 Activity: 0.0104 at 21:29:22 dev: 5.32 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.5 IOB: 1.078 Activity: 0.0108 at 21:34:22 dev: 5.48 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.6 IOB: 0.978 Activity: 0.011 at 21:39:21 dev: 5.57 avgDelta: 1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.7 IOB: 1.112 Activity: 0.0114 at 21:44:21 dev: 5.23 avgDelta: 0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.9 IOB: 1.144 Activity: 0.0118 at 21:49:21 dev: 4.90 avgDelta: 0.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -5.0 IOB: 1.034 Activity: 0.012 at 21:54:21 dev: 4.48 avgDelta: -0.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.9 IOB: 0.921 Activity: 0.0119 at 21:59:22 dev: 3.94 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.8 IOB: 0.812 Activity: 0.0115 at 22:04:22 dev: 3.77 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.7 IOB: 0.809 Activity: 0.0112 at 22:09:21 dev: 3.65 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.4 IOB: 0.701 Activity: 0.0107 at 22:14:22 dev: 3.44 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.4 IOB: 0.881 Activity: 0.0105 at 22:19:21 dev: 3.36 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.3 IOB: 0.776 Activity: 0.0104 at 22:24:22 dev: 3.32 avgDelta: -1.00 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.3 IOB: 0.935 Activity: 0.0103 at 22:29:23 dev: 3.03 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.3 IOB: 0.833 Activity: 0.0103 at 22:34:23 dev: 3.03 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.2 IOB: 0.782 Activity: 0.0102 at 22:39:22 dev: 2.98 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.2 IOB: 1.001 Activity: 0.0101 at 22:44:22 dev: 2.94 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.3 IOB: 0.9 Activity: 0.0103 at 22:49:22 dev: 3.03 avgDelta: -1.25 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.3 IOB: 0.919 Activity: 0.0104 at 22:54:22 dev: 2.82 avgDelta: -1.50 uam +0 mealCOB: 0.0 mealCarbs: 0 basalBGI: 5.9 BGI: -4.3 IOB: 0.816 Activity: 0.0104 at 22:59:22 dev: 2.32 avgDelta: -2.00 uam +CRInitialIOB: 6.729 CRInitialBG: 163 CRInitialCarbTime: 2022-05-30T21:04:22.000Z +start carb absorption +1 mealCOB: 34.5 mealCarbs: 35 basalBGI: 5.8 BGI: -6.6 IOB: 6.729 Activity: 0.016 at 23:04:22 dev: 4.14 avgDelta: -2.50 csf +1 mealCOB: 34.0 mealCarbs: 35 basalBGI: 5.8 BGI: -11.7 IOB: 6.567 Activity: 0.0282 at 23:09:22 dev: 9.20 avgDelta: -2.50 csf +1 mealCOB: 33.1 mealCarbs: 35 basalBGI: 5.8 BGI: -15.5 IOB: 6.302 Activity: 0.0374 at 23:14:23 dev: 13.77 avgDelta: -1.75 csf +1 mealCOB: 32.0 mealCarbs: 35 basalBGI: 5.8 BGI: -18.4 IOB: 6.047 Activity: 0.0443 at 23:19:22 dev: 18.64 avgDelta: 0.25 csf +1 mealCOB: 30.6 mealCarbs: 35 basalBGI: 5.8 BGI: -20.5 IOB: 5.862 Activity: 0.0494 at 23:24:23 dev: 23.75 avgDelta: 3.25 csf +1 mealCOB: 28.8 mealCarbs: 35 basalBGI: 5.8 BGI: -21.9 IOB: 5.506 Activity: 0.0527 at 23:29:22 dev: 28.37 avgDelta: 6.50 csf +1 mealCOB: 27.0 mealCarbs: 35 basalBGI: 5.8 BGI: -22.8 IOB: 5.346 Activity: 0.055 at 23:34:22 dev: 30.33 avgDelta: 7.50 csf +1 mealCOB: 25.3 mealCarbs: 35 basalBGI: 5.8 BGI: -23.4 IOB: 5.017 Activity: 0.0563 at 23:39:22 dev: 28.62 avgDelta: 5.25 csf +1 mealCOB: 23.8 mealCarbs: 35 basalBGI: 5.8 BGI: -23.3 IOB: 4.636 Activity: 0.0562 at 23:44:22 dev: 24.58 avgDelta: 1.25 csf +1 mealCOB: 22.6 mealCarbs: 35 basalBGI: 5.8 BGI: -23.1 IOB: 4.307 Activity: 0.0556 at 23:49:21 dev: 20.58 avgDelta: -2.50 csf +1 mealCOB: 21.4 mealCarbs: 35 basalBGI: 5.8 BGI: -22.5 IOB: 3.932 Activity: 0.0542 at 23:54:22 dev: 18.75 avgDelta: -3.75 csf +1 mealCOB: 20.2 mealCarbs: 35 basalBGI: 5.8 BGI: -21.7 IOB: 3.616 Activity: 0.0523 at 23:59:22 dev: 19.96 avgDelta: -1.75 csf +1 mealCOB: 18.9 mealCarbs: 35 basalBGI: 6.8 BGI: -20.8 IOB: 3.309 Activity: 0.0501 at 00:04:22 dev: 21.80 avgDelta: 1.00 csf +1 mealCOB: 17.5 mealCarbs: 35 basalBGI: 6.8 BGI: -19.7 IOB: 2.965 Activity: 0.0475 at 00:09:22 dev: 22.47 avgDelta: 2.75 csf +1 mealCOB: 16.2 mealCarbs: 35 basalBGI: 6.8 BGI: -18.6 IOB: 2.735 Activity: 0.0449 at 00:14:21 dev: 21.64 avgDelta: 3.00 csf +1 mealCOB: 15.1 mealCarbs: 35 basalBGI: 6.8 BGI: -17.5 IOB: 2.467 Activity: 0.0421 at 00:19:22 dev: 19.22 avgDelta: 1.75 csf +1 mealCOB: 14.1 mealCarbs: 35 basalBGI: 6.8 BGI: -16.3 IOB: 2.163 Activity: 0.0392 at 00:24:22 dev: 16.52 avgDelta: 0.25 csf +1 mealCOB: 13.2 mealCarbs: 35 basalBGI: 6.8 BGI: -15.0 IOB: 1.875 Activity: 0.0362 at 00:29:22 dev: 13.78 avgDelta: -1.25 csf +1 mealCOB: 12.5 mealCarbs: 35 basalBGI: 6.8 BGI: -13.8 IOB: 1.65 Activity: 0.0333 at 00:34:22 dev: 11.57 avgDelta: -2.25 csf +1 mealCOB: 11.9 mealCarbs: 35 basalBGI: 6.8 BGI: -12.6 IOB: 1.443 Activity: 0.0303 at 00:39:22 dev: 9.83 avgDelta: -2.75 csf +1 mealCOB: 11.4 mealCarbs: 35 basalBGI: 6.8 BGI: -11.4 IOB: 1.248 Activity: 0.0275 at 00:44:22 dev: 8.41 avgDelta: -3.00 csf +1 mealCOB: 10.9 mealCarbs: 35 basalBGI: 6.8 BGI: -10.3 IOB: 1.067 Activity: 0.0249 at 00:49:21 dev: 7.59 avgDelta: -2.75 csf +1 mealCOB: 10.5 mealCarbs: 35 basalBGI: 6.8 BGI: -9.3 IOB: 0.899 Activity: 0.0224 at 00:54:22 dev: 6.80 avgDelta: -2.50 csf +0 mealCOB: 10.0 mealCarbs: 35 basalBGI: 6.9 BGI: -0.9 IOB: 0.081 Activity: 0.0022 at 02:59:22 dev: -13.09 avgDelta: -14.00 csf +0 mealCOB: 9.5 mealCarbs: 35 basalBGI: 7.8 BGI: -0.9 IOB: 0.3 Activity: 0.0023 at 03:04:22 dev: -13.30 avgDelta: -14.25 csf +0 mealCOB: 9.0 mealCarbs: 35 basalBGI: 7.8 BGI: -1.0 IOB: 0.238 Activity: 0.0024 at 03:09:22 dev: -14.00 avgDelta: -15.00 csf +0 mealCOB: 8.5 mealCarbs: 35 basalBGI: 7.8 BGI: -1.0 IOB: 0.176 Activity: 0.0024 at 03:14:22 dev: -14.50 avgDelta: -15.50 csf +0 mealCOB: 8.0 mealCarbs: 35 basalBGI: 7.8 BGI: -0.9 IOB: 0.064 Activity: 0.0022 at 03:19:22 dev: -3.09 avgDelta: -4.00 csf +0 mealCOB: 7.6 mealCarbs: 35 basalBGI: 7.8 BGI: -0.8 IOB: -0.046 Activity: 0.0018 at 03:24:22 dev: -1.75 avgDelta: -2.50 csf +0 mealCOB: 7.1 mealCarbs: 35 basalBGI: 7.8 BGI: -0.5 IOB: -0.104 Activity: 0.0013 at 03:29:21 dev: 0.54 avgDelta: 0.00 csf +0 mealCOB: 6.6 mealCarbs: 35 basalBGI: 7.8 BGI: -0.5 IOB: 0.16 Activity: 0.0012 at 03:34:22 dev: 2.50 avgDelta: 2.00 csf +0 mealCOB: 6.1 mealCarbs: 35 basalBGI: 7.8 BGI: -0.6 IOB: 0.254 Activity: 0.0014 at 03:39:22 dev: 4.08 avgDelta: 3.50 csf +0 mealCOB: 5.6 mealCarbs: 35 basalBGI: 7.8 BGI: -0.7 IOB: 0.246 Activity: 0.0017 at 03:44:22 dev: 3.21 avgDelta: 2.50 csf +0 mealCOB: 5.1 mealCarbs: 35 basalBGI: 7.8 BGI: -0.8 IOB: 0.236 Activity: 0.002 at 03:49:23 dev: 0.83 avgDelta: 0.00 csf +CREndIOB: 0.177 CREndBG: 103 CREndTime: 2022-05-31T01:54:22.000Z +Ignoring 290 m CR period. +0 mealCOB: 4.6 mealCarbs: 35 basalBGI: 7.8 BGI: -0.8 IOB: 0.177 Activity: 0.002 at 03:54:22 dev: -2.42 avgDelta: -3.25 csf +Found at least 1h of carb absorption: assuming all meals were announced, and categorizing UAM data as basal. +oref0-autotune-core autotune.2022-05-30.json profile.json profile.pump.json > newprofile.2022-05-30.json +CRTotalCarbs: 125 CRTotalInsulin: 25.516 totalCR: 4.899 +Hour 0 total deviations: 0 mg/dL +Hour 0 basal adjustment needed: 0 U/hr +Hour 1 total deviations: 0 mg/dL +Hour 1 basal adjustment needed: 0 U/hr +Hour 2 total deviations: 0 mg/dL +Hour 2 basal adjustment needed: 0 U/hr +Hour 3 total deviations: 0 mg/dL +Hour 3 basal adjustment needed: 0 U/hr +Hour 4 total deviations: -22.37 mg/dL +Hour 4 basal adjustment needed: -0.05 U/hr +Hour 5 total deviations: 18.75 mg/dL +Hour 5 basal adjustment needed: 0.05 U/hr +Hour 6 total deviations: 0 mg/dL +Hour 6 basal adjustment needed: 0 U/hr +Hour 7 total deviations: -1.42 mg/dL +Hour 7 basal adjustment needed: 0 U/hr +Hour 8 total deviations: -0.92 mg/dL +Hour 8 basal adjustment needed: 0 U/hr +Hour 9 total deviations: 0 mg/dL +Hour 9 basal adjustment needed: 0 U/hr +Hour 10 total deviations: 0 mg/dL +Hour 10 basal adjustment needed: 0 U/hr +Hour 11 total deviations: 0 mg/dL +Hour 11 basal adjustment needed: 0 U/hr +Hour 12 total deviations: -27.01 mg/dL +Hour 12 basal adjustment needed: -0.07 U/hr +Hour 13 total deviations: 0 mg/dL +Hour 13 basal adjustment needed: 0 U/hr +Hour 14 total deviations: 0 mg/dL +Hour 14 basal adjustment needed: 0 U/hr +Hour 15 total deviations: 0 mg/dL +Hour 15 basal adjustment needed: 0 U/hr +Hour 16 total deviations: -1.54 mg/dL +Hour 16 basal adjustment needed: 0 U/hr +Hour 17 total deviations: -26.49 mg/dL +Hour 17 basal adjustment needed: -0.06 U/hr +Hour 18 total deviations: 0 mg/dL +Hour 18 basal adjustment needed: 0 U/hr +Hour 19 total deviations: 2.02 mg/dL +Hour 19 basal adjustment needed: 0 U/hr +Hour 20 total deviations: 45.02 mg/dL +Hour 20 basal adjustment needed: 0.11 U/hr +Hour 21 total deviations: 59.93 mg/dL +Hour 21 basal adjustment needed: 0.14 U/hr +Hour 22 total deviations: 37.69 mg/dL +Hour 22 basal adjustment needed: 0.09 U/hr +Hour 23 total deviations: 0 mg/dL +Hour 23 basal adjustment needed: 0 U/hr +Limiting hour 18 basal to 0.84 (which is 1.3 * pump basal of 0.648 ) +Adjusting hour 0 basal from 0.977 to 0.979 based on hour 0 = 0.979 and hour 1 = 0.995 +Adjusting hour 5 basal from 0.877 to 0.883 based on hour 4 = 0.954 and hour 9 = 0.855 +Adjusting hour 6 basal from 0.779 to 0.804 based on hour 4 = 0.954 and hour 9 = 0.855 +Adjusting hour 7 basal from 0.827 to 0.843 based on hour 4 = 0.954 and hour 9 = 0.855 +Adjusting hour 8 basal from 0.882 to 0.887 based on hour 4 = 0.954 and hour 9 = 0.855 +Adjusting hour 12 basal from 0.86 to 0.856 based on hour 11 = 0.844 and hour 14 = 0.835 +Adjusting hour 13 basal from 0.858 to 0.854 based on hour 11 = 0.844 and hour 14 = 0.835 +Adjusting hour 22 basal from 0.849 to 0.851 based on hour 21 = 0.879 and hour 23 = 0.843 +Adjusting hour 23 basal from 0.843 to 0.847 based on hour 21 = 0.879 and hour 23 = 0.847 +[ { i: 0, minutes: 0, rate: 0.979, start: '00:00:00', untuned: 5 }, + { i: 1, minutes: 60, rate: 0.995, start: '01:00:00', untuned: 1 }, + { i: 2, minutes: 120, rate: 0.997, start: '02:00:00' }, + { i: 3, minutes: 180, rate: 1.129, start: '03:00:00' }, + { i: 4, minutes: 240, rate: 0.954, start: '04:00:00' }, + { i: 5, minutes: 300, rate: 0.883, start: '05:00:00', untuned: 1 }, + { i: 6, minutes: 360, rate: 0.804, start: '06:00:00', untuned: 1 }, + { i: 7, minutes: 420, rate: 0.843, start: '07:00:00', untuned: 2 }, + { i: 8, minutes: 480, rate: 0.887, start: '08:00:00', untuned: 2 }, + { i: 9, minutes: 540, rate: 0.855, start: '09:00:00', untuned: 5 }, + { i: 10, minutes: 600, rate: 0.856, start: '10:00:00', untuned: 5 }, + { i: 11, minutes: 660, rate: 0.844, start: '11:00:00', untuned: 5 }, + { i: 12, minutes: 720, rate: 0.856, start: '12:00:00', untuned: 6 }, + { i: 13, minutes: 780, rate: 0.854, start: '13:00:00', untuned: 6 }, + { i: 14, minutes: 840, rate: 0.835, start: '14:00:00', untuned: 5 }, + { i: 15, minutes: 900, rate: 0.83, start: '15:00:00', untuned: 5 }, + { i: 16, minutes: 960, rate: 0.801, start: '16:00:00', untuned: 5 }, + { i: 17, + minutes: 1020, + rate: 0.821, + start: '17:00:00', + untuned: 5 }, + { i: 18, + minutes: 1080, + rate: 0.842, + start: '18:00:00', + untuned: 4 }, + { i: 19, + minutes: 1140, + rate: 0.929, + start: '19:00:00', + untuned: 4 }, + { i: 20, + minutes: 1200, + rate: 0.931, + start: '20:00:00', + untuned: 3 }, + { i: 21, + minutes: 1260, + rate: 0.879, + start: '21:00:00', + untuned: 4 }, + { i: 22, + minutes: 1320, + rate: 0.851, + start: '22:00:00', + untuned: 5 }, + { i: 23, + minutes: 1380, + rate: 0.847, + start: '23:00:00', + untuned: 5 } ] +totalMealCarbs: 135 totalDeviations: 2117.06 oldCSF 16.533 fullNewCSF: 15.68 newCSF: 16.363 +oldCR: 5.021 fullNewCR: 4.899 newCR: 4.997 +Limiting adjusted ISF of 57.94 to 66.31 (which is pump ISF of 86.2 / 1.3 ) +p50deviation: 0.815 p50BGI -2.885 p50ratios: 0.698 Old ISF: 83.014 fullNewISF: 57.944 adjustedISF: 66.308 newISF: 79.673 newDIA: 6 newPeak: 45 + +Autotune pump profile recommendations: +--------------------------------------------------------- +Recommendations Log File: /home/titi/aaps/autotune/autotune_recommendations.log + +Parameter | Pump | Autotune | Days Missing +--------------------------------------------------------- +ISF [mg/dL/U] | 86.200 | 79.673 | +Carb Ratio[g/U]| 5.750 | 4.997 | + 00:00 | 0.966 | 0.979 | 5 + 01:00 | 0.977 | 0.995 | 1 + 02:00 | 0.971 | 0.997 | 0 + 03:00 | 1.111 | 1.129 | 0 + 04:00 | 0.974 | 0.954 | 0 + 05:00 | 0.923 | 0.883 | 1 + 06:00 | 0.823 | 0.804 | 1 + 07:00 | 0.855 | 0.843 | 2 + 08:00 | 0.902 | 0.887 | 2 + 09:00 | 0.934 | 0.855 | 5 + 10:00 | 0.938 | 0.856 | 5 + 11:00 | 0.903 | 0.844 | 5 + 12:00 | 0.882 | 0.856 | 6 + 13:00 | 0.874 | 0.854 | 6 + 14:00 | 0.866 | 0.835 | 5 + 15:00 | 0.848 | 0.830 | 5 + 16:00 | 0.758 | 0.801 | 5 + 17:00 | 0.650 | 0.821 | 5 + 18:00 | 0.648 | 0.842 | 4 + 19:00 | 0.738 | 0.929 | 4 + 20:00 | 0.847 | 0.931 | 3 + 21:00 | 0.861 | 0.879 | 4 + 22:00 | 0.863 | 0.851 | 5 + 23:00 | 0.843 | 0.847 | 5 +Query: https://xxxxxxxxxxxx.com entries/sgv.json find%5Bdate%5D%5B%24gte%5D=1653962400000&find%5Bdate%5D%5B%24lte%5D=1654048800000&count=1500 +-rw-r--r-- 1 titi titi 82239 Jun 25 19:54 ns-entries.2022-05-31.json +Query: https://xxxxxxxxxxxx.com treatments.json find%5Bcreated_at%5D%5B%24gte%5D=2022-05-30T06:00+02:00&find%5Bcreated_at%5D%5B%24lte%5D=2022-06-01T18:00+02:00 +-rw-r--r-- 1 titi titi 231419 Jun 25 19:54 ns-treatments.2022-05-31.json + + +Log information after 2022-05-30 removed for unit test \ No newline at end of file diff --git a/app/src/test/res/autotune/test4/newprofile.2022-05-30.json b/app/src/test/res/autotune/test4/newprofile.2022-05-30.json new file mode 100644 index 0000000000..d2e0e6a17c --- /dev/null +++ b/app/src/test/res/autotune/test4/newprofile.2022-05-30.json @@ -0,0 +1,194 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 0.979, + "start": "00:00:00", + "untuned": 5 + }, + { + "i": 1, + "minutes": 60, + "rate": 0.995, + "start": "01:00:00", + "untuned": 1 + }, + { + "i": 2, + "minutes": 120, + "rate": 0.997, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.129, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 0.954, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.883, + "start": "05:00:00", + "untuned": 1 + }, + { + "i": 6, + "minutes": 360, + "rate": 0.804, + "start": "06:00:00", + "untuned": 1 + }, + { + "i": 7, + "minutes": 420, + "rate": 0.843, + "start": "07:00:00", + "untuned": 2 + }, + { + "i": 8, + "minutes": 480, + "rate": 0.887, + "start": "08:00:00", + "untuned": 2 + }, + { + "i": 9, + "minutes": 540, + "rate": 0.855, + "start": "09:00:00", + "untuned": 5 + }, + { + "i": 10, + "minutes": 600, + "rate": 0.856, + "start": "10:00:00", + "untuned": 5 + }, + { + "i": 11, + "minutes": 660, + "rate": 0.844, + "start": "11:00:00", + "untuned": 5 + }, + { + "i": 12, + "minutes": 720, + "rate": 0.856, + "start": "12:00:00", + "untuned": 6 + }, + { + "i": 13, + "minutes": 780, + "rate": 0.854, + "start": "13:00:00", + "untuned": 6 + }, + { + "i": 14, + "minutes": 840, + "rate": 0.835, + "start": "14:00:00", + "untuned": 5 + }, + { + "i": 15, + "minutes": 900, + "rate": 0.83, + "start": "15:00:00", + "untuned": 5 + }, + { + "i": 16, + "minutes": 960, + "rate": 0.801, + "start": "16:00:00", + "untuned": 5 + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.821, + "start": "17:00:00", + "untuned": 5 + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.842, + "start": "18:00:00", + "untuned": 4 + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.929, + "start": "19:00:00", + "untuned": 4 + }, + { + "i": 20, + "minutes": 1200, + "rate": 0.931, + "start": "20:00:00", + "untuned": 3 + }, + { + "i": 21, + "minutes": 1260, + "rate": 0.879, + "start": "21:00:00", + "untuned": 4 + }, + { + "i": 22, + "minutes": 1320, + "rate": 0.851, + "start": "22:00:00", + "untuned": 5 + }, + { + "i": 23, + "minutes": 1380, + "rate": 0.847, + "start": "23:00:00", + "untuned": 5 + } + ], + "carb_ratio": 4.997, + "csf": 16.363, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 79.673, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 79.673, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test4/ns-entries.2022-05-30.json b/app/src/test/res/autotune/test4/ns-entries.2022-05-30.json new file mode 100644 index 0000000000..0d6001d0ba --- /dev/null +++ b/app/src/test/res/autotune/test4/ns-entries.2022-05-30.json @@ -0,0 +1,2906 @@ +[ + { + "_id": "6295769c9bc0370004b42b86", + "device": "AndroidAPS-DexcomG6", + "date": 1653962362000, + "dateString": "2022-05-31T01:59:22.000Z", + "isValid": true, + "sgv": 96, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-31T01:59:56.953Z" + }, + { + "_id": "6295756f9bc0370004b42b83", + "device": "AndroidAPS-DexcomG6", + "date": 1653962062000, + "dateString": "2022-05-31T01:54:22.000Z", + "isValid": true, + "sgv": 103, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:54:55.893Z" + }, + { + "_id": "629574429bc0370004b42b80", + "device": "AndroidAPS-DexcomG6", + "date": 1653961763000, + "dateString": "2022-05-31T01:49:23.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:49:54.739Z" + }, + { + "_id": "629573159bc0370004b42b7d", + "device": "AndroidAPS-DexcomG6", + "date": 1653961462000, + "dateString": "2022-05-31T01:44:22.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:44:53.650Z" + }, + { + "_id": "629571e89bc0370004b42b7a", + "device": "AndroidAPS-DexcomG6", + "date": 1653961162000, + "dateString": "2022-05-31T01:39:22.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:39:52.509Z" + }, + { + "_id": "629570bb9bc0370004b42b77", + "device": "AndroidAPS-DexcomG6", + "date": 1653960862000, + "dateString": "2022-05-31T01:34:22.000Z", + "isValid": true, + "sgv": 116, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:34:51.145Z" + }, + { + "_id": "62956f90e4f1e400046e05c7", + "device": "AndroidAPS-DexcomG6", + "date": 1653960561000, + "dateString": "2022-05-31T01:29:21.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:29:52.070Z" + }, + { + "_id": "62956e62e4f1e400046e05c3", + "device": "AndroidAPS-DexcomG6", + "date": 1653960262000, + "dateString": "2022-05-31T01:24:22.000Z", + "isValid": true, + "sgv": 107, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:24:50.951Z" + }, + { + "_id": "62956d35e4f1e400046e05c1", + "device": "AndroidAPS-DexcomG6", + "date": 1653959962000, + "dateString": "2022-05-31T01:19:22.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-31T01:19:49.260Z" + }, + { + "_id": "62956c07e4f1e400046e05be", + "device": "AndroidAPS-DexcomG6", + "date": 1653959662000, + "dateString": "2022-05-31T01:14:22.000Z", + "isValid": true, + "sgv": 108, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-31T01:14:47.990Z" + }, + { + "_id": "62956adae4f1e400046e05bb", + "device": "AndroidAPS-DexcomG6", + "date": 1653959362000, + "dateString": "2022-05-31T01:09:22.000Z", + "isValid": true, + "sgv": 112, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-31T01:09:46.322Z" + }, + { + "_id": "629569abe4f1e400046e05b8", + "device": "AndroidAPS-DexcomG6", + "date": 1653959062000, + "dateString": "2022-05-31T01:04:22.000Z", + "isValid": true, + "sgv": 117, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-31T01:04:43.046Z" + }, + { + "_id": "6295687de4f1e400046e05b4", + "device": "AndroidAPS-DexcomG6", + "date": 1653958762000, + "dateString": "2022-05-31T00:59:22.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-31T00:59:41.709Z" + }, + { + "_id": "62954b36f89bc40004df9f60", + "device": "AndroidAPS-DexcomG6", + "date": 1653951262000, + "dateString": "2022-05-30T22:54:22.000Z", + "isValid": true, + "sgv": 170, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:54:46.692Z" + }, + { + "_id": "62954a21f89bc40004df9f5d", + "device": "AndroidAPS-DexcomG6", + "date": 1653950961000, + "dateString": "2022-05-30T22:49:21.000Z", + "isValid": true, + "sgv": 172, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:50:09.405Z" + }, + { + "_id": "629548f3f89bc40004df9f5a", + "device": "AndroidAPS-DexcomG6", + "date": 1653950662000, + "dateString": "2022-05-30T22:44:22.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:45:07.405Z" + }, + { + "_id": "629547acf89bc40004df9f57", + "device": "AndroidAPS-DexcomG6", + "date": 1653950362000, + "dateString": "2022-05-30T22:39:22.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:39:40.750Z" + }, + { + "_id": "629546941ded00000454b746", + "device": "AndroidAPS-DexcomG6", + "date": 1653950062000, + "dateString": "2022-05-30T22:34:22.000Z", + "isValid": true, + "sgv": 180, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:35:00.013Z" + }, + { + "_id": "629545651ded00000454b744", + "device": "AndroidAPS-DexcomG6", + "date": 1653949762000, + "dateString": "2022-05-30T22:29:22.000Z", + "isValid": true, + "sgv": 183, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:29:57.528Z" + }, + { + "_id": "629544361ded00000454b742", + "device": "AndroidAPS-DexcomG6", + "date": 1653949462000, + "dateString": "2022-05-30T22:24:22.000Z", + "isValid": true, + "sgv": 186, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:24:54.381Z" + }, + { + "_id": "629543081ded00000454b740", + "device": "AndroidAPS-DexcomG6", + "date": 1653949162000, + "dateString": "2022-05-30T22:19:22.000Z", + "isValid": true, + "sgv": 188, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:19:52.210Z" + }, + { + "_id": "629541da1ded00000454b73d", + "device": "AndroidAPS-DexcomG6", + "date": 1653948861000, + "dateString": "2022-05-30T22:14:21.000Z", + "isValid": true, + "sgv": 189, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:14:50.845Z" + }, + { + "_id": "629540ac1ded00000454b739", + "device": "AndroidAPS-DexcomG6", + "date": 1653948562000, + "dateString": "2022-05-30T22:09:22.000Z", + "isValid": true, + "sgv": 188, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:09:48.384Z" + }, + { + "_id": "62953f7e1ded00000454b737", + "device": "AndroidAPS-DexcomG6", + "date": 1653948262000, + "dateString": "2022-05-30T22:04:22.000Z", + "isValid": true, + "sgv": 185, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T22:04:46.798Z" + }, + { + "_id": "62953e5d86a3df0004eb4504", + "device": "AndroidAPS-DexcomG6", + "date": 1653947962000, + "dateString": "2022-05-30T21:59:22.000Z", + "isValid": true, + "sgv": 181, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:59:57.963Z" + }, + { + "_id": "62953d3086a3df0004eb4502", + "device": "AndroidAPS-DexcomG6", + "date": 1653947662000, + "dateString": "2022-05-30T21:54:22.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:54:56.505Z" + }, + { + "_id": "62953c0286a3df0004eb4500", + "device": "AndroidAPS-DexcomG6", + "date": 1653947361000, + "dateString": "2022-05-30T21:49:21.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:49:54.555Z" + }, + { + "_id": "62953ad486a3df0004eb44fd", + "device": "AndroidAPS-DexcomG6", + "date": 1653947062000, + "dateString": "2022-05-30T21:44:22.000Z", + "isValid": true, + "sgv": 181, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:44:52.471Z" + }, + { + "_id": "629539a586a3df0004eb44fb", + "device": "AndroidAPS-DexcomG6", + "date": 1653946762000, + "dateString": "2022-05-30T21:39:22.000Z", + "isValid": true, + "sgv": 188, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:39:49.822Z" + }, + { + "_id": "6295387786a3df0004eb44f9", + "device": "AndroidAPS-DexcomG6", + "date": 1653946462000, + "dateString": "2022-05-30T21:34:22.000Z", + "isValid": true, + "sgv": 192, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T21:34:47.953Z" + }, + { + "_id": "6295374986a3df0004eb44f6", + "device": "AndroidAPS-DexcomG6", + "date": 1653946162000, + "dateString": "2022-05-30T21:29:22.000Z", + "isValid": true, + "sgv": 187, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T21:29:45.117Z" + }, + { + "_id": "6295362fe3aedd00046f3884", + "device": "AndroidAPS-DexcomG6", + "date": 1653945863000, + "dateString": "2022-05-30T21:24:23.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:25:03.893Z" + }, + { + "_id": "62953501e3aedd00046f3880", + "device": "AndroidAPS-DexcomG6", + "date": 1653945562000, + "dateString": "2022-05-30T21:19:22.000Z", + "isValid": true, + "sgv": 167, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:20:01.384Z" + }, + { + "_id": "629533d3e3aedd00046f387e", + "device": "AndroidAPS-DexcomG6", + "date": 1653945263000, + "dateString": "2022-05-30T21:14:23.000Z", + "isValid": true, + "sgv": 162, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:14:59.957Z" + }, + { + "_id": "629532a6e3aedd00046f387c", + "device": "AndroidAPS-DexcomG6", + "date": 1653944962000, + "dateString": "2022-05-30T21:09:22.000Z", + "isValid": true, + "sgv": 161, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:09:58.543Z" + }, + { + "_id": "62953178e3aedd00046f3879", + "device": "AndroidAPS-DexcomG6", + "date": 1653944662000, + "dateString": "2022-05-30T21:04:22.000Z", + "isValid": true, + "sgv": 163, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T21:04:56.492Z" + }, + { + "_id": "62953049e3aedd00046f3874", + "device": "AndroidAPS-DexcomG6", + "date": 1653944362000, + "dateString": "2022-05-30T20:59:22.000Z", + "isValid": true, + "sgv": 166, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:59:53.874Z" + }, + { + "_id": "62952f1be3aedd00046f3871", + "device": "AndroidAPS-DexcomG6", + "date": 1653944062000, + "dateString": "2022-05-30T20:54:22.000Z", + "isValid": true, + "sgv": 169, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:54:51.953Z" + }, + { + "_id": "62952de5e3aedd00046f386d", + "device": "AndroidAPS-DexcomG6", + "date": 1653943762000, + "dateString": "2022-05-30T20:49:22.000Z", + "isValid": true, + "sgv": 171, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:49:41.125Z" + }, + { + "_id": "62952cb7e3aedd00046f386a", + "device": "AndroidAPS-DexcomG6", + "date": 1653943462000, + "dateString": "2022-05-30T20:44:22.000Z", + "isValid": true, + "sgv": 173, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:44:39.868Z" + }, + { + "_id": "62952b89e3aedd00046f3866", + "device": "AndroidAPS-DexcomG6", + "date": 1653943162000, + "dateString": "2022-05-30T20:39:22.000Z", + "isValid": true, + "sgv": 174, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:39:37.778Z" + }, + { + "_id": "62952a5de3aedd00046f385f", + "device": "AndroidAPS-DexcomG6", + "date": 1653942863000, + "dateString": "2022-05-30T20:34:23.000Z", + "isValid": true, + "sgv": 175, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:34:37.302Z" + }, + { + "_id": "62952949e3aedd00046f385c", + "device": "AndroidAPS-DexcomG6", + "date": 1653942563000, + "dateString": "2022-05-30T20:29:23.000Z", + "isValid": true, + "sgv": 176, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:30:01.193Z" + }, + { + "_id": "6295284ee3aedd00046f3858", + "device": "AndroidAPS-DexcomG6", + "date": 1653942262000, + "dateString": "2022-05-30T20:24:22.000Z", + "isValid": true, + "sgv": 178, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:25:50.333Z" + }, + { + "_id": "629526eee3aedd00046f3855", + "device": "AndroidAPS-DexcomG6", + "date": 1653941961000, + "dateString": "2022-05-30T20:19:21.000Z", + "isValid": true, + "sgv": 179, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:19:58.496Z" + }, + { + "_id": "629525baf63c010004ea5d29", + "device": "AndroidAPS-DexcomG6", + "date": 1653941662000, + "dateString": "2022-05-30T20:14:22.000Z", + "isValid": true, + "sgv": 180, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:14:50.164Z" + }, + { + "_id": "629524a6f63c010004ea5d26", + "device": "AndroidAPS-DexcomG6", + "date": 1653941361000, + "dateString": "2022-05-30T20:09:21.000Z", + "isValid": true, + "sgv": 181, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:10:14.057Z" + }, + { + "_id": "62952379f63c010004ea5d22", + "device": "AndroidAPS-DexcomG6", + "date": 1653941062000, + "dateString": "2022-05-30T20:04:22.000Z", + "isValid": true, + "sgv": 182, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T20:05:13.099Z" + }, + { + "_id": "62952232f63c010004ea5d1f", + "device": "AndroidAPS-DexcomG6", + "date": 1653940762000, + "dateString": "2022-05-30T19:59:22.000Z", + "isValid": true, + "sgv": 183, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:59:46.536Z" + }, + { + "_id": "6295211ef63c010004ea5d1c", + "device": "AndroidAPS-DexcomG6", + "date": 1653940461000, + "dateString": "2022-05-30T19:54:21.000Z", + "isValid": true, + "sgv": 184, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:55:10.510Z" + }, + { + "_id": "62951fd8f63c010004ea5d1a", + "device": "AndroidAPS-DexcomG6", + "date": 1653940161000, + "dateString": "2022-05-30T19:49:21.000Z", + "isValid": true, + "sgv": 185, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:49:44.530Z" + }, + { + "_id": "62951eddf63c010004ea5d16", + "device": "AndroidAPS-DexcomG6", + "date": 1653939861000, + "dateString": "2022-05-30T19:44:21.000Z", + "isValid": true, + "sgv": 186, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:45:33.306Z" + }, + { + "_id": "62951d7ff63c010004ea5d12", + "device": "AndroidAPS-DexcomG6", + "date": 1653939561000, + "dateString": "2022-05-30T19:39:21.000Z", + "isValid": true, + "sgv": 187, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:39:43.397Z" + }, + { + "_id": "62951c51f63c010004ea5d0f", + "device": "AndroidAPS-DexcomG6", + "date": 1653939262000, + "dateString": "2022-05-30T19:34:22.000Z", + "isValid": true, + "sgv": 186, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:34:41.514Z" + }, + { + "_id": "62951b23f63c010004ea5d0b", + "device": "AndroidAPS-DexcomG6", + "date": 1653938962000, + "dateString": "2022-05-30T19:29:22.000Z", + "isValid": true, + "sgv": 185, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:29:39.093Z" + }, + { + "_id": "62951a0ef63c010004ea5d08", + "device": "AndroidAPS-DexcomG6", + "date": 1653938661000, + "dateString": "2022-05-30T19:24:21.000Z", + "isValid": true, + "sgv": 184, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:25:02.070Z" + }, + { + "_id": "629518def63c010004ea5d04", + "device": "AndroidAPS-DexcomG6", + "date": 1653938362000, + "dateString": "2022-05-30T19:19:22.000Z", + "isValid": true, + "sgv": 183, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:19:58.457Z" + }, + { + "_id": "629517b0f63c010004ea5d01", + "device": "AndroidAPS-DexcomG6", + "date": 1653938062000, + "dateString": "2022-05-30T19:14:22.000Z", + "isValid": true, + "sgv": 182, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:14:56.712Z" + }, + { + "_id": "62951683f63c010004ea5cff", + "device": "AndroidAPS-DexcomG6", + "date": 1653937762000, + "dateString": "2022-05-30T19:09:22.000Z", + "isValid": true, + "sgv": 181, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:09:55.010Z" + }, + { + "_id": "62951558f63c010004ea5cfc", + "device": "AndroidAPS-DexcomG6", + "date": 1653937462000, + "dateString": "2022-05-30T19:04:22.000Z", + "isValid": true, + "sgv": 181, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T19:04:56.708Z" + }, + { + "_id": "6295142af63c010004ea5cfa", + "device": "AndroidAPS-DexcomG6", + "date": 1653937162000, + "dateString": "2022-05-30T18:59:22.000Z", + "isValid": true, + "sgv": 180, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:59:54.428Z" + }, + { + "_id": "629512fcf63c010004ea5cf7", + "device": "AndroidAPS-DexcomG6", + "date": 1653936863000, + "dateString": "2022-05-30T18:54:23.000Z", + "isValid": true, + "sgv": 179, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:54:52.395Z" + }, + { + "_id": "629511c70f8c2e00042830a2", + "device": "AndroidAPS-DexcomG6", + "date": 1653936563000, + "dateString": "2022-05-30T18:49:23.000Z", + "isValid": true, + "sgv": 177, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:49:43.497Z" + }, + { + "_id": "629510990f8c2e000428309f", + "device": "AndroidAPS-DexcomG6", + "date": 1653936262000, + "dateString": "2022-05-30T18:44:22.000Z", + "isValid": true, + "sgv": 175, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T18:44:41.570Z" + }, + { + "_id": "62950f6b0f8c2e000428309c", + "device": "AndroidAPS-DexcomG6", + "date": 1653935962000, + "dateString": "2022-05-30T18:39:22.000Z", + "isValid": true, + "sgv": 172, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T18:39:39.460Z" + }, + { + "_id": "62950e3d0f8c2e0004283099", + "device": "AndroidAPS-DexcomG6", + "date": 1653935663000, + "dateString": "2022-05-30T18:34:23.000Z", + "isValid": true, + "sgv": 164, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T18:34:37.460Z" + }, + { + "_id": "62950d280f8c2e0004283094", + "device": "AndroidAPS-DexcomG6", + "date": 1653935363000, + "dateString": "2022-05-30T18:29:23.000Z", + "isValid": true, + "sgv": 156, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:30:00.224Z" + }, + { + "_id": "62950bf90f8c2e0004283091", + "device": "AndroidAPS-DexcomG6", + "date": 1653935062000, + "dateString": "2022-05-30T18:24:22.000Z", + "isValid": true, + "sgv": 150, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:24:57.761Z" + }, + { + "_id": "62950acb0f8c2e000428308d", + "device": "AndroidAPS-DexcomG6", + "date": 1653934761000, + "dateString": "2022-05-30T18:19:21.000Z", + "isValid": true, + "sgv": 147, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:19:55.662Z" + }, + { + "_id": "6295099a409703000484d1c9", + "device": "AndroidAPS-DexcomG6", + "date": 1653934461000, + "dateString": "2022-05-30T18:14:21.000Z", + "isValid": true, + "sgv": 144, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:14:50.027Z" + }, + { + "_id": "6295086b409703000484d1c6", + "device": "AndroidAPS-DexcomG6", + "date": 1653934162000, + "dateString": "2022-05-30T18:09:22.000Z", + "isValid": true, + "sgv": 140, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:09:47.806Z" + }, + { + "_id": "6295073d409703000484d1c4", + "device": "AndroidAPS-DexcomG6", + "date": 1653933862000, + "dateString": "2022-05-30T18:04:22.000Z", + "isValid": true, + "sgv": 137, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T18:04:45.808Z" + }, + { + "_id": "6295060f409703000484d1c1", + "device": "AndroidAPS-DexcomG6", + "date": 1653933562000, + "dateString": "2022-05-30T17:59:22.000Z", + "isValid": true, + "sgv": 136, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:59:43.089Z" + }, + { + "_id": "629504e1409703000484d1be", + "device": "AndroidAPS-DexcomG6", + "date": 1653933262000, + "dateString": "2022-05-30T17:54:22.000Z", + "isValid": true, + "sgv": 135, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:54:41.141Z" + }, + { + "_id": "629503cb409703000484d1ba", + "device": "AndroidAPS-DexcomG6", + "date": 1653932962000, + "dateString": "2022-05-30T17:49:22.000Z", + "isValid": true, + "sgv": 133, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:50:03.997Z" + }, + { + "_id": "6295029d409703000484d1b7", + "device": "AndroidAPS-DexcomG6", + "date": 1653932662000, + "dateString": "2022-05-30T17:44:22.000Z", + "isValid": true, + "sgv": 130, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:45:01.816Z" + }, + { + "_id": "6295015e55b9dd00048a5495", + "device": "AndroidAPS-DexcomG6", + "date": 1653932362000, + "dateString": "2022-05-30T17:39:22.000Z", + "isValid": true, + "sgv": 127, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:39:42.833Z" + }, + { + "_id": "6295003055b9dd00048a5493", + "device": "AndroidAPS-DexcomG6", + "date": 1653932061000, + "dateString": "2022-05-30T17:34:21.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:34:40.905Z" + }, + { + "_id": "6294ff1c55b9dd00048a5490", + "device": "AndroidAPS-DexcomG6", + "date": 1653931761000, + "dateString": "2022-05-30T17:29:21.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:30:04.244Z" + }, + { + "_id": "6294fded55b9dd00048a548e", + "device": "AndroidAPS-DexcomG6", + "date": 1653931462000, + "dateString": "2022-05-30T17:24:22.000Z", + "isValid": true, + "sgv": 121, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:25:01.436Z" + }, + { + "_id": "6294fcbf55b9dd00048a548c", + "device": "AndroidAPS-DexcomG6", + "date": 1653931162000, + "dateString": "2022-05-30T17:19:22.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:19:59.153Z" + }, + { + "_id": "6294fb9155b9dd00048a548a", + "device": "AndroidAPS-DexcomG6", + "date": 1653930862000, + "dateString": "2022-05-30T17:14:22.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:14:57.054Z" + }, + { + "_id": "6294fa6255b9dd00048a5488", + "device": "AndroidAPS-DexcomG6", + "date": 1653930562000, + "dateString": "2022-05-30T17:09:22.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:09:54.701Z" + }, + { + "_id": "6294f92d55b9dd00048a5486", + "device": "AndroidAPS-DexcomG6", + "date": 1653930261000, + "dateString": "2022-05-30T17:04:21.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T17:04:45.622Z" + }, + { + "_id": "6294f7fe55b9dd00048a5483", + "device": "AndroidAPS-DexcomG6", + "date": 1653929962000, + "dateString": "2022-05-30T16:59:22.000Z", + "isValid": true, + "sgv": 120, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:59:42.653Z" + }, + { + "_id": "6294f6ea55b9dd00048a5481", + "device": "AndroidAPS-DexcomG6", + "date": 1653929662000, + "dateString": "2022-05-30T16:54:22.000Z", + "isValid": true, + "sgv": 121, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:55:06.087Z" + }, + { + "_id": "6294f5bd55b9dd00048a547f", + "device": "AndroidAPS-DexcomG6", + "date": 1653929361000, + "dateString": "2022-05-30T16:49:21.000Z", + "isValid": true, + "sgv": 123, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:50:05.068Z" + }, + { + "_id": "6294f4db55b9dd00048a547d", + "device": "AndroidAPS-DexcomG6", + "date": 1653929062000, + "dateString": "2022-05-30T16:44:22.000Z", + "isValid": true, + "sgv": 125, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:46:19.989Z" + }, + { + "_id": "6294f35555b9dd00048a547a", + "device": "AndroidAPS-DexcomG6", + "date": 1653928761000, + "dateString": "2022-05-30T16:39:21.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:39:49.489Z" + }, + { + "_id": "6294f23fb23f340004e841eb", + "device": "AndroidAPS-DexcomG6", + "date": 1653928462000, + "dateString": "2022-05-30T16:34:22.000Z", + "isValid": true, + "sgv": 132, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:35:11.666Z" + }, + { + "_id": "6294f0f8b23f340004e841e8", + "device": "AndroidAPS-DexcomG6", + "date": 1653928161000, + "dateString": "2022-05-30T16:29:21.000Z", + "isValid": true, + "sgv": 133, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T16:29:44.123Z" + }, + { + "_id": "6294efcab23f340004e841e5", + "device": "AndroidAPS-DexcomG6", + "date": 1653927861000, + "dateString": "2022-05-30T16:24:21.000Z", + "isValid": true, + "sgv": 131, + "direction": "SingleUp", + "type": "sgv", + "created_at": "2022-05-30T16:24:42.057Z" + }, + { + "_id": "6294eeb5b23f340004e841e1", + "device": "AndroidAPS-DexcomG6", + "date": 1653927562000, + "dateString": "2022-05-30T16:19:22.000Z", + "isValid": true, + "sgv": 123, + "direction": "SingleUp", + "type": "sgv", + "created_at": "2022-05-30T16:20:05.391Z" + }, + { + "_id": "6294ed6eb23f340004e841de", + "device": "AndroidAPS-DexcomG6", + "date": 1653927262000, + "dateString": "2022-05-30T16:14:22.000Z", + "isValid": true, + "sgv": 111, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T16:14:38.319Z" + }, + { + "_id": "6294ec59b23f340004e841da", + "device": "AndroidAPS-DexcomG6", + "date": 1653926962000, + "dateString": "2022-05-30T16:09:22.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:10:01.438Z" + }, + { + "_id": "6294eb2bb23f340004e841d8", + "device": "AndroidAPS-DexcomG6", + "date": 1653926662000, + "dateString": "2022-05-30T16:04:22.000Z", + "isValid": true, + "sgv": 87, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:04:59.310Z" + }, + { + "_id": "6294ea10b23f340004e841d5", + "device": "AndroidAPS-DexcomG6", + "date": 1653926362000, + "dateString": "2022-05-30T15:59:22.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T16:00:16.597Z" + }, + { + "_id": "6294e8c9b23f340004e841d3", + "device": "AndroidAPS-DexcomG6", + "date": 1653926062000, + "dateString": "2022-05-30T15:54:22.000Z", + "isValid": true, + "sgv": 81, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:54:49.400Z" + }, + { + "_id": "6294e79bb23f340004e841d1", + "device": "AndroidAPS-DexcomG6", + "date": 1653925761000, + "dateString": "2022-05-30T15:49:21.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:49:47.886Z" + }, + { + "_id": "6294e66eb23f340004e841cf", + "device": "AndroidAPS-DexcomG6", + "date": 1653925462000, + "dateString": "2022-05-30T15:44:22.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:44:46.677Z" + }, + { + "_id": "6294e554706f120004b7d161", + "device": "AndroidAPS-DexcomG6", + "date": 1653925162000, + "dateString": "2022-05-30T15:39:22.000Z", + "isValid": true, + "sgv": 77, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:40:04.657Z" + }, + { + "_id": "6294e427706f120004b7d15f", + "device": "AndroidAPS-DexcomG6", + "date": 1653924862000, + "dateString": "2022-05-30T15:34:22.000Z", + "isValid": true, + "sgv": 77, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:35:03.426Z" + }, + { + "_id": "6294e2fa706f120004b7d15c", + "device": "AndroidAPS-DexcomG6", + "date": 1653924562000, + "dateString": "2022-05-30T15:29:22.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:30:02.194Z" + }, + { + "_id": "6294e1cd706f120004b7d15a", + "device": "AndroidAPS-DexcomG6", + "date": 1653924262000, + "dateString": "2022-05-30T15:24:22.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:25:01.236Z" + }, + { + "_id": "6294e09f706f120004b7d158", + "device": "AndroidAPS-DexcomG6", + "date": 1653923961000, + "dateString": "2022-05-30T15:19:21.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:19:59.752Z" + }, + { + "_id": "6294dfbd706f120004b7d156", + "device": "AndroidAPS-DexcomG6", + "date": 1653923662000, + "dateString": "2022-05-30T15:14:22.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:16:13.728Z" + }, + { + "_id": "6294df40706f120004b7d154", + "device": "AndroidAPS-DexcomG6", + "date": 1653923361000, + "dateString": "2022-05-30T15:09:21.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:14:08.395Z" + }, + { + "_id": "6294ddc7706f120004b7d152", + "device": "AndroidAPS-DexcomG6", + "date": 1653923061000, + "dateString": "2022-05-30T15:04:21.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:07:51.780Z" + }, + { + "_id": "6294dcde5f047100042886c5", + "device": "AndroidAPS-DexcomG6", + "date": 1653922761000, + "dateString": "2022-05-30T14:59:21.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T15:03:58.124Z" + }, + { + "_id": "6294db4c5f047100042886c3", + "device": "AndroidAPS-DexcomG6", + "date": 1653922461000, + "dateString": "2022-05-30T14:54:21.000Z", + "isValid": true, + "sgv": 81, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:57:16.389Z" + }, + { + "_id": "6294da065f047100042886c0", + "device": "AndroidAPS-DexcomG6", + "date": 1653922161000, + "dateString": "2022-05-30T14:49:21.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:51:50.006Z" + }, + { + "_id": "6294d85b5f047100042886be", + "device": "AndroidAPS-DexcomG6", + "date": 1653921862000, + "dateString": "2022-05-30T14:44:22.000Z", + "isValid": true, + "sgv": 84, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:44:43.154Z" + }, + { + "_id": "6294d72e5f047100042886bc", + "device": "AndroidAPS-DexcomG6", + "date": 1653921561000, + "dateString": "2022-05-30T14:39:21.000Z", + "isValid": true, + "sgv": 85, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:39:42.170Z" + }, + { + "_id": "6294d6005f047100042886ba", + "device": "AndroidAPS-DexcomG6", + "date": 1653921261000, + "dateString": "2022-05-30T14:34:21.000Z", + "isValid": true, + "sgv": 87, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:34:40.716Z" + }, + { + "_id": "6294d4dbdac1e20004fde59a", + "device": "AndroidAPS-DexcomG6", + "date": 1653920961000, + "dateString": "2022-05-30T14:29:21.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:29:47.439Z" + }, + { + "_id": "6294d3aedac1e20004fde598", + "device": "AndroidAPS-DexcomG6", + "date": 1653920661000, + "dateString": "2022-05-30T14:24:21.000Z", + "isValid": true, + "sgv": 93, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:24:46.261Z" + }, + { + "_id": "6294d281dac1e20004fde596", + "device": "AndroidAPS-DexcomG6", + "date": 1653920361000, + "dateString": "2022-05-30T14:19:21.000Z", + "isValid": true, + "sgv": 97, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:19:45.303Z" + }, + { + "_id": "6294d154dac1e20004fde594", + "device": "AndroidAPS-DexcomG6", + "date": 1653920062000, + "dateString": "2022-05-30T14:14:22.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:14:44.142Z" + }, + { + "_id": "6294d026dac1e20004fde592", + "device": "AndroidAPS-DexcomG6", + "date": 1653919761000, + "dateString": "2022-05-30T14:09:21.000Z", + "isValid": true, + "sgv": 103, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:09:42.740Z" + }, + { + "_id": "6294cf12dac1e20004fde58f", + "device": "AndroidAPS-DexcomG6", + "date": 1653919462000, + "dateString": "2022-05-30T14:04:22.000Z", + "isValid": true, + "sgv": 106, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T14:05:06.902Z" + }, + { + "_id": "6294cdccdac1e20004fde58d", + "device": "AndroidAPS-DexcomG6", + "date": 1653919161000, + "dateString": "2022-05-30T13:59:21.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T13:59:40.487Z" + }, + { + "_id": "6294cc9cb8c0c10004ff0014", + "device": "AndroidAPS-DexcomG6", + "date": 1653918862000, + "dateString": "2022-05-30T13:54:22.000Z", + "isValid": true, + "sgv": 113, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T13:54:36.799Z" + }, + { + "_id": "6294cb88b8c0c10004ff0012", + "device": "AndroidAPS-DexcomG6", + "date": 1653918561000, + "dateString": "2022-05-30T13:49:21.000Z", + "isValid": true, + "sgv": 117, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T13:50:00.678Z" + }, + { + "_id": "6294ca5bb8c0c10004ff0010", + "device": "AndroidAPS-DexcomG6", + "date": 1653918262000, + "dateString": "2022-05-30T13:44:22.000Z", + "isValid": true, + "sgv": 121, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:44:59.703Z" + }, + { + "_id": "6294c92eb8c0c10004ff000d", + "device": "AndroidAPS-DexcomG6", + "date": 1653917962000, + "dateString": "2022-05-30T13:39:22.000Z", + "isValid": true, + "sgv": 126, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:39:58.439Z" + }, + { + "_id": "6294c801b8c0c10004ff000b", + "device": "AndroidAPS-DexcomG6", + "date": 1653917662000, + "dateString": "2022-05-30T13:34:22.000Z", + "isValid": true, + "sgv": 130, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:34:57.267Z" + }, + { + "_id": "6294c6d3b8c0c10004ff0009", + "device": "AndroidAPS-DexcomG6", + "date": 1653917362000, + "dateString": "2022-05-30T13:29:22.000Z", + "isValid": true, + "sgv": 136, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:29:55.794Z" + }, + { + "_id": "6294c5a6b8c0c10004ff0007", + "device": "AndroidAPS-DexcomG6", + "date": 1653917062000, + "dateString": "2022-05-30T13:24:22.000Z", + "isValid": true, + "sgv": 141, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:24:54.571Z" + }, + { + "_id": "6294c48252bed20004c9a2bc", + "device": "AndroidAPS-DexcomG6", + "date": 1653916762000, + "dateString": "2022-05-30T13:19:22.000Z", + "isValid": true, + "sgv": 147, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:20:02.947Z" + }, + { + "_id": "6294c35552bed20004c9a2ba", + "device": "AndroidAPS-DexcomG6", + "date": 1653916461000, + "dateString": "2022-05-30T13:14:21.000Z", + "isValid": true, + "sgv": 152, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:15:01.720Z" + }, + { + "_id": "6294c22852bed20004c9a2b7", + "device": "AndroidAPS-DexcomG6", + "date": 1653916162000, + "dateString": "2022-05-30T13:09:22.000Z", + "isValid": true, + "sgv": 158, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:10:00.478Z" + }, + { + "_id": "6294c0fb52bed20004c9a2b5", + "device": "AndroidAPS-DexcomG6", + "date": 1653915862000, + "dateString": "2022-05-30T13:04:22.000Z", + "isValid": true, + "sgv": 164, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T13:04:59.247Z" + }, + { + "_id": "6294bfce52bed20004c9a2b2", + "device": "AndroidAPS-DexcomG6", + "date": 1653915561000, + "dateString": "2022-05-30T12:59:21.000Z", + "isValid": true, + "sgv": 170, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:59:58.302Z" + }, + { + "_id": "6294bea052bed20004c9a2af", + "device": "AndroidAPS-DexcomG6", + "date": 1653915262000, + "dateString": "2022-05-30T12:54:22.000Z", + "isValid": true, + "sgv": 176, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:54:56.765Z" + }, + { + "_id": "6294bd7352bed20004c9a2ac", + "device": "AndroidAPS-DexcomG6", + "date": 1653914962000, + "dateString": "2022-05-30T12:49:22.000Z", + "isValid": true, + "sgv": 182, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:49:55.775Z" + }, + { + "_id": "6294bc52ff39db0004546864", + "device": "AndroidAPS-DexcomG6", + "date": 1653914661000, + "dateString": "2022-05-30T12:44:21.000Z", + "isValid": true, + "sgv": 188, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:45:06.129Z" + }, + { + "_id": "6294bb0bff39db0004546861", + "device": "AndroidAPS-DexcomG6", + "date": 1653914362000, + "dateString": "2022-05-30T12:39:22.000Z", + "isValid": true, + "sgv": 195, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:39:39.194Z" + }, + { + "_id": "6294b9f6ff39db000454685e", + "device": "AndroidAPS-DexcomG6", + "date": 1653914062000, + "dateString": "2022-05-30T12:34:22.000Z", + "isValid": true, + "sgv": 203, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:35:02.052Z" + }, + { + "_id": "6294b8c7ff39db000454685b", + "device": "AndroidAPS-DexcomG6", + "date": 1653913762000, + "dateString": "2022-05-30T12:29:22.000Z", + "isValid": true, + "sgv": 213, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:29:59.741Z" + }, + { + "_id": "6294b799ff39db0004546858", + "device": "AndroidAPS-DexcomG6", + "date": 1653913462000, + "dateString": "2022-05-30T12:24:22.000Z", + "isValid": true, + "sgv": 223, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T12:24:57.749Z" + }, + { + "_id": "6294b66bff39db0004546853", + "device": "AndroidAPS-DexcomG6", + "date": 1653913162000, + "dateString": "2022-05-30T12:19:22.000Z", + "isValid": true, + "sgv": 232, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T12:19:55.640Z" + }, + { + "_id": "6294b53dff39db0004546852", + "device": "AndroidAPS-DexcomG6", + "date": 1653912862000, + "dateString": "2022-05-30T12:14:22.000Z", + "isValid": true, + "sgv": 242, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T12:14:53.986Z" + }, + { + "_id": "6294b4130f39100004ec41f5", + "device": "AndroidAPS-DexcomG6", + "date": 1653912562000, + "dateString": "2022-05-30T12:09:22.000Z", + "isValid": true, + "sgv": 248, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T12:09:55.708Z" + }, + { + "_id": "6294b2e50f39100004ec41f3", + "device": "AndroidAPS-DexcomG6", + "date": 1653912261000, + "dateString": "2022-05-30T12:04:21.000Z", + "isValid": true, + "sgv": 251, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T12:04:53.216Z" + }, + { + "_id": "6294b1d10f39100004ec41f1", + "device": "AndroidAPS-DexcomG6", + "date": 1653911961000, + "dateString": "2022-05-30T11:59:21.000Z", + "isValid": true, + "sgv": 251, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T12:00:17.223Z" + }, + { + "_id": "6294b08a0f39100004ec41ef", + "device": "AndroidAPS-DexcomG6", + "date": 1653911662000, + "dateString": "2022-05-30T11:54:22.000Z", + "isValid": true, + "sgv": 249, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T11:54:50.545Z" + }, + { + "_id": "6294af5c0f39100004ec41ed", + "device": "AndroidAPS-DexcomG6", + "date": 1653911361000, + "dateString": "2022-05-30T11:49:21.000Z", + "isValid": true, + "sgv": 246, + "direction": "SingleUp", + "type": "sgv", + "created_at": "2022-05-30T11:49:48.926Z" + }, + { + "_id": "6294ae2f0f39100004ec41e7", + "device": "AndroidAPS-DexcomG6", + "date": 1653911061000, + "dateString": "2022-05-30T11:44:21.000Z", + "isValid": true, + "sgv": 240, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T11:44:47.323Z" + }, + { + "_id": "6294ad1b0f39100004ec41e2", + "device": "AndroidAPS-DexcomG6", + "date": 1653910761000, + "dateString": "2022-05-30T11:39:21.000Z", + "isValid": true, + "sgv": 230, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T11:40:11.205Z" + }, + { + "_id": "6294abd9ac5400000430888e", + "device": "AndroidAPS-DexcomG6", + "date": 1653910462000, + "dateString": "2022-05-30T11:34:22.000Z", + "isValid": true, + "sgv": 215, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T11:34:49.146Z" + }, + { + "_id": "6294aaabac5400000430888a", + "device": "AndroidAPS-DexcomG6", + "date": 1653910161000, + "dateString": "2022-05-30T11:29:21.000Z", + "isValid": true, + "sgv": 195, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T11:29:47.695Z" + }, + { + "_id": "6294a97eac54000004308887", + "device": "AndroidAPS-DexcomG6", + "date": 1653909861000, + "dateString": "2022-05-30T11:24:21.000Z", + "isValid": true, + "sgv": 172, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T11:24:46.490Z" + }, + { + "_id": "6294a851ac54000004308883", + "device": "AndroidAPS-DexcomG6", + "date": 1653909561000, + "dateString": "2022-05-30T11:19:21.000Z", + "isValid": true, + "sgv": 146, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T11:19:45.466Z" + }, + { + "_id": "6294a723ac54000004308881", + "device": "AndroidAPS-DexcomG6", + "date": 1653909261000, + "dateString": "2022-05-30T11:14:21.000Z", + "isValid": true, + "sgv": 122, + "direction": "SingleUp", + "type": "sgv", + "created_at": "2022-05-30T11:14:43.529Z" + }, + { + "_id": "6294a60eac5400000430887d", + "device": "AndroidAPS-DexcomG6", + "date": 1653908962000, + "dateString": "2022-05-30T11:09:22.000Z", + "isValid": true, + "sgv": 102, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T11:10:06.733Z" + }, + { + "_id": "6294a4d1ac5400000430887a", + "device": "AndroidAPS-DexcomG6", + "date": 1653908662000, + "dateString": "2022-05-30T11:04:22.000Z", + "isValid": true, + "sgv": 88, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T11:04:49.434Z" + }, + { + "_id": "6294a3a3ac54000004308877", + "device": "AndroidAPS-DexcomG6", + "date": 1653908361000, + "dateString": "2022-05-30T10:59:21.000Z", + "isValid": true, + "sgv": 81, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:59:47.232Z" + }, + { + "_id": "6294a274ac54000004308874", + "device": "AndroidAPS-DexcomG6", + "date": 1653908062000, + "dateString": "2022-05-30T10:54:22.000Z", + "isValid": true, + "sgv": 77, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:54:44.532Z" + }, + { + "_id": "6294a15bc2e464000413b7a8", + "device": "AndroidAPS-DexcomG6", + "date": 1653907762000, + "dateString": "2022-05-30T10:49:22.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:50:03.007Z" + }, + { + "_id": "6294a02dc2e464000413b7a6", + "device": "AndroidAPS-DexcomG6", + "date": 1653907461000, + "dateString": "2022-05-30T10:44:21.000Z", + "isValid": true, + "sgv": 77, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:45:01.559Z" + }, + { + "_id": "62949f00c2e464000413b7a3", + "device": "AndroidAPS-DexcomG6", + "date": 1653907162000, + "dateString": "2022-05-30T10:39:22.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:40:00.055Z" + }, + { + "_id": "62949debc2e464000413b7a1", + "device": "AndroidAPS-DexcomG6", + "date": 1653906861000, + "dateString": "2022-05-30T10:34:21.000Z", + "isValid": true, + "sgv": 79, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:35:23.163Z" + }, + { + "_id": "62949ca4c2e464000413b79f", + "device": "AndroidAPS-DexcomG6", + "date": 1653906561000, + "dateString": "2022-05-30T10:29:21.000Z", + "isValid": true, + "sgv": 80, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:29:56.711Z" + }, + { + "_id": "62949b77c2e464000413b79d", + "device": "AndroidAPS-DexcomG6", + "date": 1653906262000, + "dateString": "2022-05-30T10:24:22.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:24:55.547Z" + }, + { + "_id": "62949a4ac2e464000413b79a", + "device": "AndroidAPS-DexcomG6", + "date": 1653905961000, + "dateString": "2022-05-30T10:19:21.000Z", + "isValid": true, + "sgv": 84, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:19:54.421Z" + }, + { + "_id": "6294991b5989a90004f0c233", + "device": "AndroidAPS-DexcomG6", + "date": 1653905661000, + "dateString": "2022-05-30T10:14:21.000Z", + "isValid": true, + "sgv": 87, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:14:51.432Z" + }, + { + "_id": "629497ee5989a90004f0c230", + "device": "AndroidAPS-DexcomG6", + "date": 1653905362000, + "dateString": "2022-05-30T10:09:22.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:09:50.202Z" + }, + { + "_id": "629496c15989a90004f0c22d", + "device": "AndroidAPS-DexcomG6", + "date": 1653905061000, + "dateString": "2022-05-30T10:04:21.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T10:04:49.010Z" + }, + { + "_id": "629495ac5989a90004f0c22a", + "device": "AndroidAPS-DexcomG6", + "date": 1653904761000, + "dateString": "2022-05-30T09:59:21.000Z", + "isValid": true, + "sgv": 99, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T10:00:12.873Z" + }, + { + "_id": "629494665989a90004f0c228", + "device": "AndroidAPS-DexcomG6", + "date": 1653904461000, + "dateString": "2022-05-30T09:54:21.000Z", + "isValid": true, + "sgv": 102, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:54:46.582Z" + }, + { + "_id": "629493395989a90004f0c225", + "device": "AndroidAPS-DexcomG6", + "date": 1653904161000, + "dateString": "2022-05-30T09:49:21.000Z", + "isValid": true, + "sgv": 107, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:49:45.193Z" + }, + { + "_id": "6294920b5989a90004f0c223", + "device": "AndroidAPS-DexcomG6", + "date": 1653903861000, + "dateString": "2022-05-30T09:44:21.000Z", + "isValid": true, + "sgv": 112, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:44:43.997Z" + }, + { + "_id": "629490e476174b0004fbd22b", + "device": "AndroidAPS-DexcomG6", + "date": 1653903561000, + "dateString": "2022-05-30T09:39:21.000Z", + "isValid": true, + "sgv": 119, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:39:48.475Z" + }, + { + "_id": "62948fb776174b0004fbd229", + "device": "AndroidAPS-DexcomG6", + "date": 1653903261000, + "dateString": "2022-05-30T09:34:21.000Z", + "isValid": true, + "sgv": 125, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:34:47.315Z" + }, + { + "_id": "62948ebc76174b0004fbd227", + "device": "AndroidAPS-DexcomG6", + "date": 1653902961000, + "dateString": "2022-05-30T09:29:21.000Z", + "isValid": true, + "sgv": 131, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:30:36.089Z" + }, + { + "_id": "62948d5d76174b0004fbd225", + "device": "AndroidAPS-DexcomG6", + "date": 1653902661000, + "dateString": "2022-05-30T09:24:21.000Z", + "isValid": true, + "sgv": 138, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:24:45.006Z" + }, + { + "_id": "62948c4876174b0004fbd222", + "device": "AndroidAPS-DexcomG6", + "date": 1653902361000, + "dateString": "2022-05-30T09:19:21.000Z", + "isValid": true, + "sgv": 146, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:20:08.645Z" + }, + { + "_id": "62948b0276174b0004fbd21f", + "device": "AndroidAPS-DexcomG6", + "date": 1653902061000, + "dateString": "2022-05-30T09:14:21.000Z", + "isValid": true, + "sgv": 156, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:14:42.378Z" + }, + { + "_id": "62948a0776174b0004fbd21d", + "device": "AndroidAPS-DexcomG6", + "date": 1653901761000, + "dateString": "2022-05-30T09:09:21.000Z", + "isValid": true, + "sgv": 166, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:10:31.409Z" + }, + { + "_id": "629488b58ecbb3000401e2de", + "device": "AndroidAPS-DexcomG6", + "date": 1653901461000, + "dateString": "2022-05-30T09:04:21.000Z", + "isValid": true, + "sgv": 175, + "direction": "FortyFiveDown", + "type": "sgv", + "created_at": "2022-05-30T09:04:53.220Z" + }, + { + "_id": "629487878ecbb3000401e2dc", + "device": "AndroidAPS-DexcomG6", + "date": 1653901161000, + "dateString": "2022-05-30T08:59:21.000Z", + "isValid": true, + "sgv": 183, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:59:51.963Z" + }, + { + "_id": "6294865a8ecbb3000401e2da", + "device": "AndroidAPS-DexcomG6", + "date": 1653900861000, + "dateString": "2022-05-30T08:54:21.000Z", + "isValid": true, + "sgv": 189, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:54:50.449Z" + }, + { + "_id": "6294852d8ecbb3000401e2d7", + "device": "AndroidAPS-DexcomG6", + "date": 1653900561000, + "dateString": "2022-05-30T08:49:21.000Z", + "isValid": true, + "sgv": 193, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:49:49.550Z" + }, + { + "_id": "629484008ecbb3000401e2d3", + "device": "AndroidAPS-DexcomG6", + "date": 1653900261000, + "dateString": "2022-05-30T08:44:21.000Z", + "isValid": true, + "sgv": 195, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:44:48.348Z" + }, + { + "_id": "629482d28ecbb3000401e2d0", + "device": "AndroidAPS-DexcomG6", + "date": 1653899961000, + "dateString": "2022-05-30T08:39:21.000Z", + "isValid": true, + "sgv": 197, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:39:46.821Z" + }, + { + "_id": "629481a58ecbb3000401e2cd", + "device": "AndroidAPS-DexcomG6", + "date": 1653899661000, + "dateString": "2022-05-30T08:34:21.000Z", + "isValid": true, + "sgv": 199, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:34:45.627Z" + }, + { + "_id": "62948083d10aeb0004cd3ff4", + "device": "AndroidAPS-DexcomG6", + "date": 1653899361000, + "dateString": "2022-05-30T08:29:21.000Z", + "isValid": true, + "sgv": 202, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:29:55.869Z" + }, + { + "_id": "62947f56d10aeb0004cd3ff0", + "device": "AndroidAPS-DexcomG6", + "date": 1653899062000, + "dateString": "2022-05-30T08:24:22.000Z", + "isValid": true, + "sgv": 205, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:24:54.980Z" + }, + { + "_id": "62947e29d10aeb0004cd3fed", + "device": "AndroidAPS-DexcomG6", + "date": 1653898761000, + "dateString": "2022-05-30T08:19:21.000Z", + "isValid": true, + "sgv": 206, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:19:53.852Z" + }, + { + "_id": "62947cfcd10aeb0004cd3feb", + "device": "AndroidAPS-DexcomG6", + "date": 1653898461000, + "dateString": "2022-05-30T08:14:21.000Z", + "isValid": true, + "sgv": 207, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:14:52.631Z" + }, + { + "_id": "62947bcfd10aeb0004cd3fe9", + "device": "AndroidAPS-DexcomG6", + "date": 1653898161000, + "dateString": "2022-05-30T08:09:21.000Z", + "isValid": true, + "sgv": 209, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:09:51.204Z" + }, + { + "_id": "62947aa2d10aeb0004cd3fe7", + "device": "AndroidAPS-DexcomG6", + "date": 1653897861000, + "dateString": "2022-05-30T08:04:21.000Z", + "isValid": true, + "sgv": 213, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T08:04:50.320Z" + }, + { + "_id": "62947975d10aeb0004cd3fe5", + "device": "AndroidAPS-DexcomG6", + "date": 1653897561000, + "dateString": "2022-05-30T07:59:21.000Z", + "isValid": true, + "sgv": 217, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:59:49.147Z" + }, + { + "_id": "629478477e1237000471bf4e", + "device": "AndroidAPS-DexcomG6", + "date": 1653897262000, + "dateString": "2022-05-30T07:54:22.000Z", + "isValid": true, + "sgv": 219, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:54:47.898Z" + }, + { + "_id": "6294771a7e1237000471bf4c", + "device": "AndroidAPS-DexcomG6", + "date": 1653896961000, + "dateString": "2022-05-30T07:49:21.000Z", + "isValid": true, + "sgv": 219, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:49:46.684Z" + }, + { + "_id": "629475ed7e1237000471bf4a", + "device": "AndroidAPS-DexcomG6", + "date": 1653896662000, + "dateString": "2022-05-30T07:44:22.000Z", + "isValid": true, + "sgv": 218, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:44:45.778Z" + }, + { + "_id": "629474c07e1237000471bf48", + "device": "AndroidAPS-DexcomG6", + "date": 1653896361000, + "dateString": "2022-05-30T07:39:21.000Z", + "isValid": true, + "sgv": 217, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:39:44.449Z" + }, + { + "_id": "629473927e1237000471bf46", + "device": "AndroidAPS-DexcomG6", + "date": 1653896061000, + "dateString": "2022-05-30T07:34:21.000Z", + "isValid": true, + "sgv": 213, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:34:42.398Z" + }, + { + "_id": "629472647e1237000471bf44", + "device": "AndroidAPS-DexcomG6", + "date": 1653895761000, + "dateString": "2022-05-30T07:29:21.000Z", + "isValid": true, + "sgv": 208, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:29:40.917Z" + }, + { + "_id": "629471377e1237000471bf42", + "device": "AndroidAPS-DexcomG6", + "date": 1653895461000, + "dateString": "2022-05-30T07:24:21.000Z", + "isValid": true, + "sgv": 204, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:24:39.113Z" + }, + { + "_id": "6294700d6e1b8e0004363e09", + "device": "AndroidAPS-DexcomG6", + "date": 1653895162000, + "dateString": "2022-05-30T07:19:22.000Z", + "isValid": true, + "sgv": 202, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:19:41.498Z" + }, + { + "_id": "62946ee06e1b8e0004363e07", + "device": "AndroidAPS-DexcomG6", + "date": 1653894861000, + "dateString": "2022-05-30T07:14:21.000Z", + "isValid": true, + "sgv": 201, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:14:40.201Z" + }, + { + "_id": "62946db36e1b8e0004363e05", + "device": "AndroidAPS-DexcomG6", + "date": 1653894562000, + "dateString": "2022-05-30T07:09:22.000Z", + "isValid": true, + "sgv": 202, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:09:39.329Z" + }, + { + "_id": "62946c9e6e1b8e0004363e03", + "device": "AndroidAPS-DexcomG6", + "date": 1653894260000, + "dateString": "2022-05-30T07:04:20.000Z", + "isValid": true, + "sgv": 203, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T07:05:02.549Z" + }, + { + "_id": "62946b8a6e1b8e0004363e01", + "device": "AndroidAPS-DexcomG6", + "date": 1653893961000, + "dateString": "2022-05-30T06:59:21.000Z", + "isValid": true, + "sgv": 203, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T07:00:26.210Z" + }, + { + "_id": "62946a5e6e1b8e0004363dfe", + "device": "AndroidAPS-DexcomG6", + "date": 1653893661000, + "dateString": "2022-05-30T06:54:21.000Z", + "isValid": true, + "sgv": 201, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T06:55:26.117Z" + }, + { + "_id": "629469166e1b8e0004363dfc", + "device": "AndroidAPS-DexcomG6", + "date": 1653893361000, + "dateString": "2022-05-30T06:49:21.000Z", + "isValid": true, + "sgv": 198, + "direction": "SingleUp", + "type": "sgv", + "created_at": "2022-05-30T06:49:58.419Z" + }, + { + "_id": "629467e1b82b320004ef5ed5", + "device": "AndroidAPS-DexcomG6", + "date": 1653893061000, + "dateString": "2022-05-30T06:44:21.000Z", + "isValid": true, + "sgv": 193, + "direction": "SingleUp", + "type": "sgv", + "created_at": "2022-05-30T06:44:49.181Z" + }, + { + "_id": "629466b3b82b320004ef5ed3", + "device": "AndroidAPS-DexcomG6", + "date": 1653892761000, + "dateString": "2022-05-30T06:39:21.000Z", + "isValid": true, + "sgv": 185, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T06:39:47.469Z" + }, + { + "_id": "62946586b82b320004ef5ed1", + "device": "AndroidAPS-DexcomG6", + "date": 1653892461000, + "dateString": "2022-05-30T06:34:21.000Z", + "isValid": true, + "sgv": 173, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T06:34:46.169Z" + }, + { + "_id": "62946458b82b320004ef5ecf", + "device": "AndroidAPS-DexcomG6", + "date": 1653892161000, + "dateString": "2022-05-30T06:29:21.000Z", + "isValid": true, + "sgv": 157, + "direction": "DoubleUp", + "type": "sgv", + "created_at": "2022-05-30T06:29:44.223Z" + }, + { + "_id": "6294632ab82b320004ef5ecc", + "device": "AndroidAPS-DexcomG6", + "date": 1653891861000, + "dateString": "2022-05-30T06:24:21.000Z", + "isValid": true, + "sgv": 137, + "direction": "SingleUp", + "type": "sgv", + "created_at": "2022-05-30T06:24:42.093Z" + }, + { + "_id": "62946214b82b320004ef5ec6", + "device": "AndroidAPS-DexcomG6", + "date": 1653891561000, + "dateString": "2022-05-30T06:19:21.000Z", + "isValid": true, + "sgv": 118, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T06:20:04.840Z" + }, + { + "_id": "629460cdb82b320004ef5ec4", + "device": "AndroidAPS-DexcomG6", + "date": 1653891261000, + "dateString": "2022-05-30T06:14:21.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T06:14:37.040Z" + }, + { + "_id": "62945faad2cadd0004350d89", + "device": "AndroidAPS-DexcomG6", + "date": 1653890961000, + "dateString": "2022-05-30T06:09:21.000Z", + "isValid": true, + "sgv": 92, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T06:09:46.664Z" + }, + { + "_id": "62945e7cd2cadd0004350d86", + "device": "AndroidAPS-DexcomG6", + "date": 1653890661000, + "dateString": "2022-05-30T06:04:21.000Z", + "isValid": true, + "sgv": 89, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T06:04:44.141Z" + }, + { + "_id": "62945d4dd2cadd0004350d83", + "device": "AndroidAPS-DexcomG6", + "date": 1653890361000, + "dateString": "2022-05-30T05:59:21.000Z", + "isValid": true, + "sgv": 90, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:59:41.863Z" + }, + { + "_id": "62945c38d2cadd0004350d80", + "device": "AndroidAPS-DexcomG6", + "date": 1653890061000, + "dateString": "2022-05-30T05:54:21.000Z", + "isValid": true, + "sgv": 92, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:55:04.735Z" + }, + { + "_id": "62945b0bd2cadd0004350d7d", + "device": "AndroidAPS-DexcomG6", + "date": 1653889761000, + "dateString": "2022-05-30T05:49:21.000Z", + "isValid": true, + "sgv": 94, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:50:03.127Z" + }, + { + "_id": "629459ddd2cadd0004350d7a", + "device": "AndroidAPS-DexcomG6", + "date": 1653889461000, + "dateString": "2022-05-30T05:44:21.000Z", + "isValid": true, + "sgv": 96, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:45:01.449Z" + }, + { + "_id": "629458b0d2cadd0004350d76", + "device": "AndroidAPS-DexcomG6", + "date": 1653889161000, + "dateString": "2022-05-30T05:39:21.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:40:00.401Z" + }, + { + "_id": "6294577513be4d00048f99e3", + "device": "AndroidAPS-DexcomG6", + "date": 1653888862000, + "dateString": "2022-05-30T05:34:22.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:34:45.547Z" + }, + { + "_id": "6294564813be4d00048f99e0", + "device": "AndroidAPS-DexcomG6", + "date": 1653888561000, + "dateString": "2022-05-30T05:29:21.000Z", + "isValid": true, + "sgv": 101, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:29:44.188Z" + }, + { + "_id": "6294551a13be4d00048f99dd", + "device": "AndroidAPS-DexcomG6", + "date": 1653888261000, + "dateString": "2022-05-30T05:24:21.000Z", + "isValid": true, + "sgv": 100, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:24:42.074Z" + }, + { + "_id": "6294540513be4d00048f99d9", + "device": "AndroidAPS-DexcomG6", + "date": 1653887961000, + "dateString": "2022-05-30T05:19:21.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:20:05.981Z" + }, + { + "_id": "629452bf13be4d00048f99d7", + "device": "AndroidAPS-DexcomG6", + "date": 1653887661000, + "dateString": "2022-05-30T05:14:21.000Z", + "isValid": true, + "sgv": 98, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:14:39.295Z" + }, + { + "_id": "629451ab13be4d00048f99d4", + "device": "AndroidAPS-DexcomG6", + "date": 1653887361000, + "dateString": "2022-05-30T05:09:21.000Z", + "isValid": true, + "sgv": 99, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:10:03.174Z" + }, + { + "_id": "6294506dc0f24700048ea5f8", + "device": "AndroidAPS-DexcomG6", + "date": 1653887061000, + "dateString": "2022-05-30T05:04:21.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T05:04:45.582Z" + }, + { + "_id": "62944f3fc0f24700048ea5f6", + "device": "AndroidAPS-DexcomG6", + "date": 1653886761000, + "dateString": "2022-05-30T04:59:21.000Z", + "isValid": true, + "sgv": 105, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:59:43.617Z" + }, + { + "_id": "62944e11c0f24700048ea5f3", + "device": "AndroidAPS-DexcomG6", + "date": 1653886461000, + "dateString": "2022-05-30T04:54:21.000Z", + "isValid": true, + "sgv": 108, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:54:41.186Z" + }, + { + "_id": "62944ce3c0f24700048ea5f1", + "device": "AndroidAPS-DexcomG6", + "date": 1653886161000, + "dateString": "2022-05-30T04:49:21.000Z", + "isValid": true, + "sgv": 110, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:49:39.435Z" + }, + { + "_id": "62944bb6c0f24700048ea5ee", + "device": "AndroidAPS-DexcomG6", + "date": 1653885861000, + "dateString": "2022-05-30T04:44:21.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:44:38.372Z" + }, + { + "_id": "62944aa1c0f24700048ea5e9", + "device": "AndroidAPS-DexcomG6", + "date": 1653885561000, + "dateString": "2022-05-30T04:39:21.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:40:01.830Z" + }, + { + "_id": "62944973c0f24700048ea5e7", + "device": "AndroidAPS-DexcomG6", + "date": 1653885261000, + "dateString": "2022-05-30T04:34:21.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:34:59.937Z" + }, + { + "_id": "62944846c0f24700048ea5e4", + "device": "AndroidAPS-DexcomG6", + "date": 1653884961000, + "dateString": "2022-05-30T04:29:21.000Z", + "isValid": true, + "sgv": 112, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:29:58.536Z" + }, + { + "_id": "6294470ac319020004344fc1", + "device": "AndroidAPS-DexcomG6", + "date": 1653884661000, + "dateString": "2022-05-30T04:24:21.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:24:42.523Z" + }, + { + "_id": "629445f6c319020004344fbe", + "device": "AndroidAPS-DexcomG6", + "date": 1653884361000, + "dateString": "2022-05-30T04:19:21.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:20:06.094Z" + }, + { + "_id": "629444afc319020004344fba", + "device": "AndroidAPS-DexcomG6", + "date": 1653884061000, + "dateString": "2022-05-30T04:14:21.000Z", + "isValid": true, + "sgv": 114, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:14:39.235Z" + }, + { + "_id": "6294439ac319020004344fb7", + "device": "AndroidAPS-DexcomG6", + "date": 1653883761000, + "dateString": "2022-05-30T04:09:21.000Z", + "isValid": true, + "sgv": 115, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:10:02.526Z" + }, + { + "_id": "6294426dc319020004344fb4", + "device": "AndroidAPS-DexcomG6", + "date": 1653883461000, + "dateString": "2022-05-30T04:04:21.000Z", + "isValid": true, + "sgv": 116, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T04:05:01.284Z" + }, + { + "_id": "6294413fc319020004344fb0", + "device": "AndroidAPS-DexcomG6", + "date": 1653883161000, + "dateString": "2022-05-30T03:59:21.000Z", + "isValid": true, + "sgv": 119, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:59:59.474Z" + }, + { + "_id": "6294400aa743da00044e28eb", + "device": "AndroidAPS-DexcomG6", + "date": 1653882861000, + "dateString": "2022-05-30T03:54:21.000Z", + "isValid": true, + "sgv": 121, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:54:50.162Z" + }, + { + "_id": "62943edca743da00044e28e9", + "device": "AndroidAPS-DexcomG6", + "date": 1653882561000, + "dateString": "2022-05-30T03:49:21.000Z", + "isValid": true, + "sgv": 124, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:49:48.266Z" + }, + { + "_id": "62943daea743da00044e28e7", + "device": "AndroidAPS-DexcomG6", + "date": 1653882261000, + "dateString": "2022-05-30T03:44:21.000Z", + "isValid": true, + "sgv": 126, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:44:46.579Z" + }, + { + "_id": "62943c81a743da00044e28e5", + "device": "AndroidAPS-DexcomG6", + "date": 1653881961000, + "dateString": "2022-05-30T03:39:21.000Z", + "isValid": true, + "sgv": 128, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:39:45.390Z" + }, + { + "_id": "62943b53a743da00044e28e2", + "device": "AndroidAPS-DexcomG6", + "date": 1653881661000, + "dateString": "2022-05-30T03:34:21.000Z", + "isValid": true, + "sgv": 131, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:34:43.850Z" + }, + { + "_id": "62943a26a743da00044e28de", + "device": "AndroidAPS-DexcomG6", + "date": 1653881361000, + "dateString": "2022-05-30T03:29:21.000Z", + "isValid": true, + "sgv": 131, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:29:42.328Z" + }, + { + "_id": "629438f8a743da00044e28dc", + "device": "AndroidAPS-DexcomG6", + "date": 1653881062000, + "dateString": "2022-05-30T03:24:22.000Z", + "isValid": true, + "sgv": 131, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T03:24:40.834Z" + }, + { + "_id": "629437dfa365640004d83cc9", + "device": "AndroidAPS-DexcomG6", + "date": 1653880761000, + "dateString": "2022-05-30T03:19:21.000Z", + "isValid": true, + "sgv": 128, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T03:19:59.695Z" + }, + { + "_id": "629436b0a365640004d83cc5", + "device": "AndroidAPS-DexcomG6", + "date": 1653880461000, + "dateString": "2022-05-30T03:14:21.000Z", + "isValid": true, + "sgv": 125, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T03:14:56.027Z" + }, + { + "_id": "62943582a365640004d83cc3", + "device": "AndroidAPS-DexcomG6", + "date": 1653880161000, + "dateString": "2022-05-30T03:09:21.000Z", + "isValid": true, + "sgv": 119, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T03:09:54.494Z" + }, + { + "_id": "62943454a365640004d83cc0", + "device": "AndroidAPS-DexcomG6", + "date": 1653879861000, + "dateString": "2022-05-30T03:04:21.000Z", + "isValid": true, + "sgv": 114, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T03:04:52.790Z" + }, + { + "_id": "62943327a365640004d83cbe", + "device": "AndroidAPS-DexcomG6", + "date": 1653879561000, + "dateString": "2022-05-30T02:59:21.000Z", + "isValid": true, + "sgv": 108, + "direction": "FortyFiveUp", + "type": "sgv", + "created_at": "2022-05-30T02:59:51.442Z" + }, + { + "_id": "629431f9a365640004d83cb9", + "device": "AndroidAPS-DexcomG6", + "date": 1653879261000, + "dateString": "2022-05-30T02:54:21.000Z", + "isValid": true, + "sgv": 102, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:54:49.321Z" + }, + { + "_id": "629430c1ee9e6e00046d7ff7", + "device": "AndroidAPS-DexcomG6", + "date": 1653878961000, + "dateString": "2022-05-30T02:49:21.000Z", + "isValid": true, + "sgv": 96, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:49:37.117Z" + }, + { + "_id": "62942facee9e6e00046d7ff2", + "device": "AndroidAPS-DexcomG6", + "date": 1653878661000, + "dateString": "2022-05-30T02:44:21.000Z", + "isValid": true, + "sgv": 91, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:45:00.369Z" + }, + { + "_id": "62942e7fee9e6e00046d7fef", + "device": "AndroidAPS-DexcomG6", + "date": 1653878361000, + "dateString": "2022-05-30T02:39:21.000Z", + "isValid": true, + "sgv": 86, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:39:59.070Z" + }, + { + "_id": "62942d51ee9e6e00046d7fec", + "device": "AndroidAPS-DexcomG6", + "date": 1653878061000, + "dateString": "2022-05-30T02:34:21.000Z", + "isValid": true, + "sgv": 82, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:34:57.498Z" + }, + { + "_id": "62942c24ee9e6e00046d7fea", + "device": "AndroidAPS-DexcomG6", + "date": 1653877761000, + "dateString": "2022-05-30T02:29:21.000Z", + "isValid": true, + "sgv": 78, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:29:56.392Z" + }, + { + "_id": "62942af6ee9e6e00046d7fe8", + "device": "AndroidAPS-DexcomG6", + "date": 1653877461000, + "dateString": "2022-05-30T02:24:21.000Z", + "isValid": true, + "sgv": 76, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:24:54.787Z" + }, + { + "_id": "629429caee9e6e00046d7fe6", + "device": "AndroidAPS-DexcomG6", + "date": 1653877161000, + "dateString": "2022-05-30T02:19:21.000Z", + "isValid": true, + "sgv": 75, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:19:54.580Z" + }, + { + "_id": "6294289bee9e6e00046d7fe4", + "device": "AndroidAPS-DexcomG6", + "date": 1653876861000, + "dateString": "2022-05-30T02:14:21.000Z", + "isValid": true, + "sgv": 74, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:14:51.815Z" + }, + { + "_id": "6294276aa90f7f00040c0d4f", + "device": "AndroidAPS-DexcomG6", + "date": 1653876561000, + "dateString": "2022-05-30T02:09:21.000Z", + "isValid": true, + "sgv": 71, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:09:46.033Z" + }, + { + "_id": "6294263ca90f7f00040c0d4b", + "device": "AndroidAPS-DexcomG6", + "date": 1653876261000, + "dateString": "2022-05-30T02:04:21.000Z", + "isValid": true, + "sgv": 67, + "direction": "Flat", + "type": "sgv", + "created_at": "2022-05-30T02:04:44.630Z" + } +] diff --git a/app/src/test/res/autotune/test4/ns-treatments.2022-05-30.json b/app/src/test/res/autotune/test4/ns-treatments.2022-05-30.json new file mode 100644 index 0000000000..ac55f897b2 --- /dev/null +++ b/app/src/test/res/autotune/test4/ns-treatments.2022-05-30.json @@ -0,0 +1,7512 @@ +[ + { + "_id": "62963a9affe824000451d511", + "created_at": "2022-05-31T15:55:45.525Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 314975, + "type": "NORMAL", + "rate": 1.1144, + "percent": 40, + "pumpId": 458546, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458549, + "carbs": null, + "insulin": null + }, + { + "_id": "6296396dffe824000451d50d", + "created_at": "2022-05-31T15:50:55.954Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 288078, + "type": "NORMAL", + "rate": 0.398, + "percent": -50, + "pumpId": 458543, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458545, + "carbs": null, + "insulin": null + }, + { + "_id": "62963847ed7ec900040113c5", + "created_at": "2022-05-31T15:45:57.641Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 296825, + "type": "NORMAL", + "rate": 0.8756, + "percent": 10, + "pumpId": 458540, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458542, + "carbs": null, + "insulin": null + }, + { + "_id": "629635eced7ec900040113c0", + "created_at": "2022-05-31T15:35:54.821Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 601330, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458537, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458539, + "carbs": null, + "insulin": null + }, + { + "_id": "629634bfed7ec900040113bd", + "created_at": "2022-05-31T15:30:57.455Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 295873, + "type": "NORMAL", + "rate": 0.7164, + "percent": -10, + "pumpId": 458534, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458536, + "carbs": null, + "insulin": null + }, + { + "_id": "62963391ed7ec900040113ba", + "created_at": "2022-05-31T15:26:05.836Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 290166, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458531, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458533, + "carbs": null, + "insulin": null + }, + { + "_id": "62963264ed7ec900040113b7", + "created_at": "2022-05-31T15:20:49.875Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 314466, + "type": "NORMAL", + "rate": 0.5572, + "percent": -30, + "pumpId": 458528, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458530, + "carbs": null, + "insulin": null + }, + { + "_id": "62963150ed7ec900040113b4", + "created_at": "2022-05-31T15:16:16.934Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 271450, + "type": "NORMAL", + "rate": 1.1144, + "percent": 40, + "pumpId": 458525, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458527, + "carbs": null, + "insulin": null + }, + { + "_id": "62962dbc7ae53f0004811958", + "created_at": "2022-05-31T15:00:52.574Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 921872, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458521, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458524, + "carbs": null, + "insulin": null + }, + { + "_id": "62962ca87ae53f0004811955", + "created_at": "2022-05-31T14:56:17.286Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 273797, + "type": "NORMAL", + "rate": 0.2298, + "percent": -70, + "pumpId": 458517, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458520, + "carbs": null, + "insulin": null + }, + { + "_id": "62962b617ae53f0004811950", + "eventType": "Correction Bolus", + "insulin": 0.56, + "created_at": "2022-05-31T14:51:06.048Z", + "date": 1654008666048, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22053, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62962b627ae53f0004811951", + "created_at": "2022-05-31T14:51:04.151Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303998, + "type": "FAKE_EXTENDED", + "rate": 2.1870619806709257, + "absolute": 2.1870619806709257, + "pumpId": 22052, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-31T14:51:04.151Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 5, + "durationInMilliseconds": 303998, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.12, + "relative": 1.4210619806709255, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22052, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "629627c9782bd30004aefa36", + "created_at": "2022-05-31T14:35:43.988Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 315953, + "type": "NORMAL", + "rate": 1.149, + "percent": 50, + "pumpId": 458505, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458507, + "carbs": null, + "insulin": null + }, + { + "_id": "629626b3782bd30004aefa33", + "created_at": "2022-05-31T14:31:05.848Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 274656, + "type": "NORMAL", + "rate": 0.8426, + "percent": 10, + "pumpId": 458502, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458504, + "carbs": null, + "insulin": null + }, + { + "_id": "62962457782bd30004aefa2e", + "created_at": "2022-05-31T14:21:07.305Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 597048, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458499, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458501, + "carbs": null, + "insulin": null + }, + { + "_id": "6296232a782bd30004aefa2b", + "created_at": "2022-05-31T14:16:02.177Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303634, + "type": "NORMAL", + "rate": 0.0766, + "percent": -90, + "pumpId": 458496, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458498, + "carbs": null, + "insulin": null + }, + { + "_id": "629621fd782bd30004aefa28", + "created_at": "2022-05-31T14:11:06.835Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292851, + "type": "NORMAL", + "rate": 0.1532, + "percent": -80, + "pumpId": 458493, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458495, + "carbs": null, + "insulin": null + }, + { + "_id": "629620cf782bd30004aefa23", + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-31T14:05:54.808Z", + "date": 1654005954808, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22051, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629620d0782bd30004aefa25", + "created_at": "2022-05-31T14:05:52.184Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 313165, + "type": "NORMAL", + "rate": 1.6852, + "percent": 120, + "pumpId": 458488, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458492, + "carbs": null, + "insulin": null + }, + { + "_id": "62961e7571108b0004a2c2b1", + "created_at": "2022-05-31T13:55:43.116Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 606574, + "type": "NORMAL", + "rate": 0.0785, + "percent": -90, + "pumpId": 458484, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458487, + "carbs": null, + "insulin": null + }, + { + "_id": "62961aec71108b0004a2c2aa", + "created_at": "2022-05-31T13:40:48.851Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 891771, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458481, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458483, + "carbs": null, + "insulin": null + }, + { + "_id": "629619d771108b0004a2c2a7", + "created_at": "2022-05-31T13:36:03.349Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284007, + "type": "NORMAL", + "rate": 0.47100000000000003, + "percent": -40, + "pumpId": 458478, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458480, + "carbs": null, + "insulin": null + }, + { + "_id": "629618aa71108b0004a2c2a2", + "eventType": "Correction Bolus", + "insulin": 0.7, + "created_at": "2022-05-31T13:31:19.636Z", + "date": 1654003879636, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22050, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629618aa71108b0004a2c2a3", + "created_at": "2022-05-31T13:31:17.510Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 277000, + "type": "FAKE_EXTENDED", + "rate": 2.6044945848375454, + "absolute": 2.6044945848375454, + "pumpId": 22049, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-31T13:31:17.510Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 4, + "durationInMilliseconds": 277000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.14, + "relative": 1.8194945848375452, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22049, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "6296176aec644a0004f646cb", + "created_at": "2022-05-31T13:25:57.102Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 309193, + "type": "NORMAL", + "rate": 0.7065, + "percent": -10, + "pumpId": 458466, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458468, + "carbs": null, + "insulin": null + }, + { + "_id": "6296163cec644a0004f646c8", + "created_at": "2022-05-31T13:20:50.571Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304039, + "type": "NORMAL", + "rate": 0.23550000000000001, + "percent": -70, + "pumpId": 458463, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458465, + "carbs": null, + "insulin": null + }, + { + "_id": "6296150fec644a0004f646c5", + "created_at": "2022-05-31T13:15:52.525Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 296557, + "type": "NORMAL", + "rate": 0.314, + "percent": -60, + "pumpId": 458460, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458462, + "carbs": null, + "insulin": null + }, + { + "_id": "629613e2ec644a0004f646c0", + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-31T13:10:42.660Z", + "date": 1654002642660, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22048, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629613e2ec644a0004f646c2", + "created_at": "2022-05-31T13:10:40.813Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 310221, + "type": "NORMAL", + "rate": 1.1775, + "percent": 50, + "pumpId": 458455, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458459, + "carbs": null, + "insulin": null + }, + { + "_id": "629612b5ec644a0004f646be", + "created_at": "2022-05-31T13:05:40.990Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 298326, + "type": "NORMAL", + "rate": 1.727, + "percent": 120, + "pumpId": 458452, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458454, + "carbs": null, + "insulin": null + }, + { + "_id": "62961187ec644a0004f646b9", + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-31T13:00:49.822Z", + "date": 1654002049822, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22047, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62961188ec644a0004f646bb", + "created_at": "2022-05-31T13:00:47.826Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289674, + "type": "NORMAL", + "rate": 1.256, + "percent": 60, + "pumpId": 458447, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458451, + "carbs": null, + "insulin": null + }, + { + "_id": "6296105aec644a0004f646b7", + "created_at": "2022-05-31T12:55:41.225Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 305119, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458444, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458446, + "carbs": null, + "insulin": null + }, + { + "_id": "62960f36ec644a0004f646b4", + "created_at": "2022-05-31T12:50:59.948Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 278782, + "type": "NORMAL", + "rate": 0.5495, + "percent": -30, + "pumpId": 458441, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458443, + "carbs": null, + "insulin": null + }, + { + "_id": "62960e3bec644a0004f646b0", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-31T12:46:28.352Z", + "date": 1654001188352, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22046, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62960e3bec644a0004f646b1", + "created_at": "2022-05-31T12:46:25.161Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 272298, + "type": "NORMAL", + "rate": 1.727, + "percent": 120, + "pumpId": 458436, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458440, + "carbs": null, + "insulin": null + }, + { + "_id": "62960cdcec644a0004f646ad", + "created_at": "2022-05-31T12:40:49.763Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 332910, + "type": "NORMAL", + "rate": 0.47100000000000003, + "percent": -40, + "pumpId": 458433, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458435, + "carbs": null, + "insulin": null + }, + { + "_id": "62960be0ec644a0004f646a8", + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-31T12:36:14.179Z", + "date": 1654000574179, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22045, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62960be1ec644a0004f646aa", + "created_at": "2022-05-31T12:36:11.223Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 277044, + "type": "NORMAL", + "rate": 1.8840000000000001, + "percent": 140, + "pumpId": 458428, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458432, + "carbs": null, + "insulin": null + }, + { + "_id": "62960a94966c80000421aa3b", + "created_at": "2022-05-31T12:31:08.722Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300011, + "type": "NORMAL", + "rate": 0.47100000000000003, + "percent": -40, + "pumpId": 458425, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458427, + "carbs": null, + "insulin": null + }, + { + "_id": "62960839966c80000421aa35", + "created_at": "2022-05-31T12:20:54.748Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 612487, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458422, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458424, + "carbs": null, + "insulin": null + }, + { + "_id": "6296070b966c80000421aa32", + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-31T12:16:09.374Z", + "date": 1653999369374, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22044, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629604b1966c80000421aa2e", + "created_at": "2022-05-31T12:05:58.926Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 597042, + "type": "NORMAL", + "rate": 1.099, + "percent": 40, + "pumpId": 458414, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458416, + "carbs": null, + "insulin": null + }, + { + "_id": "6295ffffa56c4d0004cb3049", + "eventType": "Correction Bolus", + "insulin": 0.26, + "created_at": "2022-05-31T11:45:55.935Z", + "date": 1653997555935, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22043, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295fda5a56c4d0004cb3044", + "eventType": "Correction Bolus", + "insulin": 0.3, + "created_at": "2022-05-31T11:35:54.935Z", + "date": 1653996954935, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22042, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295fb4aa56c4d0004cb3040", + "created_at": "2022-05-31T11:25:53.977Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2402460, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458406, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458413, + "carbs": null, + "insulin": null + }, + { + "_id": "6295f90bbf97420004aee32c", + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-31T11:16:21.275Z", + "date": 1653995781275, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22041, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295f697bf97420004aee327", + "eventType": "Correction Bolus", + "insulin": 0.5, + "created_at": "2022-05-31T11:05:41.260Z", + "date": 1653995141260, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22040, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295f328bf97420004aee321", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-31T10:51:00.280Z", + "date": 1653994260280, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22039, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295f1e4bf97420004aee31d", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T10:45:38.620Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "23g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6295f0b6bf97420004aee31a", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T10:40:30.473Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "22g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6295ef8d1d475d00043d0b6f", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T10:35:33.359Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "24g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6295ee781d475d00043d0b6c", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T10:31:01.436Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "24g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6295eaef1d475d00043d0b66", + "created_at": "2022-05-31T10:16:09.113Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 69, + "durationInMilliseconds": 4182376, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458396, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458405, + "carbs": null, + "insulin": null + }, + { + "_id": "6295ea571d475d00043d0b61", + "eventType": "Meal Bolus", + "insulin": 7.82, + "created_at": "2022-05-31T10:13:24.185Z", + "date": 1653992004185, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 22038, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295ea581d475d00043d0b62", + "eventType": "Bolus Wizard", + "created_at": "2022-05-31T10:13:20.467Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":0.889,\"bolusIOB\":-0.461,\"carbs\":50.0,\"carbsInsulin\":8.517881724303429,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653992000540,\"glucoseDifference\":-14.0,\"glucoseInsulin\":-0.17423155747919142,\"glucoseTrend\":-2.22,\"glucoseValue\":76.0,\"ic\":5.870004024279742,\"id\":1584,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":80.3528373536581,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Working days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":90.0,\"targetBGLow\":90.0,\"timestamp\":1653992000467,\"totalInsulin\":7.82,\"trendInsulin\":-0.08288444091510105,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653992000467, + "glucose": 76, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "6295ea711d475d00043d0b63", + "eventType": "Meal Bolus", + "carbs": 50, + "created_at": "2022-05-31T10:13:20.466Z", + "isValid": true, + "date": 1653992000466, + "insulin": null + }, + { + "_id": "6295e50d430fe80004dfa709", + "created_at": "2022-05-31T09:50:49.679Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1516949, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458390, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458395, + "carbs": null, + "insulin": null + }, + { + "_id": "6295e4f4430fe80004dfa706", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-31T09:50:20.858Z", + "timestamp": 1653990620858, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "6295e182430fe80004dfa700", + "created_at": "2022-05-31T09:35:51.419Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 896767, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458387, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458389, + "carbs": null, + "insulin": null + }, + { + "_id": "6295dbb4dc3ee20004e984bf", + "created_at": "2022-05-31T09:10:57.236Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1492691, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458384, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458386, + "carbs": null, + "insulin": null + }, + { + "_id": "6295dad2dc3ee20004e984bc", + "created_at": "2022-05-31T09:07:19.890Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 3, + "durationInMilliseconds": 214851, + "type": "NORMAL", + "rate": 0.4824, + "percent": -40, + "pumpId": 458381, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458383, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d957dc3ee20004e984b7", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-31T09:01:05.878Z", + "date": 1653987665878, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22037, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295d958dc3ee20004e984b9", + "created_at": "2022-05-31T09:01:03.881Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 374522, + "type": "NORMAL", + "rate": 1.4472, + "percent": 80, + "pumpId": 458376, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458380, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d829dc3ee20004e984b5", + "created_at": "2022-05-31T08:55:52.338Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 310053, + "type": "NORMAL", + "rate": 0.1602, + "percent": -80, + "pumpId": 458372, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458375, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d6fbdc3ee20004e984b2", + "created_at": "2022-05-31T08:50:59.593Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 291248, + "type": "NORMAL", + "rate": 0.3204, + "percent": -60, + "pumpId": 458369, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458371, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d5e6dc3ee20004e984af", + "created_at": "2022-05-31T08:46:09.430Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 288668, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458366, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458368, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d4a917528a00041c16aa", + "created_at": "2022-05-31T08:41:04.984Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 302951, + "type": "NORMAL", + "rate": 0.4005, + "percent": -50, + "pumpId": 458362, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458365, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d39417528a00041c16a7", + "created_at": "2022-05-31T08:36:11.245Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292243, + "type": "NORMAL", + "rate": 1.0413000000000001, + "percent": 30, + "pumpId": 458359, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458361, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d37b17528a00041c16a5", + "created_at": "2022-05-31T08:35:51.495Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 17254, + "type": "NORMAL", + "rate": 0.1602, + "percent": -80, + "pumpId": 458356, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458358, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d24d17528a00041c16a2", + "created_at": "2022-05-31T08:31:04.097Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285901, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458353, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458355, + "carbs": null, + "insulin": null + }, + { + "_id": "6295d11f17528a00041c169d", + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-31T08:25:49.866Z", + "date": 1653985549866, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22036, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295d11f17528a00041c169f", + "created_at": "2022-05-31T08:25:47.757Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 313849, + "type": "NORMAL", + "rate": 0.4005, + "percent": -50, + "pumpId": 458348, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458352, + "carbs": null, + "insulin": null + }, + { + "_id": "6295cc8310cb0b00043ae4d4", + "created_at": "2022-05-31T08:06:06.036Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1180230, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458345, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458347, + "carbs": null, + "insulin": null + }, + { + "_id": "6295cb8710cb0b00043ae4d1", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-31T08:02:00.225Z", + "date": 1653984120225, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22035, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295cb8710cb0b00043ae4d0", + "created_at": "2022-05-31T08:01:56.099Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 247447, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458340, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458344, + "carbs": null, + "insulin": null + }, + { + "_id": "6295ca2710cb0b00043ae4cb", + "eventType": "Correction Bolus", + "insulin": 0.68, + "created_at": "2022-05-31T07:56:12.084Z", + "date": 1653983772084, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22034, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295ca2710cb0b00043ae4cc", + "created_at": "2022-05-31T07:56:09.536Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 337000, + "type": "FAKE_EXTENDED", + "rate": 3.580448071216617, + "absolute": 3.580448071216617, + "pumpId": 22033, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-31T07:56:09.536Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 5, + "durationInMilliseconds": 337000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.26, + "relative": 2.777448071216617, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22033, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "6295c1e80030950004c0a3e0", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T07:20:47.689Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "10g de glucides requis dans 35 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6295c0ba0030950004c0a3de", + "created_at": "2022-05-31T07:16:05.967Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 39, + "durationInMilliseconds": 2392475, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458327, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458329, + "carbs": null, + "insulin": null + }, + { + "_id": "6295bf8c0030950004c0a3db", + "created_at": "2022-05-31T07:10:59.023Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304456, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458324, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458326, + "carbs": null, + "insulin": null + }, + { + "_id": "6295bc370030950004c0a3d2", + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-31T06:56:47.742Z", + "date": 1653980207742, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22032, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295baf00030950004c0a3d0", + "eventType": "Correction Bolus", + "insulin": 0.48, + "created_at": "2022-05-31T06:51:07.013Z", + "date": 1653979867013, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22031, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295b8a4469d4a0004784123", + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-31T06:41:23.663Z", + "date": 1653979283663, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22030, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295b8a4469d4a0004784125", + "created_at": "2022-05-31T06:41:19.552Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1776988, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458313, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458323, + "carbs": null, + "insulin": null + }, + { + "_id": "6295b776469d4a0004784121", + "created_at": "2022-05-31T06:36:23.889Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294183, + "type": "NORMAL", + "rate": 1.1326, + "percent": 40, + "pumpId": 458310, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458312, + "carbs": null, + "insulin": null + }, + { + "_id": "6295adea469d4a000478410e", + "created_at": "2022-05-31T05:55:38.593Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 40, + "durationInMilliseconds": 2443824, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458306, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458309, + "carbs": null, + "insulin": null + }, + { + "_id": "6295ad85469d4a0004784109", + "eventType": "Meal Bolus", + "insulin": 13.82, + "created_at": "2022-05-31T05:53:55.558Z", + "date": 1653976435558, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 22029, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295ad9e469d4a000478410b", + "eventType": "Meal Bolus", + "carbs": 75, + "created_at": "2022-05-31T05:53:53.211Z", + "isValid": true, + "date": 1653976433211, + "insulin": null + }, + { + "_id": "6295ad85469d4a000478410a", + "eventType": "Bolus Wizard", + "created_at": "2022-05-31T05:53:53.211Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":0.615,\"bolusIOB\":-0.556,\"carbs\":75.0,\"carbsInsulin\":15.031555984064873,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653976433240,\"glucoseDifference\":1.0,\"glucoseInsulin\":0.022144508190468416,\"glucoseTrend\":3.5,\"glucoseValue\":91.0,\"ic\":4.9895034206377815,\"id\":1582,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":45.15792319246117,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Working days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":90.0,\"targetBGLow\":90.0,\"timestamp\":1653976433211,\"totalInsulin\":13.81,\"trendInsulin\":0.23251733599991836,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653976433211, + "glucose": 91, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "6295acd5469d4a0004784107", + "created_at": "2022-05-31T05:51:00.890Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 276213, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458301, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458305, + "carbs": null, + "insulin": null + }, + { + "_id": "6295aba5469d4a0004784104", + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-31T05:45:56.589Z", + "date": 1653975956589, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22028, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295a7d7acb47a00042f8141", + "created_at": "2022-05-31T05:29:47.906Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 845906, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458294, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458297, + "carbs": null, + "insulin": null + }, + { + "_id": "6295a7beacb47a00042f8140", + "created_at": "2022-05-31T05:29:32.829Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "OpenAPS Offline", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 900000, + "reason": "DISCONNECT_PUMP", + "carbs": null, + "insulin": null + }, + { + "_id": "6295a5c8acb47a00042f813d", + "created_at": "2022-05-31T05:21:06.825Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 8, + "durationInMilliseconds": 519594, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458291, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458293, + "carbs": null, + "insulin": null + }, + { + "_id": "6295a499acb47a00042f8138", + "eventType": "Correction Bolus", + "insulin": 0.3, + "created_at": "2022-05-31T05:16:04.834Z", + "date": 1653974164834, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22027, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295a49aacb47a00042f813a", + "created_at": "2022-05-31T05:16:02.752Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 302582, + "type": "NORMAL", + "rate": 2.02, + "percent": 150, + "pumpId": 458286, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458290, + "carbs": null, + "insulin": null + }, + { + "_id": "6295a36bacb47a00042f8135", + "created_at": "2022-05-31T05:10:53.912Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 307342, + "type": "NORMAL", + "rate": 1.0504, + "percent": 30, + "pumpId": 458283, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458285, + "carbs": null, + "insulin": null + }, + { + "_id": "62959fdd0e4cd30004fcc889", + "created_at": "2022-05-31T04:55:39.667Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 603463, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458276, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458279, + "carbs": null, + "insulin": null + }, + { + "_id": "62959fc40e4cd30004fcc886", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-31T04:55:12.975Z", + "timestamp": 1653972912975, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "62959eb00e4cd30004fcc884", + "created_at": "2022-05-31T04:50:34.517Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303656, + "type": "NORMAL", + "rate": 1.0444, + "percent": 40, + "pumpId": 458273, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458275, + "carbs": null, + "insulin": null + }, + { + "_id": "629597b88aa94000044912f6", + "created_at": "2022-05-31T04:20:53.275Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1779752, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458270, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458272, + "carbs": null, + "insulin": null + }, + { + "_id": "6295968b8aa94000044912f3", + "created_at": "2022-05-31T04:16:03.140Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 288645, + "type": "NORMAL", + "rate": 0.8952, + "percent": 20, + "pumpId": 458267, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458269, + "carbs": null, + "insulin": null + }, + { + "_id": "6295955e8aa94000044912f0", + "created_at": "2022-05-31T04:10:56.377Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304277, + "type": "NORMAL", + "rate": 1.119, + "percent": 50, + "pumpId": 458264, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458266, + "carbs": null, + "insulin": null + }, + { + "_id": "629590b0be37f70004b2bb5d", + "created_at": "2022-05-31T03:51:07.389Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1187499, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458260, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458263, + "carbs": null, + "insulin": null + }, + { + "_id": "6295907ebe37f70004b2bb5b", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-31T03:50:17.539Z", + "timestamp": 1653969017539, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "6295886eb8ec320004808360", + "created_at": "2022-05-31T03:15:50.289Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 35, + "durationInMilliseconds": 2114613, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458257, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458259, + "carbs": null, + "insulin": null + }, + { + "_id": "6295886eb8ec32000480835e", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T03:15:36.103Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "10g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629584e6b8ec320004808357", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T03:00:36.460Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "11g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629583b9b8ec320004808354", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T02:55:38.214Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "20g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629582a5b8ec320004808351", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-31T02:51:02.043Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "19g de glucides requis dans 5 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62958272b8ec320004808350", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-31T02:50:04.612Z", + "timestamp": 1653965404612, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "62958178b8ec32000480834e", + "created_at": "2022-05-31T02:45:51.272Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1797535, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458253, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458256, + "carbs": null, + "insulin": null + }, + { + "_id": "62958042fe83800004778c28", + "created_at": "2022-05-31T02:40:55.507Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293267, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458250, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458252, + "carbs": null, + "insulin": null + }, + { + "_id": "62957f15fe83800004778c25", + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-31T02:35:55.492Z", + "date": 1653964555492, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22026, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62957cbbfe83800004778c1f", + "eventType": "Correction Bolus", + "insulin": 0.62, + "created_at": "2022-05-31T02:25:58.675Z", + "date": 1653963958675, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22025, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62957cbbfe83800004778c20", + "created_at": "2022-05-31T02:25:56.083Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 889000, + "type": "FAKE_EXTENDED", + "rate": 3.427676040494938, + "absolute": 3.427676040494938, + "pumpId": 22024, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-31T02:25:56.083Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 14, + "durationInMilliseconds": 889000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.64, + "relative": 2.591676040494938, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22024, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "62957b8efe83800004778c1d", + "created_at": "2022-05-31T02:20:42.855Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 301088, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458236, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458238, + "carbs": null, + "insulin": null + }, + { + "_id": "62957a60fe83800004778c1a", + "created_at": "2022-05-31T02:15:53.083Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 288295, + "type": "NORMAL", + "rate": 0.6688, + "percent": -20, + "pumpId": 458233, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458235, + "carbs": null, + "insulin": null + }, + { + "_id": "6295782e9bc0370004b42b8b", + "created_at": "2022-05-31T02:06:38.366Z", + "enteredBy": "openaps://AndroidAPS", + "isValid": true, + "eventType": "Note", + "profileJson": "{\"units\":\"mg\\/dl\",\"dia\":6,\"timezone\":\"Africa\\/Cairo\",\"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":95.73479716801766},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":75.88879083401042},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":58.032604755419776},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":52.38319090325494},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":48.77055704785807},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":46.964240120159616},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":45.15792319246117},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":46.964240120159616},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":50.890130323983435},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":62.496651275067414},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":75.88879083401042},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":80.3528373536581},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":89.28093039295341},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":93.74497691260113},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":98.2090234322488},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":107.13711647154416},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":115.60428337270058}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":5.792007079189894},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":4.9895034206377815},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":5.870004024279742},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":4.9895034206377815}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":1.139},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":1.06},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":1.075},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":1.199},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.836},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.8270000000000001},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.746},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.808},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.809},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.803},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.801},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.804},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.798},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.797},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.785},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.766},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.796},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.788},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.806},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.857},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.916},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":0.972},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":1.0230000000000001}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", + "originalProfileName": "Working days", + "originalCustomizedName": "Working days", + "originalTimeshift": 0, + "originalPercentage": 100, + "originalDuration": 0, + "originalEnd": 1653962788607, + "notes": "Working days", + "carbs": null, + "insulin": null + }, + { + "_id": "6295782e9bc0370004b42b8a", + "timeshift": 0, + "percentage": 100, + "profile": "Working days", + "originalProfileName": "Working days", + "created_at": "2022-05-31T02:06:28.607Z", + "enteredBy": "openaps://AndroidAPS", + "isValid": true, + "eventType": "Profile Switch", + "duration": 0, + "profileJson": "{\"units\":\"mg\\/dl\",\"dia\":6,\"timezone\":\"Africa\\/Cairo\",\"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":95.73479716801766},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":75.88879083401042},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":58.032604755419776},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":52.38319090325494},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":48.77055704785807},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":46.964240120159616},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":45.15792319246117},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":46.964240120159616},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":50.890130323983435},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":62.496651275067414},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":75.88879083401042},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":80.3528373536581},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":89.28093039295341},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":93.74497691260113},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":98.2090234322488},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":107.13711647154416},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":115.60428337270058}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":5.792007079189894},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":4.9895034206377815},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":5.870004024279742},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":4.9895034206377815}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":1.139},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":1.06},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":1.075},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":1.199},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.836},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.8270000000000001},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.746},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.808},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.809},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.803},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.801},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.804},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.798},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.797},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.785},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":0.785},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.766},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.796},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.788},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.806},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.857},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.916},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":0.972},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":1.0230000000000001}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", + "carbs": null, + "insulin": null + }, + { + "_id": "629575bb9bc0370004b42b85", + "created_at": "2022-05-31T01:56:03.509Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1188082, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458227, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458232, + "carbs": null, + "insulin": null + }, + { + "_id": "6295748e9bc0370004b42b82", + "created_at": "2022-05-31T01:51:03.848Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 298169, + "type": "NORMAL", + "rate": 0.579, + "percent": -40, + "pumpId": 458224, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458226, + "carbs": null, + "insulin": null + }, + { + "_id": "629573609bc0370004b42b7f", + "created_at": "2022-05-31T01:46:01.471Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300881, + "type": "NORMAL", + "rate": 1.351, + "percent": 40, + "pumpId": 458221, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458223, + "carbs": null, + "insulin": null + }, + { + "_id": "629572339bc0370004b42b7c", + "created_at": "2022-05-31T01:40:45.409Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 314567, + "type": "NORMAL", + "rate": 1.0614999999999999, + "percent": 10, + "pumpId": 458218, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458220, + "carbs": null, + "insulin": null + }, + { + "_id": "629571069bc0370004b42b79", + "created_at": "2022-05-31T01:35:43.903Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300009, + "type": "NORMAL", + "rate": 2.316, + "percent": 140, + "pumpId": 458215, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458217, + "carbs": null, + "insulin": null + }, + { + "_id": "62956fdbe4f1e400046e05c8", + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-31T01:30:55.508Z", + "date": 1653960655508, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22023, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62956fdbe4f1e400046e05ca", + "created_at": "2022-05-31T01:30:52.670Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289736, + "type": "NORMAL", + "rate": 1.8335, + "percent": 90, + "pumpId": 458210, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458214, + "carbs": null, + "insulin": null + }, + { + "_id": "62956ec7e4f1e400046e05c6", + "created_at": "2022-05-31T01:26:04.315Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 286864, + "type": "NORMAL", + "rate": 0.193, + "percent": -80, + "pumpId": 458207, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458209, + "carbs": null, + "insulin": null + }, + { + "_id": "62956c53e4f1e400046e05c0", + "created_at": "2022-05-31T01:15:44.217Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 617639, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458203, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458206, + "carbs": null, + "insulin": null + }, + { + "_id": "62956b26e4f1e400046e05bd", + "created_at": "2022-05-31T01:10:56.345Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285374, + "type": "NORMAL", + "rate": 0.386, + "percent": -60, + "pumpId": 458199, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458202, + "carbs": null, + "insulin": null + }, + { + "_id": "629569f7e4f1e400046e05ba", + "created_at": "2022-05-31T01:05:44.958Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 308893, + "type": "NORMAL", + "rate": 0.4825, + "percent": -50, + "pumpId": 458196, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458198, + "carbs": null, + "insulin": null + }, + { + "_id": "629568e2e4f1e400046e05b6", + "eventType": "Correction Bolus", + "insulin": 0.18, + "created_at": "2022-05-31T01:01:03.804Z", + "date": 1653958863804, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22022, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629568e2e4f1e400046e05b7", + "created_at": "2022-05-31T01:01:01.983Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 281485, + "type": "NORMAL", + "rate": 1.7369999999999999, + "percent": 80, + "pumpId": 458191, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458195, + "carbs": null, + "insulin": null + }, + { + "_id": "62954fdd68a4bc00040c0170", + "eventType": "Pump Battery Change", + "isValid": true, + "created_at": "2022-05-30T23:02:36.459Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "62954fdc68a4bc00040c016f", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-30T23:01:55.446Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "Pompe démarrée", + "carbs": null, + "insulin": null + }, + { + "_id": "62954c34f89bc40004df9f64", + "eventType": "Sensor Change", + "isValid": true, + "created_at": "2022-05-30T22:58:37.000Z", + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "62954b81f89bc40004df9f61", + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-30T22:55:56.146Z", + "date": 1653951356146, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22021, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62954b82f89bc40004df9f63", + "created_at": "2022-05-30T22:55:53.216Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1741813, + "type": "NORMAL", + "rate": 1.3755000000000002, + "percent": 50, + "pumpId": 458172, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458186, + "carbs": null, + "insulin": null + }, + { + "_id": "62954a6df89bc40004df9f5f", + "created_at": "2022-05-30T22:51:08.489Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 282244, + "type": "NORMAL", + "rate": 0.2751, + "percent": -70, + "pumpId": 458169, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458171, + "carbs": null, + "insulin": null + }, + { + "_id": "6295493ff89bc40004df9f5c", + "created_at": "2022-05-30T22:46:09.519Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 297487, + "type": "NORMAL", + "rate": 0.4585, + "percent": -50, + "pumpId": 458166, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458168, + "carbs": null, + "insulin": null + }, + { + "_id": "629547f8f89bc40004df9f59", + "created_at": "2022-05-30T22:40:47.081Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 320949, + "type": "NORMAL", + "rate": 0.6419, + "percent": -30, + "pumpId": 458163, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458165, + "carbs": null, + "insulin": null + }, + { + "_id": "629546caf89bc40004df9f56", + "created_at": "2022-05-30T22:35:51.108Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294484, + "type": "NORMAL", + "rate": 0.8253, + "percent": -10, + "pumpId": 458160, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458162, + "carbs": null, + "insulin": null + }, + { + "_id": "629542261ded00000454b73f", + "created_at": "2022-05-30T22:15:46.620Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 20, + "durationInMilliseconds": 1203000, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458156, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458159, + "carbs": null, + "insulin": null + }, + { + "_id": "629541111ded00000454b73c", + "created_at": "2022-05-30T22:11:11.648Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 273483, + "type": "NORMAL", + "rate": 1.2838, + "percent": 40, + "pumpId": 458153, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458155, + "carbs": null, + "insulin": null + }, + { + "_id": "62953b2086a3df0004eb44ff", + "created_at": "2022-05-30T21:45:59.226Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1510937, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458148, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458152, + "carbs": null, + "insulin": null + }, + { + "_id": "6295379486a3df0004eb44f7", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-30T21:30:47.761Z", + "date": 1653946247761, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22020, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62953566e3aedd00046f3883", + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-30T21:21:15.984Z", + "date": 1653945675984, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22019, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295354de3aedd00046f3882", + "created_at": "2022-05-30T21:21:13.875Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1482865, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458141, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458147, + "carbs": null, + "insulin": null + }, + { + "_id": "629531c4e3aedd00046f387b", + "created_at": "2022-05-30T21:06:05.388Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 15, + "durationInMilliseconds": 906997, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458138, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458140, + "carbs": null, + "insulin": null + }, + { + "_id": "629530fae3aedd00046f3876", + "eventType": "Meal Bolus", + "insulin": 6.02, + "created_at": "2022-05-30T21:02:38.858Z", + "date": 1653944558858, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 22018, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62953113e3aedd00046f3878", + "eventType": "Meal Bolus", + "carbs": 35, + "created_at": "2022-05-30T21:02:35.469Z", + "isValid": true, + "date": 1653944555469, + "insulin": null + }, + { + "_id": "629530fae3aedd00046f3877", + "eventType": "Bolus Wizard", + "created_at": "2022-05-30T21:02:35.469Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":0.267,\"bolusIOB\":-1.1300000000000001,\"carbs\":35.0,\"carbsInsulin\":6.9944756849403245,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653944555615,\"glucoseDifference\":66.0,\"glucoseInsulin\":0.6268744459833301,\"glucoseTrend\":-2.61,\"glucoseValue\":166.0,\"ic\":5.003949055875317,\"id\":1580,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":105.28424060494416,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Training days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":100.0,\"targetBGLow\":100.0,\"timestamp\":1653944555469,\"totalInsulin\":6.0200000000000005,\"trendInsulin\":-0.07437010472802234,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653944555469, + "glucose": 166, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "62952f81e3aedd00046f3873", + "created_at": "2022-05-30T20:56:23.945Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 578949, + "type": "NORMAL", + "rate": 0.36950000000000005, + "percent": -50, + "pumpId": 458132, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458137, + "carbs": null, + "insulin": null + }, + { + "_id": "62952eb4e3aedd00046f386e", + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-30T20:50:49.125Z", + "date": 1653943849125, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22017, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62952eb5e3aedd00046f3870", + "created_at": "2022-05-30T20:50:46.774Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 335678, + "type": "NORMAL", + "rate": 0.22169999999999998, + "percent": -70, + "pumpId": 458127, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458131, + "carbs": null, + "insulin": null + }, + { + "_id": "62952d03e3aedd00046f386c", + "created_at": "2022-05-30T20:45:47.527Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 297761, + "type": "NORMAL", + "rate": 0.36950000000000005, + "percent": -50, + "pumpId": 458124, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458126, + "carbs": null, + "insulin": null + }, + { + "_id": "62952c85e3aedd00046f3868", + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-30T20:43:25.045Z", + "date": 1653943405045, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22016, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62952c85e3aedd00046f3869", + "created_at": "2022-05-30T20:43:22.025Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 144010, + "type": "NORMAL", + "rate": 1.6258, + "percent": 120, + "pumpId": 458119, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458123, + "carbs": null, + "insulin": null + }, + { + "_id": "62952b57e3aedd00046f3863", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-30T20:38:25.189Z", + "units": "mg/dl", + "notes": "AndroidAPS est lancé - samsung SM-A405FN", + "carbs": null, + "insulin": null + }, + { + "_id": "62952ac3e3aedd00046f3861", + "created_at": "2022-05-30T20:35:51.571Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 41925, + "type": "NORMAL", + "rate": 0.1478, + "percent": -80, + "pumpId": 458113, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458115, + "carbs": null, + "insulin": null + }, + { + "_id": "629529ade3aedd00046f385e", + "created_at": "2022-05-30T20:31:15.130Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 274985, + "type": "NORMAL", + "rate": 0.2956, + "percent": -60, + "pumpId": 458110, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458112, + "carbs": null, + "insulin": null + }, + { + "_id": "62952899e3aedd00046f3859", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-30T20:26:57.470Z", + "date": 1653942417470, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22015, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62952899e3aedd00046f385b", + "created_at": "2022-05-30T20:26:55.194Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 257445, + "type": "NORMAL", + "rate": 1.3302, + "percent": 80, + "pumpId": 458105, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458109, + "carbs": null, + "insulin": null + }, + { + "_id": "6295273ae3aedd00046f3857", + "created_at": "2022-05-30T20:20:59.451Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 353254, + "type": "NORMAL", + "rate": 0.1478, + "percent": -80, + "pumpId": 458102, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458104, + "carbs": null, + "insulin": null + }, + { + "_id": "62952605f63c010004ea5d2a", + "eventType": "Correction Bolus", + "insulin": 0.18, + "created_at": "2022-05-30T20:15:59.073Z", + "date": 1653941759073, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22014, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62952605f63c010004ea5d2c", + "created_at": "2022-05-30T20:15:56.006Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 301964, + "type": "NORMAL", + "rate": 1.4780000000000002, + "percent": 100, + "pumpId": 458097, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458101, + "carbs": null, + "insulin": null + }, + { + "_id": "629524f1f63c010004ea5d28", + "created_at": "2022-05-30T20:11:18.206Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 276310, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458094, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458096, + "carbs": null, + "insulin": null + }, + { + "_id": "629523c4f63c010004ea5d24", + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-30T20:06:16.890Z", + "date": 1653941176890, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22013, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629523c4f63c010004ea5d25", + "created_at": "2022-05-30T20:06:14.789Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300947, + "type": "NORMAL", + "rate": 0.0739, + "percent": -90, + "pumpId": 458089, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458093, + "carbs": null, + "insulin": null + }, + { + "_id": "6295227ef63c010004ea5d21", + "created_at": "2022-05-30T20:00:49.579Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 323721, + "type": "NORMAL", + "rate": 0.36950000000000005, + "percent": -50, + "pumpId": 458086, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458088, + "carbs": null, + "insulin": null + }, + { + "_id": "6295216af63c010004ea5d1e", + "created_at": "2022-05-30T19:56:09.060Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 279028, + "type": "NORMAL", + "rate": 0.2956, + "percent": -60, + "pumpId": 458083, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458085, + "carbs": null, + "insulin": null + }, + { + "_id": "62951f28f63c010004ea5d17", + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-30T19:46:40.723Z", + "date": 1653940000723, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22012, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62951f29f63c010004ea5d19", + "created_at": "2022-05-30T19:46:38.592Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 568986, + "type": "NORMAL", + "rate": 0.2956, + "percent": -60, + "pumpId": 458078, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458082, + "carbs": null, + "insulin": null + }, + { + "_id": "62951dcbf63c010004ea5d13", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-30T19:40:48.541Z", + "date": 1653939648541, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22011, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62951dcbf63c010004ea5d15", + "created_at": "2022-05-30T19:40:46.581Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 350525, + "type": "NORMAL", + "rate": 0.0739, + "percent": -90, + "pumpId": 458073, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458077, + "carbs": null, + "insulin": null + }, + { + "_id": "62951c9df63c010004ea5d11", + "created_at": "2022-05-30T19:35:47.077Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 298007, + "type": "NORMAL", + "rate": 0.2956, + "percent": -60, + "pumpId": 458070, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458072, + "carbs": null, + "insulin": null + }, + { + "_id": "62951b87f63c010004ea5d0d", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-30T19:30:59.385Z", + "date": 1653939059385, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22010, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62951b88f63c010004ea5d0e", + "created_at": "2022-05-30T19:30:57.168Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 288421, + "type": "NORMAL", + "rate": 0.0739, + "percent": -90, + "pumpId": 458065, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458069, + "carbs": null, + "insulin": null + }, + { + "_id": "62951a5af63c010004ea5d0a", + "created_at": "2022-05-30T19:26:13.778Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 280898, + "type": "NORMAL", + "rate": 0.36950000000000005, + "percent": -50, + "pumpId": 458062, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458064, + "carbs": null, + "insulin": null + }, + { + "_id": "62951929f63c010004ea5d06", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-30T19:21:09.927Z", + "date": 1653938469927, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22009, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6295192af63c010004ea5d07", + "created_at": "2022-05-30T19:21:07.733Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304559, + "type": "NORMAL", + "rate": 1.6997, + "percent": 130, + "pumpId": 458057, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458061, + "carbs": null, + "insulin": null + }, + { + "_id": "629517fcf63c010004ea5d03", + "created_at": "2022-05-30T19:16:01.807Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304435, + "type": "NORMAL", + "rate": 0.22169999999999998, + "percent": -70, + "pumpId": 458054, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458056, + "carbs": null, + "insulin": null + }, + { + "_id": "629515a4f63c010004ea5cfe", + "created_at": "2022-05-30T19:06:06.196Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 594121, + "type": "NORMAL", + "rate": 0.5173, + "percent": -30, + "pumpId": 458051, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458053, + "carbs": null, + "insulin": null + }, + { + "_id": "62951348f63c010004ea5cf9", + "created_at": "2022-05-30T18:55:49.150Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 614556, + "type": "NORMAL", + "rate": 0.5089, + "percent": -30, + "pumpId": 458047, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458050, + "carbs": null, + "insulin": null + }, + { + "_id": "629512130f8c2e00042830a4", + "created_at": "2022-05-30T18:50:53.328Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293324, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 458044, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458046, + "carbs": null, + "insulin": null + }, + { + "_id": "629510e40f8c2e00042830a0", + "created_at": "2022-05-30T18:45:49.783Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 301049, + "type": "NORMAL", + "rate": 0.4362, + "percent": -40, + "pumpId": 458041, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458043, + "carbs": null, + "insulin": null + }, + { + "_id": "62950fb60f8c2e000428309d", + "eventType": "Correction Bolus", + "insulin": 0.66, + "created_at": "2022-05-30T18:40:40.053Z", + "date": 1653936040053, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22008, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62950ea10f8c2e000428309b", + "created_at": "2022-05-30T18:35:51.435Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 588000, + "type": "FAKE_EXTENDED", + "rate": 3.788224489795918, + "absolute": 3.788224489795918, + "pumpId": 22007, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-30T18:35:51.435Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 9, + "durationInMilliseconds": 588000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.5, + "relative": 3.061224489795918, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22007, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "62950dbf0f8c2e0004283098", + "created_at": "2022-05-30T18:32:07.486Z", + "enteredBy": "openaps://AndroidAPS", + "isValid": true, + "eventType": "Note", + "profileJson": "{\"units\":\"mg\\/dl\",\"dia\":6,\"timezone\":\"Africa\\/Cairo\",\"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":87.18851175096937},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":69.11416670978657},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":52.85200983689563},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":47.706921524115316},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":44.41678900521082},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":42.77172274575857},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":41.12665648630631},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":42.77172274575857},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":46.3471470877392},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":56.91754905511835},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":69.11416670978657},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":73.1797059280093},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":81.31078436445473},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":85.37632358267754},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":89.44186280090027},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":97.57294123734576},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":105.28424060494416}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":5.80877612703003},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":5.003949055875317},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":5.886998889265079},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":5.003949055875317}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0.917},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":0.919},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":0.969},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":0.965},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.858},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.864},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.787},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.81},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.756},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.776},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.777},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.753},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.723},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.72},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.718},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":0.721},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.71},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.635},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.603},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.582},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.727},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.739},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":0.759}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", + "originalProfileName": "Training days", + "originalCustomizedName": "Training days", + "originalTimeshift": 0, + "originalPercentage": 100, + "originalDuration": 0, + "originalEnd": 1653876333580, + "notes": "Training days", + "carbs": null, + "insulin": null + }, + { + "_id": "62950d8c0f8c2e0004283096", + "eventType": "Correction Bolus", + "insulin": 0.2, + "created_at": "2022-05-30T18:31:16.379Z", + "date": 1653935476379, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22006, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62950d8d0f8c2e0004283097", + "created_at": "2022-05-30T18:31:13.515Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 266977, + "type": "NORMAL", + "rate": 1.33768, + "percent": 130, + "pumpId": 458025, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458031, + "carbs": null, + "insulin": null + }, + { + "_id": "62950c5e0f8c2e0004283093", + "created_at": "2022-05-30T18:26:18.162Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 293856, + "type": "NORMAL", + "rate": 0.40712000000000004, + "percent": -30, + "pumpId": 458022, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458024, + "carbs": null, + "insulin": null + }, + { + "_id": "62950b160f8c2e000428308e", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-30T18:21:07.247Z", + "date": 1653934867247, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22005, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62950b160f8c2e000428308f", + "created_at": "2022-05-30T18:21:04.625Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304000, + "type": "FAKE_EXTENDED", + "rate": 1.0552842105263158, + "absolute": 1.0552842105263158, + "pumpId": 22004, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-30T18:21:04.625Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 5, + "durationInMilliseconds": 304000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.04, + "relative": 0.47368421052631576, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22004, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "629508d0409703000484d1c8", + "created_at": "2022-05-30T18:11:02.413Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 590161, + "type": "NORMAL", + "rate": 0.7560800000000001, + "percent": 30, + "pumpId": 458010, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458012, + "carbs": null, + "insulin": null + }, + { + "_id": "6295065b409703000484d1c3", + "created_at": "2022-05-30T18:00:54.436Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 605487, + "type": "NORMAL", + "rate": 0.40712000000000004, + "percent": -30, + "pumpId": 458007, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458009, + "carbs": null, + "insulin": null + }, + { + "_id": "6295052c409703000484d1c0", + "created_at": "2022-05-30T17:55:41.687Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 311257, + "type": "NORMAL", + "rate": 0.5121600000000001, + "percent": 10, + "pumpId": 458003, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458006, + "carbs": null, + "insulin": null + }, + { + "_id": "62950417409703000484d1bb", + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-30T17:51:02.602Z", + "date": 1653933062602, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22003, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62950417409703000484d1bd", + "created_at": "2022-05-30T17:51:00.624Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 279574, + "type": "NORMAL", + "rate": 0.88464, + "percent": 90, + "pumpId": 457998, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 458002, + "carbs": null, + "insulin": null + }, + { + "_id": "629502e9409703000484d1b8", + "created_at": "2022-05-30T17:46:00.204Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 298930, + "type": "NORMAL", + "rate": 0.65184, + "percent": 40, + "pumpId": 457995, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457997, + "carbs": null, + "insulin": null + }, + { + "_id": "6294ff6755b9dd00048a5492", + "created_at": "2022-05-30T17:31:07.277Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 574757, + "type": "NORMAL", + "rate": 0.55872, + "percent": 20, + "pumpId": 457989, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457991, + "carbs": null, + "insulin": null + }, + { + "_id": "6294f81755b9dd00048a5484", + "eventType": "Exercise", + "isValid": true, + "created_at": "2022-05-30T17:00:01.505Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "duration": 90, + "durationInMilliseconds": 5400000, + "notes": "🏓", + "carbs": null, + "insulin": null + }, + { + "_id": "6294f3a055b9dd00048a547c", + "created_at": "2022-05-30T16:40:57.666Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 50, + "durationInMilliseconds": 3007120, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457984, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457988, + "carbs": null, + "insulin": null + }, + { + "_id": "6294f143b23f340004e841ea", + "created_at": "2022-05-30T16:30:34.848Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 621339, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457981, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457983, + "carbs": null, + "insulin": null + }, + { + "_id": "6294f02eb23f340004e841e7", + "created_at": "2022-05-30T16:25:59.075Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 274281, + "type": "NORMAL", + "rate": 0.2412, + "percent": -50, + "pumpId": 457978, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457980, + "carbs": null, + "insulin": null + }, + { + "_id": "6294ef00b23f340004e841e2", + "eventType": "Correction Bolus", + "insulin": 0.44, + "created_at": "2022-05-30T16:21:13.491Z", + "date": 1653927673491, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 22002, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294ef01b23f340004e841e4", + "created_at": "2022-05-30T16:21:11.436Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 278000, + "type": "FAKE_EXTENDED", + "rate": 1.5183712230215827, + "absolute": 1.5183712230215827, + "pumpId": 22001, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-30T16:21:11.436Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 4, + "durationInMilliseconds": 278000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.08, + "relative": 1.0359712230215827, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22001, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "6294edb9b23f340004e841e0", + "created_at": "2022-05-30T16:15:48.023Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 323413, + "type": "FAKE_EXTENDED", + "rate": 1.6824, + "absolute": 1.6824, + "pumpId": 22000, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-30T16:15:48.023Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 5, + "durationInMilliseconds": 323413, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.10780433333333332, + "relative": 1.2, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 22000, + "endId": 22001, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "endId": 22001, + "carbs": null, + "insulin": null + }, + { + "_id": "6294eca4b23f340004e841db", + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-30T16:10:57.547Z", + "date": 1653927057547, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21999, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294eca5b23f340004e841dd", + "created_at": "2022-05-30T16:10:55.574Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 279439, + "type": "NORMAL", + "rate": 0.9648, + "percent": 100, + "pumpId": 457960, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457964, + "carbs": null, + "insulin": null + }, + { + "_id": "6294ea5cb23f340004e841d7", + "created_at": "2022-05-30T16:01:08.748Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 585338, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457957, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457959, + "carbs": null, + "insulin": null + }, + { + "_id": "62952b70e3aedd00046f3864", + "eventType": "Carb Correction", + "carbs": 10, + "created_at": "2022-05-30T16:00:50.000Z", + "isValid": true, + "date": 1653926450000, + "insulin": null + }, + { + "_id": "6294e345706f120004b7d15e", + "created_at": "2022-05-30T15:31:10.998Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1796270, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457952, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457956, + "carbs": null, + "insulin": null + }, + { + "_id": "6294d527dac1e20004fde59f", + "created_at": "2022-05-30T14:30:51.321Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 60, + "durationInMilliseconds": 3617187, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457947, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457951, + "carbs": null, + "insulin": null + }, + { + "_id": "6294d50ddac1e20004fde59c", + "created_at": "2022-05-30T14:30:37.211Z", + "enteredBy": "openaps://AndroidAPS", + "isValid": true, + "eventType": "Note", + "profileJson": "{\"units\":\"mg\\/dl\",\"dia\":6,\"timezone\":\"Africa\\/Cairo\",\"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":108.98563968871171},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":86.39270838723321},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":66.06501229611953},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":59.63365190514415},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":55.52098625651353},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":53.464653432198205},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":51.408320607882885},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":53.464653432198205},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":57.933933859674},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":71.14693631889794},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":86.39270838723321},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":91.47463241001162},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":101.63848045556841},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":106.72040447834692},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":111.80232850112533},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":121.96617654668219},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":131.6053007561802}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":7.260970158787537},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":6.2549363198441466},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":7.3587486115813485},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":6.2549363198441466}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0.7336},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":0.7352000000000001},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":0.7752},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":0.772},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.6864},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.6912},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.6296},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.6480000000000001},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.6048},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.6208},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.6216},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.6024},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.5784},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.576},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.5744},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":0.5768},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.568},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.508},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.4824},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.4656},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.5816},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.5912000000000001},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":0.6072000000000001}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", + "originalProfileName": "Training days", + "originalCustomizedName": "Training days(80%)", + "originalTimeshift": 0, + "originalPercentage": 80, + "originalDuration": 14400000, + "originalEnd": 1653935417554, + "notes": "Training days(80%)", + "carbs": null, + "insulin": null + }, + { + "_id": "6294d50ddac1e20004fde59b", + "timeshift": 0, + "percentage": 80, + "created_at": "2022-05-30T14:30:14.534Z", + "enteredBy": "openaps://AndroidAPS", + "isValid": true, + "eventType": "Profile Switch", + "duration": 240, + "profile": "Training days", + "profileJson": "{\"units\":\"mg\\/dl\",\"dia\":6,\"timezone\":\"Africa\\/Cairo\",\"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":87.18851175096937},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":69.11416670978657},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":52.85200983689563},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":47.706921524115316},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":44.41678900521082},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":42.77172274575857},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":41.12665648630631},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":42.77172274575857},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":46.3471470877392},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":56.91754905511835},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":69.11416670978657},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":73.1797059280093},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":81.31078436445473},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":85.37632358267754},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":89.44186280090027},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":97.57294123734576},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":105.28424060494416}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":5.80877612703003},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":5.003949055875317},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":5.886998889265079},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":5.003949055875317}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0.917},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":0.919},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":0.969},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":0.965},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.858},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.864},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.787},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.81},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.756},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.776},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.777},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.753},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.723},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.72},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.718},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":0.721},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.71},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.635},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.603},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.582},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.727},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.739},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":0.739},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":0.759}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", + "carbs": null, + "insulin": null + }, + { + "_id": "6294c27452bed20004c9a2b9", + "created_at": "2022-05-30T13:10:58.834Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 79, + "durationInMilliseconds": 4790001, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457941, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457946, + "carbs": null, + "insulin": null + }, + { + "_id": "6294beec52bed20004c9a2b0", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:55:49.673Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "24g de glucides requis dans 15 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294bdbe52bed20004c9a2ad", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:50:45.432Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "26g de glucides requis dans 20 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294bc9dff39db0004546866", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:46:09.818Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "28g de glucides requis dans 25 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294bb56ff39db0004546862", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:40:38.359Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "31g de glucides requis dans 30 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294ba41ff39db000454685f", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:35:59.292Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "33g de glucides requis dans 35 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294b913ff39db000454685d", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:30:53.968Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "35g de glucides requis dans 35 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294b7e5ff39db0004546859", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:25:53.822Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "36g de glucides requis dans 40 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294b6b7ff39db0004546856", + "created_at": "2022-05-30T12:20:57.742Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 49, + "durationInMilliseconds": 2999601, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457937, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457940, + "carbs": null, + "insulin": null + }, + { + "_id": "6294b6b7ff39db0004546855", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-30T12:20:55.578Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "36g de glucides requis dans 45 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6294ae7b0f39100004ec41eb", + "created_at": "2022-05-30T11:45:53.866Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 35, + "durationInMilliseconds": 2102390, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457933, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457936, + "carbs": null, + "insulin": null + }, + { + "_id": "6294ae480f39100004ec41e8", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-30T11:44:23.166Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "Pompe démarrée", + "carbs": null, + "insulin": null + }, + { + "_id": "6294ae480f39100004ec41e9", + "eventType": "Insulin Change", + "isValid": true, + "created_at": "2022-05-30T11:44:04.200Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "6294ad4d0f39100004ec41e6", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-30T11:40:51.759Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "Pompe suspendue", + "carbs": null, + "insulin": null + }, + { + "_id": "6294ad4d0f39100004ec41e4", + "eventType": "Meal Bolus", + "insulin": 10.22, + "created_at": "2022-05-30T11:40:44.413Z", + "date": 1653910844413, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21998, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294ad340f39100004ec41e3", + "eventType": "Bolus Wizard", + "created_at": "2022-05-30T11:40:28.961Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":-0.144,\"bolusIOB\":-2.272,\"carbs\":50.0,\"carbsInsulin\":8.493291903141824,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653910829149,\"glucoseDifference\":142.0,\"glucoseInsulin\":1.7463858098271619,\"glucoseTrend\":18.5,\"glucoseValue\":232.0,\"ic\":5.886998889265079,\"id\":1578,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":81.31078436445473,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":120,\"profileName\":\"Training days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":90.0,\"targetBGLow\":90.0,\"timestamp\":1653910828961,\"totalInsulin\":10.21,\"trendInsulin\":0.6825662848268133,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653910828961, + "glucose": 232, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "6294ac24ac54000004308890", + "created_at": "2022-05-30T11:35:47.458Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 604926, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457913, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457932, + "carbs": null, + "insulin": null + }, + { + "_id": "6294aaf7ac5400000430888b", + "eventType": "Correction Bolus", + "insulin": 0.56, + "created_at": "2022-05-30T11:30:58.979Z", + "date": 1653910258979, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21997, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294aaf7ac5400000430888d", + "created_at": "2022-05-30T11:30:56.911Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289057, + "type": "NORMAL", + "rate": 0.21599999999999997, + "percent": -70, + "pumpId": 457908, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457912, + "carbs": null, + "insulin": null + }, + { + "_id": "6294a9e2ac54000004308889", + "created_at": "2022-05-30T11:26:00.011Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294405, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457905, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457907, + "carbs": null, + "insulin": null + }, + { + "_id": "6294a8b5ac54000004308885", + "eventType": "Correction Bolus", + "insulin": 1.3, + "created_at": "2022-05-30T11:21:17.561Z", + "date": 1653909677561, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21996, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294a8b5ac54000004308886", + "created_at": "2022-05-30T11:21:15.161Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 275000, + "type": "FAKE_EXTENDED", + "rate": 4.123636363636364, + "absolute": 4.123636363636364, + "pumpId": 21995, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-30T11:21:15.161Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 4, + "durationInMilliseconds": 275000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.26, + "relative": 3.403636363636364, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21995, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "6294a673ac5400000430887e", + "eventType": "Correction Bolus", + "insulin": 0.56, + "created_at": "2022-05-30T11:11:41.446Z", + "date": 1653909101446, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21994, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294a673ac54000004308880", + "created_at": "2022-05-30T11:11:38.414Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 576747, + "type": "FAKE_EXTENDED", + "rate": 2.92, + "absolute": 2.92, + "pumpId": 21993, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-30T11:11:38.414Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 9, + "durationInMilliseconds": 576747, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.35245650000000006, + "relative": 2.2, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21993, + "endId": 21995, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "endId": 21995, + "carbs": null, + "insulin": null + }, + { + "_id": "6294a4f9ac5400000430887b", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-30T11:05:10.963Z", + "units": "mg/dl", + "notes": "AndroidAPS est lancé - samsung SM-A405FN", + "carbs": null, + "insulin": null + }, + { + "_id": "6294a3f0ac54000004308879", + "created_at": "2022-05-30T11:00:58.834Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 627902, + "type": "NORMAL", + "rate": 0.504, + "percent": -30, + "pumpId": 457887, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457889, + "carbs": null, + "insulin": null + }, + { + "_id": "6294a2d9ac54000004308876", + "created_at": "2022-05-30T10:56:07.755Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289590, + "type": "NORMAL", + "rate": 0.6507, + "percent": -10, + "pumpId": 457883, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457886, + "carbs": null, + "insulin": null + }, + { + "_id": "62949f4bc2e464000413b7a5", + "created_at": "2022-05-30T10:41:06.400Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 899864, + "type": "NORMAL", + "rate": 0.5783999999999999, + "percent": -20, + "pumpId": 457880, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457882, + "carbs": null, + "insulin": null + }, + { + "_id": "6294ad4d0f39100004ec41e5", + "eventType": "Meal Bolus", + "carbs": 50, + "created_at": "2022-05-30T10:40:28.961Z", + "isValid": true, + "date": 1653907228961, + "insulin": null + }, + { + "_id": "62949aaec2e464000413b79c", + "created_at": "2022-05-30T10:21:11.134Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1192773, + "type": "NORMAL", + "rate": 0.3615, + "percent": -50, + "pumpId": 457877, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457879, + "carbs": null, + "insulin": null + }, + { + "_id": "629498395989a90004f0c232", + "created_at": "2022-05-30T10:10:51.972Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 617668, + "type": "NORMAL", + "rate": 0.5061, + "percent": -30, + "pumpId": 457874, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457876, + "carbs": null, + "insulin": null + }, + { + "_id": "629497255989a90004f0c22f", + "created_at": "2022-05-30T10:06:04.609Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 285883, + "type": "NORMAL", + "rate": 0.6507, + "percent": -10, + "pumpId": 457871, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457873, + "carbs": null, + "insulin": null + }, + { + "_id": "629495c55989a90004f0c22b", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-30T10:00:20.925Z", + "timestamp": 1653904820925, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 85, + "targetTop": 85, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "629493845989a90004f0c227", + "created_at": "2022-05-30T09:50:42.429Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 637607, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457864, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457867, + "carbs": null, + "insulin": null + }, + { + "_id": "62948cad76174b0004fbd224", + "created_at": "2022-05-30T09:21:26.391Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1753548, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457861, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457863, + "carbs": null, + "insulin": null + }, + { + "_id": "62948b4d76174b0004fbd221", + "created_at": "2022-05-30T09:15:44.467Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 339433, + "type": "NORMAL", + "rate": 0.3012, + "percent": -60, + "pumpId": 457858, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457860, + "carbs": null, + "insulin": null + }, + { + "_id": "629489008ecbb3000401e2df", + "created_at": "2022-05-30T09:05:54.354Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 587619, + "type": "NORMAL", + "rate": 0.1506, + "percent": -80, + "pumpId": 457854, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457857, + "carbs": null, + "insulin": null + }, + { + "_id": "629485788ecbb3000401e2d9", + "created_at": "2022-05-30T08:50:58.583Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 605568, + "type": "NORMAL", + "rate": 0.8547, + "percent": 10, + "pumpId": 457847, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457850, + "carbs": null, + "insulin": null + }, + { + "_id": "6294844b8ecbb3000401e2d4", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-30T08:45:49.557Z", + "date": 1653900349557, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21992, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294844b8ecbb3000401e2d6", + "created_at": "2022-05-30T08:45:47.742Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 309352, + "type": "NORMAL", + "rate": 1.7094, + "percent": 120, + "pumpId": 457842, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457846, + "carbs": null, + "insulin": null + }, + { + "_id": "6294831e8ecbb3000401e2d2", + "created_at": "2022-05-30T08:40:41.524Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304721, + "type": "NORMAL", + "rate": 0.8547, + "percent": 10, + "pumpId": 457839, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457841, + "carbs": null, + "insulin": null + }, + { + "_id": "629481f18ecbb3000401e2cf", + "created_at": "2022-05-30T08:35:41.513Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 298517, + "type": "NORMAL", + "rate": 0.3885, + "percent": -50, + "pumpId": 457836, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457838, + "carbs": null, + "insulin": null + }, + { + "_id": "629480cfd10aeb0004cd3ff6", + "created_at": "2022-05-30T08:31:00.195Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 278821, + "type": "NORMAL", + "rate": 0.1554, + "percent": -80, + "pumpId": 457833, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457835, + "carbs": null, + "insulin": null + }, + { + "_id": "62947fa2d10aeb0004cd3ff1", + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-30T08:26:06.795Z", + "date": 1653899166795, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21991, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62947fa3d10aeb0004cd3ff3", + "created_at": "2022-05-30T08:26:04.750Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 292954, + "type": "NORMAL", + "rate": 1.2432, + "percent": 60, + "pumpId": 457828, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457832, + "carbs": null, + "insulin": null + }, + { + "_id": "62947e75d10aeb0004cd3fef", + "created_at": "2022-05-30T08:20:55.136Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 308124, + "type": "NORMAL", + "rate": 0.3108, + "percent": -60, + "pumpId": 457825, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457827, + "carbs": null, + "insulin": null + }, + { + "_id": "62946ac16e1b8e0004363e00", + "created_at": "2022-05-30T06:56:40.471Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 84, + "durationInMilliseconds": 5053176, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457819, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457824, + "carbs": null, + "insulin": null + }, + { + "_id": "62946376b82b320004ef5ece", + "created_at": "2022-05-30T06:25:52.633Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 30, + "durationInMilliseconds": 1845357, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457816, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457818, + "carbs": null, + "insulin": null + }, + { + "_id": "62946279b82b320004ef5ec9", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-30T06:20:55.768Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "Avertissement W31 : Réservoir bas", + "carbs": null, + "insulin": null + }, + { + "_id": "62946247b82b320004ef5ec8", + "eventType": "Meal Bolus", + "insulin": 16.26, + "created_at": "2022-05-30T06:20:45.443Z", + "date": 1653891645443, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21990, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294622db82b320004ef5ec7", + "eventType": "Bolus Wizard", + "created_at": "2022-05-30T06:20:04.980Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":0.444,\"bolusIOB\":-0.239,\"carbs\":75.0,\"carbsInsulin\":14.988162182014982,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653891605009,\"glucoseDifference\":9.0,\"glucoseInsulin\":0.21041939445594296,\"glucoseTrend\":12.0,\"glucoseValue\":99.0,\"ic\":5.003949055875317,\"id\":1576,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":42.77172274575857,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":100,\"profileName\":\"Training days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":90.0,\"targetBGLow\":90.0,\"timestamp\":1653891604980,\"totalInsulin\":16.25,\"trendInsulin\":0.8416775778237718,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653891604980, + "glucose": 99, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "62945ff6d2cadd0004350d8b", + "created_at": "2022-05-30T06:10:53.144Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 897997, + "type": "NORMAL", + "rate": 0.6048, + "percent": -20, + "pumpId": 457809, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457815, + "carbs": null, + "insulin": null + }, + { + "_id": "62945ee1d2cadd0004350d88", + "created_at": "2022-05-30T06:06:14.629Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 276025, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457806, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457808, + "carbs": null, + "insulin": null + }, + { + "_id": "62946279b82b320004ef5eca", + "eventType": "Meal Bolus", + "carbs": 75, + "created_at": "2022-05-30T06:05:04.980Z", + "isValid": true, + "date": 1653890704980, + "insulin": null + }, + { + "_id": "62945d9ad2cadd0004350d85", + "created_at": "2022-05-30T06:00:37.634Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 335497, + "type": "NORMAL", + "rate": 0.2268, + "percent": -70, + "pumpId": 457803, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457805, + "carbs": null, + "insulin": null + }, + { + "_id": "62945c84d2cadd0004350d82", + "created_at": "2022-05-30T05:55:56.652Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 279490, + "type": "NORMAL", + "rate": 0.7290000000000001, + "percent": -10, + "pumpId": 457799, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457802, + "carbs": null, + "insulin": null + }, + { + "_id": "62945b56d2cadd0004350d7f", + "created_at": "2022-05-30T05:51:11.125Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284042, + "type": "NORMAL", + "rate": 0.08100000000000002, + "percent": -90, + "pumpId": 457796, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457798, + "carbs": null, + "insulin": null + }, + { + "_id": "62945a29d2cadd0004350d7c", + "created_at": "2022-05-30T05:46:04.618Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304018, + "type": "NORMAL", + "rate": 0.08100000000000002, + "percent": -90, + "pumpId": 457793, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457795, + "carbs": null, + "insulin": null + }, + { + "_id": "62945992d2cadd0004350d79", + "created_at": "2022-05-30T05:43:22.980Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 2, + "durationInMilliseconds": 160150, + "type": "NORMAL", + "rate": 0.8910000000000001, + "percent": 10, + "pumpId": 457790, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457792, + "carbs": null, + "insulin": null + }, + { + "_id": "629457f413be4d00048f99e5", + "created_at": "2022-05-30T05:36:39.361Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 6, + "durationInMilliseconds": 402130, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457787, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457789, + "carbs": null, + "insulin": null + }, + { + "_id": "629456ad13be4d00048f99e2", + "created_at": "2022-05-30T05:31:20.230Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 316643, + "type": "NORMAL", + "rate": 0.8910000000000001, + "percent": 10, + "pumpId": 457784, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457786, + "carbs": null, + "insulin": null + }, + { + "_id": "6294559813be4d00048f99df", + "created_at": "2022-05-30T05:26:33.058Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284676, + "type": "NORMAL", + "rate": 1.5390000000000001, + "percent": 90, + "pumpId": 457781, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457783, + "carbs": null, + "insulin": null + }, + { + "_id": "6294546a13be4d00048f99db", + "eventType": "Correction Bolus", + "insulin": 0.1, + "created_at": "2022-05-30T05:21:40.755Z", + "date": 1653888100755, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21989, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294546b13be4d00048f99dc", + "created_at": "2022-05-30T05:21:37.532Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294039, + "type": "NORMAL", + "rate": 1.215, + "percent": 50, + "pumpId": 457776, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457780, + "carbs": null, + "insulin": null + }, + { + "_id": "6294520f13be4d00048f99d6", + "created_at": "2022-05-30T05:11:40.257Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 594790, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457773, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457775, + "carbs": null, + "insulin": null + }, + { + "_id": "629450fa13be4d00048f99d3", + "created_at": "2022-05-30T05:06:57.622Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 280151, + "type": "NORMAL", + "rate": 0.08100000000000002, + "percent": -90, + "pumpId": 457770, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457772, + "carbs": null, + "insulin": null + }, + { + "_id": "62944e90c0f24700048ea5f5", + "created_at": "2022-05-30T04:56:35.596Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294089, + "type": "NORMAL", + "rate": 0.1574, + "percent": -80, + "pumpId": 457763, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457766, + "carbs": null, + "insulin": null + }, + { + "_id": "62944c33c0f24700048ea5f0", + "created_at": "2022-05-30T04:46:35.308Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 598821, + "type": "NORMAL", + "rate": 0.0787, + "percent": -90, + "pumpId": 457760, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457762, + "carbs": null, + "insulin": null + }, + { + "_id": "62944b06c0f24700048ea5ea", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-30T04:41:36.155Z", + "date": 1653885696155, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21988, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62944b06c0f24700048ea5ed", + "created_at": "2022-05-30T04:41:33.737Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299075, + "type": "NORMAL", + "rate": 1.4165999999999999, + "percent": 80, + "pumpId": 457754, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457759, + "carbs": null, + "insulin": null + }, + { + "_id": "62944b06c0f24700048ea5eb", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-30T04:33:29.750Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "Avertissement W32 : Batterie faible", + "carbs": null, + "insulin": null + }, + { + "_id": "629448abc0f24700048ea5e6", + "created_at": "2022-05-30T04:31:29.135Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 603111, + "type": "NORMAL", + "rate": 0.4722, + "percent": -40, + "pumpId": 457748, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457753, + "carbs": null, + "insulin": null + }, + { + "_id": "62944788c319020004344fc3", + "created_at": "2022-05-30T04:26:24.314Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 303324, + "type": "NORMAL", + "rate": 0.7082999999999999, + "percent": -10, + "pumpId": 457745, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457747, + "carbs": null, + "insulin": null + }, + { + "_id": "6294465ac319020004344fbf", + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-30T04:21:40.190Z", + "date": 1653884500190, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21987, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294452cc319020004344fbb", + "eventType": "Correction Bolus", + "insulin": 0.12, + "created_at": "2022-05-30T04:16:23.222Z", + "date": 1653884183222, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21986, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294452cc319020004344fbd", + "created_at": "2022-05-30T04:16:21.242Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 600581, + "type": "NORMAL", + "rate": 1.2592, + "percent": 60, + "pumpId": 457738, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457744, + "carbs": null, + "insulin": null + }, + { + "_id": "629443ffc319020004344fb9", + "created_at": "2022-05-30T04:11:37.634Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 281119, + "type": "NORMAL", + "rate": 0.5509000000000001, + "percent": -30, + "pumpId": 457734, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457737, + "carbs": null, + "insulin": null + }, + { + "_id": "629442d2c319020004344fb6", + "created_at": "2022-05-30T04:06:36.554Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299592, + "type": "NORMAL", + "rate": 0.8657, + "percent": 10, + "pumpId": 457731, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457733, + "carbs": null, + "insulin": null + }, + { + "_id": "629441bdc319020004344fb2", + "created_at": "2022-05-30T04:02:01.839Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 272225, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457728, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457730, + "carbs": null, + "insulin": null + }, + { + "_id": "62943bd1a743da00044e28e4", + "created_at": "2022-05-30T03:36:23.863Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1536482, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457724, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457727, + "carbs": null, + "insulin": null + }, + { + "_id": "62943aa3a743da00044e28e0", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-30T03:31:24.792Z", + "date": 1653881484792, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21985, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62943aa4a743da00044e28e1", + "created_at": "2022-05-30T03:31:22.771Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299601, + "type": "NORMAL", + "rate": 1.5552000000000001, + "percent": 80, + "pumpId": 457719, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457723, + "carbs": null, + "insulin": null + }, + { + "_id": "6294385da365640004d83ccb", + "created_at": "2022-05-30T03:21:42.950Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 578328, + "type": "NORMAL", + "rate": 0.0864, + "percent": -90, + "pumpId": 457716, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457718, + "carbs": null, + "insulin": null + }, + { + "_id": "6294372fa365640004d83cc7", + "eventType": "Correction Bolus", + "insulin": 0.48, + "created_at": "2022-05-30T03:16:53.627Z", + "date": 1653880613627, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21984, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6294372fa365640004d83cc8", + "created_at": "2022-05-30T03:16:50.671Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 282000, + "type": "FAKE_EXTENDED", + "rate": 3.417191489361702, + "absolute": 3.417191489361702, + "pumpId": 21983, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-30T03:16:50.671Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 4, + "durationInMilliseconds": 282000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.2, + "relative": 2.5531914893617023, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21983, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "629434b9a365640004d83cc1", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-30T03:06:26.954Z", + "date": 1653879986954, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21982, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62943277a365640004d83cbc", + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-30T02:56:44.155Z", + "date": 1653879404155, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21981, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62943278a365640004d83cbd", + "created_at": "2022-05-30T02:56:41.816Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1196851, + "type": "NORMAL", + "rate": 2.145, + "percent": 150, + "pumpId": 457699, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457706, + "carbs": null, + "insulin": null + }, + { + "_id": "62943010ee9e6e00046d7ff3", + "eventType": "Correction Bolus", + "insulin": 0.26, + "created_at": "2022-05-30T02:46:22.948Z", + "date": 1653878782948, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21980, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62943011ee9e6e00046d7ff5", + "created_at": "2022-05-30T02:46:20.921Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 619407, + "type": "NORMAL", + "rate": 1.8876, + "percent": 120, + "pumpId": 457693, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457698, + "carbs": null, + "insulin": null + }, + { + "_id": "62942ee3ee9e6e00046d7ff1", + "created_at": "2022-05-30T02:41:20.762Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 298664, + "type": "NORMAL", + "rate": 0.5147999999999999, + "percent": -40, + "pumpId": 457690, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457692, + "carbs": null, + "insulin": null + }, + { + "_id": "62942db6ee9e6e00046d7fee", + "created_at": "2022-05-30T02:36:22.192Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 297076, + "type": "NORMAL", + "rate": 0.1716, + "percent": -80, + "pumpId": 457687, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457689, + "carbs": null, + "insulin": null + }, + { + "_id": "629427e7a90f7f00040c0d51", + "created_at": "2022-05-30T02:11:31.145Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1488556, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457684, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457686, + "carbs": null, + "insulin": null + }, + { + "_id": "62942688a90f7f00040c0d4e", + "created_at": "2022-05-30T02:05:44.144Z", + "enteredBy": "openaps://AndroidAPS", + "isValid": true, + "eventType": "Note", + "profileJson": "{\"units\":\"mg\\/dl\",\"dia\":6,\"timezone\":\"Africa\\/Cairo\",\"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":87.18851175096937},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":69.11416670978657},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":52.85200983689563},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":47.706921524115316},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":44.41678900521082},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":42.77172274575857},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":41.12665648630631},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":42.77172274575857},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":46.3471470877392},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":56.91754905511835},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":69.11416670978657},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":73.1797059280093},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":81.31078436445473},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":85.37632358267754},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":89.44186280090027},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":97.57294123734576},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":105.28424060494416}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":5.80877612703003},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":5.003949055875317},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":5.886998889265079},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":5.003949055875317}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0.917},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":0.919},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":0.969},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":0.965},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.858},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.864},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.787},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.81},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.756},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.776},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.777},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.753},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.723},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.72},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.718},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":0.721},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.71},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.635},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.603},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.582},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.727},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.739},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":0.759}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", + "originalProfileName": "Training days", + "originalCustomizedName": "Training days", + "originalTimeshift": 0, + "originalPercentage": 100, + "originalDuration": 0, + "originalEnd": 1653876333580, + "notes": "Training days", + "carbs": null, + "insulin": null + }, + { + "_id": "6294266fa90f7f00040c0d4c", + "timeshift": 0, + "percentage": 100, + "created_at": "2022-05-30T02:05:33.580Z", + "enteredBy": "openaps://AndroidAPS", + "isValid": true, + "eventType": "Profile Switch", + "duration": 0, + "profile": "Training days", + "profileJson": "{\"units\":\"mg\\/dl\",\"dia\":6,\"timezone\":\"Africa\\/Cairo\",\"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":87.18851175096937},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":69.11416670978657},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":52.85200983689563},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":47.706921524115316},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":44.41678900521082},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":42.77172274575857},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":41.12665648630631},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":42.77172274575857},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":46.3471470877392},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":56.91754905511835},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":69.11416670978657},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":73.1797059280093},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":81.31078436445473},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":85.37632358267754},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":89.44186280090027},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":97.57294123734576},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":105.28424060494416}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":5.80877612703003},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":5.003949055875317},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":5.886998889265079},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":5.003949055875317}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0.917},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":0.919},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":0.969},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":0.965},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.858},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.864},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.787},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.81},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.756},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.776},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.777},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.753},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.723},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.72},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.718},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":0.721},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.71},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.635},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.603},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.582},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.727},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.739},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":0.739},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":0.759}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", + "carbs": null, + "insulin": null + }, + { + "_id": "62942460a90f7f00040c0d48", + "created_at": "2022-05-30T01:56:36.130Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 893527, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457677, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457683, + "carbs": null, + "insulin": null + }, + { + "_id": "6294219fa90f7f00040c0d41", + "eventType": "Temporary Target", + "duration": 90, + "durationInMilliseconds": 5400000, + "isValid": true, + "created_at": "2022-05-30T01:45:00.160Z", + "timestamp": 1653875100160, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 120, + "targetTop": 120, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "62941769773aab00049f760c", + "created_at": "2022-05-30T01:01:19.791Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 55, + "durationInMilliseconds": 3314849, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457674, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457676, + "carbs": null, + "insulin": null + }, + { + "_id": "62941070773aab00049f75ff", + "created_at": "2022-05-30T00:31:28.314Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1789990, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457669, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457673, + "carbs": null, + "insulin": null + }, + { + "_id": "62940e203d4dab0004cd1c4d", + "created_at": "2022-05-30T00:21:34.178Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 591648, + "type": "NORMAL", + "rate": 1.1223, + "percent": -10, + "pumpId": 457666, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457668, + "carbs": null, + "insulin": null + }, + { + "_id": "6294094f3d4dab0004cd1c42", + "created_at": "2022-05-30T00:01:02.427Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 20, + "durationInMilliseconds": 1230257, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457662, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457665, + "carbs": null, + "insulin": null + }, + { + "_id": "629409363d4dab0004cd1c40", + "eventType": "Temporary Target", + "duration": 90, + "durationInMilliseconds": 5400000, + "isValid": true, + "created_at": "2022-05-30T00:00:41.151Z", + "timestamp": 1653868841151, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 120, + "targetTop": 120, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "629405d50174fb0004ce672c", + "created_at": "2022-05-29T23:46:20.699Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 879249, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457657, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457661, + "carbs": null, + "insulin": null + }, + { + "_id": "6294000a0174fb0004ce6721", + "created_at": "2022-05-29T23:21:37.300Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1481907, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457654, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457656, + "carbs": null, + "insulin": null + }, + { + "_id": "6293fb25d1a5200004a64e29", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-29T23:00:27.400Z", + "timestamp": 1653865227400, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "6293fa2ad1a5200004a64e27", + "created_at": "2022-05-29T22:56:19.507Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1515302, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457650, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457653, + "carbs": null, + "insulin": null + }, + { + "_id": "6293f8fcd1a5200004a64e22", + "eventType": "Correction Bolus", + "insulin": 0.22, + "created_at": "2022-05-29T22:51:31.787Z", + "date": 1653864691787, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21979, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293f8fcd1a5200004a64e24", + "created_at": "2022-05-29T22:51:29.742Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 288274, + "type": "NORMAL", + "rate": 0.43, + "percent": -60, + "pumpId": 457645, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457649, + "carbs": null, + "insulin": null + }, + { + "_id": "6293f7e8d1a5200004a64e20", + "created_at": "2022-05-29T22:46:43.874Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284375, + "type": "NORMAL", + "rate": 0.43, + "percent": -60, + "pumpId": 457642, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457644, + "carbs": null, + "insulin": null + }, + { + "_id": "6293f6d2d1a5200004a64e1a", + "eventType": "Correction Bolus", + "insulin": 0.14, + "created_at": "2022-05-29T22:41:50.545Z", + "date": 1653864110545, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21978, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293f6d3d1a5200004a64e1c", + "created_at": "2022-05-29T22:41:48.373Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 294017, + "type": "NORMAL", + "rate": 0.3225, + "percent": -70, + "pumpId": 457637, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457641, + "carbs": null, + "insulin": null + }, + { + "_id": "6293f59d9ecc5e0004355b00", + "created_at": "2022-05-29T22:36:57.686Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 288195, + "type": "NORMAL", + "rate": 0.3225, + "percent": -70, + "pumpId": 457634, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457636, + "carbs": null, + "insulin": null + }, + { + "_id": "6293f46f9ecc5e0004355afc", + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-29T22:31:50.989Z", + "date": 1653863510989, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21977, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293f46f9ecc5e0004355afd", + "created_at": "2022-05-29T22:31:48.259Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 299000, + "type": "FAKE_EXTENDED", + "rate": 3.242224080267558, + "absolute": 3.242224080267558, + "pumpId": 21976, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-29T22:31:48.259Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 4, + "durationInMilliseconds": 299000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.18, + "relative": 2.1672240802675584, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21976, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "6293eaa265b2420004c06370", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-29T21:50:13.436Z", + "timestamp": 1653861013436, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "6293f750d1a5200004a64e1d", + "eventType": "Carb Correction", + "carbs": 10, + "created_at": "2022-05-29T21:45:40.000Z", + "isValid": true, + "date": 1653860740000, + "insulin": null + }, + { + "_id": "6293e89365b2420004c0636c", + "created_at": "2022-05-29T21:41:33.569Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 50, + "durationInMilliseconds": 3003675, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457619, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457624, + "carbs": null, + "insulin": null + }, + { + "_id": "6293e19d65b2420004c06360", + "created_at": "2022-05-29T21:11:41.680Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1789396, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457616, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457618, + "carbs": null, + "insulin": null + }, + { + "_id": "6293e07065b2420004c0635c", + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-29T21:06:44.914Z", + "date": 1653858404914, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21975, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293de1665b2420004c06357", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-29T20:56:33.937Z", + "date": 1653857793937, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21974, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293da9f5d63e500043da7b2", + "created_at": "2022-05-29T20:41:52.642Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1787544, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457608, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457615, + "carbs": null, + "insulin": null + }, + { + "_id": "6293d9715d63e500043da7ae", + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-29T20:36:42.707Z", + "date": 1653856602707, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21973, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293d6fe5d63e500043da7a9", + "eventType": "Correction Bolus", + "insulin": 0.42, + "created_at": "2022-05-29T20:26:31.571Z", + "date": 1653855991571, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21972, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293d4bc5d63e500043da7a4", + "eventType": "Correction Bolus", + "insulin": 0.38, + "created_at": "2022-05-29T20:16:46.053Z", + "date": 1653855406053, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21971, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293d3765d63e500043da7a1", + "eventType": "Correction Bolus", + "insulin": 0.44, + "created_at": "2022-05-29T20:11:31.773Z", + "date": 1653855091773, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21970, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293d14a0c2a950004a81e33", + "eventType": "Correction Bolus", + "insulin": 0.54, + "created_at": "2022-05-29T20:01:55.412Z", + "date": 1653854515412, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21969, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293ced60c2a950004a81e2e", + "eventType": "Correction Bolus", + "insulin": 0.5, + "created_at": "2022-05-29T19:51:40.370Z", + "date": 1653853900370, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21968, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293cc7c0c2a950004a81e29", + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-29T19:41:39.514Z", + "date": 1653853299514, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21967, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293ca2a822c320004b85211", + "eventType": "Correction Bolus", + "insulin": 0.24, + "created_at": "2022-05-29T19:31:41.148Z", + "date": 1653852701148, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21966, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293c571822c320004b85209", + "created_at": "2022-05-29T19:11:35.804Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 90, + "durationInMilliseconds": 5415345, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457588, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457607, + "carbs": null, + "insulin": null + }, + { + "_id": "6293c474822c320004b85205", + "eventType": "Meal Bolus", + "insulin": 7.54, + "created_at": "2022-05-29T19:07:09.325Z", + "date": 1653851229325, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21965, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293c45b822c320004b85204", + "eventType": "Bolus Wizard", + "created_at": "2022-05-29T19:06:54.838Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":0.785,\"bolusIOB\":-2.29,\"carbs\":45.0,\"carbsInsulin\":8.908723692318452,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653851214949,\"glucoseDifference\":41.0,\"glucoseInsulin\":0.4173320827373653,\"glucoseTrend\":18.0,\"glucoseValue\":141.0,\"ic\":5.051228610760625,\"id\":1574,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":98.24310590039647,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Weekend days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":100.0,\"targetBGLow\":100.0,\"timestamp\":1653851214838,\"totalInsulin\":7.53,\"trendInsulin\":0.549656889458969,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653851214838, + "glucose": 141, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "6293c442822c320004b85203", + "created_at": "2022-05-29T19:06:29.428Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304884, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457583, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457587, + "carbs": null, + "insulin": null + }, + { + "_id": "6293c32d822c320004b851ff", + "eventType": "Correction Bolus", + "insulin": 0.9, + "created_at": "2022-05-29T19:01:59.437Z", + "date": 1653850919437, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21964, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293c32e822c320004b85200", + "created_at": "2022-05-29T19:01:56.046Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 270897, + "type": "NORMAL", + "rate": 0.0774, + "percent": -90, + "pumpId": 457578, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457582, + "carbs": null, + "insulin": null + }, + { + "_id": "6293c205822c320004b851fc", + "created_at": "2022-05-29T18:56:56.166Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 298402, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457574, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457577, + "carbs": null, + "insulin": null + }, + { + "_id": "6293c0be822c320004b851f7", + "eventType": "Correction Bolus", + "insulin": 0.88, + "created_at": "2022-05-29T18:51:38.181Z", + "date": 1653850298181, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21963, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293c0be822c320004b851f8", + "created_at": "2022-05-29T18:51:35.515Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 311000, + "type": "FAKE_EXTENDED", + "rate": 2.8176012861736335, + "absolute": 2.8176012861736335, + "pumpId": 21962, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-29T18:51:35.515Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 5, + "durationInMilliseconds": 311000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.18, + "relative": 2.0836012861736335, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21962, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "6293c474822c320004b85206", + "eventType": "Meal Bolus", + "carbs": 45, + "created_at": "2022-05-29T18:31:54.837Z", + "isValid": true, + "date": 1653849114837, + "insulin": null + }, + { + "_id": "6293b8b9411d3400044ea44d", + "created_at": "2022-05-29T18:17:21.698Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 34, + "durationInMilliseconds": 2041809, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457562, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457564, + "carbs": null, + "insulin": null + }, + { + "_id": "6293b83b411d3400044ea449", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-29T18:14:57.596Z", + "timestamp": 1653848097596, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "6293abc46219a300042d6779", + "created_at": "2022-05-29T17:21:50.383Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 55, + "durationInMilliseconds": 3329827, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457558, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457561, + "carbs": null, + "insulin": null + }, + { + "_id": "6293a737ae43dd00049c530b", + "eventType": "Correction Bolus", + "insulin": 0.7, + "created_at": "2022-05-29T17:02:22.679Z", + "date": 1653843742679, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21961, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293a4c3ae43dd00049c5305", + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-29T16:51:57.840Z", + "date": 1653843117840, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21960, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293a4c3ae43dd00049c5306", + "created_at": "2022-05-29T16:51:54.897Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1792996, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457550, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457557, + "carbs": null, + "insulin": null + }, + { + "_id": "6293a267ae43dd00049c52ff", + "eventType": "Correction Bolus", + "insulin": 0.4, + "created_at": "2022-05-29T16:41:53.804Z", + "date": 1653842513804, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21959, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62939ff2ae43dd00049c52fb", + "eventType": "Correction Bolus", + "insulin": 0.44, + "created_at": "2022-05-29T16:31:44.873Z", + "date": 1653841904873, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21958, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62939dc64c156c000419f12f", + "eventType": "Correction Bolus", + "insulin": 0.34, + "created_at": "2022-05-29T16:22:07.129Z", + "date": 1653841327129, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21957, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62939dc74c156c000419f130", + "created_at": "2022-05-29T16:22:04.725Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1788689, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457541, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457549, + "carbs": null, + "insulin": null + }, + { + "_id": "62939a3d4c156c000419f128", + "eventType": "Correction Bolus", + "insulin": 0.54, + "created_at": "2022-05-29T16:07:05.844Z", + "date": 1653840425844, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21956, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629398f64c156c000419f124", + "eventType": "Correction Bolus", + "insulin": 0.58, + "created_at": "2022-05-29T16:01:46.109Z", + "date": 1653840106109, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21955, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629396a6c4590900040354f8", + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-29T15:51:51.765Z", + "date": 1653839511765, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21954, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62939579c4590900040354f6", + "created_at": "2022-05-29T15:46:45.168Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 35, + "durationInMilliseconds": 2118073, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457531, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457540, + "carbs": null, + "insulin": null + }, + { + "_id": "62939464c4590900040354f2", + "eventType": "Correction Bolus", + "insulin": 0.54, + "created_at": "2022-05-29T15:42:16.590Z", + "date": 1653838936590, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21953, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629391efc4590900040354ed", + "eventType": "Correction Bolus", + "insulin": 0.82, + "created_at": "2022-05-29T15:31:48.944Z", + "date": 1653838308944, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21952, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62938fadc4590900040354e8", + "eventType": "Correction Bolus", + "insulin": 1.14, + "created_at": "2022-05-29T15:22:16.968Z", + "date": 1653837736968, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21951, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62938e6c10fec10004d25b98", + "eventType": "Correction Bolus", + "insulin": 1.48, + "created_at": "2022-05-29T15:16:51.754Z", + "date": 1653837411754, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21950, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62938e6d10fec10004d25b9a", + "created_at": "2022-05-29T15:16:49.736Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1793954, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457519, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457530, + "carbs": null, + "insulin": null + }, + { + "_id": "62938d5710fec10004d25b96", + "created_at": "2022-05-29T15:12:03.739Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 284504, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457516, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457518, + "carbs": null, + "insulin": null + }, + { + "_id": "62938c1110fec10004d25b92", + "eventType": "Correction Bolus", + "insulin": 1.52, + "created_at": "2022-05-29T15:06:35.585Z", + "date": 1653836795585, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21949, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62938c1110fec10004d25b93", + "created_at": "2022-05-29T15:06:32.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 320000, + "type": "FAKE_EXTENDED", + "rate": 3.706, + "absolute": 3.706, + "pumpId": 21948, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-29T15:06:32.000Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 5, + "durationInMilliseconds": 320000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.26, + "relative": 2.925, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21948, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "62938ae310fec10004d25b8d", + "eventType": "Meal Bolus", + "carbs": 40, + "created_at": "2022-05-29T14:50:49.000Z", + "isValid": true, + "date": 1653835849000, + "insulin": null + }, + { + "_id": "629386d72e64470004ddfa33", + "eventType": "Note", + "isValid": true, + "created_at": "2022-05-29T14:44:19.893Z", + "units": "mg/dl", + "notes": "AndroidAPS est lancé - samsung SM-A405FN", + "carbs": null, + "insulin": null + }, + { + "_id": "629376f21d13c2000469a799", + "created_at": "2022-05-29T13:36:41.814Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 89, + "durationInMilliseconds": 5353198, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457504, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457508, + "carbs": null, + "insulin": null + }, + { + "_id": "629373681d13c2000469a791", + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-29T13:21:43.137Z", + "date": 1653830503137, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21947, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629371261d13c2000469a78d", + "eventType": "Correction Bolus", + "insulin": 0.42, + "created_at": "2022-05-29T13:11:44.482Z", + "date": 1653829904482, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21946, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62936d96b97b6600046a28ce", + "eventType": "Correction Bolus", + "insulin": 0.46, + "created_at": "2022-05-29T12:56:41.095Z", + "date": 1653829001095, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21945, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62936b54b97b6600046a28c9", + "eventType": "Correction Bolus", + "insulin": 0.5, + "created_at": "2022-05-29T12:47:00.369Z", + "date": 1653828420369, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21944, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6293658bb97b6600046a28be", + "created_at": "2022-05-29T12:21:43.345Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 74, + "durationInMilliseconds": 4496983, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457491, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457503, + "carbs": null, + "insulin": null + }, + { + "_id": "62936300b97b6600046a28b8", + "eventType": "Correction Bolus", + "insulin": 0.38, + "created_at": "2022-05-29T12:11:34.015Z", + "date": 1653826294015, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21943, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629360a637fd2b0004af9367", + "eventType": "Correction Bolus", + "insulin": 0.52, + "created_at": "2022-05-29T12:01:32.648Z", + "date": 1653825692648, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21942, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629359a737fd2b0004af935b", + "created_at": "2022-05-29T11:31:24.472Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 50, + "durationInMilliseconds": 3016384, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457483, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457490, + "carbs": null, + "insulin": null + }, + { + "_id": "629356fcab873a0004e70cfe", + "eventType": "Meal Bolus", + "insulin": 6.74, + "created_at": "2022-05-29T11:20:25.910Z", + "date": 1653823225910, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21941, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62935715ab873a0004e70d00", + "eventType": "Meal Bolus", + "carbs": 45, + "created_at": "2022-05-29T11:20:17.286Z", + "isValid": true, + "date": 1653823217286, + "insulin": null + }, + { + "_id": "629356fcab873a0004e70cff", + "eventType": "Bolus Wizard", + "created_at": "2022-05-29T11:20:17.286Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":0.991,\"bolusIOB\":-1.114,\"carbs\":45.0,\"carbsInsulin\":7.572415138470685,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653823217360,\"glucoseDifference\":6.0,\"glucoseInsulin\":0.06718028648942959,\"glucoseTrend\":-1.28,\"glucoseValue\":96.0,\"ic\":5.9426218950125,\"id\":1572,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":89.31191445490582,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Weekend days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":90.0,\"targetBGLow\":90.0,\"timestamp\":1653823217286,\"totalInsulin\":6.73,\"trendInsulin\":-0.04299538335323493,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653823217286, + "glucose": 96, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "62934b8981eecb0004b36989", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T10:31:28.825Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "11g de glucides requis dans 20 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62934a7381eecb0004b36986", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T10:26:41.576Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "13g de glucides requis dans 25 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6293494381eecb0004b36984", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T10:21:34.052Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "18g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "6293481281eecb0004b36980", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T10:16:27.158Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "21g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629346e481eecb0004b3697d", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T10:11:47.978Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "23g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629345c1e492ca000461c5f4", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T10:06:35.040Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "26g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62934366e492ca000461c5f0", + "created_at": "2022-05-29T09:56:45.285Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 94, + "durationInMilliseconds": 5677694, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457476, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457482, + "carbs": null, + "insulin": null + }, + { + "_id": "62934365e492ca000461c5ee", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:56:32.097Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "32g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62934237e492ca000461c5eb", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:51:39.114Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "32g de glucides requis dans 0 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62934109e492ca000461c5e8", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:46:38.397Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "32g de glucides requis dans 10 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62933fdbe492ca000461c5e5", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:41:22.751Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "32g de glucides requis dans 15 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62933e94e492ca000461c5e2", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:36:17.776Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "33g de glucides requis dans 10 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62933d6ea93f2f00043e98fd", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:31:21.229Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "34g de glucides requis dans 5 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62935812ab873a0004e70d03", + "eventType": "Meal Bolus", + "carbs": 20, + "created_at": "2022-05-29T09:30:29.000Z", + "isValid": true, + "date": 1653816629000, + "insulin": null + }, + { + "_id": "62933c72a93f2f00043e98fa", + "created_at": "2022-05-29T09:26:54.313Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1788486, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457473, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457475, + "carbs": null, + "insulin": null + }, + { + "_id": "62933c59a93f2f00043e98f8", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:26:41.044Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "34g de glucides requis dans 5 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62933bf4a93f2f00043e98f7", + "eventType": "Temporary Target", + "duration": 60, + "durationInMilliseconds": 3600000, + "isValid": true, + "created_at": "2022-05-29T09:24:55.780Z", + "timestamp": 1653816295780, + "enteredBy": "AndroidAPS", + "reason": "Automation", + "targetBottom": 110, + "targetTop": 110, + "units": "mg/dl", + "carbs": null, + "insulin": null + }, + { + "_id": "62933b44a93f2f00043e98f4", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:22:08.766Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "33g de glucides requis dans 10 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629339fda93f2f00043e98f1", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:16:37.269Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "34g de glucides requis dans 10 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629338cfa93f2f00043e98ee", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:11:36.712Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "34g de glucides requis dans 15 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629337a1a93f2f00043e98eb", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:06:35.041Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "35g de glucides requis dans 15 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62933673a93f2f00043e98e8", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T09:01:29.382Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "35g de glucides requis dans 20 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62933590a93f2f00043e98e6", + "created_at": "2022-05-29T08:56:57.810Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1794023, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457470, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457472, + "carbs": null, + "insulin": null + }, + { + "_id": "62933553d9e5bf0004488aca", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T08:56:40.706Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "24g de glucides requis dans 20 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "629332f8d9e5bf0004488ac5", + "eventType": "Announcement", + "isValid": true, + "created_at": "2022-05-29T08:46:32.658Z", + "enteredBy": "AndroidAPS", + "units": "mg/dl", + "notes": "23g de glucides requis dans 45 min.", + "isAnnouncement": true, + "carbs": null, + "insulin": null + }, + { + "_id": "62932e71d9e5bf0004488abd", + "created_at": "2022-05-29T08:27:08.244Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 29, + "durationInMilliseconds": 1788077, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457467, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457469, + "carbs": null, + "insulin": null + }, + { + "_id": "62932d70d9e5bf0004488ab9", + "eventType": "Meal Bolus", + "insulin": 14.06, + "created_at": "2022-05-29T08:23:01.108Z", + "date": 1653812581108, + "type": "NORMAL", + "isValid": true, + "isSMB": false, + "pumpId": 21940, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62932d70d9e5bf0004488ab8", + "eventType": "Bolus Wizard", + "created_at": "2022-05-29T08:22:59.388Z", + "isValid": true, + "bolusCalculatorResult": "{\"basalIOB\":-0.354,\"bolusIOB\":-1.975,\"carbs\":80.0,\"carbsInsulin\":15.837731008566136,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1653812579455,\"glucoseDifference\":72.0,\"glucoseInsulin\":1.1516620541045064,\"glucoseTrend\":20.06,\"glucoseValue\":172.0,\"ic\":5.051228610760625,\"id\":1570,\"interfaceIDs_backing\":{},\"isValid\":true,\"isf\":62.51834011843411,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Weekend days\",\"superbolusInsulin\":0.0,\"targetBGHigh\":100.0,\"targetBGLow\":100.0,\"timestamp\":1653812579388,\"totalInsulin\":14.06,\"trendInsulin\":0.9625975335556832,\"utcOffset\":7200000,\"version\":0,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + "date": 1653812579388, + "glucose": 172, + "units": "mg/dl", + "notes": "", + "carbs": null, + "insulin": null + }, + { + "_id": "62932d22d9e5bf0004488ab7", + "eventType": "Correction Bolus", + "insulin": 0.72, + "created_at": "2022-05-29T08:21:51.002Z", + "date": 1653812511002, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21939, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62932aefd9e5bf0004488ab1", + "eventType": "Correction Bolus", + "insulin": 0.86, + "created_at": "2022-05-29T08:12:14.562Z", + "date": 1653811934562, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21938, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62932af0d9e5bf0004488ab2", + "created_at": "2022-05-29T08:12:12.318Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 14, + "durationInMilliseconds": 887000, + "type": "FAKE_EXTENDED", + "rate": 4.17924464487035, + "absolute": 4.17924464487035, + "pumpId": 21937, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-29T08:12:12.318Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 14, + "durationInMilliseconds": 887000, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.84, + "relative": 3.4092446448703493, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21937, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "carbs": null, + "insulin": null + }, + { + "_id": "62932893d9e5bf0004488aab", + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-29T08:02:17.683Z", + "date": 1653811337683, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21936, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "62932893d9e5bf0004488aac", + "created_at": "2022-05-29T08:02:14.951Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 597367, + "type": "FAKE_EXTENDED", + "rate": 2.01, + "absolute": 2.01, + "pumpId": 21935, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "extendedEmulated": { + "created_at": "2022-05-29T08:02:14.951Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Combo Bolus", + "duration": 9, + "durationInMilliseconds": 597367, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 0.20575974444444445, + "relative": 1.24, + "isValid": true, + "isEmulatingTempBasal": true, + "pumpId": 21935, + "endId": 21937, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206" + }, + "endId": 21937, + "carbs": null, + "insulin": null + }, + { + "_id": "6293261ed9e5bf0004488aa6", + "created_at": "2022-05-29T07:51:48.306Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 613607, + "type": "NORMAL", + "rate": 0.6152000000000001, + "percent": -20, + "pumpId": 457444, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457447, + "carbs": null, + "insulin": null + }, + { + "_id": "62932da8d9e5bf0004488aba", + "eventType": "Meal Bolus", + "carbs": 80, + "created_at": "2022-05-29T07:32:59.387Z", + "isValid": true, + "date": 1653809579387, + "insulin": null + }, + { + "_id": "62932152b1568c00046a66d4", + "created_at": "2022-05-29T07:31:27.748Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 20, + "durationInMilliseconds": 1218071, + "type": "NORMAL", + "rate": 0.07690000000000001, + "percent": -90, + "pumpId": 457440, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457443, + "carbs": null, + "insulin": null + }, + { + "_id": "62931caa95c7b700044ac610", + "created_at": "2022-05-29T07:11:35.216Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 19, + "durationInMilliseconds": 1191056, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457436, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457439, + "carbs": null, + "insulin": null + }, + { + "_id": "62931a3595c7b700044ac60a", + "created_at": "2022-05-29T07:01:05.427Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 627304, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457433, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457435, + "carbs": null, + "insulin": null + }, + { + "_id": "6293190795c7b700044ac607", + "created_at": "2022-05-29T06:55:45.020Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 317918, + "type": "NORMAL", + "rate": 0.8855000000000001, + "percent": 10, + "pumpId": 457429, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457432, + "carbs": null, + "insulin": null + }, + { + "_id": "629317d995c7b700044ac604", + "created_at": "2022-05-29T06:50:56.089Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 286443, + "type": "NORMAL", + "rate": 0.48300000000000004, + "percent": -40, + "pumpId": 457426, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457428, + "carbs": null, + "insulin": null + }, + { + "_id": "629316ab95c7b700044ac601", + "created_at": "2022-05-29T06:45:40.887Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 313705, + "type": "NORMAL", + "rate": 0.161, + "percent": -80, + "pumpId": 457423, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457425, + "carbs": null, + "insulin": null + }, + { + "_id": "6293157e95c7b700044ac5fe", + "created_at": "2022-05-29T06:40:49.495Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289898, + "type": "NORMAL", + "rate": 0.161, + "percent": -80, + "pumpId": 457420, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457422, + "carbs": null, + "insulin": null + }, + { + "_id": "62931458ddb62c00041b9e5e", + "created_at": "2022-05-29T06:36:04.950Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 283072, + "type": "NORMAL", + "rate": 0.24150000000000002, + "percent": -70, + "pumpId": 457417, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457419, + "carbs": null, + "insulin": null + }, + { + "_id": "6293132addb62c00041b9e5a", + "eventType": "Correction Bolus", + "insulin": 0.32, + "created_at": "2022-05-29T06:30:47.530Z", + "date": 1653805847530, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21934, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629311fcddb62c00041b9e58", + "created_at": "2022-05-29T06:25:40.126Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 10, + "durationInMilliseconds": 623334, + "type": "NORMAL", + "rate": 1.9320000000000002, + "percent": 140, + "pumpId": 457412, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457416, + "carbs": null, + "insulin": null + }, + { + "_id": "629310cdddb62c00041b9e53", + "eventType": "Correction Bolus", + "insulin": 0.16, + "created_at": "2022-05-29T06:20:41.770Z", + "date": 1653805241770, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21933, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "629310ceddb62c00041b9e55", + "created_at": "2022-05-29T06:20:39.976Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 297656, + "type": "NORMAL", + "rate": 1.288, + "percent": 60, + "pumpId": 457407, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457411, + "carbs": null, + "insulin": null + }, + { + "_id": "62930fa0ddb62c00041b9e51", + "created_at": "2022-05-29T06:15:38.026Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300456, + "type": "NORMAL", + "rate": 0.644, + "percent": -20, + "pumpId": 457404, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457406, + "carbs": null, + "insulin": null + }, + { + "_id": "62930d45ddb62c00041b9e4a", + "created_at": "2022-05-29T06:05:48.141Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 588392, + "type": "NORMAL", + "rate": 0.8855000000000001, + "percent": 10, + "pumpId": 457401, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457403, + "carbs": null, + "insulin": null + }, + { + "_id": "62930c197b537000043fa1eb", + "created_at": "2022-05-29T06:00:33.505Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 312147, + "type": "NORMAL", + "rate": 0.5635, + "percent": -30, + "pumpId": 457398, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457400, + "carbs": null, + "insulin": null + }, + { + "_id": "629309bc7b537000043fa1e5", + "created_at": "2022-05-29T05:50:47.255Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 584759, + "type": "NORMAL", + "rate": 0.8844000000000001, + "percent": 10, + "pumpId": 457393, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457397, + "carbs": null, + "insulin": null + }, + { + "_id": "629307797b537000043fa1e0", + "created_at": "2022-05-29T05:40:51.736Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 593029, + "type": "NORMAL", + "rate": 0.7236, + "percent": -10, + "pumpId": 457390, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457392, + "carbs": null, + "insulin": null + }, + { + "_id": "6293019235e0750004253d2c", + "created_at": "2022-05-29T05:15:44.511Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 25, + "durationInMilliseconds": 1505734, + "type": "NORMAL", + "rate": 0.08040000000000001, + "percent": -90, + "pumpId": 457387, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457389, + "carbs": null, + "insulin": null + }, + { + "_id": "6293006435e0750004253d29", + "created_at": "2022-05-29T05:10:38.330Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 304686, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457384, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457386, + "carbs": null, + "insulin": null + }, + { + "_id": "6292fa8d77f215000477fce4", + "created_at": "2022-05-29T04:45:45.401Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 24, + "durationInMilliseconds": 1491438, + "type": "NORMAL", + "rate": 0, + "percent": -100, + "pumpId": 457380, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457383, + "carbs": null, + "insulin": null + }, + { + "_id": "6292f95f77f215000477fce0", + "created_at": "2022-05-29T04:40:43.528Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 300380, + "type": "NORMAL", + "rate": 0.1524, + "percent": -80, + "pumpId": 457377, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457379, + "carbs": null, + "insulin": null + }, + { + "_id": "6292f70377f215000477fcdc", + "created_at": "2022-05-29T04:30:47.924Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 289800, + "type": "NORMAL", + "rate": 0.1524, + "percent": -80, + "pumpId": 457371, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457373, + "carbs": null, + "insulin": null + }, + { + "_id": "6292f5d477f215000477fcd7", + "eventType": "Correction Bolus", + "insulin": 0.28, + "created_at": "2022-05-29T04:25:41.075Z", + "date": 1653798341075, + "type": "SMB", + "isValid": true, + "isSMB": true, + "pumpId": 21932, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null + }, + { + "_id": "6292f5d577f215000477fcd9", + "created_at": "2022-05-29T04:25:38.818Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 5, + "durationInMilliseconds": 307615, + "type": "NORMAL", + "rate": 1.7526, + "percent": 130, + "pumpId": 457366, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457370, + "carbs": null, + "insulin": null + }, + { + "_id": "6292f3886a923a000405c861", + "created_at": "2022-05-29T04:15:51.340Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 585991, + "type": "NORMAL", + "rate": 0.2286, + "percent": -70, + "pumpId": 457363, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457365, + "carbs": null, + "insulin": null + }, + { + "_id": "6292f12c6a923a000405c85c", + "created_at": "2022-05-29T04:05:57.590Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 9, + "durationInMilliseconds": 591258, + "type": "NORMAL", + "rate": 0.3048, + "percent": -60, + "pumpId": 457360, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457362, + "carbs": null, + "insulin": null + }, + { + "_id": "6292f0006a923a000405c859", + "created_at": "2022-05-29T04:00:59.965Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 4, + "durationInMilliseconds": 296127, + "type": "NORMAL", + "rate": 0.6858, + "percent": -10, + "pumpId": 457357, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "endId": 457359, + "carbs": null, + "insulin": null + }, + { + "_id": "6292effe6a923a000405c856", + "created_at": "2022-05-29T04:00:41.006Z", + "enteredBy": "openaps://AndroidAPS", + "eventType": "Temp Basal", + "isValid": true, + "duration": 0, + "durationInMilliseconds": 17465, + "type": "NORMAL", + "rate": 0.9144, + "percent": 20, + "pumpId": 457354, + "endId": 457356, + "pumpType": "ACCU_CHEK_INSIGHT_BLUETOOTH", + "pumpSerial": "33013206", + "carbs": null, + "insulin": null + } +] diff --git a/app/src/test/res/autotune/test4/profile.2022-05-30.json b/app/src/test/res/autotune/test4/profile.2022-05-30.json new file mode 100644 index 0000000000..41b52dfb83 --- /dev/null +++ b/app/src/test/res/autotune/test4/profile.2022-05-30.json @@ -0,0 +1,192 @@ +{ + "autosens_max": 1.3, + "autosens_min": 0.7, + "basalprofile": [ + { + "i": 0, + "minutes": 0, + "rate": 0.977, + "start": "00:00:00", + "untuned": 4 + }, + { + "i": 1, + "minutes": 60, + "rate": 1.011, + "start": "01:00:00", + "untuned": 1 + }, + { + "i": 2, + "minutes": 120, + "rate": 0.996, + "start": "02:00:00" + }, + { + "i": 3, + "minutes": 180, + "rate": 1.13, + "start": "03:00:00" + }, + { + "i": 4, + "minutes": 240, + "rate": 0.937, + "start": "04:00:00" + }, + { + "i": 5, + "minutes": 300, + "rate": 0.877, + "start": "05:00:00" + }, + { + "i": 6, + "minutes": 360, + "rate": 0.779, + "start": "06:00:00" + }, + { + "i": 7, + "minutes": 420, + "rate": 0.827, + "start": "07:00:00", + "untuned": 1 + }, + { + "i": 8, + "minutes": 480, + "rate": 0.882, + "start": "08:00:00", + "untuned": 1 + }, + { + "i": 9, + "minutes": 540, + "rate": 0.878, + "start": "09:00:00", + "untuned": 5 + }, + { + "i": 10, + "minutes": 600, + "rate": 0.879, + "start": "10:00:00", + "untuned": 5 + }, + { + "i": 11, + "minutes": 660, + "rate": 0.867, + "start": "11:00:00", + "untuned": 5 + }, + { + "i": 12, + "minutes": 720, + "rate": 0.86, + "start": "12:00:00", + "untuned": 5 + }, + { + "i": 13, + "minutes": 780, + "rate": 0.858, + "start": "13:00:00", + "untuned": 5 + }, + { + "i": 14, + "minutes": 840, + "rate": 0.855, + "start": "14:00:00", + "untuned": 5 + }, + { + "i": 15, + "minutes": 900, + "rate": 0.85, + "start": "15:00:00", + "untuned": 5 + }, + { + "i": 16, + "minutes": 960, + "rate": 0.82, + "start": "16:00:00", + "untuned": 5 + }, + { + "i": 17, + "minutes": 1020, + "rate": 0.784, + "start": "17:00:00", + "untuned": 5 + }, + { + "i": 18, + "minutes": 1080, + "rate": 0.778, + "start": "18:00:00", + "untuned": 4 + }, + { + "i": 19, + "minutes": 1140, + "rate": 0.815, + "start": "19:00:00", + "untuned": 4 + }, + { + "i": 20, + "minutes": 1200, + "rate": 0.854, + "start": "20:00:00", + "untuned": 3 + }, + { + "i": 21, + "minutes": 1260, + "rate": 0.849, + "start": "21:00:00", + "untuned": 4 + }, + { + "i": 22, + "minutes": 1320, + "rate": 0.849, + "start": "22:00:00", + "untuned": 4 + }, + { + "i": 23, + "minutes": 1380, + "rate": 0.843, + "start": "23:00:00", + "untuned": 4 + } + ], + "carb_ratio": 5.021, + "csf": 15.669, + "curve": "ultra-rapid", + "dia": 6, + "insulinPeakTime": 45, + "isfProfile": { + "sensitivities": [ + { + "endoffset": 1440, + "i": 0, + "offset": 0, + "sensitivity": 83.014, + "start": "00:00:00", + "x": 0 + } + ] + }, + "min_5m_carbimpact": 8, + "name": "Tuned Dyn2", + "sens": 83.014, + "timezone": "Europe/Paris", + "units": "mg/dl", + "useCustomPeakTime": true +} diff --git a/app/src/test/res/autotune/test4/profile.pump.json b/app/src/test/res/autotune/test4/profile.pump.json new file mode 100644 index 0000000000..eefadabacb --- /dev/null +++ b/app/src/test/res/autotune/test4/profile.pump.json @@ -0,0 +1,147 @@ +{ + "name": "Tuned Dyn2", + "min_5m_carbimpact": 8, + "dia": 6, + "curve": "ultra-rapid", + "useCustomPeakTime": true, + "insulinPeakTime": 45, + "basalprofile": [ + { + "start": "00:00:00", + "minutes": 0, + "rate": 0.966 + }, + { + "start": "01:00:00", + "minutes": 60, + "rate": 0.977 + }, + { + "start": "02:00:00", + "minutes": 120, + "rate": 0.971 + }, + { + "start": "03:00:00", + "minutes": 180, + "rate": 1.111 + }, + { + "start": "04:00:00", + "minutes": 240, + "rate": 0.974 + }, + { + "start": "05:00:00", + "minutes": 300, + "rate": 0.923 + }, + { + "start": "06:00:00", + "minutes": 360, + "rate": 0.823 + }, + { + "start": "07:00:00", + "minutes": 420, + "rate": 0.855 + }, + { + "start": "08:00:00", + "minutes": 480, + "rate": 0.902 + }, + { + "start": "09:00:00", + "minutes": 540, + "rate": 0.934 + }, + { + "start": "10:00:00", + "minutes": 600, + "rate": 0.938 + }, + { + "start": "11:00:00", + "minutes": 660, + "rate": 0.903 + }, + { + "start": "12:00:00", + "minutes": 720, + "rate": 0.882 + }, + { + "start": "13:00:00", + "minutes": 780, + "rate": 0.874 + }, + { + "start": "14:00:00", + "minutes": 840, + "rate": 0.866 + }, + { + "start": "15:00:00", + "minutes": 900, + "rate": 0.848 + }, + { + "start": "16:00:00", + "minutes": 960, + "rate": 0.758 + }, + { + "start": "17:00:00", + "minutes": 1020, + "rate": 0.65 + }, + { + "start": "18:00:00", + "minutes": 1080, + "rate": 0.648 + }, + { + "start": "19:00:00", + "minutes": 1140, + "rate": 0.738 + }, + { + "start": "20:00:00", + "minutes": 1200, + "rate": 0.847 + }, + { + "start": "21:00:00", + "minutes": 1260, + "rate": 0.861 + }, + { + "start": "22:00:00", + "minutes": 1320, + "rate": 0.863 + }, + { + "start": "23:00:00", + "minutes": 1380, + "rate": 0.843 + } + ], + "isfProfile": { + "sensitivities": [ + { + "i": 0, + "start": "00:00:00", + "sensitivity": 86.2, + "offset": 0, + "x": 0, + "endoffset": 1440 + } + ] + }, + "carb_ratio": 5.75, + "autosens_max": 1.3, + "autosens_min": 0.7, + "units": "mg/dl", + "timezone": "Europe/Paris" +} From 072324d1069ed8baa9286e4acc4c718c9155b803 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 21 Jun 2022 20:05:53 +0200 Subject: [PATCH 63/71] fear: wear mute alarm --- .../wear/wearintegration/DataHandlerMobile.kt | 11 +++- .../nightscout/shared/weardata/EventData.kt | 5 +- wear/src/main/AndroidManifest.xml | 12 ++++ .../androidaps/di/WearActivitiesModule.kt | 4 +- .../actions/QuickSnoozeActivity.kt | 52 ++++++++++++++++++ wear/src/main/res/drawable/ic_icon_snooze.png | Bin 0 -> 3919 bytes wear/src/main/res/values/strings.xml | 3 + 7 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt create mode 100644 wear/src/main/res/drawable/ic_icon_snooze.png diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt index cb21aeb5ba..a0ccacf982 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt @@ -27,6 +27,7 @@ import info.nightscout.androidaps.plugins.general.overview.graphExtensions.Gluco import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.receivers.ReceiverStatusStore +import info.nightscout.androidaps.services.AlarmSoundServiceHelper import info.nightscout.androidaps.utils.* import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.androidaps.utils.wizard.BolusWizard @@ -73,7 +74,8 @@ class DataHandlerMobile @Inject constructor( private val uel: UserEntryLogger, private val activePlugin: ActivePlugin, private val commandQueue: CommandQueue, - private val fabricPrivacy: FabricPrivacy + private val fabricPrivacy: FabricPrivacy, + private val alarmSoundServiceHelper: AlarmSoundServiceHelper ) { private val disposable = CompositeDisposable() @@ -260,6 +262,13 @@ class DataHandlerMobile @Inject constructor( } lastBolusWizard = null }, fabricPrivacy::logException) + disposable += rxBus + .toObservable(EventData.SnoozeAlert::class.java) + .observeOn(aapsSchedulers.io) + .subscribe({ + aapsLogger.debug(LTag.WEAR, "SnoozeAlert received $it from ${it.sourceNodeId}") + alarmSoundServiceHelper.stopService(context, "Muted from wear") + }, fabricPrivacy::logException) } private fun handleTddStatus() { diff --git a/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt b/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt index f570743aa6..aca2303c89 100644 --- a/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt +++ b/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt @@ -234,4 +234,7 @@ sealed class EventData : Event() { @Serializable // returnCommand is sent back to Mobile after confirmation data class ConfirmAction(val title: String, val message: String, val returnCommand: EventData?) : EventData() -} \ No newline at end of file + + @Serializable + data class SnoozeAlert(val timeStamp: Long) : EventData() +} diff --git a/wear/src/main/AndroidManifest.xml b/wear/src/main/AndroidManifest.xml index 88b52fc779..3d10810e37 100644 --- a/wear/src/main/AndroidManifest.xml +++ b/wear/src/main/AndroidManifest.xml @@ -629,5 +629,17 @@ + + + + + + + + diff --git a/wear/src/main/java/info/nightscout/androidaps/di/WearActivitiesModule.kt b/wear/src/main/java/info/nightscout/androidaps/di/WearActivitiesModule.kt index 18a63adb66..7055b32be0 100644 --- a/wear/src/main/java/info/nightscout/androidaps/di/WearActivitiesModule.kt +++ b/wear/src/main/java/info/nightscout/androidaps/di/WearActivitiesModule.kt @@ -2,6 +2,7 @@ package info.nightscout.androidaps.di import dagger.Module import dagger.android.ContributesAndroidInjector +import info.nightscout.androidaps.interaction.actions.QuickSnoozeActivity import info.nightscout.androidaps.interaction.ConfigurationActivity import info.nightscout.androidaps.interaction.TileConfigurationActivity import info.nightscout.androidaps.interaction.actions.* @@ -34,4 +35,5 @@ abstract class WearActivitiesModule { @ContributesAndroidInjector abstract fun contributesFillMenuActivity(): FillMenuActivity @ContributesAndroidInjector abstract fun contributesMainMenuActivity(): MainMenuActivity @ContributesAndroidInjector abstract fun contributesStatusMenuActivity(): StatusMenuActivity -} \ No newline at end of file + @ContributesAndroidInjector abstract fun contributesQuickSnoozeActivity(): QuickSnoozeActivity +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt new file mode 100644 index 0000000000..bb36a43221 --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt @@ -0,0 +1,52 @@ +package info.nightscout.androidaps.interaction.actions + +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import dagger.android.DaggerActivity +import info.nightscout.androidaps.R +import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.shared.weardata.EventData +import javax.inject.Inject + +/** + * Send a snooze request to silence any alarm. Designed to be bound to a button for fast access + */ + +class QuickSnoozeActivity : DaggerActivity() { + + @Inject lateinit var rxBus: RxBus + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + Toast.makeText(this, R.string.sending_snooze, Toast.LENGTH_LONG).show() + rxBus.send(EventWearToMobile(EventData.SnoozeAlert(System.currentTimeMillis()))) + + val xDripPackageName = "com.eveningoutpost.dexdrip" + if (isPackageExisted(xDripPackageName)) { + try { + val i = Intent() + i.setClassName(xDripPackageName, "$xDripPackageName.QuickSnooze") + startActivity(i) + } catch (e : Exception) { + Log.e("WEAR", "failed to snooze xDrip: ", e) + } + } else { + Log.d("WEAR", "Package $xDripPackageName not available for snooze") + } + + finish() + } + + private fun isPackageExisted(targetPackage: String?): Boolean { + try { + packageManager.getPackageInfo(targetPackage!!, PackageManager.GET_META_DATA) + } catch (e: PackageManager.NameNotFoundException) { + return false + } + return true + } +} diff --git a/wear/src/main/res/drawable/ic_icon_snooze.png b/wear/src/main/res/drawable/ic_icon_snooze.png new file mode 100644 index 0000000000000000000000000000000000000000..78334d1d78c13cfac185deba07b8280d1bcbf33a GIT binary patch literal 3919 zcmV-V53ulwP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vG&=l}pD=mCOb1snhX4&+HhK~!i%)meFT zl-1e)&6=6XOor^4EQBQ_!4O0ODewUz{f-LmfF9gxMf|YksI=9CRxMDM7WJ!WD~bh0 zzxvq)DA-~FWf6r?b_hWdAPJBSvQB1S-#*Ws?VW4__MiUFxhL;??=$y(p8M=K3WdoFo!tiy}5-2q&52VnOF#kx_WM5a!K;YlitPS#>_W&);V zCBURni1qJ+s}>+gzuMC1#+uU(e0ISFcR+$hDWQm%EHJ8&rBfnN9b(Yom(b!4;*33j zY7&m+(y5e~k*ml2!bIGhql5A)Ww~Mjn0UiE7nU5cqN>w}v;+la=V@_EwiXl8)G&mZ z?hj59^q*~h{JqhO4Hvv<^#oBuT3L3T8ME^BxKcT;NPsilek`cy#EvF63X_z0s#uRX zgA<@7PpYHS-Eq-}1MPm)*aB#B1))&-#qXq`8rga!3Qa1EPgUcFObv#Smb|2ib>}^J z{geweq?zd!9ac?BK|zvQ{O)pa*#dlA>%?PwJIL!LEE#3MBLzA#1qq+jd+o zLOXI8wE-v;5^SD$hWM1nB&+f8ums#YB!Ns%fi-8`Sa!k*5*zPMOve4g6GOz`f^QXo z7oR(9#jlQaV`7>LYbKbGOQ-pl1_z!$>P0i1bbshi068qQ*Gt!Gad%!K8fdRa_SsND zCicu|6J9Ax{#KJ3Pyk-|F`3M}r|fuWs1_^AjKVbjXTKe1-FCFt5<-Oi;Bo|DSWF%a z(;4wzxlx$fqC<9kSm(ilLIYM#N+k#HUyK3sz|RkL3FaR!Ou+BP8|h?xnDTiS_O$xK z6fv;xPR-EZ=OqTLn{2}GiJ4qOY`uqLyZ&9?r+0D zM$)ea{&3cT2X}XfljjXLQ`GoDg-tjfBa2RrHIPbCXyFJwen|G5L7`KQeeG`C^|e)K zVC@8>aCk;7Is7}P-NJV`{IUj`!`kG4@X*%@C%Dp_d7EXIA_z{w9BW&G(E@s#N&V-Zlh+ zy#q!s0oK(yu(R1CLM2BVcGwPYOi9fAU#FNblVWyHuxa#%d%m{e*`rR8BjjNJTv%Yj zn`Mb{Lhv{F+w4b6N)z#AYY=~|?hLQS5NASM9+Ylufj=0){+kA2J%!5WPFTaML`>r? zI{6trn6GyP@XM2(VE+F+AuT)`GNCCuTPR<|SYtD~C)a?di_A#sQ49U1+J=?2w(wgB zFOM=~c5Widw_2g{QNEd-2dyR+)#5a;`Md)syL=+Ua+2aW&yE@yw`Q1oG5>k950kc8 z@#i`PI-HvDYz$p)b=)3}-3fT(WB^mYu;OeFjXhat!mxzIIC|!Rd3kE29^cr3zt?qz zsY8epV9jYK(kZHNwBQUYPf{FVmXX8CvHOw_bNATLP1Wd?;tZM6E##nV=Mk`W-k@9~ zcXsB1d6`4?R+>SB52$zy%6uUzfYlSg)+P^T5g|tb4smiUD$>QNyp4*mhbrvwu-#oH z8l0SY?ZR{;C^4&|;WmP`l+>7~Ir%zlZ}Fqe?hdcW1lZ9ODv58Us*;_NYnuqzaepv0 z-gH)+wu(yfyW%T~PMaEC;kOVLP@N^mkq*Bo7H3*Ca7jw+xDfM`r~urIa6SJ$Dv5Ve zRVhDL&Y<#e$!cHU5IcqMiq-YDxbJbrI+#Li1iZ$T?u1koG-@R(T0PP1EU5UUl1`kP z5w7RCB$nd_DiP%PE7kG7z7zOWp~mLNF`35ssIE_s|0eUqycL<%sOkzJ5C{bTApkoC zn+K`i3_o6tf_3{aVr7VVB;SLaY$ZCf)6q6O2gib1 zoRc*0>J#Yq3KZs=P%zjGk3k1VauPbT($GG{g0_MjwC7~NH^@L)Hs0^d9bG8fwihE0 zS0ShV0*u|1#bk*1K-AFq>VqX?a1U#v5J`0gk~*w#IFn&a(uy_4;0x_&JpVopHS${# zEH^&@Pm)*?=3v`(JL*q{-w74rzabREa__516Z9(B4&H?WM7xXLUVVY*snB?=gZLZ zq@RYFi6LQ7F$|f-NU{{8yu3U-!izn?w5F^g3@aYf2Q3|Bjs;D_@}L}j}V$IKZ9`9%=ySGwTL-6w56|N_?@p} z{DUj7W5*6LR?iM|l{FPfGJ%=4^zP;O|Mi=D(`HT|CFjcn6K_UhGXahMz~ifvEecU$;@OlSJ-h#A%ZsC^sr7w@Ns za^&B5N3Y*xr|NOd;ILFt+OoL)N9CIZZ`D>miiuRC3FV2X0OJQK#Esd$Hb2S>Q^aBf z72kBgBd!Uz;fY!Ai@DsnFZME>zEO*}=P!m}fB9-qLE8&+rsjtm_ZaP{#c#&#KYm0C zwWtC3`~i%k!;aGc+tYugDxssAXLFMmd1-oz97aLFu)F=(cBF+4e-;G$<;(GZuTO_j zAD?Xc#I_X>2a0)kX5la~B}Z|d2{Xp!gkEH{4?i$OOfi_3+*BPlQ|YdUACoe)f@cn; zQ72AKOu&Cm=NAHjJ2zNg3#fYWBKZZq%j?q+na^zV4ej z&VrPrNLhOr2miELJh2%>4svoy8h&|y2@)s-_XX#nPof%I)PwuWsivxL;fx_LX@dytS&DWh zvdqWgTjTv>`j`y7zi1pLj4%q?=x}YqsqLH$LK=%053k)`o`#QpG9Cq%u$hwMJ`{HH z2rV}?Ov^lIG%CDSB)C0q|uM9k}R2_-;^&u9!FPs_F~+--F{qJ zP}-YzPi2F2|MD*d55GCqA>q9<(wn zOOZVo=&*b7O!p9XK)ZHFG|7750+v<<`-xdiDE`C#~qp(e`&kzoma4`lAmV9 z(VFxc^05-?+9WJJZpWk~FYX#@5ENuvz#O$KJ)?;JDkG4tE7jKnH z7sO1h-*M09(yzX#6g>5XKCc$JI&Eob!HbnPyn8{5CrV6ssZ@tUXS(qGM<>wj^a%&E zd1DqhC{ZI!$nNr^;#4~w4AnU*%IcI;?wd9gLE>e9O@~N|4$3QXME1I|EE6xxy+-`I z>G?`G-m2=xqnQpYElWjKR+cDvdZJGO7(Sm57aAJyiz+WZZqeYOLKEH?qeq+7gJqvo zp{}7bPJq6^0x&!QnacYB3otY{S=fAcZL@8}3bW;lqT>OGyYg>$IG>9D0PWgI@*YN!?dKO0Ja=%!N!V4 z)HK959E^bk;PQYoEGH?B^Y7PsMYIW0xAyE1FYX&*hQ(qTka@;{0z|;()Y{sLL+9J@ z>v}czc56|XV!+cS2F%J;gKu0K+TA#Cx&tT9Sy6w zsCH8?Yt&@JaEAID0|;bDs{| z7cN@>29vT$QAoqZORe~t66B|?YV7V*!cEY*Mx5Nc5qRZ3*&B;?U3&<9a!@MEmWFSN%@CsEtQ8J2M+%rmY^06Ew{ zs6L4sJjdHcwq~Yya2KW5>*GeGv$|S*X8{000g 00,0 0,00U + AAPS Snooze Alert + Sending Snooze to AAPS + From 506b6dd2134699235c52519868e3b2de66038ed3 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Sun, 26 Jun 2022 13:16:40 +0200 Subject: [PATCH 64/71] chore: update snooze icon --- wear/src/main/res/drawable/ic_icon_snooze.png | Bin 3919 -> 24861 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/wear/src/main/res/drawable/ic_icon_snooze.png b/wear/src/main/res/drawable/ic_icon_snooze.png index 78334d1d78c13cfac185deba07b8280d1bcbf33a..31b80685be1ddc6ae6e41d146641773bb06a122c 100644 GIT binary patch literal 24861 zcmV(!K;^%QP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3^ymL)fir2lgjy#(i*Tn?Y-%noMx^BMf!P)bTw zS9MS7m5Pk;>rMg&GZ28g^MC)(b^rBW|K)S_&81vh>7_jUNU&H?GpJe~G zU-9!t{QsZ6?tcCt@TK_2cee8R{_ofQ&jsH941Sk?xlmi5KbU|1gPuOuZ-2Q^_}rQ9 zNWb5o3-!;1VtD_+e=acI$9hU{_18z3=l$>gK1qB3ar#$kf4=R%{eNZkcIID5p(SPJI3<47z^^db^7_$xudIFO~3u7KkdrT@BHt- z?*6)4DSW;q{$-KN&wqdWb?5V6{viH*PWbhcQ~Ufb{Q2v?#r59NUshlL+`HSgXXYtJ zDlB#RJkJRnVG8?M&*ZP=yAN#F^~rBP{PoBF zyZqu7Q#dYEeiOn9(Z1MX4Lz)={Y(1G-%#1Z9UJ?)Y}-=|KlkG8WBaq5eOlv_H%}Xa z=VD%V@t^+X{?i}0S8MD2(|*>9`wBse&24Ds^l!e69r5?GsM!|y``2H8XYJvoHRsAyn^K$i@Z@Zau^l zCOhDB4x5_{37=taTF^)HBfy!yHRQmT9bX5`*olnCRrUriW3y7q*iTIj8yY$0lyfe* z=9YUNC6-ijDWw*H;;6AES92}3)>eBREw1SL_ z?M8Rg&9~fo+wFJ!?Am8r|Mu5^uxtLaYr%F(-&lWkjjz`Fy@VH>WbGLn7F_b|c-0nQ z&_R3lG@nw?&S}q{9`K4BxXG+N+g>}y4yNNnzW%#+F1$Oco%>(yo2%(h`xgGEJLj}@ z|KZO4ecyh!Yg=Jx*^a$ls6~Au-p8MxHbNT;c7OY?dw(Glc5SD&T~AnN?h}{5eTSRVOgk3eLYOV{cbWS1+~$K}Ex*@U(YsdTo;zRx$9FB& z_H`9|0v4lYK9JQIrJbV;$LW(BzaZZ@j%DWda79634|&e8H=n63<|eeo{kz5NaLKU}w(fINX-}JL z=QvL6-Ie!q`B9k5eK4TV_5zzRe^&qE$+m`k3=8n!aA#GYW(>poeeNZo>d)P?FnA*9 z9ZxU1`Fc-bH}KN>v91-b*_PK2U|oH_*2PD6xj&wqmuoDuKlARzMNSxC#BKQZ(h~Wz zi~V>#TtIt^L9=>7id&({BbZ(LOOy>%{cH_yUo*G_K}<7Y`( zixc_lhHqRfk=|J_@rK{^V>_P4L2;2Lt zn|QE-fH}J8#;(U@!QDucOFjeeX>HA!Mx6L;PJZz(BG7GNegNUYqelS{_!$90!Bl1| z{9UFSAVP1Ejb;@=_7Q!9CeB?ZUP#ociaD!5O2+{MSrj%kAL86;`#Fjtd7thkG%@TI z_QYth=c6qh)3!AIvZLUR(7Y8Qa{sOtOBZm5*3RR;%XKi=fPxv{)q)Wdd;Pmw{L@&i z=hR)t3xoxu#I~W! zh@U(bE{-2zZVCHIW%W%2g*k(;cLxZ2z{~AE*>tICvF30vKe`1I>jI zDSB{?lW*qJYIX?ONR0Lh9mp!w*V9E2wU>Q13=FvzPsc1j2y74m{$jDRt@(xyw+oaZ zH>?a3c`$w41Xu@%ZrETlVxW(T%lJ+(fGed|_o)~~DhJ?sJbtH6m&- z-GZCs2SiL`&e3taf`d*R1CzPLk=xQ8jtgRjL^b|+0f~SuOb(*51}^LGN$eOKh^q{~ zHPyA!je=a*8$>1%K{0ot$gXk<0(gP~#?`z5KSs_aQo4OV9rxkV2k*lo2lvKR_zs0W zmIG$h3Ot)9LhEsN&zgAJ-K@-+cz7-SmhD9n_?Cv+THKczZp?&Hj~s-@J$q?gTrGj; zny7>lxiq@+4)&V0Ds_s>F79Q&z@{B0e#3oJI}w7RfD5kb&z*e(p(& zQn9_o&+^o3AFbsq+{(GE$MKF}!iEs%V#?SP)RWCgtTx@5vwqhvq2{vVUh!^> zxO)jK=y>XMl_icuo3bNdQ^dFU5v<3SwQfN-teM;B`A%XHE46o=3SLm9!o!6M-*mQ& z7YLB&D7q5JSg2|@Nf7DpOXM|D~8J-AkWe5U{C+x z2x5Unb01L0&{1vz^@lKs$?`pemF0RJMF_~P0-b(}l6r*p4yN~94b!38XSx^E|HAvs z+dr@lXKeXyq56}@lMU4?%O#z5vQYi>(Hztry2K+_$&cLx>oE(~xnpdn-oFPA@k

  • WCP>YCs0-i346K*v=7@B;)D`5Cu zT!M=1tHe>kD@D%YfoEV=L29zF>qyf8VPDdwL|HuiiMZLUN(zPzkAXC}i+Ax@JER=g z4Pwf{*Yq=w-wm%g$T;+9hMUcVVP~{-B$5`$HZOnd5E16+8kkN(Bpb}D7jC??RaPMhVLA9e&vHk>sKryUS z_BjA4)RNDXx|adUKd>+-ZNIoYe7t}(fG)Bx1h~mTPhA#u=L2!Ytm?BX;T9z_Pw_HN z9OP_5Mw`cZECLpdNpTHUJ4o|`4D2ksc8CkP+T%StlnCnr?vV_3OIU_(3CV%Xx*1vn zR)hjIs?D zlrEgIPtkT_aTEVwjSG<5KvVyqU$CSj;t9{pZlWg?E=5}kW)iY8W5T@W=7`q-Rahio z@B|Qua1fRhh$1GzD)6*WVAd$St~dwm{efmj!YQ9$vY{W*ogGXdD!;`Lt6-glKS2G0 zdWNx-h9%s&o}-u*QDR)^Jp7(5YCH|F*jPSC-IM){7Btn4KU_xp^ShkYJGa=^N~pV0J^})Gbgt#brO*N+LtmW z7r@rS#1@pzA`0dK34_u=+}XW{CCp_={UTqhIG4-lD&-glNViW~9m!g`Ay~jT#14Dl z0m2Zc1JpgwN34F{s8B+TFYG&7%{AcYC=J04VgUuuC6MLvc?7JM-G%<5Lnh&UfMHNc z5ohH(7ZM6N20Mj}dIIfy=DA=l0tKlLJ^_XJ<>p5_uz_*IZ?MBBEUu$;|4Aaah#;tY z$N*b11|@@owiAD)FlTA74B;DASp#|+Ths{J@8$L@+ggL23P0N`Tn=!tT-bC9^|=bTA2JJA6JqE4u%62 zAV{<(w2#K$O<%s7$i2mxgTggVq`YlZd`z{u3|0eOmz&KfXjsOB zKv?nR>XBQ@23A(m1CXq$QeG8c!(MR_$S-E}$U;_cmXu`yg>KCLfw1`?o(TGEd?+*mU+3=w>T`$Bl!mRhK3NZgj zJS&*N5Ap-f6T%4sse@NSGpK_^5=I1{(W;}O3;M+Yz)PVsb19Fj_ET96FuwADsB9%S zqd;lmKbPm*+VuVC+%h&o!}6v0Ens7}l!(N0fcLhI>SNo`47uq53ZB+cF#L$JA-!4l z;O>J4@{qqWrGlLzKvsT633a}iAF?%O-vAe$3X@z!F?br{6-&hBp&gJqSwXYo1L8jy z^1ym{%3fI?y|$0tlLAx%U~C?GUn=@wWrrwIq&|VTgJ|xpzZtHo)STG9=+o8n zaot&QwFK;m@+`%NZ4rXUbSMU6VB=VdTxopl-nUcnXnfF$rm zDKwza$Lvx&gdo@x!oGS?z0P{UA@rz{mRILs3wa@ioDM6Qk>QOEI)p==FF{)g?$;5p zP@Y%_Dy|{qh*(u*0khkLs?7Z;xxt3P(BKRhHuB;Ueu1rc^3+<`m@ zOv*~Sc|ppl>_g#(F$|t0@vaK}%h3RwFNHCu2W zoolrY)nR7|ZEUOWjm5^8Vf7a;1o1rkKpcf*?0V0gKdAyGOxAgsTqm=UV<51x*UN4?>Ah!F=l6NyTl$G(A}Iv{%7PdKPUg&w79z_M0?ln}rH zjZbTGi?H{7CoDnXzu>h7nd|3o58kKEL)nOzcG0G2imf`jz$xpx#K4~-)ZK?Ss7BRN5h=*{`KJqbM zZc3!-34RoCg91=1halVu+FG6J645QS2&3Ey;lrxy1P<^UN(|||p$XI2OiXq-wC|LJ zgx`T>gGhUb4S<|>7I3l?U4YSl4|KssAEYNfxeP^Ppvi>`d->!tkhfl0?43Tj4A_2C z?&-~C;3B^34pAH;IM8T=nFJx4mKhy(4n8Zo;EzAx!Q= zqW$urS;BoP^uq_RC6p4DU-=E(BH*-h)@&Jk|6B!YplpCAD_I(J;gEbTYhR3mn44Po z%sPiRe#1HfY^!wC###+WICfZo+ELD%bs_ZT#F~{w)TvL$?x0y1ugboPa?tE{1M#?d zcMl?ZBL|>Ch=I5ct5ibHNX-oX*P=Wykpo5tTgB#=#gNRObjfU1F(Shp0j4Kd9mq*6 zs2I#pI6nkB;?aST!wD|32EklmDzGKCviQ{b!5oPPN9A?P@ko3h!3t@k_@SBzrJ-PB zttl!IEC-(>@r0W~rSMhwFe{;WQ6c&rOGyqKF5=Y#k0{Sk#^=$2<6{5~V-Wi#W+9mZ zjF|`o;ZamXi6L|<>=SCxyYsDq3`lggR3|+^B72Cd*FBKQcm-@^a;>!q3&;cD#dBLQ zsiq((5oOt9X|kt%D5mM?PqL(fWJ<5YAbiA~@iY);NL1$wQB-<0fg?d@kE;a8tE|+Ni6E2-%O9c=rQP^ z&Z4l83C6kt9AGPO3QQ$nT`VVBs`GQ*GK@im!{&U%NDv8)ro&Jm6h1n1wjstdotPZa zuV2N#2slSPiEvM}fkpsn@MqOr09)Z8t=PrJt^{AS$s!TKuDF^#}J_c^_joA$&aS&pp3?v?T>c`U_$t=|Q(b0d^j&K3^917b?qguy& z5(X^H*Rn%qU|`kNYc%04X97LED#4(-VC19NXonUS=%WsniTYWoDX)qgCD*(s&WE&J z^l(US-78`91Ze6}pwGnuJ=SwApz~wE70PUI?zDBpCRtMepFZGTwNuIK|C z6gKi^8T7 zj>66Q7E|}Y@J=~6mS%LEbD985V{N2-#-KWAx6%aUt-Piv;f^lFL5QZr%c<1-PAYeq zI`LaXXdRV8FfAtn_r-zaK?$1syyqcAuY(lH=Ds4gsIlr*g@~De&VH&O4%>`MyNQ;- zj^lwk`8Vqml(VgfDz7q!c8Z-VO&zg|tUe#IszO}{coPg@c!WD2gE2-7Utzg{BAX|I zws)AOSekS(yzWu0@I_ER7K{LiL4X7&@DEHl3xu}uLLLUSnpK8^EL_r;R-m9{EL(@U z-{%ks&k+->01}K1XTYRbBU3{JgNYVVIwxk;rupMx<_%g4FNo;&>2;VJNFD3 zo%LzTZCYJ}#|_xrpnL5^Wu5A7iLj;oE)4$7IPT;=DaUO&r%nu0<>0DHlY>qDJpAj4 zD$-txSmP$V0!SwMjrZ6JR>d_Pyn^*-y{nE0_{gKug%icE@DctFa5$(!1tkw8XsfCP zmYJY7=y8NIt6sKaZyOs6jYs5R(8^<^6nE1J!-f0l$bx93b4v^fCZsB09sd&-Av=OW zkZe2UquC#!jk0SC$uj_cd>e$wqk_!}deA3CcqE$f+&gwl{Ht&b#(o>N>*RdUBF|Iz zqby_4X|u6NtgR{+xl|Czj1&^>><>f zpqP~?f)`&QI=&lqhp~GJ&h3|+c0MYH8+IJjRQdR+(te^-S@15Z{7k-9tNYaHyy`xO z9Iu4a_{!|>@l(Y~v#7v(S_2iR)vD~BxIk9+87YBbg`d+JEKv0j{d-ztl?-|yk#K-t zr%IUAd2~>*f}1!M`-%S5VH^m6KwFRqwhA1>-S7mQcd00)0HSaCvc-R$hbt9o(cgJ2 z0VA}tW2j|`0lch9d9eDAB&rPY;1lLBvpQ%b41P@Z?+sOb_z=3i0 zZzsdl`Myr`-cE)!8w>#e zk5+=8=+j_a*(#KYArH8v?j{~z6`U)J`~%(dh~PjdVRR2pINU~%?6-DcE7(d40kpczLcpm-7O|iuEPbDDQ-PJ9iV18vJQV2mts?pIDA|se#;Z_ zyNQIg20}2tL&k+ebmYi=_0Hf*6fHrEGMtJyr z;+p}Rh5xNyf8?DC4-Pmghr`+26OU{;4b{BC=OGvg@-$V-!D__V_(ZI?qp0~zuh?Qm zFWGmcZnBJ?Cxq5io3uSBJE& zj~EcaAI~U3HFQuO@JrE0--Jm4@JG!a5k3zaz`yKlud?En1=k@|Rq+I9wV>~;GC^Cd z)Dgb~4c_|f2cRET^;wSk>Yg48OVPf$(}CgZ6aqX%hy# zhE`aGhsU1_ER3eYM}=j?!AOi%%58ps$(`;1YwJ7dUP2c zz&(09C|6mTGG$9Gc<-ZOC%@$TOKo`36@AD=#;vE@@YM;Whbm7(rg9n^eB}|9At8wM zl$L`%ER|th744^YKZ=g3bPy*T@CcxLWqY4Xs#O4qSw;?ut14Joxj3jK5(~b7+~>=x zn?FtMiatpxs7OK~_(J^Z>2`KT)MmfEDxZ2$mygsIj7NE;6JgqQ*#bt2&# zD~JwObQ|!~rm+FAF~x2S{Fz=z7n~{`ninCqqj`&O=@5=sB%lXNLB@sr_^bXo*&^x< z`w&~2I`ma>LY`UPFA28>$Vq6*;mw5>c}Wx+aU04m=wy#jXU)1G@Kr~NC???|N(4KI zFgE@aNoiDF^h!$;&{fH6$w^ieImE-FqKP8vBC$4?E0lkNRq)m5xg#ZM-rmFfh!K1Q zFrUzZC4tH zA}77rxq9v~kc51f2iMo1Ug z0W-OB;%yiuDpqPoULpv?8=};9s3QWEv$=SRNGtZ131)aeWAuCJUqJvdqqXRCm zk!zL#zf!R5k=>!>M40ErRmnkkGfVj=bQCzc-=X6`+C!Cat!zkebr9TNLZANuQQZW` zQ+*+ofgoCrFgQw&NE0ujj?ev+M7J+V0XNxaoME8dm`_6iI3 z5UCtgmI$LPVl@%dhweokzPzxzR2HqQ5K-AdpN8_pZ@|}wC>K(oS0hAa{D|XxMw@a+ zRRx<_5}0)srwosp>n>7MncQj7dp-*1cLZS;D-59iwRG|4zj;3bO7*F!9G5+IlFv&y zL(LTcG*uV?hNvJz3Nt@l;&OyywE*1d#1$WPCi~tr>4A8YpK?G*o*#gJ5B2o4DpXXO zJ!dQL!!k|{%5m#hWWr*j=$n7Z-&So4s2*7(Wq7BGdP7lG(<+|2GD%%&$xNKf_!E#R zNIr#Vq|+Q{U>P+ddc36;PYX!}I4ZmMO3LeK`050m7_XvV zn^npT}KRY>-M zP=tw&*QZWoVW`?~73O}cxU6`A6;3FjUR7a0gzrbEqRQ&vctx2H{Bo4G`c!ErOEols z0`YS%yikax(q*h1?-)q#?^lnqN_qc_|0?2h zTL%LWI<6EYLlYY9u{Qj-qc`isdJ9Egu*X56u6XW+Z~`_%aIPeaXW3?HYKLrotDCl> zJQKJ_kT?H3WpcxKD+nESBVw~|=p$t)h%yA3gX6kod4@-|kLpsJyX!$qBgSn^`+jaj+}gU)3Ir9D)fy{%gL+w$zc4Z7c!=lpHZeLJ4Z+n_r% z10h+5?$mitMyFOwv2>*utz-@SLkp=}@lSc6PZmg{4J;2-+->TQLvE}*G$toaNiT$-S zoiTMgTd?9q&51ZlQX^4ejmcyAm;m38x%r=v0*8h8_vn#+M^h)*NPIYM^;iRZQ_Zw0I=jja>h0%$`R%x!d0ymQFYR&cgxZ#VP=O z?zhVuS*xv*+< zs*XyzlC%hdt_uAuHK_UkcrqrBY4@VjjMc9wI`Vx!HfsX(XGe8*0)(Uj-|0%Ua3OHU zN)y?gp?il+tM~yzr^>Z&M&eBwRIo9s3>XqHhM}~z$j;^rD;K7ulF8kEM!~2Ocm=ET zRMCzay)~a^_N+#mq$_T=cj@SNuaI1|`qEauDT-)3eXFp@7ZsLG#pJN`7|0{A62+=i z^n*jG4W~$Dmf|!aqP$rF%LyQ{t>w8!Fqf|^d_zY`e0$S@A0FN$Mu8sL6n}fu#16VQ zmj7Q4ts%NN_2a9)CuQ~i-C@}R%N4-$-t_fflGkR}8hEFa^%Be|%?}$<9=Hfvanbo^ zDa~#tWCQ77SNm31f7vKogr%SE`>J7&OePVL?_l>_4G4*Db^4jzkuISZW+Q2^Hl|5RinN0HfW^rfl7!>;6o{Y zRf%*Qx4z6GBD-2uJG7b<;a}d)??F{nUnQO5IOVqqv)o5TGFeT_u*4j6Ilz>N>&k26 zB9MWq;X4tOKWgIdToT=n2wy#@3I0U5ZhEXZvFk8>suBQ8$lmhM2^-%-ecq4&AJ`@v zVDKJ?$%aQx-l-@!st^~B292o`=z>oi9rmy?2!C}mUC*X#>)0eEz>Cm3Jzr1ZDb zSs?c-rn~M?34r1--_jaRsIGyVt@l;FS#EkpvN{}%T|s%lTlg3_q1({HrQ;hgsjC`F zeO#+5$6wXK2%bMSKLTB=rk%QW@dOK<_e7NCxPScdd(En|R>Oz;w7w7Ha4em(NW_ zoj`S{p-J`Vd$GAP$er9-^7fvscHytNc1>v-^>6t665L`0SJ-xP)wCfalsvdZ@v-EU zWUr|oG1#q20l1(bBD^&l%X&%FM_T>cCLOy&(5TEWDw&N5v!%~E2h~ZKhHKXMKvxGY zTkU8(YgNqG02y2rJCa#FIu%tFUeUa^l{~b`nkTkMt5OJRe_ug05o-)6;nm4M)@V6wVHCh6J`XoCZOjdT`ZSYnXd2b(Ig(q9RF|l3g!-=gnb@DeW z6Ctd4?G*bJrTx0fp1qPlQRh&A<)dJ#?vP-Rq&{CHM9fMQ`a}q1h4&d4{~EA!)p{fw zK`Qc;V88&fLd#+M`AOy3m)bWjn!#TOmzqaa6&pi?0{|4iwjYaZ6zgE&4vS3nK1ChV zC>2DzieuhmSEuTOBUM@R$MuWRa^h?zaYK^YYM7~))g58D;r~rXz%60}DW4Myz zi2*pcC0=|Um5t(>gXn#9Jf~UVGAx zYT{{d56oTX%%EMh13>@A&NG9?%cwia^qNX(uBPavcT9<9Ho|}5_UCflty9{T)TCd1 zR>itHhGW%<@bVg^V3TaBHB=qwnTr}efo$Gcr5@byvB48OcuxaeXt+siq-9)S(XB-JM=t9eUF%`yuRZkn0a1r1>6)znuF5ZRiuGJ}$0Vsm(<3#Cq$ zZbNoH3)hZE3qi&-9M?uW#E61<^_w0f+td)v-2+Z_GKa>yj<8fE&HwcyAtS5C+Whn7 z+x(9|r#m5P))q^YPQzd?1CN`uemM;XaqyDZ>rQ&BrY)!CLqTnmaIaE=({ zH2ryJOn{VGEgEVcR>4;GJ#^(gh!SljXlJN_bZU;3Vjlr-YP`e4Evsf#8s^Pe9wpT)?hRf6xmD2;cmEOqbiPyI8Y9BTgazM6tQhC(2uT*SON$#V` zUMWwV@u+XZhN~{HFR3X{`OLE(WjUg1+pX11az3;ZQ-jSs%7W_r?7B#>nxF)LJHhX+ zDx9u<8-%XTzxjlvW~iykU_D&ZQ3epWRNnyo<}p+B$q~tyI#cs}>o?U2vgJrbI8Akc zDgeS!6GkR?VHQz5zoMpyJX&!tdr+<4QXRV}JG;{YMn3t4$7%M3oYZU1ZFyh;nsA}q zaE8rjj+#dc*U&Tz)Zw38>B^6P9gOoI&&6@S4#ugU8uNEHqWk(EDySb8Y4n_VcCK&#xm;j>REn=m@8f`O}ZAbq)&)*u2 z0RdCOyDP#3FGpQVqn)bSQ-?MRww02!f(}nmsLArvA*qT)mABWr7tW62vf-JU*#a9^ zvyoHJ=dp(N_*Ju-ZX3mL-w~x1u2jv_;zxg^;46 zF05=#nJno$$wM++)zs0e(+ia0>rkDn`4{t@Ph) zGFVTDCHSY4FR3@nTKQ0~njbYipRfFBgGBJS8sebFf1OSXK0kvvRCo;) zNHJa2?ZDg$a(%!%A32$(q_lUenJRapQgs^+T){;srMAfSudf`Ok4Lri$W``Gv=_AvL2c- zJ7;|P0Q${Hhi1oCktdrSTf!SeEfdw$zUQvMa9$O$XSJWR$Fgr=6Evwd4S2RdEFh{c zkT6%N$_II+ekx++lT-jV9IJ!g)0+-#M5&gOAS!bjoNEScz%x^wMdqa6QtJSZ0cASq=Vbs=?xOad6 z(i1j|Y|%k%jH-);&P27s=x|hJ_76y?W45CSIYT2J2O^Fz*fc?*eTD`oO&!9ND8tUU z-t#B{7PH&WX&U6B!4_(?BgSdUX;E{cDh*E+PiODcY1LJ0k%a^AWEoi3^ijySoM8W` zsZ_Hs;4nNXR-^`*0uxSZBsd;>xLm%e?VUfKfDNE0k@j;ZP5Q%{Y*D`=16fC6myGplJ{O?At}d#?eB zZ-1XBN)1h$fl(X{{ChqF95q?2L)gSdg8R}56%=2c)@iPDCwxG4yLt%JBD7=ITsBQ| zRo1${R9AzFKPQ|ix^Jnw&sLqLp3C*<++SmlZtl>{2KB&t-xHi3{ur-9Khe@3%(s`KROE&*`p; zlTh~>%7AcPsSZ(1)zo&FnQ_}Y^{g4vaJZs#A`LeQxSg8giywtA z>$pT}4O4J-s-bdCCHY|OFH2LVY_PaqWzS&UNUCf)O^1(M)|lUVClA8zf!yv?@K%6- z4eznTpDYX$qq80qJZ0M}EtV<)l+^K8w{foxJ2@H!O?<9db^gG-=xWs{MTp+j=pF4o zdi5QtqrE^iTE4`(ijo@VHM7Tp*Ms3#r>2~sBdMHqmhn!PkjK0&FKky(a3ex1Iivo- z{%o717xq=)94aH2+YwpR+@pf|q@IySGwc(e1$_J=JR$8@r}|sL3qq=fx#~5XP(yhd z6vqwgT9s|98n$VE#G~pt6YI$HV6knh zS05gV51=TmsUb|TIF&_sN3RcYflw_B3)9d&n zq%e}I$JGaw40Bu`nnzn^6^HW4O6-&7`D*CH&s?fj01R8ZWAna_*3M>SJz6`>8D;U< z>ee+abZyoLVBMOD6s%iW#ja|WBA`hKDLisx)_S?Ov=~2Cu(sf?W)@ueThbw$y@g|W zo!vaDG2`NDLf4q1X44Ddyol^j?F4z2m#-2`otYXUu}RfpYW}gl1L(m!w9$^@G(1Yx z_FIX?p|ceY7N~FuSfA#*&gq^BiBlUFN`g;n1UHq_nuaKvL(ZZOtHH6kF zXMqD_+?uJVzHA({B^3zTd{k7bZ`Edj$d9{CNY+$N75px_@X)|@@MtR0q*EDXn3q~V zH<2iB$sShEYv`R{{0*m7H-Q#X-A$rfz>H6#Joj;HYogH0pFp6;moBshwMb8c?(aU0GRrrlRDoxy9 zOHMR<@#*#gho9Mtn!z>f^TVm5TdQs%n9StS#{69{mL*)7n;s~{Aif+4t z0z5owYRJaw^&%s+9f$h1E)2cF!xB-NW9rkw%Aaqi7n8WNT;|1+f44G(gL0 z@lUW;^j(w?cOaIg<1e)ZJt~^k8DH&|{U7!kh**p2+^#+hPeq}3t_M*%01dGSiR%4h z*&5i(bG#JM`!)%UVn?{3DqGh;7gZp80ZEX-`;e_ho^Pwr9!(5S9W9b|xUXzxc#nyT z2GW-eC`Zi-w$mG8w5lyMsLo2ar`lb#w;BKib%4t|9#G}oUhSARToF#GsL`?p(5+@2 zIC|xS`JnW~qrT6X5lDp9lf8OfG)zGST1!FPrq4ba%2gz3;8Us#`U-r=845%5M3io; ziBQ<=T`VwLJ33UsgqrutYT|aYT5Z3kb!JUmADS07x`k=YGr3EVqIR`asijlXg9(`n zb)>XD8WyTyV}y0|rqK+VcaSwX2tKJmS#5Z^Iup8%T$f%vq||`k4XB=2r(t&*A-^id z3qiuyHBCbeTs?he)(v1--!X?8Lg1%c=ZKK&&)om{)aGcln3CxKH1h!MZj&;xk%eA@<)Y$~yQUoWFK5G|E}>n=6)GJfwe zz6UJ2&FyVS|9u;TvZ_nBCI^81k8&xjxMsCK>S&U8TuqFKDp)OQ4Zup=RG0L-6)Y)M zXcMcolHb@5@>XqTlo_kNfN-i|G&ZwJBhXI?8eL#}q0y+}vlsol7qKACY%?`KvS>3k zBLBNrxT|VSRlB!JcEPras16=n1TIQMgNl%%EC?cqcwr^a1dDG%rKpPabp%rfS&pDX zC|FdR-_(GZeqgmwFPX))C}D#qa9=eKW+FM#M6*id-Wt0kBM*q@RVDpULyWx;;g9zr=%8k+b6zhq$eO;RVW>Um{iFB>KkU>^a5r3` z$Io~%)y3*AuM1sUuRKQE6W7R|BrLbj_(UtZIOmeQ+Y^;T=BYHPiW zCVgM6MRdOJxag=<$nMzVqf!i*P=CcD(jd7eb!J0&vIb2zy?WtVK^S_K-`POVrk9&_ z6?w3PF`*-#UXBL9=@^v=3ej4s34P$^A~AYdA=s?>c>naurhj^4ll$u{n;P`rV%P)w z=us~X&UIVH(wdp|Qmr)}(zb{ef?!O;M^l!`~B9^*r1tcxon=7Q5?p3?-dzuKdPRFR$++Eb^^}fa_sghy}9bcDuraJ$P6=DZnP10|nn(bU?R8w2ij({K*iim|? zM35Fr0!aXo4npW42m&Dq5Fw!jLXjfnN|D~HfCy3rl-`sMQba(cBd8!9Q9$ZwEv)wZ8A)Od!bl&@l?adr#B;X z3=C`QC#?G>r`(=8fU6WKDTXC7(>^liKOS5^_FO%tHmi+DcYA4>PQAYMVM2f%G*zxP zB$=Ax)Lq&Bw!95_dlX$?goi-zElGofp=0WGY=T2kK4&vpa_Uxj<#8Qj+Hq+?)X$Y6 z8y75wS>)>3=4f0(GGvR}P-C^R4!)-P^o4fi4hD1OA-<7g{B2e$1yo7JDS4|sPuwP$ zo69c@Cry1GaSe9j86u)vRRK88KaWTato=n_-2^C zrSll}T~URn9mux)Vdp#-e362M>s4hhP1^3e;OQ&9XTKWgOgNXW+bpbn;b(c%qPwN< z*%?K-T+YqSAb3EqE3HuqYMmZ@}#}4f@!JrV>4aQK5%;$`^TtuqBD%iY< z%&vl+EIv*pd%l21xVHvTb<%H|D(F#6Ojc;@c4PKyt~UQ!@4DKpDo?5t-^BEK!X2*< z334+=1doh|Ty#^q&@}%N)O1$-o1zCNdEdGVExY+@mh`LL@rRGJI#W)s1-CrYkQAJ8 znfZ)VpR3bivE)(XyvEBWKJV8OVVZE;d)Aa_G@ZoB9h1yWLm%2I5kHm~cRJ231eW!L z>EkKm1jb&I)FG!h=xV3=#ctbIxZ(j8WtLD?4r+R_{CC$cozHrHCp%HK-@Ch+-E~jR zsq@1qh`U{yUz-!|y(YUoQDmH$>JZ~6nz7MZA*<~BLiqKQk#rsi>{=ZlXtB44xB|M;Nloh+XTs(aWk`O){KNd{?Xxu`l~fQm!m zw$KEK>i!FxsIp<{$%%={u}16U{e2L6z$x>^%UlVdb;m^<(4xZ#sewS-pGn|P^t^mj{hyLpfXMLd430N2FZ13WP#wxjD2}JJSAym|m z+J7M&g=CGxJNyU=An$L+FzCPZ99*32e&}G(V5}V$4}dxY{)zrgpNO;i4_SZn?MU(? zoZlS*%>9M`H|;-T|DghhRj-;38H+Fi|Uv z5X1_C6@p2?FhZ6RC`*{A7);Vq1o|748o`-}BA~HHPyo0v4#0uKF%Y;U%1X!zB?1?M zpa2NCCsa6 z^@yk=+C(Lw5@O<#P)P}>xEM_IxA}%xCugAKj!;EKgvEbKFldA_fQbT12Zu*lW5Est z>mRsBi9rD20Mw$6DiuKfF%Cq7P;kPci1tqU_V#u%Tu0t=96|mla1QC8X;H;F0~+o} zHUF#X^{|dV&weffJKPTu2gi@XMWE0>jX0xRv6vr*fO$VfXd4v48VjuOUnTYDIPSls z%Sr-+5fz6+g)AZB5FsG_;y~_2ph8$ns3inuC62O$TKyf}+1`psLOEgOtbs^@Xn+#> z5e*05FP5+VU7uuwJ)%$qSl=QNLShp7qM`^W93d{j1^yK*_-IZ48Lc$H0?u z{3GRmtLy)au9N?{-N6!oDraHnW&{MKSOemfk3pgYKn6DHk0+q?nHy3`gYmfap$?K;z^wJ zWH;EvD1s{Z2lJImX(IJU_4Q2+S@^xmS6%AgoZZQ{EMhE(A7u)N=DC=0oUtgV?G2YI z83pomuqY=d#`giKBdu3vZa->WK3ezXmdRqJ;Y#P~(*Ewse#)jj`%9(h92{9Br4gfi zz+qq=LEH7ZS#9F?RwX{+W6^Z-mp=MPyr4;>Wcz-slCDWSq)-~9xbJgJBza~vji%S5 zafqbluTs4kD;YbvFto(_vSjH@9@&fhgy%4SO|`O624C-nMo9S`ry3(?*h8JE&lVlZM3*5|vecURw`f-lAftQyF6koB zVi8V84Mgy`8`_iLm${uD+*>{{6SzAL7rx{xCv`zS;1m@3C4P(WZfLM_Z^NwhqV+jJ zHE{>^vU}sOOQF&SkzS~<2&r?E2-XkaT))&aPc$4C$SZSABut!B1x^KOQ@L{A+0V9HlZ6Z3ZCB&z;F2U3c-hmwMCr#lwpho!nM{gOeyzBbQ1)Dvl^6hqeo#zg8LCQ31kD4b; z4)kZQM!q(R!J}F+44ek&#ZJ)Ew^UE&4Pm5eyFWzaZK}w>xX1K9h_99$=qOWD{u-U} zq_=Oh>zY2rmR2dj_#w0NR-iB4p{_fUfwa6TIJK!XwNx-eJoj-_4XSQuzgbqprCMNb z_mKJ23)LH9>U#?}$lY;<$zJ>dG}Z8TnQLhp8~wviL;K`T;HBv-3st!TwEH2BV^pl= zwai{I3Dy^lWZRWPwLac!W@}jUv~gxu8P4AljI9qFGz@(|I<}tM$2zPLvvf=hDRBVn zQ!X>M9HOU9VJ5pPHDt8ars9)$1C@z5e?m05nFi5!n>}5orf5=fv0so|tM_?XZcf_$ z{BOkL(6h_;PJqgM3ueFFl`-qHetNC7Sa#3V?e$cAW~kD8%n?=J%%LZX>@@fo~$@Q0p4|K^SUAd9$C(eGb`*|j+CXCvGgHoW6ZPi%!Yjx#xK8$s7 z?%g}Rf!;@3ljLEHB`6+%C(ud{#PO~U+7j-GN_B{IrDP$+InBxUCw|kT(Y-5h}@N3exPL$ zc@TD%NvYcP)?I#DgT?ossP0dVmPFT%(yYmc$MGo~^4FLOf7#fmUT44v}~5TY{R+wMSyYCX1TIHQ(3`xL+Mu;bMLHK#oJ(2FNf zYFWhKcQNLa=hhJ}Ho}!EyQ3*WOw7!?-!l`S7D1t*q0oqS@fJ@S1DlbN5qhyl>njtr z+>;w_(xa>4BpXYI^kWCWjO16#{pm&XgKm%IJl&=`v!ZHf;OiEHd5A|NgsG{~tJ-Jo z+lN?MKTCLMu&L~}x7Ew`L6TO8-NVq-w7Z*`@G;?`%Pe*C0K>STNyUS%t}aLJzEB^* znU&fvk=gHC_wZpUQ^U2~AJRKq%PtRf)sZ}P$PcFb1d$9Y^=MRIM(-O{z0qwYmG^VP zt!vv5abTIbC`C$CItE?fgQa1O$)M)z>ai6ZgGDyy-j~P`;N4CbyCeW6wFFXfF8BMh=TXG8j9xkqIuAC}@b*3^>1o*Jh^?1d%1%nE+Z?sksJGmy;$YkD?0bS+ zWux&SOHVzx)peQeuW#U@a;uoO0Oy`EP?X=@GMTF5Y-hGN>O zC#_EEFy{O09CKYBg|cA9#6=I?$S;SV$$H<~KB6U2OQ?;|Bo7EhNB6;kJO&@eV+NPMmuUWPqces5Q<0r7FU((^1rH_-}a?ofQWfw->_;ldKfaSUXgXdCBoU_VXi~eAf^&*hN{!uNiq!#KLX5RYxwM zwzuR^;{)eX*L=rGSMA(Ri6qxXE3bvT+$E6Mbt3Wkvkiz-R-Vt;t=_9q14Yds{clYX zg|d4uy)atlayLdzKWHDG+|n@7Oj_h=I;cP~PzOG7R1&^b!y`6Avk+?&Kd&EIk@i+se!NA4Osi}TaLTu=+%b(0Q6u$0kqp-5u zu~iYWp>E(dJ}#ogG|@WdxL3%PCD&RU-zB&D$&EXwIG>{$Iwt!&x4gr~P2^r!HZd=A zz_18o_eMo)B<1x|rv5;#{oawG=G1z2$M608x|-=tpF);8+@#qi=s*dt7)us-dJ1e5 ztc^(5+h&J3%iY#C1FMV>Rd}I|EUmLAPLZMRVYE1%*ZZOhJNaD2b)EDB>i91^1Ul$f zM(XTbeYP3DB~WZ*gvqQn6+VolWq~=oV3o3sfAi_)H;{N=MU+E!@cbst*OzoMr|hl# zxZh{V?HvTSt2VyRg^53=XDiV-)4(O6|T;GMUvHq88;f=yV zek>NdlF4dRNw{sErRKIEy&q02&pl2KFNHK=CtmB=i+?6l*reyb8+%^ zZ7fz;<*>9;9=RLI48DknCJJ&dlM1`_({JU)=rqM}J;0TQSBP>~sv0r-@^rW>9pn;h zM@cdvTC?$xND(whL3J}*s?CenGb`qr(xaT4oO0}UDCLuLI^SHMJfZdCP)9XTf%W7@ znI+e9WliXH)%~vPg7vOk(HCX)yVK4#XZDJ4@@SZLIG@l4i5lIoDeZZ9j@d|QUKA+f}Gq-o{8Y*rx(6_Vy!TTCO1QJb4M0Dc*)LievL9QD}CaO8x$E6NT+Zg&8QtNvoY(EU`&1RDS*~E-p#H5 z@)9LuePh~=T%EB!U7ql-jlC!?& zJ{%`~V)7aeADyIAGN;&nJC3>XSaD!tEOcRYx*#WtqlpQVt-MiG-Dy`yt2?%gZdh3= z)}mRpXEpMIW{FD-bu3y{d|d0p5#~jXa*d6Qx)m zuIj6)1q;i{%ChudU>ZNZvx9gxMti7#>bS9Ehr-?1VBXb~uvU8i$+LmLOQn3RrB``! zw_8QSj%9s)UE#C{SirSKC;Q=&t7kxJ&!y&g@`*y9+_c13PR3u>#1+c=WDliXy?kN0 zQH=NNpIiecRI-?b^^tPw>P%&y>>1VT7@t7Z+Ae1Hj7hIgHSoUbUA0OXF&}ve4k?SkJ#Cw@vR;;!Ne%vLWaUyKytcbqTND#-J>pKtNeZ6?*;X3%za9^h;tRVoyz=%ALi4Wg41t%>HSD0# zK$A8J$zgwYhW}Dtf1$BN8bIY?;aX|l+aAg8`Y`swss#_SdpXh3XI-*Co6aA<|DZpy zVty#XwQ<(f)X|_UEX&wG$gz@#x`~1A`Kt2SOm@JPE=pB&t7E@v8?b^P>Mb?-{vo?o~R&WpiMGhVLg{ zBhtTI@aW{lT3f#|Ffec=6;7aiX%SRRm6WUj-7PF0*k7TrVCz&joy literal 3919 zcmV-V53ulwP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vG&=l}pD=mCOb1snhX4&+HhK~!i%)meFT zl-1e)&6=6XOor^4EQBQ_!4O0ODewUz{f-LmfF9gxMf|YksI=9CRxMDM7WJ!WD~bh0 zzxvq)DA-~FWf6r?b_hWdAPJBSvQB1S-#*Ws?VW4__MiUFxhL;??=$y(p8M=K3WdoFo!tiy}5-2q&52VnOF#kx_WM5a!K;YlitPS#>_W&);V zCBURni1qJ+s}>+gzuMC1#+uU(e0ISFcR+$hDWQm%EHJ8&rBfnN9b(Yom(b!4;*33j zY7&m+(y5e~k*ml2!bIGhql5A)Ww~Mjn0UiE7nU5cqN>w}v;+la=V@_EwiXl8)G&mZ z?hj59^q*~h{JqhO4Hvv<^#oBuT3L3T8ME^BxKcT;NPsilek`cy#EvF63X_z0s#uRX zgA<@7PpYHS-Eq-}1MPm)*aB#B1))&-#qXq`8rga!3Qa1EPgUcFObv#Smb|2ib>}^J z{geweq?zd!9ac?BK|zvQ{O)pa*#dlA>%?PwJIL!LEE#3MBLzA#1qq+jd+o zLOXI8wE-v;5^SD$hWM1nB&+f8ums#YB!Ns%fi-8`Sa!k*5*zPMOve4g6GOz`f^QXo z7oR(9#jlQaV`7>LYbKbGOQ-pl1_z!$>P0i1bbshi068qQ*Gt!Gad%!K8fdRa_SsND zCicu|6J9Ax{#KJ3Pyk-|F`3M}r|fuWs1_^AjKVbjXTKe1-FCFt5<-Oi;Bo|DSWF%a z(;4wzxlx$fqC<9kSm(ilLIYM#N+k#HUyK3sz|RkL3FaR!Ou+BP8|h?xnDTiS_O$xK z6fv;xPR-EZ=OqTLn{2}GiJ4qOY`uqLyZ&9?r+0D zM$)ea{&3cT2X}XfljjXLQ`GoDg-tjfBa2RrHIPbCXyFJwen|G5L7`KQeeG`C^|e)K zVC@8>aCk;7Is7}P-NJV`{IUj`!`kG4@X*%@C%Dp_d7EXIA_z{w9BW&G(E@s#N&V-Zlh+ zy#q!s0oK(yu(R1CLM2BVcGwPYOi9fAU#FNblVWyHuxa#%d%m{e*`rR8BjjNJTv%Yj zn`Mb{Lhv{F+w4b6N)z#AYY=~|?hLQS5NASM9+Ylufj=0){+kA2J%!5WPFTaML`>r? zI{6trn6GyP@XM2(VE+F+AuT)`GNCCuTPR<|SYtD~C)a?di_A#sQ49U1+J=?2w(wgB zFOM=~c5Widw_2g{QNEd-2dyR+)#5a;`Md)syL=+Ua+2aW&yE@yw`Q1oG5>k950kc8 z@#i`PI-HvDYz$p)b=)3}-3fT(WB^mYu;OeFjXhat!mxzIIC|!Rd3kE29^cr3zt?qz zsY8epV9jYK(kZHNwBQUYPf{FVmXX8CvHOw_bNATLP1Wd?;tZM6E##nV=Mk`W-k@9~ zcXsB1d6`4?R+>SB52$zy%6uUzfYlSg)+P^T5g|tb4smiUD$>QNyp4*mhbrvwu-#oH z8l0SY?ZR{;C^4&|;WmP`l+>7~Ir%zlZ}Fqe?hdcW1lZ9ODv58Us*;_NYnuqzaepv0 z-gH)+wu(yfyW%T~PMaEC;kOVLP@N^mkq*Bo7H3*Ca7jw+xDfM`r~urIa6SJ$Dv5Ve zRVhDL&Y<#e$!cHU5IcqMiq-YDxbJbrI+#Li1iZ$T?u1koG-@R(T0PP1EU5UUl1`kP z5w7RCB$nd_DiP%PE7kG7z7zOWp~mLNF`35ssIE_s|0eUqycL<%sOkzJ5C{bTApkoC zn+K`i3_o6tf_3{aVr7VVB;SLaY$ZCf)6q6O2gib1 zoRc*0>J#Yq3KZs=P%zjGk3k1VauPbT($GG{g0_MjwC7~NH^@L)Hs0^d9bG8fwihE0 zS0ShV0*u|1#bk*1K-AFq>VqX?a1U#v5J`0gk~*w#IFn&a(uy_4;0x_&JpVopHS${# zEH^&@Pm)*?=3v`(JL*q{-w74rzabREa__516Z9(B4&H?WM7xXLUVVY*snB?=gZLZ zq@RYFi6LQ7F$|f-NU{{8yu3U-!izn?w5F^g3@aYf2Q3|Bjs;D_@}L}j}V$IKZ9`9%=ySGwTL-6w56|N_?@p} z{DUj7W5*6LR?iM|l{FPfGJ%=4^zP;O|Mi=D(`HT|CFjcn6K_UhGXahMz~ifvEecU$;@OlSJ-h#A%ZsC^sr7w@Ns za^&B5N3Y*xr|NOd;ILFt+OoL)N9CIZZ`D>miiuRC3FV2X0OJQK#Esd$Hb2S>Q^aBf z72kBgBd!Uz;fY!Ai@DsnFZME>zEO*}=P!m}fB9-qLE8&+rsjtm_ZaP{#c#&#KYm0C zwWtC3`~i%k!;aGc+tYugDxssAXLFMmd1-oz97aLFu)F=(cBF+4e-;G$<;(GZuTO_j zAD?Xc#I_X>2a0)kX5la~B}Z|d2{Xp!gkEH{4?i$OOfi_3+*BPlQ|YdUACoe)f@cn; zQ72AKOu&Cm=NAHjJ2zNg3#fYWBKZZq%j?q+na^zV4ej z&VrPrNLhOr2miELJh2%>4svoy8h&|y2@)s-_XX#nPof%I)PwuWsivxL;fx_LX@dytS&DWh zvdqWgTjTv>`j`y7zi1pLj4%q?=x}YqsqLH$LK=%053k)`o`#QpG9Cq%u$hwMJ`{HH z2rV}?Ov^lIG%CDSB)C0q|uM9k}R2_-;^&u9!FPs_F~+--F{qJ zP}-YzPi2F2|MD*d55GCqA>q9<(wn zOOZVo=&*b7O!p9XK)ZHFG|7750+v<<`-xdiDE`C#~qp(e`&kzoma4`lAmV9 z(VFxc^05-?+9WJJZpWk~FYX#@5ENuvz#O$KJ)?;JDkG4tE7jKnH z7sO1h-*M09(yzX#6g>5XKCc$JI&Eob!HbnPyn8{5CrV6ssZ@tUXS(qGM<>wj^a%&E zd1DqhC{ZI!$nNr^;#4~w4AnU*%IcI;?wd9gLE>e9O@~N|4$3QXME1I|EE6xxy+-`I z>G?`G-m2=xqnQpYElWjKR+cDvdZJGO7(Sm57aAJyiz+WZZqeYOLKEH?qeq+7gJqvo zp{}7bPJq6^0x&!QnacYB3otY{S=fAcZL@8}3bW;lqT>OGyYg>$IG>9D0PWgI@*YN!?dKO0Ja=%!N!V4 z)HK959E^bk;PQYoEGH?B^Y7PsMYIW0xAyE1FYX&*hQ(qTka@;{0z|;()Y{sLL+9J@ z>v}czc56|XV!+cS2F%J;gKu0K+TA#Cx&tT9Sy6w zsCH8?Yt&@JaEAID0|;bDs{| z7cN@>29vT$QAoqZORe~t66B|?YV7V*!cEY*Mx5Nc5qRZ3*&B;?U3&<9a!@MEmWFSN%@CsEtQ8J2M+%rmY^06Ew{ zs6L4sJjdHcwq~Yya2KW5>*GeGv$|S*X8{ Date: Mon, 27 Jun 2022 08:00:02 +0200 Subject: [PATCH 65/71] chore: remove optionalality parameter --- .../androidaps/interaction/actions/QuickSnoozeActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt index bb36a43221..40a8f690e9 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/QuickSnoozeActivity.kt @@ -41,9 +41,9 @@ class QuickSnoozeActivity : DaggerActivity() { finish() } - private fun isPackageExisted(targetPackage: String?): Boolean { + private fun isPackageExisted(targetPackage: String): Boolean { try { - packageManager.getPackageInfo(targetPackage!!, PackageManager.GET_META_DATA) + packageManager.getPackageInfo(targetPackage, PackageManager.GET_META_DATA) } catch (e: PackageManager.NameNotFoundException) { return false } From 951b33ded7741aa2c7fd5d47a23eddcd93f3d62e Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 28 Jun 2022 11:25:14 +0200 Subject: [PATCH 66/71] Autotune: resolve NPE --- .../activities/MyPreferenceFragment.kt | 2 +- .../general/autotune/AutotuneFragment.kt | 101 ++++++++++-------- .../general/nsclient/NSClientFragment.kt | 28 +++++ 3 files changed, 83 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt index ccd6b6f484..c0f577d427 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt @@ -350,7 +350,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang } } if (pref is EditTextPreference) { - if (pref.getKey().contains("password") || pref.getKey().contains("pin") || pref.getKey().contains("secret")) { + if (pref.getKey().contains("password") || pref.getKey().contains("pin") || pref.getKey().contains("secret") || pref.getKey().contains("token")) { pref.setSummary("******") } else if (pref.text != null) { pref.dialogMessage = pref.dialogMessage diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt index 2b467cb500..b0f3303c4e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneFragment.kt @@ -18,37 +18,37 @@ import dagger.android.HasAndroidInjector import dagger.android.support.DaggerFragment import info.nightscout.androidaps.Constants import info.nightscout.androidaps.R +import info.nightscout.androidaps.data.LocalInsulin +import info.nightscout.androidaps.data.ProfileSealed +import info.nightscout.androidaps.database.entities.UserEntry +import info.nightscout.androidaps.database.entities.ValueWithUnit import info.nightscout.androidaps.databinding.AutotuneFragmentBinding import info.nightscout.androidaps.dialogs.ProfileViewerDialog +import info.nightscout.androidaps.extensions.runOnUiThread +import info.nightscout.androidaps.extensions.toVisibility +import info.nightscout.androidaps.interfaces.* +import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.autotune.data.ATProfile import info.nightscout.androidaps.plugins.general.autotune.events.EventAutotuneUpdateGui import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged -import info.nightscout.androidaps.data.LocalInsulin -import info.nightscout.androidaps.data.ProfileSealed -import info.nightscout.androidaps.database.entities.UserEntry -import info.nightscout.androidaps.database.entities.ValueWithUnit -import info.nightscout.androidaps.extensions.runOnUiThread -import info.nightscout.androidaps.interfaces.* -import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.MidnightTime import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.alertDialogs.OKDialog.showConfirmation +import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.shared.SafeParse import info.nightscout.shared.sharedPreferences.SP -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import org.json.JSONObject -//import org.slf4j.LoggerFactory import java.text.DecimalFormat -import java.util.* import javax.inject.Inject class AutotuneFragment : DaggerFragment() { + @Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var autotunePlugin: AutotunePlugin @Inject lateinit var autotuneFS: AutotuneFS @@ -61,13 +61,16 @@ class AutotuneFragment : DaggerFragment() { @Inject lateinit var rh: ResourceHelper @Inject lateinit var rxBus: RxBus @Inject lateinit var injector: HasAndroidInjector + @Inject lateinit var aapsSchedulers: AapsSchedulers private var disposable: CompositeDisposable = CompositeDisposable() + //private val log = LoggerFactory.getLogger(AutotunePlugin::class.java) private var _binding: AutotuneFragmentBinding? = null private lateinit var profileStore: ProfileStore private var profileName = "" - private lateinit var profile: ATProfile + private var profile: ATProfile? = null + // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! @@ -88,12 +91,13 @@ class AutotuneFragment : DaggerFragment() { profileStore = activePlugin.activeProfileSource.profile ?: ProfileStore(injector, JSONObject(), dateUtil) profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString() profileFunction.getProfile()?.let { currentProfile -> - profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector) + profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector) } binding.tuneDays.setParams( savedInstanceState?.getDouble("tunedays") - ?: defaultValue, 1.0, 30.0, 1.0, DecimalFormat("0"), false, null, textWatcher) + ?: defaultValue, 1.0, 30.0, 1.0, DecimalFormat("0"), false, null, textWatcher + ) binding.autotuneRun.setOnClickListener { val daysBack = SafeParse.stringToInt(binding.tuneDays.text) autotunePlugin.calculationRunning = true @@ -105,11 +109,10 @@ class AutotuneFragment : DaggerFragment() { updateGui() } binding.profileList.onItemClickListener = AdapterView.OnItemClickListener { _, _, _, _ -> - if (!autotunePlugin.calculationRunning) - { + if (!autotunePlugin.calculationRunning) { profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString() profileFunction.getProfile()?.let { currentProfile -> - profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector) + profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector) } autotunePlugin.selectedProfile = profileName resetParam() @@ -120,7 +123,7 @@ class AutotuneFragment : DaggerFragment() { binding.autotuneCopylocal.setOnClickListener { val localName = rh.gs(R.string.autotune_tunedprofile_name) + " " + dateUtil.dateAndTimeString(autotunePlugin.lastRun) val circadian = sp.getBoolean(R.string.key_autotune_circadian_ic_isf, false) - autotunePlugin.tunedProfile?.let { tunedProfile -> + autotunePlugin.tunedProfile?.let { tunedProfile -> showConfirmation(requireContext(), rh.gs(R.string.autotune_copy_localprofile_button), rh.gs(R.string.autotune_copy_local_profile_message) + "\n" + localName + " " + dateUtil.dateAndTimeString(autotunePlugin.lastRun), @@ -204,13 +207,13 @@ class AutotuneFragment : DaggerFragment() { binding.autotuneCompare.setOnClickListener { val pumpProfile = autotunePlugin.pumpProfile val circadian = sp.getBoolean(R.string.key_autotune_circadian_ic_isf, false) - val tunedprofile = if (circadian) autotunePlugin.tunedProfile?.circadianProfile else autotunePlugin.tunedProfile?.profile + val tunedProfile = if (circadian) autotunePlugin.tunedProfile?.circadianProfile else autotunePlugin.tunedProfile?.profile ProfileViewerDialog().also { pvd -> pvd.arguments = Bundle().also { it.putLong("time", dateUtil.now()) it.putInt("mode", ProfileViewerDialog.Mode.PROFILE_COMPARE.ordinal) it.putString("customProfile", pumpProfile.profile.toPureNsJson(dateUtil).toString()) - it.putString("customProfile2", tunedprofile?.toPureNsJson(dateUtil).toString()) + it.putString("customProfile2", tunedProfile?.toPureNsJson(dateUtil).toString()) it.putString("customProfileUnits", profileFunction.getUnits().asText) it.putString("customProfileName", pumpProfile.profilename + "\n" + rh.gs(R.string.autotune_tunedprofile_name)) } @@ -270,10 +273,8 @@ class AutotuneFragment : DaggerFragment() { super.onResume() disposable += rxBus .toObservable(EventAutotuneUpdateGui::class.java) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe({ - updateGui() - }, { fabricPrivacy.logException(it) }) + .observeOn(aapsSchedulers.main) + .subscribe({ updateGui() }, fabricPrivacy::logException) checkNewDay() updateGui() } @@ -291,7 +292,7 @@ class AutotuneFragment : DaggerFragment() { profileStore = activePlugin.activeProfileSource.profile ?: ProfileStore(injector, JSONObject(), dateUtil) profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString() profileFunction.getProfile()?.let { currentProfile -> - profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector) + profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector) } val profileList: ArrayList = profileStore.getProfileList() profileList.add(0, rh.gs(R.string.active)) @@ -315,17 +316,18 @@ class AutotuneFragment : DaggerFragment() { autotunePlugin.calculationRunning -> { binding.tuneWarning.text = rh.gs(R.string.autotune_warning_during_run) } + autotunePlugin.lastRunSuccess -> { - binding.autotuneCopylocal.visibility = View.VISIBLE - binding.autotuneUpdateProfile.visibility = autotunePlugin.updateButtonVisibility - binding.autotuneRevertProfile.visibility = if (autotunePlugin.updateButtonVisibility == View.VISIBLE) View.GONE else View.VISIBLE - binding.autotuneProfileswitch.visibility = View.VISIBLE - binding.tuneWarning.text = rh.gs(R.string.autotune_warning_after_run) + binding.autotuneCopylocal.visibility = View.VISIBLE + binding.autotuneUpdateProfile.visibility = autotunePlugin.updateButtonVisibility + binding.autotuneRevertProfile.visibility = if (autotunePlugin.updateButtonVisibility == View.VISIBLE) View.GONE else View.VISIBLE + binding.autotuneProfileswitch.visibility = View.VISIBLE + binding.tuneWarning.text = rh.gs(R.string.autotune_warning_after_run) binding.autotuneCompare.visibility = View.VISIBLE } + else -> { - if (profile.isValid) - binding.autotuneRun.visibility = View.VISIBLE + binding.autotuneRun.visibility = (profile?.isValid == true).toVisibility() binding.autotuneCheckInputProfile.visibility = View.VISIBLE } } @@ -335,10 +337,9 @@ class AutotuneFragment : DaggerFragment() { private fun checkNewDay() { val runToday = autotunePlugin.lastRun > MidnightTime.calc(dateUtil.now() - autotunePlugin.autotuneStartHour * 3600 * 1000L) + autotunePlugin.autotuneStartHour * 3600 * 1000L - if (runToday && autotunePlugin.result != "") - { + if (runToday && autotunePlugin.result != "") { binding.tuneWarning.text = rh.gs(R.string.autotune_warning_after_run) - } else if (!runToday || autotunePlugin.result.isEmpty()) { //if new day reinit result, default days, warning and button's visibility + } else if (!runToday || autotunePlugin.result.isEmpty()) { //if new day re-init result, default days, warning and button's visibility resetParam(!runToday) } } @@ -348,17 +349,18 @@ class AutotuneFragment : DaggerFragment() { var nl = "" if (profileFunction.getProfile() == null) { warning = rh.gs(R.string.profileswitch_ismissing) - return warning + return warning } profileFunction.getProfile()?.let { currentProfile -> - profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector) - if (!profile.isValid) return rh.gs(R.string.autotune_profile_invalid) - if (profile.icSize > 1) { - warning += nl + rh.gs(R.string.autotune_ic_warning, profile.icSize, profile.ic) - nl = "\n" - } - if (profile.isfSize > 1) { - warning += nl + rh.gs(R.string.autotune_isf_warning, profile.isfSize, Profile.fromMgdlToUnits(profile.isf, profileFunction.getUnits()), profileFunction.getUnits().asText) + profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector).also { profile -> + if (!profile.isValid) return rh.gs(R.string.autotune_profile_invalid) + if (profile.icSize > 1) { + warning += nl + rh.gs(R.string.autotune_ic_warning, profile.icSize, profile.ic) + nl = "\n" + } + if (profile.isfSize > 1) { + warning += nl + rh.gs(R.string.autotune_isf_warning, profile.isfSize, Profile.fromMgdlToUnits(profile.isf, profileFunction.getUnits()), profileFunction.getUnits().asText) + } } } return warning @@ -376,7 +378,10 @@ class AutotuneFragment : DaggerFragment() { } private val textWatcher = object : TextWatcher { - override fun afterTextChanged(s: Editable) { updateGui() } + override fun afterTextChanged(s: Editable) { + updateGui() + } + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { if (binding.tuneDays.text.isNotEmpty()) { @@ -387,7 +392,9 @@ class AutotuneFragment : DaggerFragment() { autotunePlugin.lastNbDays = binding.tuneDays.text resetParam(false) } - } catch (e:Exception) { } + } catch (e: Exception) { + fabricPrivacy.logException(e) + } } } } @@ -469,7 +476,7 @@ class AutotuneFragment : DaggerFragment() { } } - private fun toTableRowHeader(basal:Boolean = false): TableRow = + private fun toTableRowHeader(basal: Boolean = false): TableRow = TableRow(context).also { header -> val lp = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT).apply { weight = 1f } header.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT).apply { gravity = Gravity.CENTER_HORIZONTAL } @@ -500,7 +507,7 @@ class AutotuneFragment : DaggerFragment() { }) } - private fun toTableRowValue(hour: String, inputValue: Double, tunedValue: Double, format:String = "%.3f", missing: String = ""): TableRow = + private fun toTableRowValue(hour: String, inputValue: Double, tunedValue: Double, format: String = "%.3f", missing: String = ""): TableRow = TableRow(context).also { row -> val percentValue = Round.roundTo(tunedValue / inputValue * 100 - 100, 1.0).toInt().toString() + "%" val lp = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT).apply { weight = 1f } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt index 43061ed25f..a8049910f8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt @@ -17,9 +17,15 @@ import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientU import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.alertDialogs.OKDialog import info.nightscout.androidaps.utils.rx.AapsSchedulers +import info.nightscout.sdk.NSAndroidClient +import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.launch import javax.inject.Inject class NSClientFragment : DaggerFragment() { @@ -32,6 +38,7 @@ class NSClientFragment : DaggerFragment() { @Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var dataSyncSelector: DataSyncSelector @Inject lateinit var uel: UserEntryLogger + @Inject lateinit var aapsLogger: AAPSLogger companion object { @@ -39,6 +46,7 @@ class NSClientFragment : DaggerFragment() { const val ID_MENU_RESTART = 7 const val ID_MENU_SEND_NOW = 8 const val ID_MENU_FULL_SYNC = 9 + const val ID_MENU_STATUS = 10 } private val disposable = CompositeDisposable() @@ -80,6 +88,7 @@ class NSClientFragment : DaggerFragment() { menu.add(Menu.FIRST, ID_MENU_RESTART, 0, rh.gs(R.string.restart)).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) menu.add(Menu.FIRST, ID_MENU_SEND_NOW, 0, rh.gs(R.string.deliver_now)).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) menu.add(Menu.FIRST, ID_MENU_FULL_SYNC, 0, rh.gs(R.string.full_sync)).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) + menu.add(Menu.FIRST, ID_MENU_STATUS, 0, "TEST STATUS").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) menu.setGroupDividerEnabled(true) } } @@ -111,6 +120,25 @@ class NSClientFragment : DaggerFragment() { true } + ID_MENU_STATUS -> { + context?.let { context -> + val scope = CoroutineScope(Dispatchers.IO + SupervisorJob()) + scope.launch { + val client = NSAndroidClient( + baseUrl = sp.getString(R.string.key_nsclientinternal_url, "").lowercase().replace("https://", ""), + accessToken = sp.getString(R.string.key_nsclient_token, ""), + context = context, + logging = true + ) + val status = client.getStatus() + aapsLogger.debug(status.toString()) + val svgs = client.getSgvs() + aapsLogger.debug(svgs.toString()) + } + } + true + } + else -> false } From b223dfbaf023df2a8cc2182bd1393274642b7e02 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 28 Jun 2022 18:07:59 +0200 Subject: [PATCH 67/71] fix NSClientFragment --- .../general/nsclient/NSClientFragment.kt | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt index a8049910f8..43061ed25f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientFragment.kt @@ -17,15 +17,9 @@ import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientU import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.alertDialogs.OKDialog import info.nightscout.androidaps.utils.rx.AapsSchedulers -import info.nightscout.sdk.NSAndroidClient -import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.launch import javax.inject.Inject class NSClientFragment : DaggerFragment() { @@ -38,7 +32,6 @@ class NSClientFragment : DaggerFragment() { @Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var dataSyncSelector: DataSyncSelector @Inject lateinit var uel: UserEntryLogger - @Inject lateinit var aapsLogger: AAPSLogger companion object { @@ -46,7 +39,6 @@ class NSClientFragment : DaggerFragment() { const val ID_MENU_RESTART = 7 const val ID_MENU_SEND_NOW = 8 const val ID_MENU_FULL_SYNC = 9 - const val ID_MENU_STATUS = 10 } private val disposable = CompositeDisposable() @@ -88,7 +80,6 @@ class NSClientFragment : DaggerFragment() { menu.add(Menu.FIRST, ID_MENU_RESTART, 0, rh.gs(R.string.restart)).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) menu.add(Menu.FIRST, ID_MENU_SEND_NOW, 0, rh.gs(R.string.deliver_now)).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) menu.add(Menu.FIRST, ID_MENU_FULL_SYNC, 0, rh.gs(R.string.full_sync)).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) - menu.add(Menu.FIRST, ID_MENU_STATUS, 0, "TEST STATUS").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) menu.setGroupDividerEnabled(true) } } @@ -120,25 +111,6 @@ class NSClientFragment : DaggerFragment() { true } - ID_MENU_STATUS -> { - context?.let { context -> - val scope = CoroutineScope(Dispatchers.IO + SupervisorJob()) - scope.launch { - val client = NSAndroidClient( - baseUrl = sp.getString(R.string.key_nsclientinternal_url, "").lowercase().replace("https://", ""), - accessToken = sp.getString(R.string.key_nsclient_token, ""), - context = context, - logging = true - ) - val status = client.getStatus() - aapsLogger.debug(status.toString()) - val svgs = client.getSgvs() - aapsLogger.debug(svgs.toString()) - } - } - true - } - else -> false } From 6a83642c2e9cbfd05df1859475d6c549e211e309 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 27 Jun 2022 21:59:40 +0200 Subject: [PATCH 68/71] cleanup & turn on looging in tests --- app/build.gradle | 6 - .../plugins/general/autotune/AutotuneIob.kt | 32 ++-- .../androidaps/TestBaseWithProfile.kt | 4 +- .../general/autotune/AutotuneCoreTest.kt | 68 ++++----- .../general/autotune/AutotunePrepTest.kt | 138 +++++++++--------- .../general/autotune/PreppedGlucoseTest.kt | 47 +++--- core/test_dependencies.gradle | 7 + 7 files changed, 158 insertions(+), 144 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 132de499a8..6d46474f35 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,12 +97,6 @@ def allCommitted = { -> return stringBuilder.toString().isEmpty() } -tasks.matching { it instanceof Test }.all { - testLogging.events = ["failed", "skipped", "started"] - // testLogging.events = ["failed", "skipped", "started", "standard_out"] use to display stdout in travis - testLogging.exceptionFormat = "full" -} - android { namespace 'info.nightscout.androidaps' diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt index c12909848c..bac89d9f9e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneIob.kt @@ -2,31 +2,31 @@ package info.nightscout.androidaps.plugins.general.autotune import info.nightscout.androidaps.Constants import info.nightscout.androidaps.R -import info.nightscout.androidaps.data.* +import info.nightscout.androidaps.data.IobTotal +import info.nightscout.androidaps.data.LocalInsulin import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.embedments.InterfaceIDs -import info.nightscout.androidaps.interfaces.ActivePlugin -import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.database.entities.* import info.nightscout.androidaps.extensions.durationInMinutes import info.nightscout.androidaps.extensions.iobCalc import info.nightscout.androidaps.extensions.toJson import info.nightscout.androidaps.extensions.toTemporaryBasal +import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.Profile +import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.plugins.general.autotune.data.ATProfile import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.T import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag import info.nightscout.shared.sharedPreferences.SP import org.json.JSONArray import org.json.JSONObject -import org.slf4j.LoggerFactory import java.util.* import javax.inject.Inject import javax.inject.Singleton import kotlin.math.ceil -import kotlin.math.roundToInt @Singleton open class AutotuneIob @Inject constructor( @@ -59,24 +59,24 @@ open class AutotuneIob @Inject constructor( initializeTreatmentData(from - range(), to) initializeTempBasalData(from - range(), to, tunedProfile) initializeExtendedBolusData(from - range(), to, tunedProfile) - Collections.sort(tempBasals) { o1: TemporaryBasal, o2: TemporaryBasal -> (o2.timestamp - o1.timestamp).toInt() } + tempBasals.sortWith { o1: TemporaryBasal, o2: TemporaryBasal -> (o2.timestamp - o1.timestamp).toInt() } // Without Neutral TBR, Autotune Web will ignore iob for periods without TBR running addNeutralTempBasal(from - range(), to, tunedProfile) - Collections.sort(nsTreatments) { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() } - Collections.sort(boluses) { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() } - log.debug("D/AutotunePlugin: Nb Treatments: " + nsTreatments.size + " Nb meals: " + meals.size) + nsTreatments.sortWith { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() } + this.boluses.sortWith { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() } + aapsLogger.debug(LTag.AUTOTUNE, "Nb Treatments: " + nsTreatments.size + " Nb meals: " + meals.size) } private fun initializeBgreadings(from: Long, to: Long) { - glucose = repository.compatGetBgReadingsDataFromTime(from, to, false).blockingGet(); + glucose = repository.compatGetBgReadingsDataFromTime(from, to, false).blockingGet() } //nsTreatment is used only for export data, meals is used in AutotunePrep private fun initializeTreatmentData(from: Long, to: Long) { - val oldestBgDate = if (glucose.size > 0) glucose[glucose.size - 1].timestamp else from - log.debug("AutotunePlugin Check BG date: BG Size: " + glucose.size + " OldestBG: " + dateUtil.dateAndTimeAndSecondsString(oldestBgDate) + " to: " + dateUtil.dateAndTimeAndSecondsString(to)) + val oldestBgDate = if (glucose.isNotEmpty()) glucose[glucose.size - 1].timestamp else from + aapsLogger.debug(LTag.AUTOTUNE, "Check BG date: BG Size: " + glucose.size + " OldestBG: " + dateUtil.dateAndTimeAndSecondsString(oldestBgDate) + " to: " + dateUtil.dateAndTimeAndSecondsString(to)) val tmpCarbs = repository.getCarbsDataFromTimeToTimeExpanded(from, to, false).blockingGet() - log.debug("AutotunePlugin Nb treatments after query: " + tmpCarbs.size) + aapsLogger.debug(LTag.AUTOTUNE, "Nb treatments after query: " + tmpCarbs.size) meals.clear() boluses.clear() var nbCarbs = 0 @@ -217,7 +217,7 @@ open class AutotuneIob @Inject constructor( tempBasals.add(newtb) nsTreatments.add(NsTreatment(newtb)) splittedTimestamp += durationFilled - splittedDuration = splittedDuration - durationFilled + splittedDuration -= durationFilled val profile = profileFunction.getProfile(newtb.timestamp) ?:continue boluses.addAll(convertToBoluses(newtb, profile, tunedProfile.profile)) // required for correct iob calculation with oref0 algo } @@ -377,8 +377,4 @@ open class AutotuneIob @Inject constructor( private fun log(message: String) { autotuneFS.atLog("[iob] $message") } - - companion object { - private val log = LoggerFactory.getLogger(AutotunePlugin::class.java) - } } \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/TestBaseWithProfile.kt b/app/src/test/java/info/nightscout/androidaps/TestBaseWithProfile.kt index fb7412a3f3..0eb177fb7c 100644 --- a/app/src/test/java/info/nightscout/androidaps/TestBaseWithProfile.kt +++ b/app/src/test/java/info/nightscout/androidaps/TestBaseWithProfile.kt @@ -23,6 +23,7 @@ import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyString import org.mockito.Mock import org.mockito.Mockito +import org.mockito.Mockito.`when` import org.mockito.invocation.InvocationOnMock @Suppress("SpellCheckingInspection") @@ -52,7 +53,8 @@ open class TestBaseWithProfile : TestBase() { validProfileJSON = "{\"dia\":\"5\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"3\"}," + "{\"time\":\"2:00\",\"value\":\"3.4\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4.5\"}]," + "\"target_high\":[{\"time\":\"00:00\",\"value\":\"7\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" - dateUtil = DateUtil(context) + dateUtil = Mockito.spy(DateUtil(context)) + `when`(dateUtil.now()).thenReturn(1656358822000) validProfile = ProfileSealed.Pure(pureProfileFromJson(JSONObject(validProfileJSON), dateUtil)!!) effectiveProfileSwitch = EffectiveProfileSwitch( timestamp = dateUtil.now(), diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt index 2eb422e717..afdb10994a 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotuneCoreTest.kt @@ -25,71 +25,74 @@ import java.io.File import java.util.* class AutotuneCoreTest : TestBaseWithProfile() { + @Mock lateinit var sp: SP @Mock lateinit var autotuneFS: AutotuneFS @Mock lateinit var injector: HasAndroidInjector @Mock lateinit var activePlugin: ActivePlugin - lateinit var autotuneCore: AutotuneCore - var min5mCarbImpact = 0.0 - var autotuneMin = 0.0 - var autotuneMax = 0.0 + private lateinit var autotuneCore: AutotuneCore + private var min5mCarbImpact = 0.0 + private var autotuneMin = 0.0 + private var autotuneMax = 0.0 - @Before + @Before fun initData() { - autotuneCore = AutotuneCore(sp,autotuneFS) + autotuneCore = AutotuneCore(sp, autotuneFS) TimeZone.setDefault(TimeZone.getTimeZone("GMT+2")) } + @Suppress("SpellCheckingInspection") @Test - fun autotuneCoreTest1() { // Test if AutotuneCore with input files of OpenAPS categorisation gives correct ouput profile - val prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() + fun autotuneCoreTest1() { // Test if AutotuneCore with input files of OpenAPS categorisation gives correct output profile + val prepJson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! - val prep = PreppedGlucose(JSONObject(prepjson), dateUtil) + val prep = PreppedGlucose(JSONObject(prepJson), dateUtil) `when`(sp.getDouble(R.string.key_openapsama_autosens_max, 1.2)).thenReturn(autotuneMax) `when`(sp.getDouble(R.string.key_openapsama_autosens_min, 0.7)).thenReturn(autotuneMin) `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) - val OapsOutputProfileJson = File("src/test/res/autotune/test1/aapsorefprofile.json").readText() - val OapsOutputProfile = atProfileFromOapsJson(JSONObject(OapsOutputProfileJson),dateUtil) + val oapsOutputProfileJson = File("src/test/res/autotune/test1/aapsorefprofile.json").readText() + val oapsOutputProfile = atProfileFromOapsJson(JSONObject(oapsOutputProfileJson), dateUtil) val outProfile = autotuneCore.tuneAllTheThings(prep, inputProfile, inputProfile) - OapsOutputProfile?.let { - Assert.assertEquals(OapsOutputProfile.isf, outProfile.isf, 0.0) - Assert.assertEquals(OapsOutputProfile.ic, outProfile.ic, 0.0) + oapsOutputProfile?.let { + Assert.assertEquals(oapsOutputProfile.isf, outProfile.isf, 0.0) + Assert.assertEquals(oapsOutputProfile.ic, outProfile.ic, 0.0) for (i in 0..23) - Assert.assertEquals(OapsOutputProfile.basal[i], outProfile.basal[i], 0.0) + Assert.assertEquals(oapsOutputProfile.basal[i], outProfile.basal[i], 0.0) } - ?:Assert.fail() + ?: Assert.fail() } + @Suppress("SpellCheckingInspection") @Test fun autotuneCoreTest4() { // Test if limiting modification with Min Max Autosens parameter works (18h on basal and on ISF value) - val prepjson = File("src/test/res/autotune/test4/autotune.2022-05-30.json").readText() + val prepJson = File("src/test/res/autotune/test4/autotune.2022-05-30.json").readText() val inputProfileJson = File("src/test/res/autotune/test4/profile.2022-05-30.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! val pumpProfileJson = File("src/test/res/autotune/test4/profile.pump.json").readText() val pumpProfile = atProfileFromOapsJson(JSONObject(pumpProfileJson), dateUtil)!! - val prep = PreppedGlucose(JSONObject(prepjson), dateUtil) + val prep = PreppedGlucose(JSONObject(prepJson), dateUtil) `when`(sp.getDouble(R.string.key_openapsama_autosens_max, 1.2)).thenReturn(autotuneMax) `when`(sp.getDouble(R.string.key_openapsama_autosens_min, 0.7)).thenReturn(autotuneMin) `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) - val OapsOutputProfileJson = File("src/test/res/autotune/test4/newprofile.2022-05-30.json").readText() - val OapsOutputProfile = atProfileFromOapsJson(JSONObject(OapsOutputProfileJson),dateUtil) + val oapsOutputProfileJson = File("src/test/res/autotune/test4/newprofile.2022-05-30.json").readText() + val oapsOutputProfile = atProfileFromOapsJson(JSONObject(oapsOutputProfileJson), dateUtil) val outProfile = autotuneCore.tuneAllTheThings(prep, inputProfile, pumpProfile) - OapsOutputProfile?.let { - Assert.assertEquals(OapsOutputProfile.isf, outProfile.isf, 0.0) - Assert.assertEquals(OapsOutputProfile.ic, outProfile.ic, 0.0) + oapsOutputProfile?.let { + Assert.assertEquals(oapsOutputProfile.isf, outProfile.isf, 0.0) + Assert.assertEquals(oapsOutputProfile.ic, outProfile.ic, 0.0) for (i in 0..23) - Assert.assertEquals(OapsOutputProfile.basal[i], outProfile.basal[i], 0.0) + Assert.assertEquals(oapsOutputProfile.basal[i], outProfile.basal[i], 0.0) } - ?:Assert.fail() + ?: Assert.fail() } - /** * OpenAPS profile for Autotune only have one ISF value and one IC value */ - fun atProfileFromOapsJson(jsonObject: JSONObject, dateUtil: DateUtil, defaultUnits: String? = null): ATProfile? { + @Suppress("SpellCheckingInspection") + private fun atProfileFromOapsJson(jsonObject: JSONObject, dateUtil: DateUtil, defaultUnits: String? = null): ATProfile? { try { min5mCarbImpact = JsonHelper.safeGetDoubleAllowNull(jsonObject, "min_5m_carbimpact") ?: return null autotuneMin = JsonHelper.safeGetDoubleAllowNull(jsonObject, "autosens_min") ?: return null @@ -104,13 +107,13 @@ class AutotuneCoreTest : TestBaseWithProfile() { val isfBlocks = ArrayList(1).also { val isfJsonArray = isfJson.getJSONArray("sensitivities") val value = isfJsonArray.getJSONObject(0).getDouble("sensitivity") - it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + it.add(0, Block((T.hours(24).secs()) * 1000L, value)) } val icBlocks = ArrayList(1).also { val value = jsonObject.getDouble("carb_ratio") - it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + it.add(0, Block((T.hours(24).secs()) * 1000L, value)) } - val basalBlocks = blockFromJsonArray(jsonObject.getJSONArray("basalprofile"), dateUtil) + val basalBlocks = blockFromJsonArray(jsonObject.getJSONArray("basalprofile")) ?: return null val targetBlocks = ArrayList(1).also { it.add(0, TargetBlock((T.hours(24).secs()) * 1000L, 100.0, 100.0)) @@ -126,14 +129,13 @@ class AutotuneCoreTest : TestBaseWithProfile() { timeZone = timezone, dia = dia ) - return ATProfile(ProfileSealed.Pure(pure), localInsulin, profileInjector).also { it.dateUtil = dateUtil} + return ATProfile(ProfileSealed.Pure(pure), localInsulin, profileInjector).also { it.dateUtil = dateUtil } } catch (ignored: Exception) { return null } } - - fun blockFromJsonArray(jsonArray: JSONArray?, dateUtil: DateUtil): List? { + private fun blockFromJsonArray(jsonArray: JSONArray?): List? { val size = jsonArray?.length() ?: return null val ret = ArrayList(size) try { diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt index 9ac1c3272f..f7fb47cecb 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt @@ -29,20 +29,20 @@ import org.mockito.Mock import org.mockito.Mockito.`when` import java.io.File import java.util.* -import kotlin.collections.ArrayList class AutotunePrepTest : TestBaseWithProfile() { + @Mock lateinit var sp: SP @Mock lateinit var autotuneFS: AutotuneFS @Mock lateinit var injector: HasAndroidInjector @Mock lateinit var activePlugin: ActivePlugin @Mock lateinit var repository: AppRepository - lateinit var autotunePrep: AutotunePrep - lateinit var autotuneIob: TestAutotuneIob - var min5mCarbImpact = 0.0 - var autotuneMin = 0.0 - var autotuneMax = 0.0 - var startDayTime = 0L + private lateinit var autotunePrep: AutotunePrep + private lateinit var autotuneIob: TestAutotuneIob + private var min5mCarbImpact = 0.0 + private var autotuneMin = 0.0 + private var autotuneMax = 0.0 + private var startDayTime = 0L @Before fun initData() { @@ -52,17 +52,17 @@ class AutotunePrepTest : TestBaseWithProfile() { @Test fun autotunePrepTest1() { // Test if categorisation with standard treatments with carbs is Ok val inputIobJson = File("src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS - val iobOapsCalcul = buildIobOaps(JSONArray(inputIobJson)) - autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalcul) + val iobOapsCalculation = buildIobOaps(JSONArray(inputIobJson)) + autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalculation) autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! - val prepjson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() - val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepjson), dateUtil) //prep data calculated by OpenAPS autotune + val prepJson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() + val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepJson), dateUtil) //prep data calculated by OpenAPS autotune val oapsEntriesJson = File("src/test/res/autotune/test1/aaps-entries.2022-05-21.json").readText() - autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) + autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) val oapsTreatmentsJson = File("src/test/res/autotune/test1/aaps-treatments.2022-05-21.json").readText() - autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation + autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation autotuneIob.boluses = buildBoluses(oapsPreppedGlucose) //Values from oapsPrepData because linked to iob calculation method for TBR `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) `when`(sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)).thenReturn(false) @@ -88,21 +88,20 @@ class AutotunePrepTest : TestBaseWithProfile() { } } - @Test fun autotunePrepTest2() { // Test if categorisation without carbs (full UAM) and categorize UAM as basal false is Ok val inputIobJson = File("src/test/res/autotune/test2/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS - val iobOapsCalcul = buildIobOaps(JSONArray(inputIobJson)) - autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalcul) + val iobOapsCalculation = buildIobOaps(JSONArray(inputIobJson)) + autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalculation) autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) val inputProfileJson = File("src/test/res/autotune/test2/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! - val prepjson = File("src/test/res/autotune/test2/autotune.2022-05-21.json").readText() - val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepjson), dateUtil) //prep data calculated by OpenAPS autotune + val prepJson = File("src/test/res/autotune/test2/autotune.2022-05-21.json").readText() + val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepJson), dateUtil) //prep data calculated by OpenAPS autotune val oapsEntriesJson = File("src/test/res/autotune/test2/aaps-entries.2022-05-21.json").readText() - autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) + autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) val oapsTreatmentsJson = File("src/test/res/autotune/test2/aaps-treatments.2022-05-21.json").readText() - autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation + autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation autotuneIob.boluses = buildBoluses(oapsPreppedGlucose) //Values from oapsPrepData because linked to iob calculation method for TBR `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) `when`(sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)).thenReturn(false) // CategorizeUAM as Basal = False @@ -131,17 +130,17 @@ class AutotunePrepTest : TestBaseWithProfile() { @Test fun autotunePrepTest3() { // Test if categorisation without carbs (full UAM) and categorize UAM as basal true is Ok val inputIobJson = File("src/test/res/autotune/test3/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS - val iobOapsCalcul = buildIobOaps(JSONArray(inputIobJson)) - autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalcul) + val iobOapsCalculation = buildIobOaps(JSONArray(inputIobJson)) + autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalculation) autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) val inputProfileJson = File("src/test/res/autotune/test3/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! - val prepjson = File("src/test/res/autotune/test3/autotune.2022-05-21.json").readText() - val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepjson), dateUtil) //prep data calculated by OpenAPS autotune + val prepJson = File("src/test/res/autotune/test3/autotune.2022-05-21.json").readText() + val oapsPreppedGlucose = PreppedGlucose(JSONObject(prepJson), dateUtil) //prep data calculated by OpenAPS autotune val oapsEntriesJson = File("src/test/res/autotune/test3/aaps-entries.2022-05-21.json").readText() - autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) + autotuneIob.glucose = buildGlucose(JSONArray(oapsEntriesJson)) val oapsTreatmentsJson = File("src/test/res/autotune/test3/aaps-treatments.2022-05-21.json").readText() - autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation + autotuneIob.meals = buildMeals(JSONArray(oapsTreatmentsJson)) //Only meals is used in unit test, Insulin only used for iob calculation autotuneIob.boluses = buildBoluses(oapsPreppedGlucose) //Values from oapsPrepData because linked to iob calculation method for TBR `when`(sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0)).thenReturn(min5mCarbImpact) `when`(sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)).thenReturn(true) // CategorizeUAM as Basal = True @@ -170,7 +169,8 @@ class AutotunePrepTest : TestBaseWithProfile() { /************************************************************************************************************************************************************************************* * OpenAPS profile for Autotune only have one ISF value and one IC value */ - fun atProfileFromOapsJson(jsonObject: JSONObject, dateUtil: DateUtil, defaultUnits: String? = null): ATProfile? { + @Suppress("SpellCheckingInspection") + private fun atProfileFromOapsJson(jsonObject: JSONObject, dateUtil: DateUtil, defaultUnits: String? = null): ATProfile? { try { min5mCarbImpact = JsonHelper.safeGetDoubleAllowNull(jsonObject, "min_5m_carbimpact") ?: return null autotuneMin = JsonHelper.safeGetDoubleAllowNull(jsonObject, "autosens_min") ?: return null @@ -185,13 +185,13 @@ class AutotunePrepTest : TestBaseWithProfile() { val isfBlocks = ArrayList(1).also { val isfJsonArray = isfJson.getJSONArray("sensitivities") val value = isfJsonArray.getJSONObject(0).getDouble("sensitivity") - it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + it.add(0, Block((T.hours(24).secs()) * 1000L, value)) } val icBlocks = ArrayList(1).also { val value = jsonObject.getDouble("carb_ratio") - it.add(0,Block((T.hours(24).secs()) * 1000L, value)) + it.add(0, Block((T.hours(24).secs()) * 1000L, value)) } - val basalBlocks = blockFromJsonArray(jsonObject.getJSONArray("basalprofile"), dateUtil) + val basalBlocks = blockFromJsonArray(jsonObject.getJSONArray("basalprofile")) ?: return null val targetBlocks = ArrayList(1).also { it.add(0, TargetBlock((T.hours(24).secs()) * 1000L, 100.0, 100.0)) @@ -207,14 +207,13 @@ class AutotunePrepTest : TestBaseWithProfile() { timeZone = timezone, dia = dia ) - return ATProfile(ProfileSealed.Pure(pure), localInsulin, profileInjector).also { it.dateUtil = dateUtil} + return ATProfile(ProfileSealed.Pure(pure), localInsulin, profileInjector).also { it.dateUtil = dateUtil } } catch (ignored: Exception) { return null } } - - fun blockFromJsonArray(jsonArray: JSONArray?, dateUtil: DateUtil): List? { + private fun blockFromJsonArray(jsonArray: JSONArray?): List? { val size = jsonArray?.length() ?: return null val ret = ArrayList(size) try { @@ -238,19 +237,19 @@ class AutotunePrepTest : TestBaseWithProfile() { return ret } - fun buildBoluses(preppedGlucose: PreppedGlucose): ArrayList { //if categorization is correct then I return for dose function the crInsulin calculated in Oaps + private fun buildBoluses(preppedGlucose: PreppedGlucose): ArrayList { //if categorization is correct then I return for dose function the crInsulin calculated in Oaps val boluses: ArrayList = ArrayList() - try { - for (i in preppedGlucose.crData.indices) { - boluses.add( - Bolus( - timestamp = preppedGlucose.crData[i].crEndTime, - amount = preppedGlucose.crData[i].crInsulin, - type = Bolus.Type.NORMAL - ) +// try { + for (i in preppedGlucose.crData.indices) { + boluses.add( + Bolus( + timestamp = preppedGlucose.crData[i].crEndTime, + amount = preppedGlucose.crData[i].crInsulin, + type = Bolus.Type.NORMAL ) - } - } catch (e: Exception) { } + ) + } +// } catch (e: Exception) { } if (boluses.size == 0) //Add at least one insulin treatment for tests to avoid return null in categorization boluses.add( Bolus( @@ -262,41 +261,41 @@ class AutotunePrepTest : TestBaseWithProfile() { return boluses } - fun buildMeals(jsonArray: JSONArray): ArrayList { + private fun buildMeals(jsonArray: JSONArray): ArrayList { val list: ArrayList = ArrayList() - try { - for (index in 0 until jsonArray.length()) { - val json = jsonArray.getJSONObject(index) - val value = JsonHelper.safeGetDouble(json, "carbs", 0.0) - val timestamp = JsonHelper.safeGetLong(json, "date") - if (value > 0.0 && timestamp > startDayTime) { - list.add(Carbs(timestamp=timestamp, amount = value, duration = 0)) - } +// try { + for (index in 0 until jsonArray.length()) { + val json = jsonArray.getJSONObject(index) + val value = JsonHelper.safeGetDouble(json, "carbs", 0.0) + val timestamp = JsonHelper.safeGetLong(json, "date") + if (value > 0.0 && timestamp > startDayTime) { + list.add(Carbs(timestamp = timestamp, amount = value, duration = 0)) } - } catch (e: Exception) { } + } +// } catch (e: Exception) { } return list } - fun buildGlucose(jsonArray: JSONArray): List { + private fun buildGlucose(jsonArray: JSONArray): List { val list: ArrayList = ArrayList() - try { - for (index in 0 until jsonArray.length()) { - val json = jsonArray.getJSONObject(index) - val value = JsonHelper.safeGetDouble(json, "sgv") - val timestamp = JsonHelper.safeGetLong(json, "date") - list.add(GlucoseValue(raw = value, noise = 0.0, value = value, timestamp = timestamp, sourceSensor = GlucoseValue.SourceSensor.UNKNOWN, trendArrow = GlucoseValue.TrendArrow.FLAT)) - } - } catch (e: Exception) { } +// try { + for (index in 0 until jsonArray.length()) { + val json = jsonArray.getJSONObject(index) + val value = JsonHelper.safeGetDouble(json, "sgv") + val timestamp = JsonHelper.safeGetLong(json, "date") + list.add(GlucoseValue(raw = value, noise = 0.0, value = value, timestamp = timestamp, sourceSensor = GlucoseValue.SourceSensor.UNKNOWN, trendArrow = GlucoseValue.TrendArrow.FLAT)) + } +// } catch (e: Exception) { } if (list.size > 0) - startDayTime = list[list.size-1].timestamp + startDayTime = list[list.size - 1].timestamp return list } - fun buildIobOaps(jsonArray: JSONArray): ArrayList { //if categorization is correct then I return for dose function the crInsulin calculated in Oaps + private fun buildIobOaps(jsonArray: JSONArray): ArrayList { //if categorization is correct then I return for dose function the crInsulin calculated in Oaps val list: ArrayList = ArrayList() for (index in 0 until jsonArray.length()) { val json = jsonArray.getJSONObject(index) - val time = JsonHelper.safeGetLong(json,"date") + val time = JsonHelper.safeGetLong(json, "date") val iob = JsonHelper.safeGetDouble(json, "iob") val activity = JsonHelper.safeGetDouble(json, "activity") val iobTotal = IobTotal(time) @@ -315,7 +314,7 @@ class AutotunePrepTest : TestBaseWithProfile() { val dateUtil: DateUtil, val activePlugin: ActivePlugin, autotuneFS: AutotuneFS, - val iobOapsCalcul: ArrayList + private val iobOapsCalculation: ArrayList ) : AutotuneIob( aapsLogger, repository, @@ -325,9 +324,10 @@ class AutotunePrepTest : TestBaseWithProfile() { activePlugin, autotuneFS ) { + override fun getIOB(time: Long, localInsulin: LocalInsulin): IobTotal { - var bolusIob = IobTotal(time) - iobOapsCalcul.forEach { + val bolusIob = IobTotal(time) + iobOapsCalculation.forEach { if (it.time == time) return it } diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt index f769e5af72..9150c87bb2 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/PreppedGlucoseTest.kt @@ -1,35 +1,48 @@ package info.nightscout.androidaps.plugins.general.autotune -import android.content.Context -import info.nightscout.androidaps.TestBase -import info.nightscout.androidaps.plugins.general.autotune.data.* -import info.nightscout.androidaps.utils.DateUtil +import info.nightscout.androidaps.TestBaseWithProfile +import info.nightscout.androidaps.plugins.general.autotune.data.BGDatum +import info.nightscout.androidaps.plugins.general.autotune.data.CRDatum +import info.nightscout.androidaps.plugins.general.autotune.data.PreppedGlucose import org.json.JSONObject import org.junit.Assert import org.junit.Before import org.junit.Test -import org.mockito.Mock import java.io.File -class PreppedGlucoseTest : TestBase() { - @Mock lateinit var context: Context - lateinit var dateUtil: DateUtil - lateinit var prep1: PreppedGlucose - lateinit var prepjson1: String +class PreppedGlucoseTest : TestBaseWithProfile() { + + private lateinit var prep1: PreppedGlucose + private lateinit var prepJson1: String @Before fun initData() { - dateUtil = DateUtil(context) - prepjson1 = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() - prep1 = PreppedGlucose(JSONObject(prepjson1), dateUtil) + prepJson1 = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() + prep1 = PreppedGlucose(JSONObject(prepJson1), dateUtil) } @Test fun preppedGlucoseLoadTest() { // Test if load from file of OpenAPS categorisation is Ok - val crData0 = CRDatum(JSONObject("{\"CRInitialIOB\":13.594,\"CRInitialBG\":123,\"CRInitialCarbTime\":\"2022-05-21T07:54:09.000Z\",\"CREndIOB\":-0.155,\"CREndBG\":98,\"CREndTime\":\"2022-05-21T11:19:08.000Z\",\"CRCarbs\":70,\"CRInsulin\":-2.13}"), dateUtil) - val csfDataEnd = BGDatum(JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653176050000,\"dateString\":\"2022-05-21T23:34:10.000Z\",\"isValid\":true,\"sgv\":127,\"direction\":\"Flat\",\"type\":\"sgv\",\"_id\":\"6289771371a363000480abc1\",\"glucose\":127,\"avgDelta\":\"2.50\",\"BGI\":-2.93,\"deviation\":\"5.43\",\"mealCarbs\":0,\"mealAbsorption\":\"end\"}"), dateUtil) - val isfData0 = BGDatum(JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653108249000,\"dateString\":\"2022-05-21T04:44:09.000Z\",\"isValid\":true,\"sgv\":123,\"direction\":\"FortyFiveDown\",\"type\":\"sgv\",\"_id\":\"62886e2919e2e60004989bba\",\"glucose\":123,\"avgDelta\":\"-7.50\",\"BGI\":-7.59,\"deviation\":\"0.09\"}"), dateUtil) - val basalDataEnd = BGDatum(JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653180549000,\"dateString\":\"2022-05-22T00:49:09.000Z\",\"isValid\":true,\"sgv\":121,\"direction\":\"FortyFiveDown\",\"type\":\"sgv\",\"_id\":\"628988a3da46aa0004d1e0f5\",\"glucose\":121,\"avgDelta\":\"-5.25\",\"BGI\":-3.32,\"deviation\":\"-1.93\"}"), dateUtil) + val crData0 = + CRDatum( + JSONObject("{\"CRInitialIOB\":13.594,\"CRInitialBG\":123,\"CRInitialCarbTime\":\"2022-05-21T07:54:09.000Z\",\"CREndIOB\":-0.155,\"CREndBG\":98,\"CREndTime\":\"2022-05-21T11:19:08.000Z\",\"CRCarbs\":70,\"CRInsulin\":-2.13}"), + dateUtil + ) + val csfDataEnd = + BGDatum( + JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653176050000,\"dateString\":\"2022-05-21T23:34:10.000Z\",\"isValid\":true,\"sgv\":127,\"direction\":\"Flat\",\"type\":\"sgv\",\"_id\":\"6289771371a363000480abc1\",\"glucose\":127,\"avgDelta\":\"2.50\",\"BGI\":-2.93,\"deviation\":\"5.43\",\"mealCarbs\":0,\"mealAbsorption\":\"end\"}"), + dateUtil + ) + val isfData0 = + BGDatum( + JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653108249000,\"dateString\":\"2022-05-21T04:44:09.000Z\",\"isValid\":true,\"sgv\":123,\"direction\":\"FortyFiveDown\",\"type\":\"sgv\",\"_id\":\"62886e2919e2e60004989bba\",\"glucose\":123,\"avgDelta\":\"-7.50\",\"BGI\":-7.59,\"deviation\":\"0.09\"}"), + dateUtil + ) + val basalDataEnd = + BGDatum( + JSONObject("{\"device\":\"AndroidAPS-DexcomG6\",\"date\":1653180549000,\"dateString\":\"2022-05-22T00:49:09.000Z\",\"isValid\":true,\"sgv\":121,\"direction\":\"FortyFiveDown\",\"type\":\"sgv\",\"_id\":\"628988a3da46aa0004d1e0f5\",\"glucose\":121,\"avgDelta\":\"-5.25\",\"BGI\":-3.32,\"deviation\":\"-1.93\"}"), + dateUtil + ) Assert.assertEquals(3, prep1.crData.size) Assert.assertTrue(crData0.equals(prep1.crData[0])) Assert.assertTrue(csfDataEnd.equals(prep1.csfGlucoseData[prep1.csfGlucoseData.size - 1])) diff --git a/core/test_dependencies.gradle b/core/test_dependencies.gradle index 9628a048a9..bc9915e4bb 100644 --- a/core/test_dependencies.gradle +++ b/core/test_dependencies.gradle @@ -15,6 +15,13 @@ dependencies { androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' } +tasks.matching { it instanceof Test }.all { + //testLogging.events = ["failed", "skipped", "started"] + // use to display stdout in travis + testLogging.events = ["failed", "skipped", "started", "standard_out"] + testLogging.exceptionFormat = "full" +} + android { testOptions { unitTests { From 9b6477381bc96f073b874b209f342b0e815a3a3f Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 29 Jun 2022 09:25:27 +0200 Subject: [PATCH 69/71] Wear: fix ecarbs activity --- .../plugins/general/wear/wearintegration/DataHandlerMobile.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt index a0ccacf982..63429ac077 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataHandlerMobile.kt @@ -472,7 +472,7 @@ class DataHandlerMobile @Inject constructor( } private fun handleECarbsPreCheck(command: EventData.ActionECarbsPreCheck) { - val startTimeStamp = System.currentTimeMillis() + T.hours(command.carbsTimeShift.toLong()).msecs() + val startTimeStamp = System.currentTimeMillis() + T.mins(command.carbsTimeShift.toLong()).msecs() val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(command.carbs)).value() var message = rh.gs(R.string.carbs) + ": " + carbsAfterConstraints + "g" + "\n" + rh.gs(R.string.time) + ": " + dateUtil.timeString(startTimeStamp) + From 0e0470a4e84041aa00e3f42e828583ea0365b25d Mon Sep 17 00:00:00 2001 From: Philoul Date: Thu, 30 Jun 2022 01:03:00 +0200 Subject: [PATCH 70/71] Fix AutotunePrepTest (add timeshift in input profile to get correct basal consistant with OpenAps run) --- .../plugins/general/autotune/AutotunePrep.kt | 43 +++++++++++++++---- .../general/autotune/AutotunePrepTest.kt | 18 +++----- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt index edba396893..63617e908e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrep.kt @@ -10,6 +10,8 @@ import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.MidnightTime import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.T +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag import info.nightscout.shared.sharedPreferences.SP import java.util.* import javax.inject.Inject @@ -17,6 +19,7 @@ import javax.inject.Singleton @Singleton class AutotunePrep @Inject constructor( + private val aapsLogger: AAPSLogger, private val sp: SP, private val dateUtil: DateUtil, private val autotuneFS: AutotuneFS, @@ -146,6 +149,7 @@ class AutotunePrep @Inject constructor( } } if (glucose.size == 0 || glucoseData.size == 0 ) { + //aapsLogger.debug(LTag.AUTOTUNE, "No BG value received") if (verbose) log("No BG value received") return null @@ -159,11 +163,13 @@ class AutotunePrep @Inject constructor( //val boluses = 0 //val maxCarbs = 0 if (treatments.size == 0) { + //aapsLogger.debug(LTag.AUTOTUNE, "No Carbs entries") if (verbose) log("No Carbs entries") //return null } if (autotuneIob.boluses.size == 0) { + //aapsLogger.debug(LTag.AUTOTUNE, "No treatment received") if (verbose) log("No treatment received") return null @@ -253,6 +259,7 @@ class AutotunePrep @Inject constructor( } avgDelta = (bg - bucketedData[i + 4].value) / 4 } else { + //aapsLogger.debug(LTag.AUTOTUNE, "Could not find glucose data") if (verbose) log("Could not find glucose data") } @@ -320,8 +327,9 @@ class AutotunePrep @Inject constructor( crInitialIOB = iob.iob crInitialBG = glucoseDatum.value crInitialCarbTime = glucoseDatum.date + //aapsLogger.debug(LTag.AUTOTUNE, "CRInitialIOB: $crInitialIOB CRInitialBG: $crInitialBG CRInitialCarbTime: ${dateUtil.toISOString(crInitialCarbTime)}") if (verbose) - log("CRInitialIOB: " + crInitialIOB + " CRInitialBG: " + crInitialBG + " CRInitialCarbTime: " + dateUtil.toISOString(crInitialCarbTime)) + log("CRInitialIOB: $crInitialIOB CRInitialBG: $crInitialBG CRInitialCarbTime: ${dateUtil.toISOString(crInitialCarbTime)}") } // keep calculatingCR as long as we have COB or enough IOB if (mealCOB > 0 && i > 1) { @@ -333,8 +341,9 @@ class AutotunePrep @Inject constructor( val crEndIOB = iob.iob val crEndBG = glucoseDatum.value val crEndTime = glucoseDatum.date + //aapsLogger.debug(LTag.AUTOTUNE, "CREndIOB: $crEndIOB CREndBG: $crEndBG CREndTime: ${dateUtil.toISOString(crEndTime)}") if (verbose) - log("CREndIOB: " + crEndIOB + " CREndBG: " + crEndBG + " CREndTime: " + dateUtil.toISOString(crEndTime)) + log("CREndIOB: $crEndIOB CREndBG: $crEndBG CREndTime: ${dateUtil.toISOString(crEndTime)}") val crDatum = CRDatum(dateUtil) crDatum.crInitialBG = crInitialBG crDatum.crInitialIOB = crInitialIOB @@ -349,6 +358,7 @@ class AutotunePrep @Inject constructor( //log.debug(CREndTime - CRInitialCarbTime, CRElapsedMinutes); if (CRElapsedMinutes < 60 || i == 1 && mealCOB > 0) { + //aapsLogger.debug(LTag.AUTOTUNE, "Ignoring $CRElapsedMinutes m CR period.") if (verbose) log("Ignoring $CRElapsedMinutes m CR period.") } else { @@ -378,8 +388,9 @@ class AutotunePrep @Inject constructor( //log.debug(type); if (type != "csf") { glucoseDatum.mealAbsorption = "start" + //aapsLogger.debug(LTag.AUTOTUNE, "${glucoseDatum.mealAbsorption} carb absorption") if (verbose) - log(glucoseDatum.mealAbsorption + " carb absorption") + log("${glucoseDatum.mealAbsorption} carb absorption") } type = "csf" glucoseDatum.mealCarbs = mealCarbs.toInt() @@ -389,8 +400,9 @@ class AutotunePrep @Inject constructor( // check previous "type" value, and if it was csf, set a mealAbsorption end flag if (type == "csf") { csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption = "end" + //aapsLogger.debug(LTag.AUTOTUNE, "${csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption} carb absorption") if (verbose) - log(csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption + " carb absorption") + log("${csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption} carb absorption") } if (iob.iob > 2 * currentBasal || deviation > 6 || uam) { uam = if (deviation > 0) { @@ -400,6 +412,7 @@ class AutotunePrep @Inject constructor( } if (type != "uam") { glucoseDatum.uamAbsorption = "start" + //aapsLogger.debug(LTag.AUTOTUNE, "${glucoseDatum.uamAbsorption} unannnounced meal absorption") if (verbose) log(glucoseDatum.uamAbsorption + " unannnounced meal absorption") } @@ -407,6 +420,7 @@ class AutotunePrep @Inject constructor( uamGlucoseData.add(glucoseDatum) } else { if (type == "uam") { + //aapsLogger.debug(LTag.AUTOTUNE, "end unannounced meal absorption") if (verbose) log("end unannounced meal absorption") } @@ -433,8 +447,10 @@ class AutotunePrep @Inject constructor( } } // debug line to print out all the things + //aapsLogger.debug(LTag.AUTOTUNE, "${(if (absorbing) 1 else 0)} mealCOB: ${Round.roundTo(mealCOB, 0.1)} mealCarbs: ${Math.round(mealCarbs)} basalBGI: ${Round.roundTo(basalBGI, 0.1)} BGI: ${Round.roundTo(BGI, 0.1)} IOB: ${iob.iob} Activity: ${iob.activity} at ${dateUtil.timeStringWithSeconds(BGTime)} dev: $deviation avgDelta: $avgDelta $type") if (verbose) - log((if (absorbing) 1 else 0).toString() + " mealCOB: " + Round.roundTo(mealCOB, 0.1) + " mealCarbs: " + Math.round(mealCarbs) + " basalBGI: " + Round.roundTo(basalBGI, 0.1) + " BGI: " + Round.roundTo(BGI, 0.1) + " IOB: " + iob.iob+ " Activity: " + iob.activity + " at " + dateUtil.timeStringWithSeconds(BGTime) + " dev: " + deviation + " avgDelta: " + avgDelta + " " + type) + log("${(if (absorbing) 1 else 0)} mealCOB: ${Round.roundTo(mealCOB, 0.1)} mealCarbs: ${Math.round(mealCarbs)} basalBGI: ${Round.roundTo(basalBGI, 0.1)} BGI: ${Round + .roundTo(BGI, 0.1)} IOB: ${iob.iob} Activity: ${iob.activity} at ${dateUtil.timeStringWithSeconds(BGTime)} dev: $deviation avgDelta: $avgDelta $type") } //**************************************************************************************************************************************** @@ -449,16 +465,20 @@ class AutotunePrep @Inject constructor( val UAMLength = uamGlucoseData.size var basalLength = basalGlucoseData.size if (sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)) { + //aapsLogger.debug(LTag.AUTOTUNE, "Categorizing all UAM data as basal.") if (verbose) log("Categorizing all UAM data as basal.") basalGlucoseData.addAll(uamGlucoseData) } else if (CSFLength > 12) { + //aapsLogger.debug(LTag.AUTOTUNE, "Found at least 1h of carb: assuming meals were announced, and categorizing UAM data as basal.") if (verbose) log("Found at least 1h of carb: assuming meals were announced, and categorizing UAM data as basal.") basalGlucoseData.addAll(uamGlucoseData) } else { if (2 * basalLength < UAMLength) { //log.debug(basalGlucoseData, UAMGlucoseData); + //aapsLogger.debug(LTag.AUTOTUNE, "Warning: too many deviations categorized as UnAnnounced Meals") + //aapsLogger.debug(LTag.AUTOTUNE, "Adding $UAMLength UAM deviations to $basalLength basal ones") if (verbose) { log("Warning: too many deviations categorized as UnAnnounced Meals") log("Adding $UAMLength UAM deviations to $basalLength basal ones") @@ -473,10 +493,12 @@ class AutotunePrep @Inject constructor( } //log.debug(newBasalGlucose); basalGlucoseData = newBasalGlucose + //aapsLogger.debug(LTag.AUTOTUNE, "and selecting the lowest 50%, leaving ${basalGlucoseData.size} basal+UAM ones") if (verbose) - log("and selecting the lowest 50%, leaving " + basalGlucoseData.size + " basal+UAM ones") + log("and selecting the lowest 50%, leaving ${basalGlucoseData.size} basal+UAM ones") } if (2 * ISFLength < UAMLength) { + //aapsLogger.debug(LTag.AUTOTUNE, "Adding $UAMLength UAM deviations to $ISFLength ISF ones") if (verbose) log("Adding $UAMLength UAM deviations to $ISFLength ISF ones") isfGlucoseData.addAll(uamGlucoseData) @@ -488,14 +510,17 @@ class AutotunePrep @Inject constructor( } //console.error(newISFGlucose); isfGlucoseData = newISFGlucose + //aapsLogger.debug(LTag.AUTOTUNE, "and selecting the lowest 50%, leaving ${isfGlucoseData.size} ISF+UAM ones") if (verbose) - log("and selecting the lowest 50%, leaving " + isfGlucoseData.size + " ISF+UAM ones") + log("and selecting the lowest 50%, leaving ${isfGlucoseData.size} ISF+UAM ones") //log.error(ISFGlucoseData.length, UAMLength); } } basalLength = basalGlucoseData.size ISFLength = isfGlucoseData.size if (4 * basalLength + ISFLength < CSFLength && ISFLength < 10) { + //aapsLogger.debug(LTag.AUTOTUNE, "Warning: too many deviations categorized as meals") + //aapsLogger.debug(LTag.AUTOTUNE, "Adding $CSFLength CSF deviations to $ISFLength ISF ones") if (verbose) { log("Warning: too many deviations categorized as meals") //log.debug("Adding",CSFLength,"CSF deviations to",basalLength,"basal ones"); @@ -507,8 +532,9 @@ class AutotunePrep @Inject constructor( } // categorize.js Lines 437-444 + //aapsLogger.debug(LTag.AUTOTUNE, "CRData: ${crData.size} CSFGlucoseData: ${csfGlucoseData.size} ISFGlucoseData: ${isfGlucoseData.size} BasalGlucoseData: ${basalGlucoseData.size}") if (verbose) - log("CRData: " + crData.size + " CSFGlucoseData: " + csfGlucoseData.size + " ISFGlucoseData: " + isfGlucoseData.size + " BasalGlucoseData: " + basalGlucoseData.size) + log("CRData: ${crData.size} CSFGlucoseData: ${csfGlucoseData.size} ISFGlucoseData: ${isfGlucoseData.size} BasalGlucoseData: ${basalGlucoseData.size}") return PreppedGlucose(autotuneIob.startBG, crData, csfGlucoseData, isfGlucoseData, basalGlucoseData, dateUtil) } @@ -516,6 +542,7 @@ class AutotunePrep @Inject constructor( //dosed.js full private fun dosed(start: Long, end: Long, treatments: List): Double { var insulinDosed = 0.0 + //aapsLogger.debug(LTag.AUTOTUNE, "No treatments to process.") if (treatments.size == 0) { log("No treatments to process.") return 0.0 diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt index f7fb47cecb..ea797d8566 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePrepTest.kt @@ -13,6 +13,7 @@ import info.nightscout.androidaps.database.data.TargetBlock import info.nightscout.androidaps.database.entities.Bolus import info.nightscout.androidaps.database.entities.Carbs import info.nightscout.androidaps.database.entities.GlucoseValue +import info.nightscout.androidaps.extensions.shiftBlock import info.nightscout.androidaps.interfaces.* import info.nightscout.androidaps.plugins.general.autotune.data.* import info.nightscout.androidaps.utils.DateUtil @@ -39,6 +40,7 @@ class AutotunePrepTest : TestBaseWithProfile() { @Mock lateinit var repository: AppRepository private lateinit var autotunePrep: AutotunePrep private lateinit var autotuneIob: TestAutotuneIob + private var ts = 0 private var min5mCarbImpact = 0.0 private var autotuneMin = 0.0 private var autotuneMax = 0.0 @@ -46,7 +48,7 @@ class AutotunePrepTest : TestBaseWithProfile() { @Before fun initData() { - TimeZone.setDefault(TimeZone.getTimeZone("GMT+2")) + ts = T.msecs(TimeZone.getDefault().getOffset(System.currentTimeMillis()).toLong()).hours().toInt() - 2 } @Test @@ -54,7 +56,7 @@ class AutotunePrepTest : TestBaseWithProfile() { val inputIobJson = File("src/test/res/autotune/test1/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS val iobOapsCalculation = buildIobOaps(JSONArray(inputIobJson)) autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalculation) - autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) + autotunePrep = AutotunePrep(aapsLogger, sp, dateUtil, autotuneFS, autotuneIob) val inputProfileJson = File("src/test/res/autotune/test1/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! val prepJson = File("src/test/res/autotune/test1/autotune.2022-05-21.json").readText() @@ -93,7 +95,7 @@ class AutotunePrepTest : TestBaseWithProfile() { val inputIobJson = File("src/test/res/autotune/test2/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS val iobOapsCalculation = buildIobOaps(JSONArray(inputIobJson)) autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalculation) - autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) + autotunePrep = AutotunePrep(aapsLogger, sp, dateUtil, autotuneFS, autotuneIob) val inputProfileJson = File("src/test/res/autotune/test2/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! val prepJson = File("src/test/res/autotune/test2/autotune.2022-05-21.json").readText() @@ -132,7 +134,7 @@ class AutotunePrepTest : TestBaseWithProfile() { val inputIobJson = File("src/test/res/autotune/test3/oaps-iobCalc.2022-05-21.json").readText() //json files build with iob/activity calculated by OAPS val iobOapsCalculation = buildIobOaps(JSONArray(inputIobJson)) autotuneIob = TestAutotuneIob(aapsLogger, repository, profileFunction, sp, dateUtil, activePlugin, autotuneFS, iobOapsCalculation) - autotunePrep = AutotunePrep(sp, dateUtil, autotuneFS, autotuneIob) + autotunePrep = AutotunePrep(aapsLogger, sp, dateUtil, autotuneFS, autotuneIob) val inputProfileJson = File("src/test/res/autotune/test3/profile.pump.json").readText() val inputProfile = atProfileFromOapsJson(JSONObject(inputProfileJson), dateUtil)!! val prepJson = File("src/test/res/autotune/test3/autotune.2022-05-21.json").readText() @@ -199,7 +201,7 @@ class AutotunePrepTest : TestBaseWithProfile() { val pure = PureProfile( jsonObject = jsonObject, - basalBlocks = basalBlocks, + basalBlocks = basalBlocks.shiftBlock(1.0,ts), isfBlocks = isfBlocks, icBlocks = icBlocks, targetBlocks = targetBlocks, @@ -239,7 +241,6 @@ class AutotunePrepTest : TestBaseWithProfile() { private fun buildBoluses(preppedGlucose: PreppedGlucose): ArrayList { //if categorization is correct then I return for dose function the crInsulin calculated in Oaps val boluses: ArrayList = ArrayList() -// try { for (i in preppedGlucose.crData.indices) { boluses.add( Bolus( @@ -249,7 +250,6 @@ class AutotunePrepTest : TestBaseWithProfile() { ) ) } -// } catch (e: Exception) { } if (boluses.size == 0) //Add at least one insulin treatment for tests to avoid return null in categorization boluses.add( Bolus( @@ -263,7 +263,6 @@ class AutotunePrepTest : TestBaseWithProfile() { private fun buildMeals(jsonArray: JSONArray): ArrayList { val list: ArrayList = ArrayList() -// try { for (index in 0 until jsonArray.length()) { val json = jsonArray.getJSONObject(index) val value = JsonHelper.safeGetDouble(json, "carbs", 0.0) @@ -272,20 +271,17 @@ class AutotunePrepTest : TestBaseWithProfile() { list.add(Carbs(timestamp = timestamp, amount = value, duration = 0)) } } -// } catch (e: Exception) { } return list } private fun buildGlucose(jsonArray: JSONArray): List { val list: ArrayList = ArrayList() -// try { for (index in 0 until jsonArray.length()) { val json = jsonArray.getJSONObject(index) val value = JsonHelper.safeGetDouble(json, "sgv") val timestamp = JsonHelper.safeGetLong(json, "date") list.add(GlucoseValue(raw = value, noise = 0.0, value = value, timestamp = timestamp, sourceSensor = GlucoseValue.SourceSensor.UNKNOWN, trendArrow = GlucoseValue.TrendArrow.FLAT)) } -// } catch (e: Exception) { } if (list.size > 0) startDayTime = list[list.size - 1].timestamp return list From 689a750a3ffe2c36fdb364ca68f874540c9a4c1d Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 30 Jun 2022 14:44:33 +0200 Subject: [PATCH 71/71] New Crowdin updates (#1854) * New translations strings.xml (Hebrew) * New translations strings.xml (Turkish) * New translations strings.xml (Dutch) * New translations strings.xml (Italian) * New translations strings.xml (Turkish) * New translations strings.xml (Slovak) * New translations strings.xml (Russian) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Italian) * New translations strings.xml (French) * New translations strings.xml (Hebrew) * New translations strings.xml (Czech) * New translations strings.xml (Spanish) * Update source file strings.xml * New translations strings.xml (Czech) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Turkish) * New translations objectives.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) * New translations strings.xml (Norwegian) --- app/src/main/res/values-it-rIT/strings.xml | 1 + app/src/main/res/values-iw-rIL/strings.xml | 1 + app/src/main/res/values-nl-rNL/strings.xml | 1 + app/src/main/res/values-no-rNO/strings.xml | 251 +++++++++--------- app/src/main/res/values-sk-rSK/strings.xml | 1 + app/src/main/res/values-tr-rTR/objectives.xml | 2 +- app/src/main/res/values-tr-rTR/strings.xml | 3 +- core/src/main/res/values-es-rES/strings.xml | 2 + .../src/main/res/values-no-rNO/strings.xml | 64 ++--- .../src/main/res/values-no-rNO/strings.xml | 12 +- wear/src/main/res/values-cs-rCZ/strings.xml | 4 +- wear/src/main/res/values-es-rES/strings.xml | 4 +- wear/src/main/res/values-fr-rFR/strings.xml | 2 +- wear/src/main/res/values-it-rIT/strings.xml | 2 +- wear/src/main/res/values-iw-rIL/strings.xml | 2 +- wear/src/main/res/values-nl-rNL/strings.xml | 4 +- wear/src/main/res/values-no-rNO/strings.xml | 30 ++- wear/src/main/res/values-ru-rRU/strings.xml | 2 +- wear/src/main/res/values-sk-rSK/strings.xml | 4 +- wear/src/main/res/values-tr-rTR/strings.xml | 4 +- 20 files changed, 209 insertions(+), 187 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 4bcbd2d112..3ef0aad794 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -970,6 +970,7 @@ Max-BG fuori range! Temptarget:\nMin: %1$s\nMax: %2$s\nDurata: %3$s Temptarget:\nTarget: %1$s\nDurata: %2$s + Temptarget:\nMotivo: %1$s\nTarget: %2$s\nDurata: %3$s QuickWizard: %1$s\nInsulina: %2$.2fU\nCHO: %3$dg Calc. Wizard:\nInsulina: %1$.2fU\nCHO: %2$dg Mostra voce sul dispositivo: diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 498f502fc0..0be19f2f23 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -966,6 +966,7 @@ ערך הסוכר המקסימלי מחוץ לטווח! ע\' מטרה זמני:\nמינ\': %1$s\nמקס\': %2$s\nמשך: %3$s ע\' מטרה זמני:\nמטרה: %1$s\n משך: %2$s + ע\' מטרה זמני:\nסיבה: %1$s\nמטרה: %2$s\nמשך: %3$s אשף מהיר: %1$s\n אינס\': %2$.2f יח\'\nפחמ\': %3$d גר\' מחשבון: %1$s\n אינס\': %2$.2f יח\'\nפחמ\': %3$d גר\' הצג רשומה על המכשיר: diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 059181d347..b1beae35b7 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -970,6 +970,7 @@ Max BG buiten bereik! Tijdelijk streefdoel:\nMin: %1$s\nMax: %2$s\nDuur: %3$s Tijdelijk streefdoel:\nDoel: %1$s\nDuur: %2$s + Tijdelijk streefdoel:\nReden: %1$s\nDoel: %2$s\nDuur: %3$s QuickWizard: %1$s\nInsuline: %2$.2fE\nKoolhy.: %3$dg Reken. Wizard:\nInsuline: %1$.2fE\nKoolhy.: %2$dg Toon invoer op apparaat: diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index c81f69586e..5967430250 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -6,8 +6,8 @@ Sikkerhet ved behandlinger Maks tillat bolus [U] Maks tillat karbo [g] - BS er under terskelverdi slik at all insulintilførsel stoppes - %1$s innstillinger + Insulintilførsel stoppes når BS er under denne terskelverdien + %1$s Innstillinger Innstillinger Oppdater behandlinger fra NS Nullstill databasene @@ -15,12 +15,12 @@ Avslutt Det ser ikke ut som mobilen støtter registrering av apper som unntas fra batterioptimalisering - du kan oppleve ytelsesproblemer. Knapper for rask tilgang til ofte brukte funksjoner - Brukt for innstilling av aktive plugin + Brukes for innstilling av aktive plugins Opplæringsprogram - Viser forhåndsinnstillinger for mat som er definert i Nightscout - Innstillinger for Humalog og NovoRapid / NovoLog insulin + Viser forhåndsinnstillinger for mat fra Nightscout + Innstillinger for Humalog og NovoRapid / NovoLog Innstillinger for Fiasp - Insulin innstillinger for Lyumjev + Innstillinger for Lyumjev Lar deg stille inn tidspunktet for toppen av insulinvirkningen. Bør bare benyttes av erfarne brukere Aktiver eller deaktiver hendelsen som trigger loop. Synkroniserer dine data med Nightscout @@ -32,17 +32,17 @@ Definer en profil som er tilgjengelig offline. Integrasjon mot pumper som ikke støttes av AndroidAPS (åpen loop) Sensitiviteten beregnes på samme måte som i Oref0, men du kan angi hvor mye av historikken som skal tas med i beregningen. Minimum opptak av karbohydrater beregnes ut fra maks karbohydratopptak angitt i dine innstillinger. - Sensitivitet beregnes fra 8t og 24t historiske dat (velger alltid det resultatet som gir høyest insulinsensitivitet. Karbohydrater som ikke er absorbert blir avsluttet etter tiden som er angitt i innstillinger. Plugin beregner også UAM. + Sensitivitet beregnes fra 8t og 24t historiske data (velger alltid det resultatet som gir høyest insulinsensitivitet). Karbohydrater (som ikke er absorbert) blir avsluttet etter tiden som er angitt i innstillinger. Plugin beregner også UAM. Sensitivitet beregnes som en vektet gjennomsnittsverdi av avvikene. Ferske avvik har høyere vekting. Minimum opptak av karbohydrater beregnes ut fra maks opptakstid for karbohydrater angitt i dine innstillinger. Denne algoritmen er den raskeste for å justere endringer i sensitivitet. - Motta BS verdier fra den modifiserte Eversense appen. - Motta BS verdier fra Glimp. - Motta BS verdier fra 600SeriesAndroidUploader. - Last ned BS verdier fra Nightscout - Motta BS verdier fra xDrip+. + Motta BS-verdier fra den modifiserte Eversense-appen. + Motta BS-verdier fra Glimp. + Motta BS-verdier fra 600SeriesAndroidUploader. + Last ned BS-verdier fra Nightscout + Motta BS-verdier fra xDrip+. Lagre data om alle behandlinger som er utført - Monitorer og kontroller AndroidAPS med din WearOS klokke. + Overvåke og styre AndroidAPS med din WearOS-klokke. Vis informasjon om loop på din xDrip+ urskive. - Fjernstyr AndroidAPS med SMS kommandoer. + Fjernstyre AndroidAPS med SMS-kommandoer. Insulin: Karbo: IOB: @@ -70,7 +70,7 @@ Måltidsdata Resultat Resultat: %1$s %2$s - Ingen BS data tilgjengelig + Ingen BS-data tilgjengelig Forespørsel Delta Delta: @@ -83,7 +83,7 @@ Profil Hvilken profil bør AndroidAPS bruke? APS - Hvilken APS algoritme skal brukes for administrasjon av behandlinger? + Hvilken algoritme skal APS benytte for behandlinger? Generelt Det er noen generelle plugins som kan være nyttige. Hvilke begrensninger brukes? @@ -92,12 +92,12 @@ Bruk dette for å aktivere AndroidAPS loop integrasjon. APS Etter behandling av begrensninger - Temp Basal satt av pumpen + Temp basal satt av pumpen INGEN APS ER VALGT ELLER HAR LEVERT RESULTAT Sikkerhet Plugin er deaktivert Brudd på begrensninger - Er registrert en feil med bolus leveransen. Sjekk manuelt om den er levert og hvor mye! + Det er registrert en feil med bolus-leveransen. Sjekk manuelt om den er levert og hvor mye Aksepter ny temp basal: Behandling Kalkulator @@ -105,24 +105,24 @@ Bolus: Basal: Endre dine inndata! - BS kilde + BS-kilde Hvor skal AndroidAPS hente sine data fra? xDrip+ APS modus - Lukket loop - Åpen loop - Stopp hvis lavt BS + Lukket Loop + Åpen Loop + Stopp ved lavt BS Loop er deaktivert Ny anbefaling tilgjengelig Karbo forslag Versjonen av Nightscout støttes ikke Basal IOB - Bolus begrensning utført - Karbohydrat begrensning utført + Bolus-begrensning utført + Karbohydrat-begrensning utført Annet Meter Sensor - Karbo tid + Karbo-tid Varighet Profil Glukosetype @@ -130,7 +130,7 @@ Forlenget bolus Nightscout versjon: Mangler %1$d g - Innstillinger lagret + Innstillinger er eksportert Brukeroppføringer er eksportert Eksporter innstillinger til Importer innstillinger fra @@ -163,27 +163,27 @@ JEG FORSTÅR OG GODTAR Lagre Les inn profil på nytt - SMS tjeneste + SMS-tjeneste Godkjente mobilnumre +XXXXXXXXXX;+YYYYYYYYYY For å levere bolus på %1$.2fE, svar med kode %2$s For å levere måltidsbolus på %1$.2fE, svar med kode %2$s For å sette Temp Target på %1$s, svar med kode %2$s For å avbryte Temp Target, svar med kode %1$s - For å deaktivere fjernstyring via SMS meldinger, svar med kode %1$s.\n\nHusk at du vil kunne reaktivere den igjen kun fra AAPS master telefon. - Fjernstyring via SMS meldinger er stanset. For å reaktivere, bruk AAPS på master telefonen. + For å deaktivere fjernstyring via SMS-meldinger, svar med kode %1$s.\n\nHusk at du vil kunne reaktivere den igjen kun fra AAPS hovedtelefon. + Fjernstyring via SMS-meldinger er stanset. For å reaktivere, bruk AAPS på hovedtelefonen. For å sende kalibrering %1$.2f, svar med kode %2$s Bolus mislyktes Minimum antall minutter som må forløpe mellom en fjernstyrt bolus og den neste Minimum antall minutter mellom en fjernstyrt bolus og neste - For din egen sikkerhet, for å endre denne innstillingen må du legge til minst 2 telefonnumre. + For din egen sikkerhet, må du legge til minst 2 telefonnumre for å endre denne innstillingen. Skal levere %1$.2f E - Bolus %1$.2f E levert vellykket - Måltidsbolus %1$.2f E levert vellykket - Temp target på %1$s er satt for %2$d minutter - Temp target på %1$s for %2$d minutter ble vellykket definert - Temp Target ble vellykket avbrutt - Tillat fjernstyring via SMS meldinger + Bolus på %1$.2f E er levert + Måltidsbolus på %1$.2f E er levert + Temp target på %1$s er satt i %2$d minutter + Temp target på %1$s i %2$d minutter ble lagret + Temp Target ble fjernet + Tillat fjernstyring via SMS-meldinger Loop har blitt deaktivert Loop har blitt aktivert Loop er aktivert @@ -193,7 +193,7 @@ Pumpe frakoblet Pumpen tilkoblet igjen Fjernstyringskommando er ikke tillatt - Fjernstyrings bolus er ikke tilgjengelig. Prøv igjen senere. + Fjernstyringsbolus er ikke tilgjengelig. Prøv igjen senere. For å starte basal %1$.2f E/t i %2$d minutter, svar med kode %3$s For å bytte profil til %1$s %2$d%%, svar med kode %3$s For å starte forlenget bolus %1$.2f E i %2$d minutter, svar med kode %3$s @@ -227,9 +227,9 @@ Måltid Korreksjon Handlinger - (FARLIG Å DEAKTIVERE) Kun NS opplast + (FARLIG Å DEAKTIVERE) Kun NS opplasting Kun NS opplasting (deaktivert sync). Ikke effektiv på SGV med mindre en lokal kilde som xDrip+ er valgt. Ikke effektiv på Profiler mens NS-Profiler brukes.\n!!! ADVARSEL !!! Deaktivering av dette alternativet kan føre til funksjonsfeil og overdosering av insulin hvis noen av dine komponenter (AAPS, NS, xDrip+) er feil konfigurert. Observer at data som vises i AAPS samsvarer med pumpestatus! - Pumpen ikke initialisert! + Pumpen er ikke startet! Prime/fylling Kontroller at mengden samsvarer med spesifikasjonen for slangesettet ditt! Standardverdier for påfyll/prime @@ -246,8 +246,8 @@ Klokke Send alle data på nytt Åpne Innstillinger på klokken - Basal rate - Basal verdi under minimum. Profilen settes ikke! + Basalrate + Basalverdi under minimum. Profilen settes ikke! BS: Siste BS: MM640G @@ -257,11 +257,11 @@ Profil OpenAPS AMA Liste med %1$d elementer.\nFaktisk verdi: - Autosens data + Autosens-data Script feilsøking Bruk Autosens funksjon Gjenoppfrisk fra NS - Slett behandlinger i fremtiden + Slett fremtidige behandlinger ACT KONF LOOP @@ -282,12 +282,12 @@ Standardverdi: 4 Dette er en viktig OpenAPS sikkerhetsbegrensning. Dette begrenser dine temp basal til max 4 ganger din nåværende basal dose, uansett hva som er maks basal i pumpen. Dette er for å unngå at man setter farlige høye maks basal doser uten at man har forstått algoritmene. Når du taket i denne begrensningen bør du i stedet fokusere på å endre andre innstillinger. Standardverdi: 1.2\nDetta er en multiplikatorbegrensning for autosens (og snart autotune) som begrenser at autosens ikke kan øke med mer enn 20%%, som dermed begrenser hvor mye autosens kan justere opp dine basaler, hvor mye ISK kan reduseres og hvor lavt BS målverdi kan settes. Standardverdi: 0.7\nDette er en multiplikatorbegrensning for autosens sikkerhet. Den begrenser autosens til å redusere basalverdier, og øke isulinssensitivitet (ISF) og BS mål med ikke mer enn enn 30%. - Autosens justerer også BS målverdier - Standard verdi: sann\nGir autosens tillatelse til å justere BS mål, i tillegg til ISF og basaler. - Standard verdi: 2\nBolus snooze er aktivt etter at du har gitt en måltidsbolus slik at loop ikke skal forsøke å sette lav-temp når du nettopp har spist. I dette eksempelet brukesg standardverdi på 2, så med en 3 timers DIA vil bolus snooze begrensning gradvis forsvinne etter 1.5 timer (3DIA / 2). Bolus snooze brukes ikke hvis SMB er aktivert. - Standardverdi er: 3.0 (AMA) eller 8.0 (SMB). Dette er grunninnstillingen for KH opptak per 5 minutt. Den påvirker hvor raskt COB skal reduseres, og benyttes i beregning av fremtidig BS kurve når BS enten synker eller øker mer enn forventet. Standardverdi er 3mg/dl/5 min. + Autosens justerer også BS-målverdier + Standard verdi: sann\nGir autosens tillatelse til å justere BS-mål, i tillegg til ISF og basaler. + Standard verdi: 2\nBolus-snooze er aktivt etter at du har gitt en måltidsbolus slik at loop ikke skal forsøke å sette lav-temp når du nettopp har spist. I dette eksempelet brukes standardverdi på 2, så med en 3 timers DIA vil bolus-snoozebegrensning gradvis forsvinne etter 1.5 timer (3DIA / 2). Bolus-snooze brukes ikke hvis SMB er aktivert. + Standardverdi er: 3.0 (AMA) eller 8.0 (SMB). Dette er grunninnstillingen for KH-opptak per 5 minutt. Den påvirker hvor raskt COB skal reduseres, og benyttes i beregning av fremtidig BS-kurve når BS enten synker eller øker mer enn forventet. Standardverdi er 3mg/dl/5 min. Advarsel!\nNormalt vil du ikke trenge å endre verdiene under. Vennligst TRYKK HER og LES teksten for å være sikker på at du FORSTÅR konsekvensene før du gjør endringer. - Ugyldig SMS mobilnummer + Ugyldig mobilnummer for SMS Kalibrering xDrip+ ikke installert Kalibrering er sendt til xDrip+ @@ -295,7 +295,7 @@ xDrip+ tar ikke imot kalibreringer Pumpen er pauset Utfører - Virtuelle pumpe innstillinger + Innstillinger for virtuell pumpe Last opp status til Nightscout NSClient NSCI @@ -305,40 +305,40 @@ NSClient Nightscout URL Oppgi din Nightscout URL - Nightscout API secret - Nightscout API secret - Oppgi NS API secret (min 12 tegn) + Nightscout API-nøkkel + Nightscout API-nøkkel + Oppgi NS API-nøkkel (min 12 tegn) Lever nå Tøm kø Vis kø Kø: Status: Tøm logg - NSCLIENT har ingen skriverettighet. Feil API secret? - Klokke innstillinger + NSCLIENT har ingen skriverettighet. Feil API-nøkkel? + Klokkeinnstillinger Vis detaljert IOB - Vis IOB med bolus och basal IOB på klokke - mislykket - sjekk telefonen + Splitt IOB til bolus- og basal-IOB på klokken + feilet - sjekk telefonen n/a - Pasient type + Pasienttype Barn Tenåring Voksen - Insulin resistent voksen + Insulinresistent voksen Graviditet - Velg pasientens type for oppsett av sikkerhetsgrenser - Pasientens navn + Velg pasienttype for oppsett av sikkerhetsgrenser + Pasientnavn Angi pasientnavn eller kallenavn for å kunne skille mellom flere oppsett Bruker Glimp - %1$s behøver å omgå batterispare funksjonene for å fungere tilfredsstillende + %1$s behøver å omgå batterisparefunksjonene for å fungere tilfredsstillende Loop pauset Pauset (%1$d m) Pause loop i 1t Pause loop i 2t Pause loop i 3t Pause loop i 10t - Frakoble pumpe + Koble fra pumpen Koble fra pumpen i 15 min Koble fra pumpen i 30 min Koble fra pumpen i 1t @@ -351,36 +351,36 @@ 3 timer 10 timer Gjenoppta - Tilkoble pumpen + Koble til pumpen Feil varighet Loop er pauset Loop gjenopptatt 15 min trend COB Superbolus - Logg app start til NS - Avslutter appen for at innstillinger skal tas i bruk. + Logg app-start til NS + Avslutter appen for å aktivere innstillinger. Hvilken type insulin bruker du? Novorapid, Novolog, Humalog Fiasp INS Aktiver superbolus i veiviser - Aktiver superbolus funksjonen i wizard. Ikke aktiver denne før du vet hvordan den fungerer. DEN KAN LEDE TIL EN OVERDOSERING AV INSULIN HVIS DEN BRUKES BLINDT! - Vis statusindikatorer på hjem skjermen - OBS: alder slangesett [h] - Advarsel: alder slangesett [h] - OBS: alder insulin [h] - Advarsel: alder insulin [h] - OBS: alder CGM [h] - Advarsel: alder CGM [h] - Nivå for når batterivarsel skal gis [%] - Nivå for når kritisk batteriadvarsel skal gis [%] - Nivå for når batterivarsel for pumpe skal gis [h] - Nivå for når kritisk batteriadvarsel for pumpe skal gis [h] - OBS: nivå insulinreservoar [U] - Advarsel: nivå insulinreservoar [U] - Nivå for når batterivarsel for pumpe skal gis [%] - Nivå for når kritisk batteriadvarsel for pumpe skal gis [%] + Aktiver superbolus-funksjonen i veiviseren. Ikke aktiver denne før du vet hvordan den fungerer. DEN KAN LEDE TIL EN OVERDOSERING AV INSULIN HVIS DEN BRUKES BLINDT! + Vis statusindikatorer på hjem-skjermen + Terskel for advarsel, alder på slangesett [h] + Terskel for kritisk alder på slangesett [h] + Terskel for advarsel, alder på insulin [h] + Terskel for kritisk alder på insulin [h] + Terskel for advarsel, alder på CGM [h] + Terskel for kritisk alder på CGM [h] + Terskel for advarsel, batterinivå for sensor [%] + Terskel for kritisk batterinivå for sensor [%] + Terskel for advarsel, batterialder for pumpe [h] + Terskel for kritisk batterialder for pumpe [h] + Terskel for advarsel, insulinreservoar [U] + Terskel for kritisk insulinreservoar [U] + Terskel for advarsel, batterinivå for pumpe [%] + Terskel for kritisk batterinivå for pumpe [%] PROGN BAS DEV @@ -389,8 +389,8 @@ ABS DEVSLOPE Om - Mangler SMS tillatelse - Mangler app tillatelse til telefon + Mangler SMS-tillatelse + Appen mangler tilgang til telefonstatus xDrip+ Status (klokke) xDrip+ Statuslinje (klokke) xds @@ -400,45 +400,47 @@ Gjør profilbytte Sensor Insulin - Pumpe batteri + Pumpebatteri alder: nivå: - Alarm valg - Opprett varsler fra NS alarmer - Opprett varsler fra NS meldinger - Ingen data advarsel [min] - Kritisk mangel på data advarsel [min] + Alarmvalg + Opprett varsler fra NS-alarmer + Opprett varsler fra NS-meldinger + Advarsel ved manglende data [min] + Advarsel ved kritisk mangel på data [min] Intervall for autosens [h] Antall timer med historiske data for beregning av sensitivitet (absorpsjonstid for KH er ekskludert) OpenAPS Opplaster - Sensitivitets deteksjon + Sensitivitetsdeteksjon Hvilken sensitivitetsalgoritme skal benyttes? SENS Sensitivitet Oref1 Sensitivitet AAPS - Absorpsjon innstillinger + Absorpsjonsinnstillinger Maks absorpsjonstid for måltid [h] Tid i timer hvor det forventes at alle karbohydrater fra måltid vil være absorbert OAPS UPLD BAS Hold skjermen påslått - Forhindre Android å slå av skjermen. Mobil vil bruke mye batteri hvis den ikke plugges til strømledning. - Hvis du slår på Autosense funksjonen må du huske å angi alle spiste karbohydrater. Ellers vil KH avvik gi feil i sensitivitetsberegningen !! + Forhindre Android fra å slå av skjermen. Mobilen vil bruke mye batteri hvis den ikke plugges til strømledning. + Hvis du slår på Autosense-funksjonen må du huske å angi alle spiste karbohydrater. Ellers vil KH-avvik gi feil i sensitivitetsberegningen !! Sensitivitet vektet middelverdi Ikke alle profiler ble lastet! Verdier ikke lagret! - Aktiver kringkasting til andre apper (som xDrip+). Ikke aktiver dette hvis du har mer enn en AAPS eller NSClient installert! - Aktiver lokale sendinger. + Aktiver kringkasting til andre apper (som xDrip+). Ikke aktiver dette hvis du har mer enn én AAPS eller NSClient installert! + Aktiver deling av data mellom apper på telefonen. OpenAPS SMB Dynamisk ISF + DynamiskISF justeringsfaktor % + Justeringsfaktor for dynamisk ISF. Verdier over 100% vil gi mer aggressive korreksjonsdoser, mens verdier under 100% vil gi mildere korreksjonsdoser. Aktiver UAM Aktiver SMB - Bruk Super Mikro Solen i stedet for temp basal for raskere resultat - Oppdaget uannonsert måltid (UAM) - IOB kurvens topp tid - Topp tid [min] + Bruk Super Mikro Bolus i stedet for temp basal for raskere resultat + Oppdag uannonsert måltid (UAM) + IOB-kurvens topptid + Topptid [min] Topp Free-Peak Oref Rapid-Acting Oref @@ -450,10 +452,10 @@ Prosent Tidsforskyving Standard temp mål - spise snart varighet - spise snart målverdi - aktivitet varighet - aktivitet målverdi + spise snart-varighet + spise snart-målverdi + varighet for aktivitet + målverdi ved aktivitet hypo varighet hypo målverdi Gjenbruk %1$d%% %2$dt @@ -467,52 +469,52 @@ Pr Fett Kommandoen utføres akkurat nå - Mangler BS målinger + Mangler BS-målinger Bruk systemvarslinger for alarmer og varslinger Øk volumet gradvis for alarmer og varsler Lokale varsler - Varsel hvis ingen BS data mottas + Varsel hvis ingen BS-data mottas Varsel hvis pumpen er utilgjengelig Pumpen er ikke tilgjengelig etter [min] Varsel hvis karbohydrater må tilføres Kritisk alarm INFO Eversense App (patched) - Last opp BS data til NS - BS opplast innstillinger + Last opp BS-data til NS + Innstillinger for opplasting av BS Vis detaljer om delta Vis delta med én ekstra desimal Minste antall minutter mellom hver SMB Maks antall minutter med basal som kan bli SMB UAM SMB maks minutter Maks antall minutter basal som kan bli SMB ved UAM - Minimumsgrense for KH forslag + Minimumsgrense for KH-forslag Minimum mengde karbohydrater i gram for å vise advarsel. Behov under denne grenseverdien vil ikke vises som et varsel. - Send BS data til xDrip+ - I xDrip+ velg 640G/Eversens som datakilde + Send BS-data til xDrip+ + I xDrip+, velg 640G/Eversens som datakilde NSClient BS NS BS - BS beregning - Bolus IOB beregning - Basal IOB beregning - Trend beregning - Superbolus beregning + BS-beregning + Bolus IOB-beregning + Basal IOB-beregning + Trendberegning + Superbolus-beregning Bare positive Bare negative - COB beregning - Temp target beregning - Prosent beregning + COB-beregning + Beregning av temp target + Prosentvis beregning Loop er aktivert APS valgt - NSClient har skrive rettigheter + NSClient har skriverettigheter Lukket loop aktivert Maks IOB er angitt riktig BS tilgjengelig fra valgt kilde Forlenget bolus feilet - Aktiverer alltid SMB + Aktiver alltid SMB Aktiver alltid SMB uavhengig av boluser. Bare mulig med en bra filtrert BS kilde som f.eks. Dexcom G5/G6 Aktiver SMB etter karbohydrater - Aktiver SMB i 6t etter karbohydrat inntak, selv med 0 IOB. Bare mulig med en bra filtrert BS kilde som f. eks. Dexcom G5/G6 + Aktiver SMB i 6t etter karbohydratinntak, selv med 0 IOB. Bare mulig med en bra filtrert BS kilde som f. eks. Dexcom G5/G6 Aktiver SMB med COB Aktiver SMB når COB er aktiv. Aktiver SMB med temp målverdi @@ -522,7 +524,7 @@ Insulin Knapper Sender en kalibrering til xDrip+ eller åpne kalibreringsdialogen i BYODA - Åpner xDrip+ eller BYODA, tilbake knappen får deg tilbake til AAPS + Åpner xDrip+ eller BYODA, tilbake-knappen får deg tilbake til AAPS Antall karbohydrater som skal legges til når knappen trykkes Mengde insulin som skal legges til når knappen trykkes inn Kunne ikke starte CGM-programmet. Kontroller at det er installert. @@ -564,7 +566,7 @@ Start Hypo TT Du kjører dev-versjonen. Lukket loop ikke aktivert. Engineering Mode aktivert - Profil bytte mangler. Utfør et profil bytte og trykk på \"Aktiver profil\" i din lokale profil. + Profilbytte mangler. Utfør et profilbytte og trykk på \"Aktiver profil\" i din lokale profil. Pumpen støtter ikke temp basaler Lukket Loop deaktivert i innstillinger Autosens deaktivert i innstillinger @@ -968,6 +970,7 @@ Maks-BS utenfor område! Temp target:\nMin: %1$s\nMaks: %2$s\nVarighet: %3$s TempTarget:\nMål: %1$s\nVarighet: %2$s + TempTarget:\nÅrsak: %1$s\nMål: %2$s\nVarighet: %3$s QuickWizard: %1$s\ninsulin: %2$.2fE\nKarbo: %3$dg Kalk. Wizard:\nInsulin: %1$.2fE\nKarbo: %2$dg Vis oppføring på enhet: @@ -997,7 +1000,7 @@ Oppdater fra Nightscout Fjern valgte elementer Velg hva som skal fjernes - Profil endringer + Profilendringer Temp Target Karbohydrater og bolus Er du sikker på at du vil fjerne %1$d elementer diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index d0a550b70c..5b7a784c4d 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -970,6 +970,7 @@ Maximálna glykémia mimo rozsah! Doč. cieľ:\nMin: %1$s\nMax: %2$s\nTrvanie: %3$s Doč. cieľ:\nCieľ: %1$s\nTrvanie: %2$s + Doč. cieľ:\nDôvod: %1$s\nCieľ: %2$s\nTrvanie: %3$s Rýchly bolus: %1$s\nInzulín: %2$.2fJI\nSacharidy: %3$dg Kalkulačka: \nInzulín: %1$.2fJI\nSacharidy: %2$dg Zobraziť záznam na zariadení: diff --git a/app/src/main/res/values-tr-rTR/objectives.xml b/app/src/main/res/values-tr-rTR/objectives.xml index f34abb589c..4f5d4a7a1b 100644 --- a/app/src/main/res/values-tr-rTR/objectives.xml +++ b/app/src/main/res/values-tr-rTR/objectives.xml @@ -11,7 +11,7 @@ Birkaç gün boyunca Açık Döngü modunda çalıştırın ve birçok geçici bazalı el yordamı ile girin. Geçici ve varsayılan geçici hedefleri düzenleyin ve kullanın (örn. egzersiz ve hipo-tedaviyi desteklemek için) Geçici bazal tavsiyeleri de dahil olmak üzere Açık Döngüyü anlamak Bu deneyime dayanarak, max bazalın ne olması gerektiğine karar vermeli ve bunu pompa ve tercihlere koymalısınız - Kapalı Döngü, (LGS) Düşük Glikoz Süspansiyonu modunda başlatılıyor + Kapalı Döngü, (LGS) Düşük Glikoz Duraklatma modunda başlatılıyor Kapalı Döngüyü, maks IOB = 0 olacak şekilde çok sayıda LGS (düşük KŞ) olmadan birkaç gün boyunca deneyin Kapalı Döngü\'de ince ayarlar, maks (IOB) Aktif İnsülini 0\'ın üzerine yükseltme ve yavaş yavaş KŞ hedeflerini aşağıya çekme KŞ hedefini azaltmadan önce birkaç gün ve en az bir gece düşük KŞ (Hipo) alarmı olmadan deneyin diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 7737bbb046..7e728fcaef 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -110,7 +110,7 @@ APS modu Kapalı Döngü Açık Döngü - Düşük Glikoz Süspansiyonu + Düşük Glikoz Duraklatma (LGS) Döngü devre dışı Yeni öneri mevcut Karbonhidrat Önerisi @@ -970,6 +970,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Maks-KŞ aralık dışında! Geçici Hedef:\nMin: %1$s\nMaks: %2$s\nSüre: %3$s Geçici Hedef:\nHedef: %1$s\nSüre: %2$s + Geçicihedef:\nNeden: %1$s\nHedef: %2$s\nSüre: %3$s Hızlı Asistan: %1$s\nİnsülin: %2$.2fU\nKarb: %3$dg Hesap Mak.:\nİnsulin: %1$.2fÜ\nKarb: %2$dg Girişi cihazda göster: diff --git a/core/src/main/res/values-es-rES/strings.xml b/core/src/main/res/values-es-rES/strings.xml index 19f888b736..6c427b6661 100644 --- a/core/src/main/res/values-es-rES/strings.xml +++ b/core/src/main/res/values-es-rES/strings.xml @@ -464,6 +464,8 @@ Última ejecución : Advertencia : Selecciona el perfil para a ajustar + Autotune sólo funciona con un único valor de IC. Tu perfil tiene %1$d valores. El valor promedio es %2$.2fg/U + Autotune sólo funciona con un único valor de ISF. Tu perfil tiene %1$d valores. El valor promedio es %2$.1f%3$s/U Error en los datos de entrada, intenta ejecutar de nuevo autotune o reducir el número de días Cálculo de autototune iniciado, por favor ten paciencia ¡Comprueba los resultados cuidadosamente antes de usarlos! diff --git a/omnipod-common/src/main/res/values-no-rNO/strings.xml b/omnipod-common/src/main/res/values-no-rNO/strings.xml index 258e97569e..48aaea828d 100644 --- a/omnipod-common/src/main/res/values-no-rNO/strings.xml +++ b/omnipod-common/src/main/res/values-no-rNO/strings.xml @@ -9,29 +9,29 @@ Deaktiver Pod Forkast Pod Dersom du forkaster Pod, vil du ikke kunne kommunisere med den lenger. Du skal bare gjøre dette når all kommunikasjon med Pod vedvarende mislykkes. Hvis du fortsatt kan kommunisere med Pod, bruk alternativet Deaktiver Pod.\n\nHvis du ønsker å fortsette, må du huske på å fjerne Pod fra kroppen din! - Avspill testlyd - Avspiller testlyd… - Pod historikk + Spill av testlyd + Spiller av testlyd… + Pod-historikk Ingen aktiv Pod - Feilet i å lagre basalprofilen. + Kunne ikke lagre basalprofilen. Bolus var mislykket. - Feilet i å lagre basal profil: mottok en tom profil. Kontroller at du har aktivert profilen. - Ingen basal profil er aktiv. Sørg for å aktivere din basal profil. + Kunne ikke lagre basalprofil: mottok en tom profil. Kontroller at du har aktivert profilen. + Ingen basalprofil er aktiv. Sørg for å aktivere din basalprofil. Ukjent kommando: %1$s Feilet i å oppdatere status - Feilet i å oppdatere status ved oppstart - Feilet i å bekrefte varsler - Feilet i å stoppe insulinleveranser - Feilet i å angi tid - Feilet i å gjenoppta leveransen + Kunne ikke oppdatere status ved oppstart + Kunne ikke bekrefte varsler + Kunne ikke stoppe insulinleveranser + Kunne ikke angi tid + Kunne ikke gjenoppta leveransen Feilet i å initialisere Pod Feilet ved innsetting av kanyle Pod\'ens aktiveringstid er overskredet. Denne Pod kan ikke lenger aktiveres. Klarte ikke å verifisere fremdrift i aktiveringen. Prøv på nytt. Pod er pauset - Feilet i avspilling av test lyd - Tid på Pod er ikke synkronisert. Vennligst oppdater tiden i Omnipod fanen. + Kunne ikke spille av testlyd + Tid på Pod er ikke synkronisert. Vennligst oppdater tiden i Omnipod-fanen. En uventet feil oppstod. Vennligst rapporter! (%1$s: %2$s). Bekreftelse @@ -45,21 +45,21 @@ Angi tid Pauset Gjenoppta levering - Pod administrasjon + Pod-administrasjon Demp varsler Pod status Totalt levert %1$.2f E Unik ID LOT nummer - Sekvens nummer + Sekvensnummer Pod utløper Siste tilkobling Siste bolus - Temp basal rate - Profilens basal dose + Midlertidig basaldose + Profilens basaldose Reservoar - Aktive Pod varsler + Aktive Pod-varsler Firmware versjon Tid på Pod %1$.2fE/t @%2$s (%3$d/%4$d minutter) @@ -82,7 +82,7 @@ Klargjør infusjonsstedet. Fjern Pod\'ens kanylebeskyttelse og papirfolien, og fest Pod til infusjonsstedet.\n\nHvis du oppdager feil med kanylen, trykk Avbryt og forkast Pod.\n\nTrykk Neste for å sette inn kanyle og starte påfyllingsbolus. Når du trykker OKvil kanylen settes inn. Pass på at du har festet Pod\'en på infusjonsstedet. Sett inn kanyle - Prøver å angi initialt basal program og sett inn kanylen.\n\nNår kanylen er vellykket på plass kan du trykke på Neste. + Prøver å angi basalprogram og sette inn kanylen.\n\nNår kanylen er vellykket på plass kan du trykke på Neste. Pod aktivert Den nye Pod\'en er nå aktiv.\n\nDin basalprofil har blitt lagret og kanylen er inne.\n\nVennligst kontroller at kanylen ble satt riktig inn og skift Pod hvis du tror det har oppstått feil med innsettingen. @@ -97,20 +97,20 @@ Dersom du forkaster Pod vil du ikke være i stand til å kommunisere med den lenger. Du skal bare gjøre dette når all kommunikasjon med Pod konsekvent feiler. Er du sikker på at du vil forkaste Pod? Forkast Pod - Bolus lyd aktivert - Basal lyd aktivert + Bolus-lyd aktivert + Basal-lyd aktivert SMB lyd aktivert - TBR lyd aktivert + TBR-lyd aktivert Vis Pause insulintilførsel knapp i Omnipod meny - DST/Tidssone deteksjon aktivert + DST/Tidssone-deteksjon aktivert Utløpspåminnelse aktivert Timer før nedstenging Varsel om lavt reservoar aktivert Antall enheter - Automatisk demp Pod varsler + Automatisk demp Pod-varsler Annet Varsler - Bekreftelse lyd + Bekreftelseslyd Varsler Lydvarsel for ubekreftet temp basal dosering (TBR) er aktivert Lydvarsel for ubekreftet SMB er aktivert @@ -121,7 +121,7 @@ Oppsett pågår (venter på innsetting av kanyle) Kjører Pauset - Pod feil + Pod-feil Aktiveringstiden er overskredet Inaktiv Pod feil: %1$03d %2$s @@ -130,12 +130,12 @@ Forkast Pod Angi Bolus Avbryt bolus - Angi Temp Basal - Avbryt temp basal (internt av driver) - Avbryt temp basal + Angi Midlertidig Basal + Avbryt midlertidig basal (internt av driver) + Avbryt midlertidig basal Angi basal program - Les Pod status - Les Pod info + Hent Pod-status + Hent Pod-info Angi tid Konfigurer varsler Demp varsler @@ -149,7 +149,7 @@ Avbryt vilkårlig midlertidig basal som er opprettet fordi Pod var pauset Del midlertidig basal fordi en uavklart feil ble oppdaget ved kanselleringen Oppsett lyd - Avspill testlyd + Spill av testlyd Fullfør parringspåminnelse Påminnelse om å fullføre oppsett diff --git a/omnipod-dash/src/main/res/values-no-rNO/strings.xml b/omnipod-dash/src/main/res/values-no-rNO/strings.xml index 9eb18fa172..d80f5ba0ae 100644 --- a/omnipod-dash/src/main/res/values-no-rNO/strings.xml +++ b/omnipod-dash/src/main/res/values-no-rNO/strings.xml @@ -4,7 +4,7 @@ Pumpeintegrering for Omnipod Dash (den nye, Bluetooth-aktiverte modellen med en blå kanylehette). - Pod historikk + Pod-historikk Beskrivelse Kilde Dato @@ -13,13 +13,13 @@ %1$.2f E, KH=%2$.1f g Dosering: %1$.2f E, varighet: %2$d min - Bluetooth status - Bluetooth adresse + Bluetooth-status + Bluetooth-adresse Firmware %1$s / Bluetooth %2$s - Tilkoblingskvalitet Bluetooth + Bluetooth tilkoblingskvalitet Leveringsstatus - Fyll en ny Pod med nok insulin for 3 dager.\n\nLytt etter to lydsignaler fra Pod under fyllingen. De indikerer at minimums volum på 80E er fylt opp. Vær nøye med å tømme fyllingssprøyten helt, selv etter at du har hørt de to lydsignalene.\n\nEtter fylling av Pod, vennligst trykk Neste.\n\nMerk: vent med å fjerne kanylebeskyttelsen til Pod. + Fyll en ny Pod med nok insulin for 3 dager.\n\nLytt etter to lydsignaler fra Pod under fyllingen. De indikerer at minimumsvolum på 80E er fylt opp. Vær nøye med å tømme fyllingssprøyten helt, selv etter at du har hørt de to lydsignalene.\n\nEtter fylling av Pod, vennligst trykk Neste.\n\nMerk: vent med å fjerne kanylebeskyttelsen til Pod. Prøver å parre med den nye Pod og prime den.\n\nNår oppstartsprosessen er ferdig, kan du trykke Neste. Lydvarsel aktivert hvis insulinlevering blir stanset @@ -27,7 +27,7 @@ Fant for mange podder for aktivering Fant ingen pod tilgjengelig for aktivering Generell feil: %1$s - Feilet i å sende kommandoen + Kunne ikke sende kommandoen Kommando ikke sendt Kommandoen ikke mottatt av podden Ukjent tilstand for kommandoen diff --git a/wear/src/main/res/values-cs-rCZ/strings.xml b/wear/src/main/res/values-cs-rCZ/strings.xml index 84ebb1a0ae..5c8f9a308d 100644 --- a/wear/src/main/res/values-cs-rCZ/strings.xml +++ b/wear/src/main/res/values-cs-rCZ/strings.xml @@ -182,6 +182,8 @@ --- mg/dl Žádný stav smyčky 000g - 00,0 + 00,0 0,00U + AAPS Potvrzení výstrahy + Odesílání potvrzení do AAPS diff --git a/wear/src/main/res/values-es-rES/strings.xml b/wear/src/main/res/values-es-rES/strings.xml index 680c610a92..bf386fac5c 100644 --- a/wear/src/main/res/values-es-rES/strings.xml +++ b/wear/src/main/res/values-es-rES/strings.xml @@ -182,6 +182,8 @@ --- mg/dl Sin estado del lazo 000g - 00,0 + 00,0 0,00U + Posponer Alertas de AAPS + Enviando aplazamientos a AAPS diff --git a/wear/src/main/res/values-fr-rFR/strings.xml b/wear/src/main/res/values-fr-rFR/strings.xml index 645f5d699b..e4bd273b2d 100644 --- a/wear/src/main/res/values-fr-rFR/strings.xml +++ b/wear/src/main/res/values-fr-rFR/strings.xml @@ -182,6 +182,6 @@ --- mg/dl Aucun statut de la boucle 000 g - 00,0 + 00,0 0,00 U diff --git a/wear/src/main/res/values-it-rIT/strings.xml b/wear/src/main/res/values-it-rIT/strings.xml index b6a8e15f35..ccf8bfec97 100644 --- a/wear/src/main/res/values-it-rIT/strings.xml +++ b/wear/src/main/res/values-it-rIT/strings.xml @@ -182,6 +182,6 @@ --- mg/dl Nessun stato di loop 000g - 00,0 + 00,0 0,00U diff --git a/wear/src/main/res/values-iw-rIL/strings.xml b/wear/src/main/res/values-iw-rIL/strings.xml index d2a3183b5d..05ff9fe014 100644 --- a/wear/src/main/res/values-iw-rIL/strings.xml +++ b/wear/src/main/res/values-iw-rIL/strings.xml @@ -182,6 +182,6 @@ --- mg/dl חסר סטטוס לולאה 000 גר\' - 00,0 + 00,0 0,00 יח\' diff --git a/wear/src/main/res/values-nl-rNL/strings.xml b/wear/src/main/res/values-nl-rNL/strings.xml index 47492205a0..7dd82b44a5 100644 --- a/wear/src/main/res/values-nl-rNL/strings.xml +++ b/wear/src/main/res/values-nl-rNL/strings.xml @@ -182,6 +182,8 @@ --- mg/dl Geen Loop Status 000g - 00,0 + 00,0 0,00E + AAPS Sluimer Alarm + Snooze versturen naar AAPS diff --git a/wear/src/main/res/values-no-rNO/strings.xml b/wear/src/main/res/values-no-rNO/strings.xml index 94fe4309d0..ea4deaf2ee 100644 --- a/wear/src/main/res/values-no-rNO/strings.xml +++ b/wear/src/main/res/values-no-rNO/strings.xml @@ -61,11 +61,11 @@ Prime i menyen Enkel måleverdi Kalkulator prosent - Komplikasjon trykk handling - Unicode ikomplikasjoner + Handling ved trykk på komplikasjon + Unicode i komplikasjoner Versjon: - Fler urskive innstillinger - Vennligst sjekk urskive innstillinger. + Flere innstillinger for urskive + Vennligst sjekk urskiveinnstillinger. TempT Kalkulator Kalk @@ -128,7 +128,7 @@ blågrønn grønn lysegrønn - gulgrønn + limegrønn gul rødbrun oransje @@ -139,20 +139,20 @@ hvit svart flerfarget - Forenklet brukergrensesnittet + Forenklet brukergrensesnitt Vis kun tid og BS Vibrer hver time Vis ukenummer Din stil: ingen stil - minimal palette - definert palette - full palette - Dine farger: + minimalistisk stil + form-stil + full stil + Din farge: Din fargemetning: - Din farge gjennomsiktighet: - AAPS bolus framdrift - AAPS stille bolus framdrift + Din gjennomsiktighet: + AAPS bolus-framdrift + AAPS stille bolus-framdrift Bolus framdrift og avbryt Bolus framdrift og avbryt med mindre vibrasjoner Av @@ -182,6 +182,8 @@ --- mg/dl Ingen loop status 000g - 00,0 + 00,0 0,00E + AAPS slumre-varsel + Sender slumring til AAPS diff --git a/wear/src/main/res/values-ru-rRU/strings.xml b/wear/src/main/res/values-ru-rRU/strings.xml index 4f320cac43..034531f610 100644 --- a/wear/src/main/res/values-ru-rRU/strings.xml +++ b/wear/src/main/res/values-ru-rRU/strings.xml @@ -182,6 +182,6 @@ --- мг/дл Нет статуса 000г - 00,0 + 00,0 0,00 ед diff --git a/wear/src/main/res/values-sk-rSK/strings.xml b/wear/src/main/res/values-sk-rSK/strings.xml index 49db0a922f..8f2e92e153 100644 --- a/wear/src/main/res/values-sk-rSK/strings.xml +++ b/wear/src/main/res/values-sk-rSK/strings.xml @@ -182,6 +182,8 @@ --- mg/dl Žiadny stav uzavretého okruhu 000g - 00,0 + 00,0 0,00JI + AAPS Potvrdenie výstrahy + Odosielanie potvrdení do AAPS diff --git a/wear/src/main/res/values-tr-rTR/strings.xml b/wear/src/main/res/values-tr-rTR/strings.xml index 5754310521..f9db54975d 100644 --- a/wear/src/main/res/values-tr-rTR/strings.xml +++ b/wear/src/main/res/values-tr-rTR/strings.xml @@ -182,6 +182,8 @@ --- mg/dl Döngü Durumu Yok 000g - 00,0 + 00,0 0,00Ü + AAPS Uyarı Erteleme + AAPS\'ye Erteleme Gönderme