From 32cb4f02af137606931ccecaaa0d8e1e72dc2d73 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sat, 25 Jun 2022 19:44:12 +0200 Subject: [PATCH 01/48] 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 02/48] 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 4628f3136deebb62cbd167618ebecac5657285b7 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Thu, 23 Jun 2022 20:31:40 +0200 Subject: [PATCH 03/48] feat: wear mulitple plus buttons --- .../androidaps/dialogs/CarbsDialog.kt | 6 +- .../androidaps/dialogs/InsulinDialog.kt | 6 +- .../wear/wearintegration/DataHandlerMobile.kt | 10 +- .../nightscout/shared/weardata/EventData.kt | 6 +- wear/build.gradle | 5 + .../androidaps/comm/DataHandlerWear.kt | 6 +- .../interaction/actions/BolusActivity.kt | 12 +- .../interaction/actions/CarbActivity.kt | 10 +- .../interaction/actions/ECarbActivity.kt | 10 +- .../interaction/actions/TreatmentActivity.kt | 18 +- .../actions/ViewSelectorActivity.kt | 13 +- .../interaction/actions/WizardActivity.kt | 11 +- .../utils/EditPlusMinusViewAdapter.kt | 78 ++++++++ .../interaction/utils/PlusMinusEditText.kt | 179 ++++++++++++------ .../res/layout/action_editplusminus_item.xml | 5 +- .../action_editplusminus_item_quicklefty.xml | 54 +++++- ...ion_editplusminus_item_quicklefty_plus.xml | 131 +++++++++++++ .../action_editplusminus_item_quickrighty.xml | 55 +++++- ...on_editplusminus_item_quickrighty_plus.xml | 131 +++++++++++++ .../action_editplusminus_item_viktoria.xml | 4 +- wear/src/main/res/values/strings.xml | 4 + 21 files changed, 645 insertions(+), 109 deletions(-) create mode 100644 wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt create mode 100644 wear/src/main/res/layout/action_editplusminus_item_quicklefty_plus.xml create mode 100644 wear/src/main/res/layout/action_editplusminus_item_quickrighty_plus.xml 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 7c73776689..ff3d0c778a 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt @@ -56,9 +56,9 @@ class CarbsDialog : DialogFragmentWithDate() { companion object { - private const val FAV1_DEFAULT = 5 - private const val FAV2_DEFAULT = 10 - private const val FAV3_DEFAULT = 20 + const val FAV1_DEFAULT = 5 + const val FAV2_DEFAULT = 10 + const val FAV3_DEFAULT = 20 } private var queryingProtection = false diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt index 9efb110a4f..7c45fe99ee 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt @@ -58,9 +58,9 @@ class InsulinDialog : DialogFragmentWithDate() { companion object { - private const val PLUS1_DEFAULT = 0.5 - private const val PLUS2_DEFAULT = 1.0 - private const val PLUS3_DEFAULT = 2.0 + const val PLUS1_DEFAULT = 0.5 + const val PLUS2_DEFAULT = 1.0 + const val PLUS3_DEFAULT = 2.0 } private var queryingProtection = false 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..25017bfa3b 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 @@ -12,6 +12,8 @@ import info.nightscout.androidaps.database.entities.* import info.nightscout.androidaps.database.interfaces.end import info.nightscout.androidaps.database.transactions.CancelCurrentTemporaryTargetIfAnyTransaction import info.nightscout.androidaps.database.transactions.InsertAndCancelCurrentTemporaryTargetTransaction +import info.nightscout.androidaps.dialogs.CarbsDialog +import info.nightscout.androidaps.dialogs.InsulinDialog import info.nightscout.androidaps.events.EventMobileToWear import info.nightscout.androidaps.extensions.convertedToAbsolute import info.nightscout.androidaps.extensions.toStringShort @@ -694,7 +696,11 @@ class DataHandlerMobile @Inject constructor( unitsMgdl = profileFunction.getUnits() == GlucoseUnit.MGDL, bolusPercentage = sp.getInt(R.string.key_boluswizard_percentage, 100), maxCarbs = sp.getInt(R.string.key_treatmentssafety_maxcarbs, 48), - maxBolus = sp.getDouble(R.string.key_treatmentssafety_maxbolus, 3.0) + maxBolus = sp.getDouble(R.string.key_treatmentssafety_maxbolus, 3.0), + insulin_button_increment_1 = sp.getDouble(R.string.key_insulin_button_increment_1, InsulinDialog.PLUS1_DEFAULT), + insulin_button_increment_2 = sp.getDouble(R.string.key_insulin_button_increment_2, InsulinDialog.PLUS2_DEFAULT), + carbs_button_increment_1 = sp.getInt(R.string.key_carbs_button_increment_1, CarbsDialog.FAV1_DEFAULT), + carbs_button_increment_2 = sp.getInt(R.string.key_carbs_button_increment_2, CarbsDialog.FAV2_DEFAULT) ) ) ) @@ -1185,4 +1191,4 @@ class DataHandlerMobile @Inject constructor( @Synchronized private fun sendError(errorMessage: String) { rxBus.send(EventMobileToWear(EventData.ConfirmAction(rh.gs(R.string.error), errorMessage, returnCommand = EventData.Error(dateUtil.now())))) // ignore return path } -} \ No newline at end of file +} 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 aca2303c89..bd0d06711b 100644 --- a/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt +++ b/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt @@ -208,7 +208,11 @@ sealed class EventData : Event() { val unitsMgdl: Boolean, val bolusPercentage: Int, val maxCarbs: Int, - val maxBolus: Double + val maxBolus: Double, + val insulin_button_increment_1: Double, + val insulin_button_increment_2: Double, + val carbs_button_increment_1: Int, + val carbs_button_increment_2: Int ) : EventData() @Serializable diff --git a/wear/build.gradle b/wear/build.gradle index ddcfcbfa2f..802c30ddef 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -53,6 +53,10 @@ android { buildConfigField "String", "BUILDVERSION", generateGitBuild() } + buildFeatures { + viewBinding true + } + flavorDimensions "standard" productFlavors { full { @@ -98,6 +102,7 @@ dependencies { implementation "androidx.preference:preference-ktx:$preferencektx_version" implementation 'androidx.wear:wear:1.2.0' implementation "androidx.wear.tiles:tiles:1.0.1" + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' compileOnly "com.google.android.wearable:wearable:$wearable_version" implementation "com.google.android.support:wearable:$wearable_version" diff --git a/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt b/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt index cac52e5439..3a05c06cf0 100644 --- a/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt +++ b/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt @@ -162,6 +162,10 @@ class DataHandlerWear @Inject constructor( sp.putInt(R.string.key_bolus_wizard_percentage, it.bolusPercentage) sp.putInt(R.string.key_treatments_safety_max_carbs, it.maxCarbs) sp.putDouble(R.string.key_treatments_safety_max_bolus, it.maxBolus) + sp.putDouble(R.string.key_insulin_button_increment_1, it.insulin_button_increment_1) + sp.putDouble(R.string.key_insulin_button_increment_2, it.insulin_button_increment_2) + sp.putInt(R.string.key_carbs_button_increment_1, it.carbs_button_increment_1) + sp.putInt(R.string.key_carbs_button_increment_2, it.carbs_button_increment_2) } disposable += rxBus .toObservable(EventData.QuickWizard::class.java) @@ -284,4 +288,4 @@ class DataHandlerWear @Inject constructor( NotificationManagerCompat.from(context).cancel(DataLayerListenerServiceWear.BOLUS_PROGRESS_NOTIF_ID) }.start() } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt index e7e8b56355..766983c581 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt @@ -10,10 +10,12 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse import info.nightscout.shared.weardata.EventData.ActionBolusPreCheck import java.text.DecimalFormat +import kotlin.math.roundToInt class BolusActivity : ViewSelectorActivity() { @@ -33,13 +35,17 @@ class BolusActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = 2 override fun getRowCount(): Int = 1 + val increment1 = (sp.getDouble(R.string.key_insulin_button_increment_1, 0.5) * 10).roundToInt() / 10.0 + val increment2 = (sp.getDouble(R.string.key_insulin_button_increment_2, 1.0) * 10).roundToInt() / 10.0 + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { val view: View if (col == 0) { - view = getInflatedPlusMinusView(container) + view = EditPlusMinusViewAdapter.getInflatedPlusMinusView(sp, applicationContext, container, true).root val initValue = if (editInsulin != null) SafeParse.stringToDouble(editInsulin?.editText?.text.toString()) else 0.0 val maxBolus = sp.getDouble(getString(R.string.key_treatments_safety_max_bolus), 3.0) - editInsulin = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, initValue, 0.0, maxBolus, 0.1, DecimalFormat("#0.0"), false) + val buttons = listOf(Pair(R.id.plusbutton, 0.1), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) // When taken form phone settings round. + editInsulin = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, initValue, 0.0, maxBolus, 0.1, DecimalFormat("#0.0"), false) setLabelToPlusMinusView(view, getString(R.string.action_insulin)) container.addView(view) view.requestFocus() @@ -62,4 +68,4 @@ class BolusActivity : ViewSelectorActivity() { override fun isViewFromObject(view: View, `object`: Any): Boolean = view === `object` } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt index 4dd487bb79..7de9a45dd3 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt @@ -30,19 +30,23 @@ class CarbActivity : ViewSelectorActivity() { private inner class MyGridViewPagerAdapter : GridPagerAdapter() { + val increment1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() + val increment2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + override fun getColumnCount(arg0: Int): Int = 2 override fun getRowCount(): Int = 1 override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { val view: View if (col == 0) { - view = getInflatedPlusMinusView(container) + view = getInflatedPlusMinusView(container, true) var def = 0.0 if (editCarbs != null) { def = SafeParse.stringToDouble(editCarbs?.editText?.text.toString()) } val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - editCarbs = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), true) + val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) + editCarbs = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), true) setLabelToPlusMinusView(view, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() @@ -69,4 +73,4 @@ class CarbActivity : ViewSelectorActivity() { override fun isViewFromObject(view: View, `object`: Any): Boolean = view === `object` } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt index 21d7b41f31..50988562a4 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt @@ -36,15 +36,19 @@ class ECarbActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = 4 override fun getRowCount(): Int = 1 + private val increment1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() + private val increment2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { return if (col == 0) { - val view = getInflatedPlusMinusView(container) + val view = getInflatedPlusMinusView(container, true) var def = 0.0 if (editCarbs != null) { def = stringToDouble(editCarbs?.editText?.text.toString()) } val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - editCarbs = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), true) + val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) + editCarbs = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), true) setLabelToPlusMinusView(view, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() @@ -98,4 +102,4 @@ class ECarbActivity : ViewSelectorActivity() { override fun isViewFromObject(view: View, `object`: Any): Boolean = view === `object` } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt index ed504969b1..630317b89a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt @@ -15,6 +15,7 @@ import info.nightscout.shared.SafeParse.stringToDouble import info.nightscout.shared.SafeParse.stringToInt import info.nightscout.shared.weardata.EventData.ActionBolusPreCheck import java.text.DecimalFormat +import kotlin.math.roundToInt class TreatmentActivity : ViewSelectorActivity() { @@ -35,23 +36,30 @@ class TreatmentActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = 3 override fun getRowCount(): Int = 1 + val incrementInsulin1 = (sp.getDouble(R.string.key_insulin_button_increment_1, 0.5) * 10).roundToInt() / 10.0 + val incrementInsulin2 = (sp.getDouble(R.string.key_insulin_button_increment_2, 1.0) * 10).roundToInt() / 10.0 + val incrementCarbs1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() + val incrementCarbs2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { return if (col == 0) { - val view = getInflatedPlusMinusView(container) + val view = getInflatedPlusMinusView(container, true) var def = 0.0 if (editInsulin != null) def = stringToDouble(editInsulin?.editText?.text.toString()) val maxBolus = sp.getDouble(getString(R.string.key_treatments_safety_max_bolus), 3.0) - editInsulin = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, maxBolus, 0.1, DecimalFormat("#0.0"), false) + val buttons = listOf(Pair(R.id.plusbutton, 0.1), Pair(R.id.plusbutton2, incrementInsulin1), Pair(R.id.plusbutton3, incrementInsulin2)) + editInsulin = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxBolus, 0.1, DecimalFormat("#0.0"), false) setLabelToPlusMinusView(view, getString(R.string.action_insulin)) container.addView(view) view.requestFocus() view } else if (col == 1) { - val view = getInflatedPlusMinusView(container) + val view = getInflatedPlusMinusView(container, true) var def = 0.0 val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) if (editCarbs != null) def = stringToDouble(editCarbs?.editText?.text.toString()) - editCarbs = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) + val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, incrementCarbs1), Pair(R.id.plusbutton3, incrementCarbs2)) + editCarbs = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) setLabelToPlusMinusView(view, getString(R.string.action_carbs)) container.addView(view) view @@ -79,4 +87,4 @@ class TreatmentActivity : ViewSelectorActivity() { override fun isViewFromObject(view: View, `object`: Any): Boolean = view === `object` } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt index 9fd6b9adf1..eb3a9b70d7 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt @@ -73,13 +73,16 @@ open class ViewSelectorActivity : DaggerActivity() { } } - fun getInflatedPlusMinusView(container: ViewGroup?): View = - when (sp.getInt(R.string.key_input_design, 1)) { - 2 -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item_quickrighty, container, false) - 3 -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item_quicklefty, container, false) + fun getInflatedPlusMinusView(container: ViewGroup?, mulitple: Boolean = false): View { + val layoutRight = if (mulitple) R.layout.action_editplusminus_item_quickrighty_plus else R.layout.action_editplusminus_item_quickrighty + val layoutLeft = if (mulitple) R.layout.action_editplusminus_item_quicklefty_plus else R.layout.action_editplusminus_item_quicklefty + return when (sp.getInt(R.string.key_input_design, 1)) { + 2 -> LayoutInflater.from(applicationContext).inflate(layoutRight, container, false) + 3 -> LayoutInflater.from(applicationContext).inflate(layoutLeft, container, false) 4 -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item_viktoria, container, false) else -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item, container, false) } + } fun setLabelToPlusMinusView(view: View, labelText: String?) { val textView = view.findViewById(R.id.label) @@ -89,4 +92,4 @@ open class ViewSelectorActivity : DaggerActivity() { fun showToast(context: Context?, text: Int) { Toast.makeText(context, getString(text), Toast.LENGTH_LONG).show() } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt index f8c6208e52..dfd6e6291b 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt @@ -35,16 +35,19 @@ class WizardActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = if (hasPercentage) 3 else 2 override fun getRowCount(): Int = 1 + private val increment1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() + private val increment2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { return if (col == 0) { - val view = getInflatedPlusMinusView(container) + val view = getInflatedPlusMinusView(container, true) val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) + val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) editCarbs = if (editCarbs == null) { - PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, 0.0, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) + PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, 0.0, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) } else { val def = SafeParse.stringToDouble(editCarbs?.editText?.text.toString()) - PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) + PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) } setLabelToPlusMinusView(view, getString(R.string.action_carbs)) container.addView(view) @@ -84,4 +87,4 @@ class WizardActivity : ViewSelectorActivity() { override fun isViewFromObject(view: View, `object`: Any): Boolean = view === `object` } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt new file mode 100644 index 0000000000..4b3798940b --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt @@ -0,0 +1,78 @@ +package info.nightscout.androidaps.interaction.utils + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActionEditplusminusItemBinding +import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickleftyPlusBinding +import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickleftyBinding +import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickrightyBinding +import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickrightyPlusBinding +import info.nightscout.androidaps.databinding.ActionEditplusminusItemViktoriaBinding +import info.nightscout.shared.sharedPreferences.SP + +/** + * NumberPickerViewAdapter binds both NumberPickerLayoutBinding and NumberPickerLayoutVerticalBinding shared attributes to one common view adapter. + * Requires at least one of the ViewBinding as a parameter. Recommended to use the factory object to create the binding. + */ +class EditPlusMinusViewAdapter( + val eS: ActionEditplusminusItemBinding?, + val eQLP: ActionEditplusminusItemQuickleftyPlusBinding?, + val eQL: ActionEditplusminusItemQuickleftyBinding?, + val eQRP: ActionEditplusminusItemQuickleftyPlusBinding?, + val qQR: ActionEditplusminusItemQuickrightyBinding?, + val nQRP: ActionEditplusminusItemQuickrightyPlusBinding?, + val eV: ActionEditplusminusItemViktoriaBinding? +) { + + init { + if (eS == null && eQLP == null && eQL == null && eQRP == null && qQR == null && nQRP == null && eV == null) { + throw IllegalArgumentException("Require at least on Binding parameter") + } + } + + val amountField = + eS?.amountfield ?: eQLP?.amountfield ?: eQL?.amountfield ?: eQRP?.amountfield ?: qQR?.amountfield ?: nQRP?.amountfield ?: eV?.amountfield + ?: throw IllegalArgumentException("Missing require View Binding parameter display") + val minusButton = + eS?.minusbutton ?: eQLP?.minusbutton ?: eQL?.minusbutton ?: eQRP?.minusbutton ?: qQR?.minusbutton ?: nQRP?.minusbutton ?: eV?.minusbutton + ?: throw IllegalArgumentException("Missing require View Binding parameter display") + val plusButton = + eS?.plusbutton ?: eQLP?.plusbutton ?: eQL?.plusbutton ?: eQRP?.plusbutton ?: qQR?.plusbutton ?: nQRP?.plusbutton ?: eV?.plusbutton + ?: throw IllegalArgumentException("Missing require View Binding parameter display") + val label = + eS?.label ?: eQLP?.label ?: eQL?.label ?: eQRP?.label ?: qQR?.label ?: nQRP?.label ?: eV?.label + ?: throw IllegalArgumentException("Missing require View Binding parameter display") + val plusButton2 = eQLP?.plusbutton2 ?: eQRP?.plusbutton2 + val plusButton3 = eQLP?.plusbutton3 ?: eQRP?.plusbutton3 + val root = + eS?.root ?: eQLP?.root ?: eQL?.root ?: eQRP?.root ?: qQR?.root ?: nQRP?.root ?: eV?.root + ?: throw IllegalArgumentException("Missing require View Binding parameter display") + + companion object { + + fun getInflatedPlusMinusView(sp: SP, context: Context, container: ViewGroup?, mulitple: Boolean = false): EditPlusMinusViewAdapter { + val inflater = LayoutInflater.from(context) + val bindLayout = ActionEditplusminusItemBinding.inflate(inflater, container, false) + val binding = EditPlusMinusViewAdapter(bindLayout, null, null, null, null, null, null) + return binding + // val layoutRight = if (mulitple) R.layout.action_editplusminus_item_quickrighty_plus else R.layout.action_editplusminus_item_quickrighty + // val layoutLeft = if (mulitple) R.layout.action_editplusminus_item_quicklefty_plus else R.layout.action_editplusminus_item_quicklefty + // return when (sp.getInt(R.string.key_input_design, 1)) { + // 2 -> LayoutInflater.from(applicationContext).inflate(layoutRight, container, false) + // 3 -> LayoutInflater.from(applicationContext).inflate(layoutLeft, container, false) + // 4 -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item_viktoria, container, false) + // else -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item, container, false) + // } + } + // fun getBinding(bindLayout: NumberPickerLayoutBinding): NumberPickerViewAdapter { + // return NumberPickerViewAdapter(bindLayout, null) + // } + // + // fun getBinding(bindLayout: NumberPickerLayoutVerticalBinding): NumberPickerViewAdapter { + // return NumberPickerViewAdapter(null, bindLayout) + // } + } +} \ No newline at end of file diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt index 1ee994c9d3..f812b7e245 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt @@ -1,67 +1,82 @@ package info.nightscout.androidaps.interaction.utils -import android.os.Handler -import kotlin.jvm.JvmOverloads -import android.view.View.OnTouchListener -import android.view.View.OnGenericMotionListener -import android.widget.TextView -import android.view.MotionEvent -import android.os.Looper -import android.os.Message +import android.annotation.SuppressLint +import android.content.Context +import android.os.* import android.view.KeyEvent +import android.view.MotionEvent import android.view.View -import android.widget.ImageView +import android.view.View.OnGenericMotionListener +import android.view.View.OnTouchListener +import android.widget.TextView +import androidx.appcompat.widget.AppCompatButton import androidx.core.view.InputDeviceCompat import androidx.core.view.MotionEventCompat +import java.text.DecimalFormat import java.text.NumberFormat import java.util.concurrent.Executors import java.util.concurrent.ScheduledExecutorService import java.util.concurrent.TimeUnit +import kotlin.Pair /** * Created by mike on 28.06.2016. */ -class PlusMinusEditText @JvmOverloads constructor( +@SuppressLint("SetTextI18n") class PlusMinusEditText @JvmOverloads constructor( view: View, editTextID: Int, - plusID: Int, + private var plusButtons: List>, minusID: Int, initValue: Double, - minValue: Double, - maxValue: Double, - step: Double, - formatter: NumberFormat, - allowZero: Boolean, - roundRobin: Boolean = false + private val minValue: Double, + private val maxValue: Double, + private val stepGeneral: Double, + private val formatter: NumberFormat, + private val allowZero: Boolean, + private val roundRobin: Boolean = false, ) : View.OnKeyListener, OnTouchListener, View.OnClickListener, OnGenericMotionListener { + constructor( + view: View, + editTextID: Int, + plusID: Int, + minusID: Int, + initValue: Double, + minValue: Double, + maxValue: Double, + stepGeneral: Double, + formatter: NumberFormat, + allowZero: Boolean, + roundRobin: Boolean = false + ) : this(view, editTextID, listOf(Pair(plusID, stepGeneral)), minusID, initValue, minValue, maxValue, stepGeneral, formatter, allowZero, roundRobin) + var editText: TextView private set - private var minusImage: ImageView - private var plusImage: ImageView + private var minusImage: View + private var plusImage1: View + private var plusImage2: AppCompatButton? = null + private var plusImage3: AppCompatButton? = null private var value: Double - private var minValue: Double - private var maxValue: Double - private var step: Double - private var formatter: NumberFormat - private var allowZero: Boolean - private var roundRobin: Boolean + private val context: Context private var mChangeCounter = 0 private var mLastChange: Long = 0 private val mHandler: Handler private var mUpdater: ScheduledExecutorService? = null - private inner class UpdateCounterTask(private val mInc: Boolean) : Runnable { + private inner class UpdateCounterTask(private val mInc: Boolean, private val step: Double) : Runnable { private var repeated = 0 private var multiplier = 1 override fun run() { val msg = Message() val doubleLimit = 5 - if (repeated % doubleLimit == 0) multiplier *= 2 - repeated++ - msg.arg1 = multiplier - msg.arg2 = repeated + val multipleButtons = mInc && (plusImage2 != null || plusImage3 != null) + if (!multipleButtons && repeated % doubleLimit == 0) multiplier *= 2 + val bundle = Bundle() + bundle.putDouble("step", step) + bundle.putInt("multiplier", multiplier) + msg.data = bundle + if (mInc) { msg.what = MSG_INC } else { @@ -71,7 +86,7 @@ class PlusMinusEditText @JvmOverloads constructor( } } - private fun inc(multiplier: Int) { + private fun inc(multiplier: Int, step: Double, vibrate: Boolean = true) { value += step * multiplier if (value > maxValue) { if (roundRobin) { @@ -82,9 +97,10 @@ class PlusMinusEditText @JvmOverloads constructor( } } updateEditText() + if (vibrate) vibrateDevice() } - private fun dec(multiplier: Int) { + private fun dec(multiplier: Int, step: Double, vibrate: Boolean = true) { value -= step * multiplier if (value < minValue) { if (roundRobin) { @@ -95,20 +111,39 @@ class PlusMinusEditText @JvmOverloads constructor( } } updateEditText() + if (vibrate) vibrateDevice() + } + + fun vibrateDevice() { + val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val vibratorManager = + context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager + vibratorManager.defaultVibrator + } else { + @Suppress("DEPRECATION") + context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + vibrator.vibrate(VibrationEffect.createOneShot(10, VibrationEffect.DEFAULT_AMPLITUDE)) + } else { + @Suppress("DEPRECATION") + vibrator.vibrate(10) + } } private fun updateEditText() { if (value == 0.0 && !allowZero) editText.text = "" else editText.text = formatter.format(value) } - private fun startUpdating(inc: Boolean) { + private fun startUpdating(inc: Boolean, step: Double) { if (mUpdater != null) { return } mUpdater = Executors.newSingleThreadScheduledExecutor() mUpdater?.scheduleAtFixedRate( - UpdateCounterTask(inc), 200, 200, + UpdateCounterTask(inc, step), 200, 200, TimeUnit.MILLISECONDS ) } @@ -118,12 +153,30 @@ class PlusMinusEditText @JvmOverloads constructor( mUpdater = null } + private fun getStep(v: View): Double { + return when (v) { + plusImage1 -> plusButtons[0].second + plusImage2 -> plusButtons[1].second + plusImage3 -> plusButtons[2].second + else -> stepGeneral + } + } + + private fun isIncrement(v: View): Boolean { + return when (v) { + plusImage1 -> true + plusImage2 -> true + plusImage3 -> true + else -> false + } + } + override fun onClick(v: View) { if (mUpdater == null) { - if (v === plusImage) { - inc(1) + if (isIncrement(v)) { + inc(1, getStep(v)) } else { - dec(1) + dec(1, getStep(v)) } } } @@ -135,7 +188,7 @@ class PlusMinusEditText @JvmOverloads constructor( if (isKeyOfInterest && isReleased) { stopUpdating() } else if (isKeyOfInterest && isPressed) { - startUpdating(v === plusImage) + startUpdating(isIncrement(v), stepGeneral) } return false } @@ -146,7 +199,7 @@ class PlusMinusEditText @JvmOverloads constructor( if (isReleased) { stopUpdating() } else if (isPressed) { - startUpdating(v === plusImage) + startUpdating(isIncrement(v), getStep(v)) } return false } @@ -158,9 +211,9 @@ class PlusMinusEditText @JvmOverloads constructor( val dynamicMultiplier = if (mChangeCounter < THRESHOLD_COUNTER) 1 else if (mChangeCounter < THRESHOLD_COUNTER_LONG) 2 else 4 val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) if (delta > 0) { - inc(dynamicMultiplier) + inc(dynamicMultiplier, stepGeneral, false) } else { - dec(dynamicMultiplier) + dec(dynamicMultiplier, stepGeneral, false) } mLastChange = System.currentTimeMillis() mChangeCounter++ @@ -179,39 +232,59 @@ class PlusMinusEditText @JvmOverloads constructor( } init { + context = view.context editText = view.findViewById(editTextID) minusImage = view.findViewById(minusID) - plusImage = view.findViewById(plusID) + plusImage1 = view.findViewById(plusButtons.first().first) + val format = DecimalFormat("#.#") + plusButtons.getOrNull(1)?.let { + plusImage2 = view.findViewById(it.first) + plusImage2?.text = "+${format.format(it.second).replaceFirst("^0+(?!$)".toRegex(), "")}" + plusImage2?.visibility = View.VISIBLE + } + plusButtons.getOrNull(2)?.let { + plusImage3 = view.findViewById(it.first) + plusImage3?.text = "+${format.format(it.second).replaceFirst("^0+(?!$)".toRegex(), "")}" + plusImage3?.visibility = View.VISIBLE + } + value = initValue - this.minValue = minValue - this.maxValue = maxValue - this.step = step - this.formatter = formatter - this.allowZero = allowZero - this.roundRobin = roundRobin mHandler = object : Handler(Looper.getMainLooper()) { override fun handleMessage(msg: Message) { + val multiplier = msg.data.getInt("multiplier") + val step = msg.data.getDouble("step") + when (msg.what) { MSG_INC -> { - inc(msg.arg1) + inc(multiplier, step) return } MSG_DEC -> { - dec(msg.arg1) + dec(multiplier, step) return } } super.handleMessage(msg) } } + + editText.showSoftInputOnFocus = false + editText.setTextIsSelectable(false) minusImage.setOnTouchListener(this) minusImage.setOnKeyListener(this) minusImage.setOnClickListener(this) - plusImage.setOnTouchListener(this) - plusImage.setOnKeyListener(this) - plusImage.setOnClickListener(this) + plusImage1.setOnTouchListener(this) + plusImage1.setOnKeyListener(this) + plusImage1.setOnClickListener(this) + plusImage2?.setOnTouchListener(this) + plusImage2?.setOnKeyListener(this) + plusImage2?.setOnClickListener(this) + plusImage3?.setOnTouchListener(this) + plusImage3?.setOnKeyListener(this) + plusImage3?.setOnClickListener(this) editText.setOnGenericMotionListener(this) updateEditText() } + } diff --git a/wear/src/main/res/layout/action_editplusminus_item.xml b/wear/src/main/res/layout/action_editplusminus_item.xml index c3cbe263ba..5c5b8856d5 100644 --- a/wear/src/main/res/layout/action_editplusminus_item.xml +++ b/wear/src/main/res/layout/action_editplusminus_item.xml @@ -7,7 +7,7 @@ android:gravity="center" android:orientation="horizontal"> - - - diff --git a/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml b/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml index bf3418ca2c..d96ae1d26f 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml +++ b/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml @@ -7,16 +7,52 @@ android:gravity="center" android:orientation="horizontal"> - + android:layout_marginEnd="-8dp" + android:orientation="vertical"> + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + diff --git a/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml b/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml index 78c5d7e817..7e3ae3dcb1 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml +++ b/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml @@ -41,7 +41,7 @@ tools:ignore="LabelFor" tools:text="label" /> - - + android:layout_marginStart="-8dp" + android:orientation="vertical" + tools:visibility="visible"> + + + + + + + + diff --git a/wear/src/main/res/layout/action_editplusminus_item_quickrighty_plus.xml b/wear/src/main/res/layout/action_editplusminus_item_quickrighty_plus.xml new file mode 100644 index 0000000000..07a9101a0e --- /dev/null +++ b/wear/src/main/res/layout/action_editplusminus_item_quickrighty_plus.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/wear/src/main/res/layout/action_editplusminus_item_viktoria.xml b/wear/src/main/res/layout/action_editplusminus_item_viktoria.xml index 0b396d8b7f..b734b9db7b 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_viktoria.xml +++ b/wear/src/main/res/layout/action_editplusminus_item_viktoria.xml @@ -25,7 +25,7 @@ android:layout_gravity="start|center_vertical|center_horizontal" android:orientation="vertical"> - - dark input_design complication_tap_action + insulin_button_increment_1 + insulin_button_increment_2 + carbs_button_increment_1 + carbs_button_increment_2 increment decrement H From 14d1ba80abd325b7fc2787eaa41c9021da72776b Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Sun, 26 Jun 2022 13:17:16 +0200 Subject: [PATCH 04/48] chore: wear: plus minus view adapter --- .../interaction/actions/AcceptActivity.kt | 18 +- .../interaction/actions/BolusActivity.kt | 23 +-- .../interaction/actions/CarbActivity.kt | 23 +-- .../interaction/actions/ECarbActivity.kt | 43 +++-- .../interaction/actions/FillActivity.kt | 17 +- .../actions/ProfileSwitchActivity.kt | 26 +-- .../interaction/actions/TempTargetActivity.kt | 46 +++--- .../interaction/actions/TreatmentActivity.kt | 30 ++-- .../actions/ViewSelectorActivity.kt | 16 -- .../interaction/actions/WizardActivity.kt | 31 ++-- .../utils/EditPlusMinusViewAdapter.kt | 97 ++++++----- .../interaction/utils/PlusMinusEditText.kt | 102 +++++------- .../res/layout/action_editplusminus_item.xml | 156 ++++++++++++------ .../layout/action_editplusminus_item_plus.xml | 126 ++++++++++++++ .../action_editplusminus_item_quicklefty.xml | 37 +---- ...ion_editplusminus_item_quicklefty_plus.xml | 54 +++--- .../action_editplusminus_item_quickrighty.xml | 35 +--- ...on_editplusminus_item_quickrighty_plus.xml | 42 +++-- .../action_editplusminus_item_viktoria.xml | 8 +- 19 files changed, 544 insertions(+), 386 deletions(-) create mode 100644 wear/src/main/res/layout/action_editplusminus_item_plus.xml diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt index 2134f60f6d..b3c395fb76 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt @@ -56,10 +56,9 @@ class AcceptActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = 2 override fun getRowCount(): Int = 1 - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - val view: View - if (col == 0) { - view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_text, container, false) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { + 0 -> { + val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_text, container, false) val textView = view.findViewById(R.id.message) val scrollView = view.findViewById(R.id.message_scroll) textView.text = message @@ -79,8 +78,11 @@ class AcceptActivity : ViewSelectorActivity() { false } scrollView.requestFocus() - } else { - view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) + view + } + + else -> { + val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { if (actionKey.isNotEmpty()) startService(IntentWearToMobile(this@AcceptActivity, actionKey)) @@ -88,8 +90,8 @@ class AcceptActivity : ViewSelectorActivity() { finishAffinity() } container.addView(view) + view } - return view } override fun destroyItem(container: ViewGroup, row: Int, col: Int, view: Any) { @@ -127,4 +129,4 @@ class AcceptActivity : ViewSelectorActivity() { finish() } } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt index 766983c581..012d5ec516 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt @@ -37,20 +37,23 @@ class BolusActivity : ViewSelectorActivity() { val increment1 = (sp.getDouble(R.string.key_insulin_button_increment_1, 0.5) * 10).roundToInt() / 10.0 val increment2 = (sp.getDouble(R.string.key_insulin_button_increment_2, 1.0) * 10).roundToInt() / 10.0 + val stepValues = listOf(0.1, increment1, increment2) - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - val view: View - if (col == 0) { - view = EditPlusMinusViewAdapter.getInflatedPlusMinusView(sp, applicationContext, container, true).root + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { + 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) val initValue = if (editInsulin != null) SafeParse.stringToDouble(editInsulin?.editText?.text.toString()) else 0.0 val maxBolus = sp.getDouble(getString(R.string.key_treatments_safety_max_bolus), 3.0) - val buttons = listOf(Pair(R.id.plusbutton, 0.1), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) // When taken form phone settings round. - editInsulin = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, initValue, 0.0, maxBolus, 0.1, DecimalFormat("#0.0"), false) - setLabelToPlusMinusView(view, getString(R.string.action_insulin)) + val title = getString(R.string.action_insulin) + editInsulin = PlusMinusEditText(viewAdapter, initValue, 0.0, maxBolus, stepValues, DecimalFormat("#0.0"), false, title) + val view = viewAdapter.root container.addView(view) view.requestFocus() - } else { - view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) + view + } + + else -> { + val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { rxBus.send(EventWearToMobile(ActionBolusPreCheck(SafeParse.stringToDouble(editInsulin?.editText?.text.toString()), 0))) @@ -58,8 +61,8 @@ class BolusActivity : ViewSelectorActivity() { finishAffinity() } container.addView(view) + view } - return view } override fun destroyItem(container: ViewGroup, row: Int, col: Int, view: Any) { diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt index 7de9a45dd3..b941049002 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse import info.nightscout.shared.weardata.EventData.ActionECarbsPreCheck @@ -32,26 +33,28 @@ class CarbActivity : ViewSelectorActivity() { val increment1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() val increment2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + val stepValues = listOf(1.0, increment1, increment2) override fun getColumnCount(arg0: Int): Int = 2 override fun getRowCount(): Int = 1 - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - val view: View - if (col == 0) { - view = getInflatedPlusMinusView(container, true) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { + 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) + val view = viewAdapter.root var def = 0.0 if (editCarbs != null) { def = SafeParse.stringToDouble(editCarbs?.editText?.text.toString()) } val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) - editCarbs = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), true) - setLabelToPlusMinusView(view, getString(R.string.action_carbs)) + editCarbs = PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), stepValues, DecimalFormat("0"), true, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() - } else { - view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) + view + } + + else -> { + val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { // With start time 0 and duration 0 @@ -61,8 +64,8 @@ class CarbActivity : ViewSelectorActivity() { finishAffinity() } container.addView(view) + view } - return view } override fun destroyItem(container: ViewGroup, row: Int, col: Int, view: Any) { diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt index 50988562a4..0a643e9bff 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse.stringToDouble import info.nightscout.shared.SafeParse.stringToInt @@ -36,44 +37,50 @@ class ECarbActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = 4 override fun getRowCount(): Int = 1 - private val increment1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() - private val increment2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + val increment1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() + val increment2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + val stepValues = listOf(1.0, increment1, increment2) - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - return if (col == 0) { - val view = getInflatedPlusMinusView(container, true) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { + 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) + val view = viewAdapter.root var def = 0.0 if (editCarbs != null) { def = stringToDouble(editCarbs?.editText?.text.toString()) } val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) - editCarbs = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), true) - setLabelToPlusMinusView(view, getString(R.string.action_carbs)) + editCarbs = PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), stepValues, DecimalFormat("0"), true, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() view - } else if (col == 1) { - val view = getInflatedPlusMinusView(container) + } + + 1 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root var def = 0.0 if (editStartTime != null) { def = stringToDouble(editStartTime?.editText?.text.toString()) } - editStartTime = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, -60.0, 300.0, 15.0, DecimalFormat("0"), false) - setLabelToPlusMinusView(view, getString(R.string.action_start_min)) + editStartTime = PlusMinusEditText(viewAdapter, 15.0, def, -60.0, 300.0, DecimalFormat("0"), false, getString(R.string.action_start_min)) container.addView(view) view - } else if (col == 2) { - val view = getInflatedPlusMinusView(container) + } + + 2 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root var def = 0.0 if (editDuration != null) { def = stringToDouble(editDuration?.editText?.text.toString()) } - editDuration = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, 8.0, 1.0, DecimalFormat("0"), false) - setLabelToPlusMinusView(view, getString(R.string.action_duration_h)) + editDuration = PlusMinusEditText(viewAdapter, 1.0, def, 0.0, 8.0, DecimalFormat("0"), false, getString(R.string.action_duration_h)) container.addView(view) view - } else { + } + + else -> { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { @@ -102,4 +109,4 @@ class ECarbActivity : ViewSelectorActivity() { override fun isViewFromObject(view: View, `object`: Any): Boolean = view === `object` } -} +} \ No newline at end of file diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt index a10163e466..2525033df0 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse.stringToDouble import info.nightscout.shared.weardata.EventData.ActionFillPreCheck @@ -33,19 +34,21 @@ class FillActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = 2 override fun getRowCount(): Int = 1 - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - return if (col == 0) { - val view = getInflatedPlusMinusView(container) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { + 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root var def = 0.0 if (editInsulin != null) { def = stringToDouble(editInsulin?.editText?.text.toString()) } - editInsulin = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, 30.0, 0.1, DecimalFormat("#0.0"), false) - setLabelToPlusMinusView(view, getString(R.string.action_insulin)) + editInsulin = PlusMinusEditText(viewAdapter, def, 0.0, 30.0, 0.1, DecimalFormat("#0.0"), false, getString(R.string.action_insulin)) container.addView(view) view.requestFocus() view - } else { + } + + else -> { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { @@ -68,4 +71,4 @@ class FillActivity : ViewSelectorActivity() { override fun isViewFromObject(view: View, `object`: Any): Boolean = view === `object` } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt index 73b9551b53..c6498f2638 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse import info.nightscout.shared.weardata.EventData.ActionProfileSwitchPreCheck @@ -43,29 +44,34 @@ class ProfileSwitchActivity : ViewSelectorActivity() { override fun getColumnCount(arg0: Int): Int = 3 override fun getRowCount(): Int = 1 - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - return if (col == 0) { - val view = getInflatedPlusMinusView(container) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { + 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root var def = timeshift.toDouble() if (editTimeshift != null) { def = SafeParse.stringToDouble(editTimeshift?.editText?.text.toString()) } - editTimeshift = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, 23.0, 1.0, DecimalFormat("0"), true, true) - setLabelToPlusMinusView(view, getString(R.string.action_timeshift)) + editTimeshift = PlusMinusEditText(viewAdapter, def, 0.0, 23.0, 1.0, DecimalFormat("0"), true, getString(R.string.action_timeshift), true) container.addView(view) view.requestFocus() view - } else if (col == 1) { - val view = getInflatedPlusMinusView(container) + } + + 1 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root var def = percentage.toDouble() if (editPercentage != null) { def = SafeParse.stringToDouble(editPercentage?.editText?.text.toString()) } - editPercentage = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 30.0, 250.0, 1.0, DecimalFormat("0"), false) - setLabelToPlusMinusView(view, getString(R.string.action_percentage)) + editPercentage = PlusMinusEditText(viewAdapter, def, 30.0, 250.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) + container.addView(view) view - } else { + } + + else -> { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt index cab25b52eb..26570a6bdd 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse import info.nightscout.shared.weardata.EventData.ActionTempTargetPreCheck @@ -45,49 +46,56 @@ class TempTargetActivity : ViewSelectorActivity() { return 1 } - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - return if (col == 0) { - val view = getInflatedPlusMinusView(container) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when { + col == 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root time = if (time == null) { - PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, 60.0, 0.0, 24 * 60.0, 5.0, DecimalFormat("0"), false) + PlusMinusEditText(viewAdapter, 60.0, 0.0, 24 * 60.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_duration)) } else { val def = SafeParse.stringToDouble(time?.editText?.text.toString()) - PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0.0, 24 * 60.0, 5.0, DecimalFormat("0"), false) + PlusMinusEditText(viewAdapter, def, 0.0, 24 * 60.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_duration)) } - setLabelToPlusMinusView(view, getString(R.string.action_duration)) container.addView(view) view.requestFocus() view - } else if (col == 1) { - val view = getInflatedPlusMinusView(container) + } + + col == 1 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root + val title = if (isSingleTarget) getString(R.string.action_target) else getString(R.string.action_low) if (isMGDL) { var def = 100.0 if (lowRange != null) def = SafeParse.stringToDouble(lowRange?.editText?.text.toString()) - lowRange = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 72.0, 180.0, 1.0, DecimalFormat("0"), false) + lowRange = PlusMinusEditText(viewAdapter, def, 72.0, 180.0, 1.0, DecimalFormat("0"), false, title) } else { var def = 5.5 if (lowRange != null) def = SafeParse.stringToDouble(lowRange?.editText?.text.toString()) - lowRange = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false) + lowRange = PlusMinusEditText(viewAdapter, def, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false, title) } - if (isSingleTarget) setLabelToPlusMinusView(view, getString(R.string.action_target)) - else setLabelToPlusMinusView(view, getString(R.string.action_low)) + container.addView(view) view - } else if (col == 2 && !isSingleTarget) { - val view = getInflatedPlusMinusView(container) + } + + col == 2 && !isSingleTarget -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root if (isMGDL) { var def = 100.0 if (highRange != null) def = SafeParse.stringToDouble(highRange?.editText?.text.toString()) - highRange = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 72.0, 180.0, 1.0, DecimalFormat("0"), false) + highRange = PlusMinusEditText(viewAdapter, def, 72.0, 180.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_high)) } else { var def = 5.5 if (highRange != null) def = SafeParse.stringToDouble(highRange?.editText?.text.toString()) - highRange = PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false) + highRange = PlusMinusEditText(viewAdapter, def, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false, getString(R.string.action_high)) } - setLabelToPlusMinusView(view, getString(R.string.action_high)) container.addView(view) view - } else { + } + + else -> { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { @@ -119,4 +127,4 @@ class TempTargetActivity : ViewSelectorActivity() { return view === `object` } } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt index 630317b89a..55805803d4 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse.stringToDouble import info.nightscout.shared.SafeParse.stringToInt @@ -38,32 +39,37 @@ class TreatmentActivity : ViewSelectorActivity() { val incrementInsulin1 = (sp.getDouble(R.string.key_insulin_button_increment_1, 0.5) * 10).roundToInt() / 10.0 val incrementInsulin2 = (sp.getDouble(R.string.key_insulin_button_increment_2, 1.0) * 10).roundToInt() / 10.0 + val stepValuesInsulin = listOf(0.1, incrementInsulin1, incrementInsulin2) val incrementCarbs1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() val incrementCarbs2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + val stepValuesCarbs = listOf(1.0, incrementCarbs1, incrementCarbs2) - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - return if (col == 0) { - val view = getInflatedPlusMinusView(container, true) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { + 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) + val view = viewAdapter.root var def = 0.0 if (editInsulin != null) def = stringToDouble(editInsulin?.editText?.text.toString()) val maxBolus = sp.getDouble(getString(R.string.key_treatments_safety_max_bolus), 3.0) - val buttons = listOf(Pair(R.id.plusbutton, 0.1), Pair(R.id.plusbutton2, incrementInsulin1), Pair(R.id.plusbutton3, incrementInsulin2)) - editInsulin = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxBolus, 0.1, DecimalFormat("#0.0"), false) - setLabelToPlusMinusView(view, getString(R.string.action_insulin)) + editInsulin = PlusMinusEditText(viewAdapter, def, 0.0, maxBolus, stepValuesInsulin, DecimalFormat("#0.0"), false, getString(R.string.action_insulin)) container.addView(view) view.requestFocus() view - } else if (col == 1) { - val view = getInflatedPlusMinusView(container, true) + } + + 1 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) + val view = viewAdapter.root var def = 0.0 val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) if (editCarbs != null) def = stringToDouble(editCarbs?.editText?.text.toString()) - val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, incrementCarbs1), Pair(R.id.plusbutton3, incrementCarbs2)) - editCarbs = PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) - setLabelToPlusMinusView(view, getString(R.string.action_carbs)) + + editCarbs = PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), stepValuesCarbs, DecimalFormat("0"), false, getString(R.string.action_carbs)) container.addView(view) view - } else { + } + + else -> { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt index eb3a9b70d7..d1d3b19099 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ViewSelectorActivity.kt @@ -73,22 +73,6 @@ open class ViewSelectorActivity : DaggerActivity() { } } - fun getInflatedPlusMinusView(container: ViewGroup?, mulitple: Boolean = false): View { - val layoutRight = if (mulitple) R.layout.action_editplusminus_item_quickrighty_plus else R.layout.action_editplusminus_item_quickrighty - val layoutLeft = if (mulitple) R.layout.action_editplusminus_item_quicklefty_plus else R.layout.action_editplusminus_item_quicklefty - return when (sp.getInt(R.string.key_input_design, 1)) { - 2 -> LayoutInflater.from(applicationContext).inflate(layoutRight, container, false) - 3 -> LayoutInflater.from(applicationContext).inflate(layoutLeft, container, false) - 4 -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item_viktoria, container, false) - else -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item, container, false) - } - } - - fun setLabelToPlusMinusView(view: View, labelText: String?) { - val textView = view.findViewById(R.id.label) - textView.text = labelText - } - fun showToast(context: Context?, text: Int) { Toast.makeText(context, getString(text), Toast.LENGTH_LONG).show() } diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt index dfd6e6291b..9a9bd01967 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import android.widget.ImageView import info.nightscout.androidaps.R import info.nightscout.androidaps.events.EventWearToMobile +import info.nightscout.androidaps.interaction.utils.EditPlusMinusViewAdapter import info.nightscout.androidaps.interaction.utils.PlusMinusEditText import info.nightscout.shared.SafeParse import info.nightscout.shared.weardata.EventData.ActionWizardPreCheck @@ -37,35 +38,39 @@ class WizardActivity : ViewSelectorActivity() { override fun getRowCount(): Int = 1 private val increment1 = sp.getInt(R.string.key_carbs_button_increment_1, 5).toDouble() private val increment2 = sp.getInt(R.string.key_carbs_button_increment_2, 10).toDouble() + val stepValues = listOf(1.0, increment1, increment2) - override fun instantiateItem(container: ViewGroup, row: Int, col: Int): Any { - return if (col == 0) { - val view = getInflatedPlusMinusView(container, true) + override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when { + col == 0 -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) + val view = viewAdapter.root val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - val buttons = listOf(Pair(R.id.plusbutton, 1.0), Pair(R.id.plusbutton2, increment1), Pair(R.id.plusbutton3, increment2)) editCarbs = if (editCarbs == null) { - PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, 0.0, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) + PlusMinusEditText(viewAdapter, 0.0, 0.0, maxCarbs.toDouble(), stepValues, DecimalFormat("0"), false, getString(R.string.action_carbs)) } else { val def = SafeParse.stringToDouble(editCarbs?.editText?.text.toString()) - PlusMinusEditText(view, R.id.amountfield, buttons, R.id.minusbutton, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false) + PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false, getString(R.string.action_carbs)) } - setLabelToPlusMinusView(view, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() view - } else if (col == 1 && hasPercentage) { - val view = getInflatedPlusMinusView(container) + } + + col == 1 && hasPercentage -> { + val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) + val view = viewAdapter.root val percentage = sp.getInt(getString(R.string.key_bolus_wizard_percentage), 100) editPercentage = if (editPercentage == null) { - PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, percentage.toDouble(), 50.0, 150.0, 1.0, DecimalFormat("0"), false) + PlusMinusEditText(viewAdapter, percentage.toDouble(), 50.0, 150.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) } else { val def = SafeParse.stringToDouble(editPercentage?.editText?.text.toString()) - PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 50.0, 150.0, 1.0, DecimalFormat("0"), false) + PlusMinusEditText(viewAdapter, def, 50.0, 150.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) } - setLabelToPlusMinusView(view, getString(R.string.action_percentage)) container.addView(view) view - } else { + } + + else -> { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) view.findViewById(R.id.confirmbutton) .setOnClickListener { diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt index 4b3798940b..a1de3f1e9d 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt @@ -2,10 +2,10 @@ package info.nightscout.androidaps.interaction.utils import android.content.Context import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import info.nightscout.androidaps.R import info.nightscout.androidaps.databinding.ActionEditplusminusItemBinding +import info.nightscout.androidaps.databinding.ActionEditplusminusItemPlusBinding import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickleftyPlusBinding import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickleftyBinding import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickrightyBinding @@ -14,65 +14,84 @@ import info.nightscout.androidaps.databinding.ActionEditplusminusItemViktoriaBin import info.nightscout.shared.sharedPreferences.SP /** - * NumberPickerViewAdapter binds both NumberPickerLayoutBinding and NumberPickerLayoutVerticalBinding shared attributes to one common view adapter. + * EditPlusMinusViewAdapter binds both ActionEditplusminusItemBinding variants shared attributes to one common view adapter. * Requires at least one of the ViewBinding as a parameter. Recommended to use the factory object to create the binding. */ class EditPlusMinusViewAdapter( - val eS: ActionEditplusminusItemBinding?, - val eQLP: ActionEditplusminusItemQuickleftyPlusBinding?, - val eQL: ActionEditplusminusItemQuickleftyBinding?, - val eQRP: ActionEditplusminusItemQuickleftyPlusBinding?, - val qQR: ActionEditplusminusItemQuickrightyBinding?, - val nQRP: ActionEditplusminusItemQuickrightyPlusBinding?, - val eV: ActionEditplusminusItemViktoriaBinding? + eD: ActionEditplusminusItemBinding?, + eDP: ActionEditplusminusItemPlusBinding?, + eQL: ActionEditplusminusItemQuickleftyBinding?, + eQLP: ActionEditplusminusItemQuickleftyPlusBinding?, + eQR: ActionEditplusminusItemQuickrightyBinding?, + eQRP: ActionEditplusminusItemQuickrightyPlusBinding?, + eV: ActionEditplusminusItemViktoriaBinding? ) { init { - if (eS == null && eQLP == null && eQL == null && eQRP == null && qQR == null && nQRP == null && eV == null) { + if (eD == null && eDP == null && eQL == null && eQLP == null && eQR == null && eQRP == null && eV == null) { throw IllegalArgumentException("Require at least on Binding parameter") } } - val amountField = - eS?.amountfield ?: eQLP?.amountfield ?: eQL?.amountfield ?: eQRP?.amountfield ?: qQR?.amountfield ?: nQRP?.amountfield ?: eV?.amountfield + val editText = + eD?.editText ?: eDP?.editText ?: eQL?.editText ?: eQLP?.editText ?: eQR?.editText ?: eQRP?.editText ?: eV?.editText ?: throw IllegalArgumentException("Missing require View Binding parameter display") val minusButton = - eS?.minusbutton ?: eQLP?.minusbutton ?: eQL?.minusbutton ?: eQRP?.minusbutton ?: qQR?.minusbutton ?: nQRP?.minusbutton ?: eV?.minusbutton + eD?.minusButton ?: eDP?.minusButton ?: eQL?.minusButton ?: eQLP?.minusButton ?: eQR?.minusButton ?: eQRP?.minusButton ?: eV?.minusButton ?: throw IllegalArgumentException("Missing require View Binding parameter display") - val plusButton = - eS?.plusbutton ?: eQLP?.plusbutton ?: eQL?.plusbutton ?: eQRP?.plusbutton ?: qQR?.plusbutton ?: nQRP?.plusbutton ?: eV?.plusbutton + val plusButton1 = + eD?.plusButton1 ?: eDP?.plusButton1 ?: eQL?.plusButton1 ?: eQLP?.plusButton1 ?: eQR?.plusButton1 ?: eQRP?.plusButton1 ?: eV?.plusButton1 ?: throw IllegalArgumentException("Missing require View Binding parameter display") val label = - eS?.label ?: eQLP?.label ?: eQL?.label ?: eQRP?.label ?: qQR?.label ?: nQRP?.label ?: eV?.label + eD?.label ?: eDP?.label ?: eQL?.label ?: eQLP?.label ?: eQR?.label ?: eQRP?.label ?: eV?.label ?: throw IllegalArgumentException("Missing require View Binding parameter display") - val plusButton2 = eQLP?.plusbutton2 ?: eQRP?.plusbutton2 - val plusButton3 = eQLP?.plusbutton3 ?: eQRP?.plusbutton3 + val plusButton2 = eDP?.plusButton2 ?: eQLP?.plusButton2 ?: eQRP?.plusButton2 + val plusButton3 = eDP?.plusButton3 ?: eQLP?.plusButton3 ?: eQRP?.plusButton3 val root = - eS?.root ?: eQLP?.root ?: eQL?.root ?: eQRP?.root ?: qQR?.root ?: nQRP?.root ?: eV?.root + eD?.root ?: eDP?.root ?: eQL?.root ?: eQLP?.root ?: eQR?.root ?: eQRP?.root ?: eV?.root ?: throw IllegalArgumentException("Missing require View Binding parameter display") companion object { - fun getInflatedPlusMinusView(sp: SP, context: Context, container: ViewGroup?, mulitple: Boolean = false): EditPlusMinusViewAdapter { + fun getViewAdapter(sp: SP, context: Context, container: ViewGroup?, multiple: Boolean = false): EditPlusMinusViewAdapter { val inflater = LayoutInflater.from(context) - val bindLayout = ActionEditplusminusItemBinding.inflate(inflater, container, false) - val binding = EditPlusMinusViewAdapter(bindLayout, null, null, null, null, null, null) - return binding - // val layoutRight = if (mulitple) R.layout.action_editplusminus_item_quickrighty_plus else R.layout.action_editplusminus_item_quickrighty - // val layoutLeft = if (mulitple) R.layout.action_editplusminus_item_quicklefty_plus else R.layout.action_editplusminus_item_quicklefty - // return when (sp.getInt(R.string.key_input_design, 1)) { - // 2 -> LayoutInflater.from(applicationContext).inflate(layoutRight, container, false) - // 3 -> LayoutInflater.from(applicationContext).inflate(layoutLeft, container, false) - // 4 -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item_viktoria, container, false) - // else -> LayoutInflater.from(applicationContext).inflate(R.layout.action_editplusminus_item, container, false) - // } + + return when (sp.getInt(R.string.key_input_design, 1)) { + 2 -> { + if (multiple) { + val bindLayout = ActionEditplusminusItemQuickrightyPlusBinding.inflate(inflater, container, false) + EditPlusMinusViewAdapter(null, null, null, null, null, bindLayout, null) + } else { + val bindLayout = ActionEditplusminusItemQuickrightyBinding.inflate(inflater, container, false) + EditPlusMinusViewAdapter(null, null, null, null, bindLayout, null, null) + } + } + + 3 -> { + if (multiple) { + val bindLayout = ActionEditplusminusItemQuickleftyPlusBinding.inflate(inflater, container, false) + EditPlusMinusViewAdapter(null, null, null, bindLayout, null, null, null) + } else { + val bindLayout = ActionEditplusminusItemQuickleftyBinding.inflate(inflater, container, false) + EditPlusMinusViewAdapter(null, null, bindLayout, null, null, null, null) + } + } + + 4 -> { + val bindLayout = ActionEditplusminusItemViktoriaBinding.inflate(inflater, container, false) + EditPlusMinusViewAdapter(null, null, null, null, null, null, bindLayout) + } + + else -> { + if (multiple) { + val bindLayout = ActionEditplusminusItemPlusBinding.inflate(inflater, container, false) + EditPlusMinusViewAdapter(null, bindLayout, null, null, null, null, null) + } else { + val bindLayout = ActionEditplusminusItemBinding.inflate(inflater, container, false) + EditPlusMinusViewAdapter(bindLayout, null, null, null, null, null, null) + } + } + } } - // fun getBinding(bindLayout: NumberPickerLayoutBinding): NumberPickerViewAdapter { - // return NumberPickerViewAdapter(bindLayout, null) - // } - // - // fun getBinding(bindLayout: NumberPickerLayoutVerticalBinding): NumberPickerViewAdapter { - // return NumberPickerViewAdapter(null, bindLayout) - // } } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt index f812b7e245..2430c9e677 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt @@ -9,7 +9,6 @@ import android.view.View import android.view.View.OnGenericMotionListener import android.view.View.OnTouchListener import android.widget.TextView -import androidx.appcompat.widget.AppCompatButton import androidx.core.view.InputDeviceCompat import androidx.core.view.MotionEventCompat import java.text.DecimalFormat @@ -17,47 +16,38 @@ import java.text.NumberFormat import java.util.concurrent.Executors import java.util.concurrent.ScheduledExecutorService import java.util.concurrent.TimeUnit -import kotlin.Pair /** * Created by mike on 28.06.2016. */ @SuppressLint("SetTextI18n") class PlusMinusEditText @JvmOverloads constructor( - view: View, - editTextID: Int, - private var plusButtons: List>, - minusID: Int, + private val binding: EditPlusMinusViewAdapter, initValue: Double, private val minValue: Double, private val maxValue: Double, - private val stepGeneral: Double, + private val stepValues: List, private val formatter: NumberFormat, private val allowZero: Boolean, + label: String, private val roundRobin: Boolean = false, ) : View.OnKeyListener, OnTouchListener, View.OnClickListener, OnGenericMotionListener { constructor( - view: View, - editTextID: Int, - plusID: Int, - minusID: Int, + binding: EditPlusMinusViewAdapter, initValue: Double, minValue: Double, maxValue: Double, - stepGeneral: Double, + step: Double, formatter: NumberFormat, allowZero: Boolean, + label: String, roundRobin: Boolean = false - ) : this(view, editTextID, listOf(Pair(plusID, stepGeneral)), minusID, initValue, minValue, maxValue, stepGeneral, formatter, allowZero, roundRobin) + ) : this(binding, initValue, minValue, maxValue, listOf(step), formatter, allowZero, label, roundRobin) + private val stepGeneral: Double = stepValues[0] var editText: TextView private set - private var minusImage: View - private var plusImage1: View - private var plusImage2: AppCompatButton? = null - private var plusImage3: AppCompatButton? = null private var value: Double - private val context: Context private var mChangeCounter = 0 private var mLastChange: Long = 0 private val mHandler: Handler @@ -70,11 +60,11 @@ import kotlin.Pair override fun run() { val msg = Message() val doubleLimit = 5 - val multipleButtons = mInc && (plusImage2 != null || plusImage3 != null) + val multipleButtons = mInc && (binding.plusButton2 != null || binding.plusButton3 != null) if (!multipleButtons && repeated % doubleLimit == 0) multiplier *= 2 val bundle = Bundle() - bundle.putDouble("step", step) - bundle.putInt("multiplier", multiplier) + bundle.putDouble(STEP, step) + bundle.putInt(MULTIPLIER, multiplier) msg.data = bundle if (mInc) { @@ -114,14 +104,14 @@ import kotlin.Pair if (vibrate) vibrateDevice() } - fun vibrateDevice() { + private fun vibrateDevice() { val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { val vibratorManager = - context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager + binding.root.context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager vibratorManager.defaultVibrator } else { @Suppress("DEPRECATION") - context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + binding.root.context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -155,19 +145,19 @@ import kotlin.Pair private fun getStep(v: View): Double { return when (v) { - plusImage1 -> plusButtons[0].second - plusImage2 -> plusButtons[1].second - plusImage3 -> plusButtons[2].second - else -> stepGeneral + binding.plusButton1 -> stepValues[0] + binding.plusButton2 -> stepValues[1] + binding.plusButton3 -> stepValues[2] + else -> stepValues[0] } } private fun isIncrement(v: View): Boolean { return when (v) { - plusImage1 -> true - plusImage2 -> true - plusImage3 -> true - else -> false + binding.plusButton1 -> true + binding.plusButton2 -> true + binding.plusButton3 -> true + else -> false } } @@ -229,30 +219,22 @@ import kotlin.Pair private const val THRESHOLD_TIME = 100 private const val MSG_INC = 0 private const val MSG_DEC = 1 + private const val STEP = "step" + private const val MULTIPLIER = "multiplier" } init { - context = view.context - editText = view.findViewById(editTextID) - minusImage = view.findViewById(minusID) - plusImage1 = view.findViewById(plusButtons.first().first) + editText = binding.editText + binding.label.text = label val format = DecimalFormat("#.#") - plusButtons.getOrNull(1)?.let { - plusImage2 = view.findViewById(it.first) - plusImage2?.text = "+${format.format(it.second).replaceFirst("^0+(?!$)".toRegex(), "")}" - plusImage2?.visibility = View.VISIBLE - } - plusButtons.getOrNull(2)?.let { - plusImage3 = view.findViewById(it.first) - plusImage3?.text = "+${format.format(it.second).replaceFirst("^0+(?!$)".toRegex(), "")}" - plusImage3?.visibility = View.VISIBLE - } + binding.plusButton2?.text = "+${format.format(stepValues[1]).replaceFirst("^0+(?!$)".toRegex(), "")}" + binding.plusButton3?.text = "+${format.format(stepValues[2]).replaceFirst("^0+(?!$)".toRegex(), "")}" value = initValue mHandler = object : Handler(Looper.getMainLooper()) { override fun handleMessage(msg: Message) { - val multiplier = msg.data.getInt("multiplier") - val step = msg.data.getDouble("step") + val multiplier = msg.data.getInt(MULTIPLIER) + val step = msg.data.getDouble(STEP) when (msg.what) { MSG_INC -> { @@ -271,18 +253,18 @@ import kotlin.Pair editText.showSoftInputOnFocus = false editText.setTextIsSelectable(false) - minusImage.setOnTouchListener(this) - minusImage.setOnKeyListener(this) - minusImage.setOnClickListener(this) - plusImage1.setOnTouchListener(this) - plusImage1.setOnKeyListener(this) - plusImage1.setOnClickListener(this) - plusImage2?.setOnTouchListener(this) - plusImage2?.setOnKeyListener(this) - plusImage2?.setOnClickListener(this) - plusImage3?.setOnTouchListener(this) - plusImage3?.setOnKeyListener(this) - plusImage3?.setOnClickListener(this) + binding.minusButton.setOnTouchListener(this) + binding.minusButton.setOnKeyListener(this) + binding.minusButton.setOnClickListener(this) + binding.plusButton1.setOnTouchListener(this) + binding.plusButton1.setOnKeyListener(this) + binding.plusButton1.setOnClickListener(this) + binding.plusButton2?.setOnTouchListener(this) + binding.plusButton2?.setOnKeyListener(this) + binding.plusButton2?.setOnClickListener(this) + binding.plusButton3?.setOnTouchListener(this) + binding.plusButton3?.setOnKeyListener(this) + binding.plusButton3?.setOnClickListener(this) editText.setOnGenericMotionListener(this) updateEditText() } diff --git a/wear/src/main/res/layout/action_editplusminus_item.xml b/wear/src/main/res/layout/action_editplusminus_item.xml index 5c5b8856d5..75c3b21594 100644 --- a/wear/src/main/res/layout/action_editplusminus_item.xml +++ b/wear/src/main/res/layout/action_editplusminus_item.xml @@ -1,67 +1,131 @@ - + android:layout_height="match_parent"> - + + + + + + + android:tint="@color/white" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintCircle="@+id/center" + app:layout_constraintCircleAngle="145" + app:layout_constraintCircleRadius="70dp" + app:layout_constraintLeft_toLeftOf="parent" /> - + + + + + android:layout_marginBottom="8dp" + android:background="@drawable/circle" + android:backgroundTint="@color/gray_700" + android:contentDescription="@string/increment" + app:layout_constraintBottom_toTopOf="@+id/minus_button" + app:layout_constraintCircle="@+id/center" + app:layout_constraintCircleAngle="55" + app:layout_constraintCircleRadius="40dp" + app:layout_constraintRight_toLeftOf="@id/plus_button1"> - - - - - + + android:tint="@color/white" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintCircle="@+id/center" + app:layout_constraintCircleAngle="215" + app:layout_constraintCircleRadius="70dp" + app:layout_constraintRight_toRightOf="parent" /> - + diff --git a/wear/src/main/res/layout/action_editplusminus_item_plus.xml b/wear/src/main/res/layout/action_editplusminus_item_plus.xml new file mode 100644 index 0000000000..18ea44cc13 --- /dev/null +++ b/wear/src/main/res/layout/action_editplusminus_item_plus.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml b/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml index d96ae1d26f..d857446caa 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml +++ b/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml @@ -14,38 +14,11 @@ android:layout_marginEnd="-8dp" android:orientation="vertical"> - - - - - - + android:importantForAccessibility="no" + app:layout_constraintBottom_toTopOf="@+id/minus_button" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintLeft_toRightOf="@+id/plus_button3" + app:layout_constraintTop_toTopOf="@+id/plus_button3" /> diff --git a/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml b/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml index 7e3ae3dcb1..d2e7950a05 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml +++ b/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml @@ -15,7 +15,7 @@ android:orientation="vertical"> - - - - + android:importantForAccessibility="no" - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> Date: Tue, 28 Jun 2022 09:49:39 +0200 Subject: [PATCH 05/48] chore: align plus min item --- .../utils/EditPlusMinusViewAdapter.kt | 4 +- .../interaction/utils/PlusMinusEditText.kt | 6 +- .../res/layout/action_editplusminus_item.xml | 156 ++++++------------ .../layout/action_editplusminus_item_plus.xml | 13 +- .../action_editplusminus_item_quicklefty.xml | 2 +- ...ion_editplusminus_item_quicklefty_plus.xml | 33 ++-- .../action_editplusminus_item_quickrighty.xml | 2 +- ...on_editplusminus_item_quickrighty_plus.xml | 18 +- .../action_editplusminus_item_viktoria.xml | 6 +- 9 files changed, 86 insertions(+), 154 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt index a1de3f1e9d..81c343db74 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt @@ -36,8 +36,8 @@ class EditPlusMinusViewAdapter( val editText = eD?.editText ?: eDP?.editText ?: eQL?.editText ?: eQLP?.editText ?: eQR?.editText ?: eQRP?.editText ?: eV?.editText ?: throw IllegalArgumentException("Missing require View Binding parameter display") - val minusButton = - eD?.minusButton ?: eDP?.minusButton ?: eQL?.minusButton ?: eQLP?.minusButton ?: eQR?.minusButton ?: eQRP?.minusButton ?: eV?.minusButton + val minButton = + eD?.minButton ?: eDP?.minButton ?: eQL?.minButton ?: eQLP?.minButton ?: eQR?.minButton ?: eQRP?.minButton ?: eV?.minButton ?: throw IllegalArgumentException("Missing require View Binding parameter display") val plusButton1 = eD?.plusButton1 ?: eDP?.plusButton1 ?: eQL?.plusButton1 ?: eQLP?.plusButton1 ?: eQR?.plusButton1 ?: eQRP?.plusButton1 ?: eV?.plusButton1 diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt index 2430c9e677..f3af7a89eb 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt @@ -253,9 +253,9 @@ import java.util.concurrent.TimeUnit editText.showSoftInputOnFocus = false editText.setTextIsSelectable(false) - binding.minusButton.setOnTouchListener(this) - binding.minusButton.setOnKeyListener(this) - binding.minusButton.setOnClickListener(this) + binding.minButton.setOnTouchListener(this) + binding.minButton.setOnKeyListener(this) + binding.minButton.setOnClickListener(this) binding.plusButton1.setOnTouchListener(this) binding.plusButton1.setOnKeyListener(this) binding.plusButton1.setOnClickListener(this) diff --git a/wear/src/main/res/layout/action_editplusminus_item.xml b/wear/src/main/res/layout/action_editplusminus_item.xml index 75c3b21594..5360d811dd 100644 --- a/wear/src/main/res/layout/action_editplusminus_item.xml +++ b/wear/src/main/res/layout/action_editplusminus_item.xml @@ -1,131 +1,67 @@ - - - - - - - + android:layout_height="match_parent" + android:layout_gravity="center" + android:gravity="center" + android:orientation="horizontal"> + android:tint="@color/white" /> - - - - - + android:orientation="vertical"> - + + + + + + android:tint="@color/white" /> - + diff --git a/wear/src/main/res/layout/action_editplusminus_item_plus.xml b/wear/src/main/res/layout/action_editplusminus_item_plus.xml index 18ea44cc13..2cbf3a620c 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_plus.xml +++ b/wear/src/main/res/layout/action_editplusminus_item_plus.xml @@ -18,13 +18,13 @@ android:id="@+id/edit_text" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="-6dp" android:layout_marginHorizontal="10dp" + android:layout_marginTop="-6dp" android:cursorVisible="false" + android:gravity="center" android:inputType="numberDecimal" android:textColor="@color/white" android:textSize="40sp" - android:gravity="center" app:layout_constraintEnd_toEndOf="@+id/value_background" app:layout_constraintStart_toStartOf="@+id/value_background" app:layout_constraintTop_toTopOf="@+id/value_background" @@ -34,8 +34,8 @@ android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="-10dp" android:layout_below="@+id/edit_text" + android:layout_marginTop="-10dp" android:gravity="center" android:labelFor="@+id/edit_text" android:textColor="@color/white" @@ -47,7 +47,7 @@ tools:text="label" /> - @@ -89,26 +89,25 @@ android:textSize="30sp" app:layout_constraintBottom_toTopOf="@+id/plus_button1" app:layout_constraintCircle="@+id/center" - app:layout_constraintCircleAngle="270" - app:layout_constraintCircleRadius="65dp" + app:layout_constraintCircleAngle="90" + app:layout_constraintCircleRadius="70dp" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/plus_button3" tools:text="+5" /> + app:layout_constraintBottom_toTopOf="@+id/min_button" + app:layout_constraintCircle="@+id/center" + app:layout_constraintCircleAngle="305" + app:layout_constraintCircleRadius="40dp" + app:layout_constraintRight_toLeftOf="@id/plus_button1" /> diff --git a/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml b/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml index d2e7950a05..16daa2e8c6 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml +++ b/wear/src/main/res/layout/action_editplusminus_item_quickrighty.xml @@ -42,7 +42,7 @@ tools:text="label" /> + android:background="@drawable/circle" + android:backgroundTint="@color/gray_700" + android:contentDescription="@string/increment" + app:layout_constraintBottom_toTopOf="@+id/min_button" + app:layout_constraintCircle="@+id/center" + app:layout_constraintCircleAngle="305" + app:layout_constraintCircleRadius="40dp" + app:layout_constraintRight_toLeftOf="@id/plus_button1" /> + tools:text="label" /> - - From f0076ed0dd1fa3ce0c3242ebbc6be8b75be49d11 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 28 Jun 2022 10:06:05 +0200 Subject: [PATCH 06/48] chore: wear rename editplusmin layouts --- .../utils/EditPlusMinusViewAdapter.kt | 42 +++++++++---------- ...sminus_item.xml => action_editplusmin.xml} | 0 ..._plus.xml => action_editplusmin_multi.xml} | 0 ....xml => action_editplusmin_quicklefty.xml} | 0 ...> action_editplusmin_quicklefty_multi.xml} | 4 +- ...xml => action_editplusmin_quickrighty.xml} | 0 ... action_editplusmin_quickrighty_multi.xml} | 2 +- ...ia.xml => action_editplusmin_viktoria.xml} | 0 8 files changed, 24 insertions(+), 24 deletions(-) rename wear/src/main/res/layout/{action_editplusminus_item.xml => action_editplusmin.xml} (100%) rename wear/src/main/res/layout/{action_editplusminus_item_plus.xml => action_editplusmin_multi.xml} (100%) rename wear/src/main/res/layout/{action_editplusminus_item_quicklefty.xml => action_editplusmin_quicklefty.xml} (100%) rename wear/src/main/res/layout/{action_editplusminus_item_quicklefty_plus.xml => action_editplusmin_quicklefty_multi.xml} (98%) rename wear/src/main/res/layout/{action_editplusminus_item_quickrighty.xml => action_editplusmin_quickrighty.xml} (100%) rename wear/src/main/res/layout/{action_editplusminus_item_quickrighty_plus.xml => action_editplusmin_quickrighty_multi.xml} (99%) rename wear/src/main/res/layout/{action_editplusminus_item_viktoria.xml => action_editplusmin_viktoria.xml} (100%) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt index 81c343db74..df13d69b8a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt @@ -4,13 +4,13 @@ import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup import info.nightscout.androidaps.R -import info.nightscout.androidaps.databinding.ActionEditplusminusItemBinding -import info.nightscout.androidaps.databinding.ActionEditplusminusItemPlusBinding -import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickleftyPlusBinding -import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickleftyBinding -import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickrightyBinding -import info.nightscout.androidaps.databinding.ActionEditplusminusItemQuickrightyPlusBinding -import info.nightscout.androidaps.databinding.ActionEditplusminusItemViktoriaBinding +import info.nightscout.androidaps.databinding.ActionEditplusminBinding +import info.nightscout.androidaps.databinding.ActionEditplusminMultiBinding +import info.nightscout.androidaps.databinding.ActionEditplusminQuickleftyMultiBinding +import info.nightscout.androidaps.databinding.ActionEditplusminQuickleftyBinding +import info.nightscout.androidaps.databinding.ActionEditplusminQuickrightyBinding +import info.nightscout.androidaps.databinding.ActionEditplusminQuickrightyMultiBinding +import info.nightscout.androidaps.databinding.ActionEditplusminViktoriaBinding import info.nightscout.shared.sharedPreferences.SP /** @@ -18,13 +18,13 @@ import info.nightscout.shared.sharedPreferences.SP * Requires at least one of the ViewBinding as a parameter. Recommended to use the factory object to create the binding. */ class EditPlusMinusViewAdapter( - eD: ActionEditplusminusItemBinding?, - eDP: ActionEditplusminusItemPlusBinding?, - eQL: ActionEditplusminusItemQuickleftyBinding?, - eQLP: ActionEditplusminusItemQuickleftyPlusBinding?, - eQR: ActionEditplusminusItemQuickrightyBinding?, - eQRP: ActionEditplusminusItemQuickrightyPlusBinding?, - eV: ActionEditplusminusItemViktoriaBinding? + eD: ActionEditplusminBinding?, + eDP: ActionEditplusminMultiBinding?, + eQL: ActionEditplusminQuickleftyBinding?, + eQLP: ActionEditplusminQuickleftyMultiBinding?, + eQR: ActionEditplusminQuickrightyBinding?, + eQRP: ActionEditplusminQuickrightyMultiBinding?, + eV: ActionEditplusminViktoriaBinding? ) { init { @@ -59,35 +59,35 @@ class EditPlusMinusViewAdapter( return when (sp.getInt(R.string.key_input_design, 1)) { 2 -> { if (multiple) { - val bindLayout = ActionEditplusminusItemQuickrightyPlusBinding.inflate(inflater, container, false) + val bindLayout = ActionEditplusminQuickrightyMultiBinding.inflate(inflater, container, false) EditPlusMinusViewAdapter(null, null, null, null, null, bindLayout, null) } else { - val bindLayout = ActionEditplusminusItemQuickrightyBinding.inflate(inflater, container, false) + val bindLayout = ActionEditplusminQuickrightyBinding.inflate(inflater, container, false) EditPlusMinusViewAdapter(null, null, null, null, bindLayout, null, null) } } 3 -> { if (multiple) { - val bindLayout = ActionEditplusminusItemQuickleftyPlusBinding.inflate(inflater, container, false) + val bindLayout = ActionEditplusminQuickleftyMultiBinding.inflate(inflater, container, false) EditPlusMinusViewAdapter(null, null, null, bindLayout, null, null, null) } else { - val bindLayout = ActionEditplusminusItemQuickleftyBinding.inflate(inflater, container, false) + val bindLayout = ActionEditplusminQuickleftyBinding.inflate(inflater, container, false) EditPlusMinusViewAdapter(null, null, bindLayout, null, null, null, null) } } 4 -> { - val bindLayout = ActionEditplusminusItemViktoriaBinding.inflate(inflater, container, false) + val bindLayout = ActionEditplusminViktoriaBinding.inflate(inflater, container, false) EditPlusMinusViewAdapter(null, null, null, null, null, null, bindLayout) } else -> { if (multiple) { - val bindLayout = ActionEditplusminusItemPlusBinding.inflate(inflater, container, false) + val bindLayout = ActionEditplusminMultiBinding.inflate(inflater, container, false) EditPlusMinusViewAdapter(null, bindLayout, null, null, null, null, null) } else { - val bindLayout = ActionEditplusminusItemBinding.inflate(inflater, container, false) + val bindLayout = ActionEditplusminBinding.inflate(inflater, container, false) EditPlusMinusViewAdapter(bindLayout, null, null, null, null, null, null) } } diff --git a/wear/src/main/res/layout/action_editplusminus_item.xml b/wear/src/main/res/layout/action_editplusmin.xml similarity index 100% rename from wear/src/main/res/layout/action_editplusminus_item.xml rename to wear/src/main/res/layout/action_editplusmin.xml diff --git a/wear/src/main/res/layout/action_editplusminus_item_plus.xml b/wear/src/main/res/layout/action_editplusmin_multi.xml similarity index 100% rename from wear/src/main/res/layout/action_editplusminus_item_plus.xml rename to wear/src/main/res/layout/action_editplusmin_multi.xml diff --git a/wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml b/wear/src/main/res/layout/action_editplusmin_quicklefty.xml similarity index 100% rename from wear/src/main/res/layout/action_editplusminus_item_quicklefty.xml rename to wear/src/main/res/layout/action_editplusmin_quicklefty.xml diff --git a/wear/src/main/res/layout/action_editplusminus_item_quicklefty_plus.xml b/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml similarity index 98% rename from wear/src/main/res/layout/action_editplusminus_item_quicklefty_plus.xml rename to wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml index 121be927ac..5a4e9b10cb 100644 --- a/wear/src/main/res/layout/action_editplusminus_item_quicklefty_plus.xml +++ b/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml @@ -35,7 +35,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/edit_text" - android:layout_marginTop="-8dp" + android:layout_marginTop="-9dp" android:gravity="center" android:labelFor="@+id/edit_text" android:textColor="@color/white" @@ -44,7 +44,7 @@ app:layout_constraintStart_toStartOf="@+id/edit_text" app:layout_constraintTop_toBottomOf="@id/edit_text" tools:ignore="LabelFor" - tools:text="label" /> + tools:text="label123" /> Date: Tue, 28 Jun 2022 10:58:45 +0200 Subject: [PATCH 07/48] chore: fix code smells --- .../wear/wearintegration/DataHandlerMobile.kt | 8 ++++---- .../info/nightscout/shared/weardata/EventData.kt | 8 ++++---- .../androidaps/comm/DataHandlerWear.kt | 8 ++++---- .../interaction/actions/TempTargetActivity.kt | 1 - .../utils/EditPlusMinusViewAdapter.kt | 16 ++++++++-------- .../interaction/utils/PlusMinusEditText.kt | 7 ++----- 6 files changed, 22 insertions(+), 26 deletions(-) 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 25017bfa3b..4ddbd962cd 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 @@ -697,10 +697,10 @@ class DataHandlerMobile @Inject constructor( bolusPercentage = sp.getInt(R.string.key_boluswizard_percentage, 100), maxCarbs = sp.getInt(R.string.key_treatmentssafety_maxcarbs, 48), maxBolus = sp.getDouble(R.string.key_treatmentssafety_maxbolus, 3.0), - insulin_button_increment_1 = sp.getDouble(R.string.key_insulin_button_increment_1, InsulinDialog.PLUS1_DEFAULT), - insulin_button_increment_2 = sp.getDouble(R.string.key_insulin_button_increment_2, InsulinDialog.PLUS2_DEFAULT), - carbs_button_increment_1 = sp.getInt(R.string.key_carbs_button_increment_1, CarbsDialog.FAV1_DEFAULT), - carbs_button_increment_2 = sp.getInt(R.string.key_carbs_button_increment_2, CarbsDialog.FAV2_DEFAULT) + insulinButtonIncrement1 = sp.getDouble(R.string.key_insulin_button_increment_1, InsulinDialog.PLUS1_DEFAULT), + insulinButtonIncrement2 = sp.getDouble(R.string.key_insulin_button_increment_2, InsulinDialog.PLUS2_DEFAULT), + carbsButtonIncrement1 = sp.getInt(R.string.key_carbs_button_increment_1, CarbsDialog.FAV1_DEFAULT), + carbsButtonIncrement2 = sp.getInt(R.string.key_carbs_button_increment_2, CarbsDialog.FAV2_DEFAULT) ) ) ) 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 bd0d06711b..b0fe71d4aa 100644 --- a/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt +++ b/shared/src/main/java/info/nightscout/shared/weardata/EventData.kt @@ -209,10 +209,10 @@ sealed class EventData : Event() { val bolusPercentage: Int, val maxCarbs: Int, val maxBolus: Double, - val insulin_button_increment_1: Double, - val insulin_button_increment_2: Double, - val carbs_button_increment_1: Int, - val carbs_button_increment_2: Int + val insulinButtonIncrement1: Double, + val insulinButtonIncrement2: Double, + val carbsButtonIncrement1: Int, + val carbsButtonIncrement2: Int ) : EventData() @Serializable diff --git a/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt b/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt index 3a05c06cf0..321ccefeeb 100644 --- a/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt +++ b/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt @@ -162,10 +162,10 @@ class DataHandlerWear @Inject constructor( sp.putInt(R.string.key_bolus_wizard_percentage, it.bolusPercentage) sp.putInt(R.string.key_treatments_safety_max_carbs, it.maxCarbs) sp.putDouble(R.string.key_treatments_safety_max_bolus, it.maxBolus) - sp.putDouble(R.string.key_insulin_button_increment_1, it.insulin_button_increment_1) - sp.putDouble(R.string.key_insulin_button_increment_2, it.insulin_button_increment_2) - sp.putInt(R.string.key_carbs_button_increment_1, it.carbs_button_increment_1) - sp.putInt(R.string.key_carbs_button_increment_2, it.carbs_button_increment_2) + sp.putDouble(R.string.key_insulin_button_increment_1, it.insulinButtonIncrement1) + sp.putDouble(R.string.key_insulin_button_increment_2, it.insulinButtonIncrement2) + sp.putInt(R.string.key_carbs_button_increment_1, it.carbsButtonIncrement1) + sp.putInt(R.string.key_carbs_button_increment_2, it.carbsButtonIncrement2) } disposable += rxBus .toObservable(EventData.QuickWizard::class.java) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt index 26570a6bdd..80180d850a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt @@ -74,7 +74,6 @@ class TempTargetActivity : ViewSelectorActivity() { if (lowRange != null) def = SafeParse.stringToDouble(lowRange?.editText?.text.toString()) lowRange = PlusMinusEditText(viewAdapter, def, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false, title) } - container.addView(view) view } diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt index df13d69b8a..4bb22f95e4 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/EditPlusMinusViewAdapter.kt @@ -14,7 +14,7 @@ import info.nightscout.androidaps.databinding.ActionEditplusminViktoriaBinding import info.nightscout.shared.sharedPreferences.SP /** - * EditPlusMinusViewAdapter binds both ActionEditplusminusItemBinding variants shared attributes to one common view adapter. + * EditPlusMinusViewAdapter binds both ActionEditplusminBinding variants shared attributes to one common view adapter. * Requires at least one of the ViewBinding as a parameter. Recommended to use the factory object to create the binding. */ class EditPlusMinusViewAdapter( @@ -32,28 +32,28 @@ class EditPlusMinusViewAdapter( throw IllegalArgumentException("Require at least on Binding parameter") } } - + private val errorMessage = "Missing require View Binding parameter" val editText = eD?.editText ?: eDP?.editText ?: eQL?.editText ?: eQLP?.editText ?: eQR?.editText ?: eQRP?.editText ?: eV?.editText - ?: throw IllegalArgumentException("Missing require View Binding parameter display") + ?: throw IllegalArgumentException(errorMessage) val minButton = eD?.minButton ?: eDP?.minButton ?: eQL?.minButton ?: eQLP?.minButton ?: eQR?.minButton ?: eQRP?.minButton ?: eV?.minButton - ?: throw IllegalArgumentException("Missing require View Binding parameter display") + ?: throw IllegalArgumentException(errorMessage) val plusButton1 = eD?.plusButton1 ?: eDP?.plusButton1 ?: eQL?.plusButton1 ?: eQLP?.plusButton1 ?: eQR?.plusButton1 ?: eQRP?.plusButton1 ?: eV?.plusButton1 - ?: throw IllegalArgumentException("Missing require View Binding parameter display") + ?: throw IllegalArgumentException(errorMessage) val label = eD?.label ?: eDP?.label ?: eQL?.label ?: eQLP?.label ?: eQR?.label ?: eQRP?.label ?: eV?.label - ?: throw IllegalArgumentException("Missing require View Binding parameter display") + ?: throw IllegalArgumentException(errorMessage) val plusButton2 = eDP?.plusButton2 ?: eQLP?.plusButton2 ?: eQRP?.plusButton2 val plusButton3 = eDP?.plusButton3 ?: eQLP?.plusButton3 ?: eQRP?.plusButton3 val root = eD?.root ?: eDP?.root ?: eQL?.root ?: eQLP?.root ?: eQR?.root ?: eQRP?.root ?: eV?.root - ?: throw IllegalArgumentException("Missing require View Binding parameter display") + ?: throw IllegalArgumentException(errorMessage) companion object { - fun getViewAdapter(sp: SP, context: Context, container: ViewGroup?, multiple: Boolean = false): EditPlusMinusViewAdapter { + fun getViewAdapter(sp: SP, context: Context, container: ViewGroup, multiple: Boolean = false): EditPlusMinusViewAdapter { val inflater = LayoutInflater.from(context) return when (sp.getInt(R.string.key_input_design, 1)) { diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt index f3af7a89eb..d6933c1a13 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.kt @@ -1,6 +1,5 @@ package info.nightscout.androidaps.interaction.utils -import android.annotation.SuppressLint import android.content.Context import android.os.* import android.view.KeyEvent @@ -20,7 +19,7 @@ import java.util.concurrent.TimeUnit /** * Created by mike on 28.06.2016. */ -@SuppressLint("SetTextI18n") class PlusMinusEditText @JvmOverloads constructor( +class PlusMinusEditText @JvmOverloads constructor( private val binding: EditPlusMinusViewAdapter, initValue: Double, private val minValue: Double, @@ -106,9 +105,7 @@ import java.util.concurrent.TimeUnit private fun vibrateDevice() { val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - val vibratorManager = - binding.root.context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager - vibratorManager.defaultVibrator + (binding.root.context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager).defaultVibrator } else { @Suppress("DEPRECATION") binding.root.context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator From 6a83642c2e9cbfd05df1859475d6c549e211e309 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 27 Jun 2022 21:59:40 +0200 Subject: [PATCH 08/48] 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 0e0470a4e84041aa00e3f42e828583ea0365b25d Mon Sep 17 00:00:00 2001 From: Philoul Date: Thu, 30 Jun 2022 01:03:00 +0200 Subject: [PATCH 09/48] 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 6f6b16805632b1b286948e447c2be06a4bbbb79d Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Thu, 30 Jun 2022 08:53:42 +0200 Subject: [PATCH 10/48] chore: wear remove bg multi plus --- .../interaction/actions/ECarbActivity.kt | 3 +-- .../interaction/actions/FillActivity.kt | 2 +- .../actions/ProfileSwitchActivity.kt | 2 +- .../interaction/actions/TempTargetActivity.kt | 2 +- .../interaction/actions/TreatmentActivity.kt | 2 +- .../action_editplusmin_quicklefty_multi.xml | 24 ++++++++----------- .../action_editplusmin_quickrighty_multi.xml | 9 ++----- 7 files changed, 17 insertions(+), 27 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt index 0a643e9bff..919d92b1dd 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt @@ -84,8 +84,7 @@ class ECarbActivity : ViewSelectorActivity() { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { - - //check if it can happen that the fragment is never created that hold data? + // check if it can happen that the fragment is never created that hold data? // (you have to swipe past them anyways - but still) val bolus = ActionECarbsPreCheck( stringToInt(editCarbs?.editText?.text.toString()), diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt index 2525033df0..9fdfa97d26 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt @@ -52,7 +52,7 @@ class FillActivity : ViewSelectorActivity() { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { - //check if it can happen that the fragment is never created that hold data? + // check if it can happen that the fragment is never created that hold data? // (you have to swipe past them anyways - but still) rxBus.send(EventWearToMobile(ActionFillPreCheck(stringToDouble(editInsulin?.editText?.text.toString())))) showToast(this@FillActivity, R.string.action_fill_confirmation) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt index c6498f2638..8aa2a26437 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt @@ -75,7 +75,7 @@ class ProfileSwitchActivity : ViewSelectorActivity() { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { - //check if it can happen that the fragment is never created that hold data? + // check if it can happen that the fragment is never created that hold data? // (you have to swipe past them anyways - but still) val ps = ActionProfileSwitchPreCheck(SafeParse.stringToInt(editTimeshift?.editText?.text.toString()), SafeParse.stringToInt(editPercentage?.editText?.text.toString())) rxBus.send(EventWearToMobile(ps)) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt index 80180d850a..77f1c256dc 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt @@ -98,7 +98,7 @@ class TempTargetActivity : ViewSelectorActivity() { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { - //check if it can happen that the fragment is never created that hold data? + // check if it can happen that the fragment is never created that hold data? // (you have to swipe past them anyways - but still) val action = ActionTempTargetPreCheck( ActionTempTargetPreCheck.TempTargetCommand.MANUAL, diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt index 55805803d4..1cb7c36879 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt @@ -73,7 +73,7 @@ class TreatmentActivity : ViewSelectorActivity() { val view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { - //check if it can happen that the fragment is never created that hold data? + // check if it can happen that the fragment is never created that hold data? // (you have to swipe past them anyways - but still) val bolus = ActionBolusPreCheck(stringToDouble(editInsulin?.editText?.text.toString()), stringToInt(editCarbs?.editText?.text.toString())) rxBus.send(EventWearToMobile(bolus)) diff --git a/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml b/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml index 5a4e9b10cb..d5acf0460d 100644 --- a/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml +++ b/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml @@ -19,7 +19,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="10dp" - android:layout_marginTop="-10dp" + android:layout_marginTop="-5dp" android:cursorVisible="false" android:gravity="center" android:inputType="numberDecimal" @@ -44,7 +44,7 @@ app:layout_constraintStart_toStartOf="@+id/edit_text" app:layout_constraintTop_toBottomOf="@id/edit_text" tools:ignore="LabelFor" - tools:text="label123" /> + tools:text="label" /> @@ -72,7 +72,7 @@ android:textSize="25sp" android:visibility="visible" app:layout_constraintCircle="@+id/center" - app:layout_constraintCircleAngle="35" + app:layout_constraintCircleAngle="325" app:layout_constraintCircleRadius="70dp" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -89,25 +89,21 @@ android:textSize="30sp" app:layout_constraintBottom_toTopOf="@+id/plus_button1" app:layout_constraintCircle="@+id/center" - app:layout_constraintCircleAngle="90" + app:layout_constraintCircleAngle="270" app:layout_constraintCircleRadius="70dp" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/plus_button3" tools:text="+5" /> - + app:layout_constraintLeft_toRightOf="@id/plus_button3" /> diff --git a/wear/src/main/res/layout/action_editplusmin_quickrighty_multi.xml b/wear/src/main/res/layout/action_editplusmin_quickrighty_multi.xml index 93840e6869..0cd6b4f344 100644 --- a/wear/src/main/res/layout/action_editplusmin_quickrighty_multi.xml +++ b/wear/src/main/res/layout/action_editplusmin_quickrighty_multi.xml @@ -19,7 +19,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="10dp" - android:layout_marginTop="-1dp" + android:layout_marginTop="-5dp" android:cursorVisible="false" android:gravity="center" android:inputType="numberDecimal" @@ -95,15 +95,10 @@ app:layout_constraintTop_toBottomOf="@+id/plus_button3" tools:text="+5" /> - Date: Thu, 30 Jun 2022 08:10:07 +0000 Subject: [PATCH 11/48] Bump lifecycle-livedata-ktx from 2.4.1 to 2.5.0 Bumps lifecycle-livedata-ktx from 2.4.1 to 2.5.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-livedata-ktx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f4ac0a131f..0f1228a852 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { rxandroid_version = '3.0.0' rxkotlin_version = '3.0.1' room_version = '2.4.2' - lifecycle_version = '2.4.1' + lifecycle_version = '2.5.0' dagger_version = '2.42' coroutines_version = '1.6.3' activity_version = '1.4.0' From 689a750a3ffe2c36fdb364ca68f874540c9a4c1d Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 30 Jun 2022 14:44:33 +0200 Subject: [PATCH 12/48] 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 From e83d10d856aeccdeeeb62db707aeaad45d3a67f1 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Thu, 30 Jun 2022 20:29:04 +0200 Subject: [PATCH 13/48] chore: wear plus min center label min button --- .../main/res/layout/action_editplusmin_quicklefty_multi.xml | 6 ++---- .../res/layout/action_editplusmin_quickrighty_multi.xml | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml b/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml index d5acf0460d..044232b032 100644 --- a/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml +++ b/wear/src/main/res/layout/action_editplusmin_quicklefty_multi.xml @@ -100,10 +100,8 @@ android:layout_width="108dp" android:layout_height="108dp" app:layout_constraintBottom_toTopOf="@+id/min_button" - app:layout_constraintCircle="@+id/center" - app:layout_constraintCircleAngle="55" - app:layout_constraintCircleRadius="40dp" - app:layout_constraintLeft_toRightOf="@id/plus_button3" /> + app:layout_constraintLeft_toLeftOf="@+id/min_button" + app:layout_constraintRight_toRightOf="@+id/min_button"/> + app:layout_constraintRight_toRightOf="@id/min_button" + app:layout_constraintLeft_toLeftOf="@id/min_button"/> Date: Thu, 30 Jun 2022 23:44:32 +0200 Subject: [PATCH 14/48] MDT: fix initialization --- .../pump/medtronic/MedtronicFragment.kt | 42 +++++++++---------- .../pump/medtronic/MedtronicPumpPlugin.kt | 29 ++++--------- .../service/RileyLinkBroadcastReceiver.kt | 5 +-- .../hw/rileylink/service/RileyLinkService.kt | 2 +- .../service/RileyLinkServiceData.java | 6 +-- 5 files changed, 34 insertions(+), 50 deletions(-) diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt index e3e0642a70..d65509810f 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt @@ -2,7 +2,6 @@ package info.nightscout.androidaps.plugins.pump.medtronic import android.annotation.SuppressLint import android.content.Intent -import android.graphics.Color import android.os.Bundle import android.os.Handler import android.os.HandlerThread @@ -16,13 +15,11 @@ import info.nightscout.androidaps.events.EventTempBasalChange import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.CommandQueue import info.nightscout.androidaps.interfaces.PumpSync -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.shared.logging.LTag +import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.pump.common.defs.PumpDeviceState import info.nightscout.androidaps.plugins.pump.common.events.EventRefreshButtonState import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity @@ -42,8 +39,9 @@ import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.WarnColors import info.nightscout.androidaps.utils.alertDialogs.OKDialog -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 @@ -59,7 +57,6 @@ class MedtronicFragment : DaggerFragment() { @Inject lateinit var activePlugin: ActivePlugin @Inject lateinit var medtronicPumpPlugin: MedtronicPumpPlugin @Inject lateinit var warnColors: WarnColors - @Inject lateinit var rileyLinkUtil: RileyLinkUtil @Inject lateinit var medtronicUtil: MedtronicUtil @Inject lateinit var medtronicPumpStatus: MedtronicPumpStatus @Inject lateinit var rileyLinkServiceData: RileyLinkServiceData @@ -92,7 +89,7 @@ class MedtronicFragment : DaggerFragment() { binding.rlStatus.text = rh.gs(RileyLinkServiceState.NotStarted.resourceId) - binding.pumpStatusIcon.setTextColor(rh.gac(context,R.attr.defaultTextColor)) + binding.pumpStatusIcon.setTextColor(rh.gac(context, R.attr.defaultTextColor)) @SuppressLint("SetTextI18n") binding.pumpStatusIcon.text = "{fa-bed}" @@ -139,9 +136,9 @@ class MedtronicFragment : DaggerFragment() { .toObservable(EventRileyLinkDeviceStatusChange::class.java) .observeOn(aapsSchedulers.main) .subscribe({ - aapsLogger.debug(LTag.PUMP, "onStatusEvent(EventRileyLinkDeviceStatusChange): $it") - setDeviceStatus() - }, fabricPrivacy::logException) + aapsLogger.debug(LTag.PUMP, "onStatusEvent(EventRileyLinkDeviceStatusChange): $it") + setDeviceStatus() + }, fabricPrivacy::logException) disposable += rxBus .toObservable(EventMedtronicPumpValuesChanged::class.java) .observeOn(aapsSchedulers.main) @@ -158,10 +155,10 @@ class MedtronicFragment : DaggerFragment() { .toObservable(EventMedtronicPumpConfigurationChanged::class.java) .observeOn(aapsSchedulers.main) .subscribe({ - aapsLogger.debug(LTag.PUMP, "EventMedtronicPumpConfigurationChanged triggered") - medtronicPumpPlugin.rileyLinkService?.verifyConfiguration() - updateGUI() - }, fabricPrivacy::logException) + aapsLogger.debug(LTag.PUMP, "EventMedtronicPumpConfigurationChanged triggered") + medtronicPumpPlugin.rileyLinkService?.verifyConfiguration() + updateGUI() + }, fabricPrivacy::logException) disposable += rxBus .toObservable(EventPumpStatusChanged::class.java) .observeOn(aapsSchedulers.main) @@ -200,7 +197,7 @@ class MedtronicFragment : DaggerFragment() { rileyLinkServiceData.rileyLinkServiceState.isError && rileyLinkError != null -> "{fa-bluetooth-b} " + rh.gs(rileyLinkError.getResourceId(RileyLinkTargetDevice.MedtronicPump)) else -> "{fa-bluetooth-b} " + rh.gs(resourceId) } - binding.rlStatus.setTextColor(rh.gac( context, if (rileyLinkError != null) R.attr.warningColor else R.attr.defaultTextColor)) + binding.rlStatus.setTextColor(rh.gac(context, if (rileyLinkError != null) R.attr.warningColor else R.attr.defaultTextColor)) binding.errors.text = rileyLinkServiceData.rileyLinkError?.let { @@ -253,8 +250,10 @@ class MedtronicFragment : DaggerFragment() { private fun displayNotConfiguredDialog() { context?.let { - OKDialog.show(it, rh.gs(R.string.medtronic_warning), - rh.gs(R.string.medtronic_error_operation_not_possible_no_configuration), null) + OKDialog.show( + it, rh.gs(R.string.medtronic_warning), + rh.gs(R.string.medtronic_error_operation_not_possible_no_configuration), null + ) } } @@ -272,7 +271,7 @@ class MedtronicFragment : DaggerFragment() { val min = (System.currentTimeMillis() - medtronicPumpStatus.lastConnection) / 1000 / 60 if (medtronicPumpStatus.lastConnection + 60 * 1000 > System.currentTimeMillis()) { binding.lastConnection.setText(R.string.medtronic_pump_connected_now) - binding.lastConnection.setTextColor(rh.gac(context,R.attr.defaultTextColor)) + binding.lastConnection.setTextColor(rh.gac(context, R.attr.defaultTextColor)) } else if (medtronicPumpStatus.lastConnection + 30 * 60 * 1000 < System.currentTimeMillis()) { if (min < 60) { @@ -288,10 +287,10 @@ class MedtronicFragment : DaggerFragment() { binding.lastConnection.text = (rh.gq(R.plurals.duration_days, d, d) + " " + rh.gs(R.string.ago)) } - binding.lastConnection.setTextColor(rh.gac(context,R.attr.warningColor)) + binding.lastConnection.setTextColor(rh.gac(context, R.attr.warningColor)) } else { binding.lastConnection.text = minAgo - binding.lastConnection.setTextColor(rh.gac(context,R.attr.defaultTextColor)) + binding.lastConnection.setTextColor(rh.gac(context, R.attr.defaultTextColor)) } } @@ -329,7 +328,8 @@ class MedtronicFragment : DaggerFragment() { if (medtronicPumpStatus.batteryType == BatteryType.None || medtronicPumpStatus.batteryVoltage == null) { binding.pumpStateBattery.text = "{fa-battery-" + medtronicPumpStatus.batteryRemaining / 25 + "} " } else { - binding.pumpStateBattery.text = "{fa-battery-" + medtronicPumpStatus.batteryRemaining / 25 + "} " + medtronicPumpStatus.batteryRemaining + "%" + String.format(" (%.2f V)", medtronicPumpStatus.batteryVoltage) + binding.pumpStateBattery.text = + "{fa-battery-" + medtronicPumpStatus.batteryRemaining / 25 + "} " + medtronicPumpStatus.batteryRemaining + "%" + String.format(" (%.2f V)", medtronicPumpStatus.batteryVoltage) } warnColors.setColorInverse(binding.pumpStateBattery, medtronicPumpStatus.batteryRemaining.toDouble(), 25.0, 10.0) 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 2fbebf5bf7..01ff035702 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 @@ -55,6 +55,7 @@ import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.TimeChangeType import info.nightscout.androidaps.interfaces.ResourceHelper +import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.LTag @@ -215,27 +216,13 @@ class MedtronicPumpPlugin @Inject constructor( }.start() } - override val serviceClass: Class<*> - get() = RileyLinkMedtronicService::class.java - - override val pumpStatusData: info.nightscout.androidaps.plugins.pump.common.data.PumpStatus - get() = medtronicPumpStatus - - override fun deviceID(): String { - return "Medtronic" - } - - override val isFakingTempsByExtendedBoluses: Boolean - get() = false - - override fun canHandleDST(): Boolean { - return false - } - - // Pump Plugin + override val serviceClass: Class<*> = RileyLinkMedtronicService::class.java + override val pumpStatusData: PumpStatus get() = medtronicPumpStatus + override fun deviceID(): String = "Medtronic" + override val isFakingTempsByExtendedBoluses: Boolean = false + override fun canHandleDST(): Boolean = false private var isServiceSet: Boolean = false - - override val rileyLinkService: RileyLinkMedtronicService? = rileyLinkMedtronicService + override val rileyLinkService: RileyLinkMedtronicService? get() = rileyLinkMedtronicService override val pumpInfo: RileyLinkPumpInfo get() = RileyLinkPumpInfo( @@ -244,7 +231,7 @@ class MedtronicPumpPlugin @Inject constructor( medtronicPumpStatus.serialNumber ) - override val lastConnectionTimeMillis: Long = medtronicPumpStatus.lastConnection + override val lastConnectionTimeMillis: Long get() = medtronicPumpStatus.lastConnection override fun setLastCommunicationToNow() { medtronicPumpStatus.setLastCommunicationToNow() 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 bfbaf4b184..1fb2ca414c 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 @@ -120,9 +120,8 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { 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) + if (rileylinkBLEAddress == "") aapsLogger.error("No Rileylink BLE Address saved in app") + else rileyLinkService?.reconfigureRileyLink(rileylinkBLEAddress) true } 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 47449c5c3f..d7503bf2a6 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 @@ -44,7 +44,7 @@ abstract class RileyLinkService : DaggerService() { @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 broadcastReceiver: RileyLinkBroadcastReceiver? = null + private var broadcastReceiver: RileyLinkBroadcastReceiver? = null private var bluetoothStateReceiver: RileyLinkBluetoothStateReceiver? = null override fun onCreate() { diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java index 64cca36a50..e6f3f30889 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java @@ -6,9 +6,6 @@ import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; -import info.nightscout.androidaps.interfaces.ActivePlugin; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; @@ -18,6 +15,8 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistor 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.defs.RileyLinkTargetDevice; +import info.nightscout.shared.logging.AAPSLogger; +import info.nightscout.shared.logging.LTag; /** * Created by andy on 16/05/2018. @@ -30,7 +29,6 @@ public class RileyLinkServiceData { @Inject AAPSLogger aapsLogger; @Inject RileyLinkUtil rileyLinkUtil; @Inject RxBus rxBus; - @Inject ActivePlugin activePlugin; boolean tuneUpDone = false; public RileyLinkError rileyLinkError; From 23bdb57ed318699769b7fe5dd8ce9ea613661181 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 1 Jul 2022 00:07:38 +0200 Subject: [PATCH 15/48] RileyLinkServiceData resolve nullability --- .../pump/medtronic/MedtronicFragment.kt | 12 ++++-------- .../service/RileyLinkBroadcastReceiver.kt | 2 +- .../service/RileyLinkServiceData.java | 18 +++++++++--------- .../service/tasks/InitializePumpManagerTask.kt | 3 +-- 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt index d65509810f..86666790a5 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt @@ -340,19 +340,15 @@ class MedtronicFragment : DaggerFragment() { medtronicPumpPlugin.rileyLinkService?.verifyConfiguration() binding.errors.text = medtronicPumpStatus.errorInfo - val showRileyLinkBatteryLevel: Boolean = rileyLinkServiceData.showBatteryLevel - - if (showRileyLinkBatteryLevel) { + if (rileyLinkServiceData.showBatteryLevel) { binding.rlBatteryView.visibility = View.VISIBLE binding.rlBatteryLabel.visibility = View.VISIBLE binding.rlBatteryState.visibility = View.VISIBLE binding.rlBatteryLayout.visibility = View.VISIBLE binding.rlBatterySemicolon.visibility = View.VISIBLE - if (rileyLinkServiceData.batteryLevel == null) { - binding.rlBatteryState.text = " ?" - } else { - binding.rlBatteryState.text = "{fa-battery-" + rileyLinkServiceData.batteryLevel / 25 + "} " + rileyLinkServiceData.batteryLevel + "%" - } + binding.rlBatteryState.text = + if (rileyLinkServiceData.batteryLevel == null) " ?" + else "{fa-battery-${rileyLinkServiceData.batteryLevel!! / 25}} ${rileyLinkServiceData.batteryLevel}%" } else { binding.rlBatteryView.visibility = View.GONE binding.rlBatteryLabel.visibility = View.GONE 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 1fb2ca414c..1177388890 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 @@ -110,7 +110,7 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy version (BLE113): $bleVersion") rileyLinkService?.rileyLinkServiceData?.versionBLE113 = bleVersion - aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy Radio version (CC110): " + rlVersion.name) + aapsLogger.debug(LTag.PUMPBTCOMM, "RfSpy Radio version (CC110): ${rlVersion?.name}") rileyLinkServiceData.firmwareVersion = rlVersion val task: ServiceTask = InitializePumpManagerTask(injector, context) serviceTaskExecutor.startTask(task) diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java index e6f3f30889..7876fb1f1f 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java @@ -31,27 +31,27 @@ public class RileyLinkServiceData { @Inject RxBus rxBus; boolean tuneUpDone = false; - public RileyLinkError rileyLinkError; + @Nullable public RileyLinkError rileyLinkError; public RileyLinkServiceState rileyLinkServiceState = RileyLinkServiceState.NotStarted; private long lastServiceStateChange = 0L; - public RileyLinkFirmwareVersion firmwareVersion; // here we have "compatibility level" version + @Nullable public RileyLinkFirmwareVersion firmwareVersion; // here we have "compatibility level" version @Nullable public RileyLinkTargetFrequency rileyLinkTargetFrequency; @Nullable public String rileyLinkAddress; @Nullable public String rileyLinkName; - public Integer batteryLevel; + @Nullable public Integer batteryLevel; public boolean showBatteryLevel = false; long lastTuneUpTime = 0L; - public Double lastGoodFrequency; + @Nullable public Double lastGoodFrequency; // bt version - public String versionBLE113; + @Nullable public String versionBLE113; // radio version - public String versionCC110; + @Nullable public String versionCC110; // orangeLink - public boolean isOrange; - public String versionOrangeFirmware; - public String versionOrangeHardware; + public boolean isOrange = false; + @Nullable public String versionOrangeFirmware; + @Nullable public String versionOrangeHardware; public RileyLinkTargetDevice targetDevice; 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 index 2b43ea0ea3..903200d3d4 100644 --- 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 @@ -34,8 +34,7 @@ class InitializePumpManagerTask(injector: HasAndroidInjector, private val contex lastGoodFrequency = sp.getDouble(RileyLinkConst.Prefs.LastGoodDeviceFrequency, 0.0) lastGoodFrequency = (lastGoodFrequency * 1000.0).roundToLong() / 1000.0 rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency - - } else lastGoodFrequency = rileyLinkServiceData.lastGoodFrequency + } else lastGoodFrequency = rileyLinkServiceData.lastGoodFrequency ?: 0.0 val rileyLinkCommunicationManager = pumpDevice?.rileyLinkService?.deviceCommunicationManager if (activePlugin.activePump.manufacturer() === ManufacturerType.Medtronic) { From 9e29cbc2febf7a5359c7f0e07ccc644f9d2fddb5 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 1 Jul 2022 00:33:19 +0200 Subject: [PATCH 16/48] RileyLinkServiceData -> kt --- .../pump/medtronic/MedtronicFragment.kt | 2 +- .../omnipod/eros/OmnipodErosPumpPlugin.java | 4 +- .../service/RileyLinkOmnipodService.java | 4 +- .../dialog/RileyLinkStatusGeneralFragment.kt | 2 +- .../service/RileyLinkBroadcastReceiver.kt | 2 +- .../hw/rileylink/service/RileyLinkService.kt | 25 ++--- .../service/RileyLinkServiceData.java | 103 ------------------ .../rileylink/service/RileyLinkServiceData.kt | 73 +++++++++++++ .../tasks/InitializePumpManagerTask.kt | 8 +- 9 files changed, 91 insertions(+), 132 deletions(-) delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.kt diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt index 86666790a5..84ac9a6138 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt @@ -188,7 +188,7 @@ class MedtronicFragment : DaggerFragment() { @Synchronized private fun setDeviceStatus() { val resourceId = rileyLinkServiceData.rileyLinkServiceState.resourceId - val rileyLinkError = medtronicPumpPlugin.rileyLinkService?.error + val rileyLinkError =rileyLinkServiceData.rileyLinkError binding.rlStatus.text = when { rileyLinkServiceData.rileyLinkServiceState == RileyLinkServiceState.NotStarted -> rh.gs(resourceId) diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java index 402d836bb3..f4c1bb19c7 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java @@ -375,7 +375,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley } public boolean isRileyLinkReady() { - return rileyLinkServiceData.rileyLinkServiceState.isReady(); + return rileyLinkServiceData.getRileyLinkServiceState().isReady(); } private void handleCancelledTbr() { @@ -1014,7 +1014,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley // - RileyLink has been connecting for over RILEY_LINK_CONNECT_TIMEOUT return (podStateManager.getLastFailedCommunication() != null && podStateManager.getLastSuccessfulCommunication().isBefore(podStateManager.getLastFailedCommunication())) || podStateManager.isSuspended() || - rileyLinkServiceData.rileyLinkServiceState.isError() || + rileyLinkServiceData.getRileyLinkServiceState().isError() || // The below clause is a hack for working around the RL service state forever staying in connecting state on startup if the RL is switched off / unreachable (rileyLinkServiceData.getRileyLinkServiceState().isConnecting() && rileyLinkServiceData.getLastServiceStateChange() + RILEY_LINK_CONNECT_TIMEOUT_MILLIS < currentTimeMillis); } 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 8520db88d3..c6a7d37063 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 @@ -97,10 +97,8 @@ public class RileyLinkOmnipodService extends RileyLinkService { /* private functions */ - // PumpInterface - REMOVE - public boolean isInitialized() { - return rileyLinkServiceData.rileyLinkServiceState.isReady(); + return rileyLinkServiceData.getRileyLinkServiceState().isReady(); } @Override diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt index 115849b46d..d9b6ee141c 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt @@ -72,7 +72,7 @@ class RileyLinkStatusGeneralFragment : DaggerFragment() { } val rileyLinkPumpDevice = activePlugin.activePump as RileyLinkPumpDevice val rileyLinkPumpInfo = rileyLinkPumpDevice.pumpInfo - binding.deviceType.setText(targetDevice.resourceId) + targetDevice?.resourceId?.let { binding.deviceType.setText(it) } if (targetDevice == RileyLinkTargetDevice.MedtronicPump) { binding.connectedDeviceDetails.visibility = View.VISIBLE binding.configuredDeviceModel.text = activePlugin.activePump.pumpDescription.pumpType.description 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 1177388890..ff9fca17f3 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 @@ -153,7 +153,7 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { private fun processTuneUpBroadcasts(action: String): Boolean = if (broadcastIdentifiers["TuneUp"]?.contains(action) == true) { - if (rileyLinkService?.rileyLinkTargetDevice?.isTuneUpEnabled == true) serviceTaskExecutor.startTask(WakeAndTuneTask(injector)) + if (rileyLinkServiceData.targetDevice?.isTuneUpEnabled == true) 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 d7503bf2a6..d7efd6ca73 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 @@ -94,7 +94,7 @@ abstract class RileyLinkService : DaggerService() { fun bluetoothInit(): Boolean { aapsLogger.debug(LTag.PUMPBTCOMM, "bluetoothInit: attempting to get an adapter") - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.BluetoothInitializing) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.BluetoothInitializing if (bluetoothAdapter == null) { aapsLogger.error("Unable to obtain a BluetoothAdapter.") rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.NoBluetoothAdapter) @@ -103,7 +103,7 @@ abstract class RileyLinkService : DaggerService() { aapsLogger.error("Bluetooth is not enabled.") rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.BluetoothDisabled) } else { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.BluetoothReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.BluetoothReady return true } } @@ -112,7 +112,7 @@ abstract class RileyLinkService : DaggerService() { // returns true if our Rileylink configuration changed fun reconfigureRileyLink(deviceAddress: String): Boolean { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkInitializing) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.RileyLinkInitializing return if (rileyLinkBLE.isConnected) { if (deviceAddress == rileyLinkServiceData.rileyLinkAddress) { aapsLogger.info(LTag.PUMPBTCOMM, "No change to RL address. Not reconnecting.") @@ -128,9 +128,9 @@ abstract class RileyLinkService : DaggerService() { } } else { aapsLogger.debug(LTag.PUMPBTCOMM, "Using RL $deviceAddress") - if (rileyLinkServiceData.getRileyLinkServiceState() == RileyLinkServiceState.NotStarted) { + if (rileyLinkServiceData.rileyLinkServiceState == RileyLinkServiceState.NotStarted) { if (!bluetoothInit()) { - aapsLogger.error("RileyLink can't get activated, Bluetooth is not functioning correctly. ${error?.name ?: "Unknown error (null)"}") + aapsLogger.error("RileyLink can't get activated, Bluetooth is not functioning correctly. ${rileyLinkServiceData.rileyLinkError?.name ?: "Unknown error (null)"}") return false } } @@ -141,7 +141,7 @@ abstract class RileyLinkService : DaggerService() { // FIXME: This needs to be run in a session so that is incorruptible, has a separate thread, etc. fun doTuneUpDevice() { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.TuneUpDevice) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.TuneUpDevice setPumpDeviceState(PumpDeviceState.Sleeping) val lastGoodFrequency = rileyLinkServiceData.lastGoodFrequency ?: sp.getDouble(RileyLinkConst.Prefs.LastGoodDeviceFrequency, 0.0) val newFrequency = deviceCommunicationManager.tuneForDevice() @@ -157,7 +157,7 @@ abstract class RileyLinkService : DaggerService() { rileyLinkServiceData.setServiceState(RileyLinkServiceState.PumpConnectorError, RileyLinkError.TuneUpOfDeviceFailed) } else { deviceCommunicationManager.clearNotConnectedCount() - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.PumpConnectorReady } } @@ -168,22 +168,13 @@ abstract class RileyLinkService : DaggerService() { rileyLinkServiceData.rileyLinkAddress = null rileyLinkServiceData.rileyLinkName = null } - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.BluetoothReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.BluetoothReady } - /** - * Get Target Device for Service - */ - val rileyLinkTargetDevice: RileyLinkTargetDevice - get() = rileyLinkServiceData.targetDevice - fun changeRileyLinkEncoding(encodingType: RileyLinkEncodingType?) { rfSpy.setRileyLinkEncoding(encodingType) } - val error: RileyLinkError? - get() = rileyLinkServiceData.rileyLinkError - fun verifyConfiguration(): Boolean { return verifyConfiguration(false) } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java deleted file mode 100644 index 7876fb1f1f..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java +++ /dev/null @@ -1,103 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service; - -import java.util.Locale; - -import javax.annotation.Nullable; -import javax.inject.Inject; -import javax.inject.Singleton; - -import info.nightscout.androidaps.plugins.bus.RxBus; -import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkFirmwareVersion; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem; -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.defs.RileyLinkTargetDevice; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; - -/** - * Created by andy on 16/05/2018. - */ - -// FIXME encapsulation -@Singleton -public class RileyLinkServiceData { - - @Inject AAPSLogger aapsLogger; - @Inject RileyLinkUtil rileyLinkUtil; - @Inject RxBus rxBus; - - boolean tuneUpDone = false; - @Nullable public RileyLinkError rileyLinkError; - public RileyLinkServiceState rileyLinkServiceState = RileyLinkServiceState.NotStarted; - private long lastServiceStateChange = 0L; - @Nullable public RileyLinkFirmwareVersion firmwareVersion; // here we have "compatibility level" version - @Nullable public RileyLinkTargetFrequency rileyLinkTargetFrequency; - @Nullable public String rileyLinkAddress; - @Nullable public String rileyLinkName; - @Nullable public Integer batteryLevel; - public boolean showBatteryLevel = false; - long lastTuneUpTime = 0L; - @Nullable public Double lastGoodFrequency; - - // bt version - @Nullable public String versionBLE113; - // radio version - @Nullable public String versionCC110; - - // orangeLink - public boolean isOrange = false; - @Nullable public String versionOrangeFirmware; - @Nullable public String versionOrangeHardware; - - public RileyLinkTargetDevice targetDevice; - - // Medtronic Pump - public String pumpID; - public byte[] pumpIDBytes; - - @Inject - public RileyLinkServiceData() { - } - - public void setPumpID(String pumpId, byte[] pumpIdBytes) { - this.pumpID = pumpId; - this.pumpIDBytes = pumpIdBytes; - } - - public void setRileyLinkServiceState(RileyLinkServiceState newState) { - setServiceState(newState, null); - } - - public RileyLinkServiceState getRileyLinkServiceState() { - return workWithServiceState(null, null, false); - } - - public void setServiceState(RileyLinkServiceState newState, RileyLinkError errorCode) { - workWithServiceState(newState, errorCode, true); - } - - public long getLastServiceStateChange() { - return lastServiceStateChange; - } - - private synchronized RileyLinkServiceState workWithServiceState(RileyLinkServiceState newState, RileyLinkError errorCode, boolean set) { - if (set) { - rileyLinkServiceState = newState; - lastServiceStateChange = System.currentTimeMillis(); - this.rileyLinkError = errorCode; - - aapsLogger.info(LTag.PUMP, String.format(Locale.ENGLISH, "RileyLink State Changed: %s %s", newState, errorCode == null ? "" : " - Error State: " + errorCode.name())); - - rileyLinkUtil.getRileyLinkHistory().add(new RLHistoryItem(rileyLinkServiceState, errorCode, targetDevice)); - rxBus.send(new EventRileyLinkDeviceStatusChange(targetDevice, newState, errorCode)); - return null; - } else { - return rileyLinkServiceState; - } - } - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.kt new file mode 100644 index 0000000000..047467fd7f --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.kt @@ -0,0 +1,73 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service + +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkFirmwareVersion +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem +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.defs.RileyLinkTargetDevice +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import java.util.* +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by andy on 16/05/2018. + */ +@Singleton +class RileyLinkServiceData @Inject constructor() { + + @Inject lateinit var aapsLogger: AAPSLogger + @Inject lateinit var rileyLinkUtil: RileyLinkUtil + @Inject lateinit var rxBus: RxBus + var tuneUpDone = false + var rileyLinkError: RileyLinkError? = null + var rileyLinkServiceState: RileyLinkServiceState = RileyLinkServiceState.NotStarted + var lastServiceStateChange = 0L + private set + + // here we have "compatibility level" version + @JvmField var firmwareVersion: RileyLinkFirmwareVersion? = null + @JvmField var rileyLinkTargetFrequency: RileyLinkTargetFrequency? = null + @JvmField var rileyLinkAddress: String? = null + @JvmField var rileyLinkName: String? = null + @JvmField var batteryLevel: Int? = null + var showBatteryLevel = false + var lastTuneUpTime = 0L + var lastGoodFrequency: Double? = null + + // bt version + var versionBLE113: String? = null + + // radio version + @JvmField var versionCC110: String? = null + + // orangeLink + var isOrange = false + var versionOrangeFirmware: String? = null + var versionOrangeHardware: String? = null + @JvmField var targetDevice: RileyLinkTargetDevice? = null + + // Medtronic Pump + var pumpID: String? = null + var pumpIDBytes: ByteArray = byteArrayOf(0, 0, 0) + + fun setPumpID(pumpId: String?, pumpIdBytes: ByteArray) { + pumpID = pumpId + pumpIDBytes = pumpIdBytes + } + + @Synchronized + fun setServiceState(newState: RileyLinkServiceState, errorCode: RileyLinkError) { + rileyLinkServiceState = newState + lastServiceStateChange = System.currentTimeMillis() + rileyLinkError = errorCode + aapsLogger.info(LTag.PUMP, String.format(Locale.ENGLISH, "RileyLink State Changed: $newState - Error State: ${errorCode.name}")) + rileyLinkUtil.rileyLinkHistory.add(RLHistoryItem(rileyLinkServiceState, errorCode, targetDevice)) + rxBus.send(EventRileyLinkDeviceStatusChange(targetDevice!!, newState, errorCode)) + } +} \ No newline at end of file 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 index 903200d3d4..935aff66bc 100644 --- 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 @@ -39,10 +39,10 @@ class InitializePumpManagerTask(injector: HasAndroidInjector, private val contex val rileyLinkCommunicationManager = pumpDevice?.rileyLinkService?.deviceCommunicationManager if (activePlugin.activePump.manufacturer() === ManufacturerType.Medtronic) { if (lastGoodFrequency > 0.0 && rileyLinkCommunicationManager?.isValidFrequency(lastGoodFrequency) == true) { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.RileyLinkReady aapsLogger.info(LTag.PUMPBTCOMM, "Setting radio frequency to $lastGoodFrequency MHz") rileyLinkCommunicationManager.setRadioFrequencyForPump(lastGoodFrequency) - if (rileyLinkCommunicationManager.tryToConnectToDevice()) rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady) + if (rileyLinkCommunicationManager.tryToConnectToDevice()) rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.PumpConnectorReady else { rileyLinkServiceData.setServiceState(RileyLinkServiceState.PumpConnectorError, RileyLinkError.NoContactWithDevice) rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.IPC.MSG_PUMP_tunePump, context) @@ -54,11 +54,11 @@ class InitializePumpManagerTask(injector: HasAndroidInjector, private val contex lastGoodFrequency = (lastGoodFrequency * 1000.0).roundToLong() / 1000.0 rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency } - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady) + rileyLinkServiceData.rileyLinkServiceState = 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) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.PumpConnectorReady } } } \ No newline at end of file From c9a039a8a690629babf5a43e2bbf07b1dd04936f Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 1 Jul 2022 00:51:05 +0200 Subject: [PATCH 17/48] RL: enum -> kt --- .../service/RileyLinkMedtronicService.kt | 2 +- .../pump/common/hw/rileylink/ble/RFSpy.java | 6 ++--- .../hw/rileylink/ble/defs/RLMessageType.java | 10 -------- .../hw/rileylink/ble/defs/RLMessageType.kt | 10 ++++++++ .../hw/rileylink/ble/defs/RXFilterMode.java | 19 -------------- .../hw/rileylink/ble/defs/RXFilterMode.kt | 10 ++++++++ .../ble/defs/RileyLinkTargetFrequency.java | 25 ------------------- .../ble/defs/RileyLinkTargetFrequency.kt | 11 ++++++++ 8 files changed, 35 insertions(+), 58 deletions(-) delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.kt delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.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 e5157aadec..4154965d3b 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 @@ -177,7 +177,7 @@ class RileyLinkMedtronicService : RileyLinkService() { medtronicPumpStatus.pumpFrequency = pumpFrequency val isFrequencyUS = pumpFrequency == frequencies[0] val newTargetFrequency = if (isFrequencyUS) // - RileyLinkTargetFrequency.Medtronic_US else RileyLinkTargetFrequency.Medtronic_WorldWide + RileyLinkTargetFrequency.MedtronicUS else RileyLinkTargetFrequency.MedtronicWorldWide if (rileyLinkServiceData.rileyLinkTargetFrequency != newTargetFrequency) { rileyLinkServiceData.rileyLinkTargetFrequency = newTargetFrequency } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java index abd0bd5d83..356628cce8 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java @@ -309,7 +309,7 @@ public class RFSpy { aapsLogger.error(LTag.PUMPBTCOMM, "RileyLinkTargetFrequency: " + frequency); switch (frequency) { - case Medtronic_WorldWide: + case MedtronicWorldWide: setRXFilterMode(RXFilterMode.Wide); updateRegister(CC111XRegister.mdmcfg1, 0x62); updateRegister(CC111XRegister.mdmcfg0, 0x1A); @@ -317,7 +317,7 @@ public class RFSpy { setMedtronicEncoding(); break; - case Medtronic_US: + case MedtronicUS: setRXFilterMode(RXFilterMode.Narrow); updateRegister(CC111XRegister.mdmcfg1, 0x61); updateRegister(CC111XRegister.mdmcfg0, 0x7E); @@ -400,7 +400,7 @@ public class RFSpy { private void setRXFilterMode(RXFilterMode mode) { byte drate_e = (byte) 0x9; // exponent of symbol rate (16kbps) - byte chanbw = mode.value; + byte chanbw = mode.getValue(); updateRegister(CC111XRegister.mdmcfg4, (byte) (chanbw | drate_e)); } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.java deleted file mode 100644 index 7cc11da498..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.java +++ /dev/null @@ -1,10 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs; - -/** - * Created by andy on 5/6/18. - */ - -public enum RLMessageType { - PowerOn, // for powering on the pump (wakeup) - ReadSimpleData, // for checking if pump is readable (for Medtronic we can use GetModel) -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.kt new file mode 100644 index 0000000000..f64cd6666f --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RLMessageType.kt @@ -0,0 +1,10 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs + +/** + * Created by andy on 5/6/18. + */ +enum class RLMessageType { + + PowerOn, // for powering on the pump (wakeup) + ReadSimpleData // for checking if pump is readable (for Medtronic we can use GetModel) +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.java deleted file mode 100644 index e50929ebfe..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.java +++ /dev/null @@ -1,19 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs; - -/** - * Created by andy on 21/05/2018. - */ - -public enum RXFilterMode { - - Wide(0x50), // - Narrow(0x90) // - ; - - public byte value; - - - RXFilterMode(int value) { - this.value = (byte)value; - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.kt new file mode 100644 index 0000000000..9150be1789 --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RXFilterMode.kt @@ -0,0 +1,10 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs + +/** + * Created by andy on 21/05/2018. + */ +enum class RXFilterMode(val value: Byte) { + + Wide(0x50), + Narrow(0x90.toByte()); +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.java deleted file mode 100644 index 0d7f341584..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.java +++ /dev/null @@ -1,25 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs; - -/** - * Created by andy on 6/7/18. - */ - -public enum RileyLinkTargetFrequency { - - Medtronic_WorldWide(868.25, 868.3, 868.35, 868.4, 868.45, 868.5, 868.55, 868.6, 868.65), // - Medtronic_US(916.45, 916.5, 916.55, 916.6, 916.65, 916.7, 916.75, 916.8), // - Omnipod(433.91), // - ; - - double[] frequencies; - - - RileyLinkTargetFrequency(double... frequencies) { - this.frequencies = frequencies; - } - - - public double[] getScanFrequencies() { - return frequencies; - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.kt new file mode 100644 index 0000000000..8a50374cde --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkTargetFrequency.kt @@ -0,0 +1,11 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs + +/** + * Created by andy on 6/7/18. + */ +enum class RileyLinkTargetFrequency(vararg var scanFrequencies: Double) { + + MedtronicWorldWide(868.25, 868.3, 868.35, 868.4, 868.45, 868.5, 868.55, 868.6, 868.65), + MedtronicUS(916.45, 916.5, 916.55, 916.6, 916.65, 916.7, 916.75, 916.8), + Omnipod(433.91); +} \ No newline at end of file From 7b8a3d8988b4ed19d5bd898bb2ba5bdde0abecf4 Mon Sep 17 00:00:00 2001 From: Philoul Date: Fri, 1 Jul 2022 01:26:19 +0200 Subject: [PATCH 18/48] wear vector icons replace png by xml --- icons/action_add.svg | 10 +++ icons/action_minus.svg | 7 +++ icons/cancel.svg | 13 ++++ icons/confirm.svg | 8 +++ icons/icon_snooze.svg | 59 ++++++++++++++++++ icons/loop.svg | 10 +++ icons/setting_off.svg | 8 +++ icons/setting_on.svg | 8 +++ wear/src/main/res/drawable-hdpi/ic_cancel.png | Bin 991 -> 0 bytes .../src/main/res/drawable-hdpi/ic_confirm.png | Bin 291 -> 0 bytes .../main/res/drawable-hdpi/settings_off.png | Bin 851 -> 0 bytes .../main/res/drawable-hdpi/settings_on.png | Bin 601 -> 0 bytes wear/src/main/res/drawable-mdpi/ic_cancel.png | Bin 601 -> 0 bytes .../src/main/res/drawable-mdpi/ic_confirm.png | Bin 196 -> 0 bytes .../main/res/drawable-mdpi/settings_off.png | Bin 551 -> 0 bytes .../main/res/drawable-mdpi/settings_on.png | Bin 408 -> 0 bytes .../src/main/res/drawable-xhdpi/ic_cancel.png | Bin 1234 -> 0 bytes .../main/res/drawable-xhdpi/ic_confirm.png | Bin 289 -> 0 bytes .../main/res/drawable-xhdpi/settings_off.png | Bin 1091 -> 0 bytes .../main/res/drawable-xhdpi/settings_on.png | Bin 779 -> 0 bytes .../main/res/drawable-xxhdpi/ic_cancel.png | Bin 2121 -> 0 bytes .../main/res/drawable-xxhdpi/ic_confirm.png | Bin 462 -> 0 bytes .../main/res/drawable-xxhdpi/settings_off.png | Bin 1848 -> 0 bytes .../main/res/drawable-xxhdpi/settings_on.png | Bin 1285 -> 0 bytes wear/src/main/res/drawable/ic_action_add.png | Bin 139 -> 0 bytes wear/src/main/res/drawable/ic_action_add.xml | 9 +++ .../src/main/res/drawable/ic_action_minus.png | Bin 131 -> 0 bytes .../src/main/res/drawable/ic_action_minus.xml | 8 +++ wear/src/main/res/drawable/ic_cancel.xml | 16 +++++ wear/src/main/res/drawable/ic_confirm.xml | 8 +++ wear/src/main/res/drawable/ic_icon.png | Bin 3218 -> 0 bytes wear/src/main/res/drawable/ic_icon.xml | 16 +++++ wear/src/main/res/drawable/ic_icon_snooze.png | Bin 24861 -> 0 bytes wear/src/main/res/drawable/ic_icon_snooze.xml | 18 ++++++ wear/src/main/res/drawable/loop_green_25.png | Bin 21623 -> 0 bytes wear/src/main/res/drawable/loop_green_25.xml | 9 +++ wear/src/main/res/drawable/loop_grey_25.png | Bin 22321 -> 0 bytes wear/src/main/res/drawable/loop_grey_25.xml | 9 +++ wear/src/main/res/drawable/loop_red_25.png | Bin 21623 -> 0 bytes wear/src/main/res/drawable/loop_red_25.xml | 9 +++ wear/src/main/res/drawable/settings_off.xml | 10 +++ wear/src/main/res/drawable/settings_on.xml | 10 +++ 42 files changed, 245 insertions(+) create mode 100644 icons/action_add.svg create mode 100644 icons/action_minus.svg create mode 100644 icons/cancel.svg create mode 100644 icons/confirm.svg create mode 100644 icons/icon_snooze.svg create mode 100644 icons/loop.svg create mode 100644 icons/setting_off.svg create mode 100644 icons/setting_on.svg delete mode 100644 wear/src/main/res/drawable-hdpi/ic_cancel.png delete mode 100644 wear/src/main/res/drawable-hdpi/ic_confirm.png delete mode 100644 wear/src/main/res/drawable-hdpi/settings_off.png delete mode 100644 wear/src/main/res/drawable-hdpi/settings_on.png delete mode 100644 wear/src/main/res/drawable-mdpi/ic_cancel.png delete mode 100644 wear/src/main/res/drawable-mdpi/ic_confirm.png delete mode 100644 wear/src/main/res/drawable-mdpi/settings_off.png delete mode 100644 wear/src/main/res/drawable-mdpi/settings_on.png delete mode 100644 wear/src/main/res/drawable-xhdpi/ic_cancel.png delete mode 100644 wear/src/main/res/drawable-xhdpi/ic_confirm.png delete mode 100644 wear/src/main/res/drawable-xhdpi/settings_off.png delete mode 100644 wear/src/main/res/drawable-xhdpi/settings_on.png delete mode 100644 wear/src/main/res/drawable-xxhdpi/ic_cancel.png delete mode 100644 wear/src/main/res/drawable-xxhdpi/ic_confirm.png delete mode 100644 wear/src/main/res/drawable-xxhdpi/settings_off.png delete mode 100644 wear/src/main/res/drawable-xxhdpi/settings_on.png delete mode 100644 wear/src/main/res/drawable/ic_action_add.png create mode 100644 wear/src/main/res/drawable/ic_action_add.xml delete mode 100644 wear/src/main/res/drawable/ic_action_minus.png create mode 100644 wear/src/main/res/drawable/ic_action_minus.xml create mode 100644 wear/src/main/res/drawable/ic_cancel.xml create mode 100644 wear/src/main/res/drawable/ic_confirm.xml delete mode 100644 wear/src/main/res/drawable/ic_icon.png create mode 100644 wear/src/main/res/drawable/ic_icon.xml delete mode 100644 wear/src/main/res/drawable/ic_icon_snooze.png create mode 100644 wear/src/main/res/drawable/ic_icon_snooze.xml delete mode 100644 wear/src/main/res/drawable/loop_green_25.png create mode 100644 wear/src/main/res/drawable/loop_green_25.xml delete mode 100644 wear/src/main/res/drawable/loop_grey_25.png create mode 100644 wear/src/main/res/drawable/loop_grey_25.xml delete mode 100644 wear/src/main/res/drawable/loop_red_25.png create mode 100644 wear/src/main/res/drawable/loop_red_25.xml create mode 100644 wear/src/main/res/drawable/settings_off.xml create mode 100644 wear/src/main/res/drawable/settings_on.xml diff --git a/icons/action_add.svg b/icons/action_add.svg new file mode 100644 index 0000000000..929dd4f7d9 --- /dev/null +++ b/icons/action_add.svg @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/icons/action_minus.svg b/icons/action_minus.svg new file mode 100644 index 0000000000..c7ef549809 --- /dev/null +++ b/icons/action_minus.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/icons/cancel.svg b/icons/cancel.svg new file mode 100644 index 0000000000..070444ebd3 --- /dev/null +++ b/icons/cancel.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/icons/confirm.svg b/icons/confirm.svg new file mode 100644 index 0000000000..0e93b2634e --- /dev/null +++ b/icons/confirm.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/icon_snooze.svg b/icons/icon_snooze.svg new file mode 100644 index 0000000000..c2190ac542 --- /dev/null +++ b/icons/icon_snooze.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + diff --git a/icons/loop.svg b/icons/loop.svg new file mode 100644 index 0000000000..b9e96b325d --- /dev/null +++ b/icons/loop.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/icons/setting_off.svg b/icons/setting_off.svg new file mode 100644 index 0000000000..ae79852ac7 --- /dev/null +++ b/icons/setting_off.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/setting_on.svg b/icons/setting_on.svg new file mode 100644 index 0000000000..72d9d52c8b --- /dev/null +++ b/icons/setting_on.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/wear/src/main/res/drawable-hdpi/ic_cancel.png b/wear/src/main/res/drawable-hdpi/ic_cancel.png deleted file mode 100644 index f3f1437a8855f7c2a6ac613ec1c895a305f3b36b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmV<510ei~P)VW$!s4=cnOez&4;IF`$9*KMNQGBmgl)0zaDrQ~|#wI&J`)fRJh9qkwmk zhkgM(7kf1I31_}ZbRGa6n|$+}@mGK)L6aTm9ssOJ?$UvglK>^J80F&4r3{{MM#5y9 zohqJUVqWlh(kDv($lQrsCsg@^DE#V&@x+M}hMk5?gpP>$XI-G_409(obd`((nncNh zi%d{Mf6(Ro6(-pY>p1X|C^&Xv8^IQUB49#6cOJ0gR0|@{rgDMLZ2}?-4{By^%b{d;4I82_LFCUI+f$^k1_^_xW)9)PNjYqYt{6GN3&-M7 zu#Eu+a*`&-a-vvM4unXzr5i#V+eq2Tj}Qt1J`tgm#+&EZhGi#@m-tXcXrBm8dkmW< zelBCDtb*QIB3Dsy-~|yXc?g?-*hVGUNpx3;%%X||<3#9Eu#-b6QC49a2|E>CN{I&9 zpHc0BzZ1cN%l@iLk|HNjcItU?P@rGTq3}8p{_IjthtZ(CVxB0u7$3oDhuwxX9sYg7 z#O%D=Fjr^r>+<~)b6-YuyRz3ri70KKcA=$AVf$)-_Ldh#Nx)C0GmHCZe3I$J>Ykq| zE-y1y`QV2WXnc)4OFVnBQ^jwXlHk~6IEiToj%?_2woND(jPRaOF7Cv9hoi*^{@`)N z=ojP6u&Fl`lQ?llu?1PObEtY}@FZ^~#z#%ZXavJaHeSC(exF7r8N_TF#lO>N^ezqx zI2|nb~txul&>G#zmlnL)p!soCVP$y4phz+qJ zHt!1`#P={gIBYchLl+#^l-LX#dH6mG@1hb0Vz&tkh_Cvp(-JMjZWEPozm$+`C-GFp zZlfh`nG$B<{-fAd^^y7(C!M^l@+0*Lr>d}7iIasm+Z1rZIolL)f;!vea2jBKgCsa% p9El4h@WLl0FvC+6MN!n2dI29vujRZ{tZ4uM002ovPDHLkV1jK1eA55` diff --git a/wear/src/main/res/drawable-hdpi/settings_off.png b/wear/src/main/res/drawable-hdpi/settings_off.png deleted file mode 100644 index ab7e4249a7461ff1076114567767c118dec989ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)i}y zB1WsC*4vY<7;WnR6u$#!w2)(#V-akLhuQ2MqE#Wg|+O!DIt~|X`vXvvEZLmwJN>=yc0r) zMBRwEKM7*B=s>p+S)|1*>bCGbtG+8}aSK2*Xan28UXTW7!DTQCJ_v#1O8Y0Go}SHt zD2d;q&AOjAAO=axTT1ZiH2QGn|-~o66zJghs zKIyrH+v!vf&KZl3IyhF*{B+jmQKLWlJwRHjF`DN2=$%o0u(F2uUo===bQk+Wrobek5rhjgH10FD%_AZI@$)P1<7H{fY<6d0Uemz5;72u(cYzG;BQw z%lr;%&Aj`_j=#ys>%d04vZdZ7+d<|%LxzBE7wz{LZ3ng35yUqid01(2nRd%VPv?9j zZy6yVUqSoVqW#JFaNv%XIvdY4QB=378y4+v2Q5Cvq2Cg4L`e#FgEu_VNi%xmx<|DC z>}6nd;=p<_hw1McQMZ!cj+qkVKlC;oNTE7DHxTg dMCCs$e*v^!I(?3=8TSAH002ovPDHLkV1g3Rj8Xsq diff --git a/wear/src/main/res/drawable-hdpi/settings_on.png b/wear/src/main/res/drawable-hdpi/settings_on.png deleted file mode 100644 index d22797b946fce90ded6946503af8e5652c8daaa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)YBmy)jC_ryBArgRgI1Ldtb>TE;;Xb85qhCuQ8yKftZeg169PgfG-^b?6)Qr46Nyh*I2c? z_zIBBVc;2*+1bEk4)Ge}b`|di*9Ht+0+$^P^cxVb;g>D05O_fY=wvk=1i>6w23z1R z4+FPglkS}bqcmm*&EYj8G)PU@J~#yrAeDzWUZiO56R<~`0!B>uvMfYaa|p_fK8a!w zwUPJ@)?ekDPDLODJ}nf^=3Zo4%)G$to%pao{5u%oRfT%Mi$w8Hpj$+fb}vCZE3wU@ z)`J=6I$uMw~kuEGHYE6t)M+>4>l4GL9mr$<8d7kZHtUho>ClMZz2HNP+ n7Yq7x7L@)d=!6qa{KNPGd0x-I@hGY|00000NkvXXu0mjf#H$DU diff --git a/wear/src/main/res/drawable-mdpi/ic_cancel.png b/wear/src/main/res/drawable-mdpi/ic_cancel.png deleted file mode 100644 index a564bff32224956f3dd3ab236636b0e96c1e6a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)JeF6n9M1>SXG!l#3BHeDw(hmQ{HT<}u z980o0k~#tRL~UKNUIDBD9m$%7YnO_KcKr5r0+ys+A-0yl0M3(iSa2tEYn}<*9nKbA z=$g+_IaS!)0Jc;F3od>w1$R#TM`Q*$VsNL)5*J|%F4++onL(8pTpOB|iZBL8PMg@5 zO#&JQXBK-mY-EkeI4zR^wwysVOL}g8~euV)nMPrJ!ie#-p{0?*i(j>*N;sBA@BsBbl;wZLB<}OU{ zgBPN97{JSDO#D5&A)K?x=GI5>F7dN+J)(hOi47z}Svd>?$%ycUuYyt9>NoXk+MS&>rM^{Ls@@A94BIp=p~U9Q5gFw*IC2`F|_zz`U4Qoso~aw>T% z_$8X15U{}ntlOQu8hkJT@4#!PfEh}B39jjR%C6)^;Es|8z!*K>0L2agy_E13RDeqG zMsqzf6DhRTD(C?H^u`HF7G$<-G?$=?3<5v!ff`elfsqG_Wp?~(1SOaTY{ z!l9{Xp18WVU3j*SArdeaO)5lGLu-*FIzZB+Fqqj$W2C1MyZY4%h_5O!RPo6Bf&1*q)jeF+t;635bn>*cFJwfOr`m2P}oE zafRwpf||iZjD_4l+z!Mmfp`}XpTc7isrVGsOpw`aK+J{95i&r$j*1qe<267mMJOcr zfp|6zET0L)e8k2-8xXfr(efrx#YJi&WCY?YDp;NYGK-Sj;19$n$gmis$Cp}J(w+P;-RH>YRhG^ihU>gv-fZBvmHa0b? z)NnvJmh6>>T%Lp2KwN+&yM|K30qsZz&H&YLc+`SwzgbA?Td3gxQ1EUCVs~OnG-wG5 zYOe1D;?0y=E)K*+psJb-y*xl%48$U%UAR$z4*&pl=9zS~F>y}-00005M9?OqWFypLRL`p;z3l9Ez4FxKij%(sdE%Nn%BZ*1gBgr8^10Yvm^BJHKFbqfl{z%wA0Mxlnz6Ee$F|qG}F+jP7p9;XZ z#OL(`(CjAp8^L6*k$ApAp9O#k3BS!wlW(wi@*e>;4*IVJe6n~G>YQ?3g87(o&MLW} z3vXa9rdv@=D0Cv#trHF(Sb3X;ARHA`mod}MUI`R;oqUD})Vz94zWV2clNk@xB6EUb zsmO$b1;W9m8{fQSOrQeetgi72BK5G8Q|+O0yq1{fmDU0ZBRfyoQN@a}!-nrLAf#~p z1Tohso%Q?)$KW^FA_vK{D(*L+Q^9vP;1>OdB=0F8D#l}5{RB2)LeUXL@~QizL`Wl_ z9?WD#7$@f3YDa)~97DG<-xPwTW2vrkC227H-Q#MQZ9U@BM zGSye<&~7HcW`Do#cJd=nQ3TZ`ZAt_c^7*(S%bRb|Za#fWC_1cQ zqe-@z!D*`0D_l=K{b`+wsuBZGrqN6Ge;#U!*APc@u9c%d$M_PVY{DZOBSGAi=FM@= zgo837qBBf-Kmcm*;!GxE$vTM$&hzzWk^G=wJ<(^gw>0l>aB+zWj-K>z>%07*qoM6N<$f(sKm_y7O^ diff --git a/wear/src/main/res/drawable-xhdpi/ic_confirm.png b/wear/src/main/res/drawable-xhdpi/ic_confirm.png deleted file mode 100644 index 4609b2d62023429dfea90d7a3be31d5dbd14ef7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=FFaiwLn>~)ow1Skkb!`!vemSO z3A|Dg>{en6T$7|-rdOzcp17csGn0$sT&CU6I5#Ub zNzfq{Qf3xXp_V~HVh15236&)p*<~MuiY&6CqU@v(9cG8x zWrx+9|C7zYys!-O?7sRwulumO1HUi3&(5{8GxN-|ad80!6i`3`xkHnalUaaFKRe(E zpvkYs&jJhsh5(6vbij7N1fjx@4!Cb|z%9QSUuZEtjC?;ipj&W2r(cZE1dIy~_yI`s zg9Dlbhq2Mi4(Mmbz6E?_*ZRC_{1V}9H&Humz4i}~ z=S2r}Fhj?wBH)JT54(5VYsRMnzB41wTJB$B_r3v=z2txfA^cZb?w1Jn>%CO^UNYkz z2r6FjE+7}f80$7*C!i6~1~`YM4DcB64)B{9H3FC| z@SFqq%+`iz{d2%gKo2HJz(GI_pd3&PSg18;0J8%6Zd(Co09P<<0fRy^n<`ptbz*m7k%B(VFZ?IbE<0oj)Q5gka zRhdIsC8lkV@&K=Oj=HhDDkjHfj?AcgQw~0+!LL~0S8Vd$f46YjlN1F%JVO7)c-EQh zfD267ehobDFrMd4b^tF`%^G;NFrIHrH9lMTUP~Psn{H~TGNw3E%QDdcRl+zcS<%by zWwjm4TCH?0NF#N=>DgkU15WamSXfg;vqIG#9>;Dggy){Ib;nF}03U0&Tkd60s7EsH z3XwC@EYF`}YX(d+K1DEYD}{TVqDyqb2u+mY*$-9WY0o^998fA4P)^fXm4Wz+Ts55s zjM}WbOQUyweXU6jXcl&9A)64#fkvw3`E(kngly(}eAju{BnR|I7}odj%)y3Fp+nSI zaorT-lc?pjQ+AY2kK!ZXmp~=aDQ}D!@jDG2kJ)8(%;4$M;ER=`%b{`jW3Fs!K68J_f6)C0aSSr<)kz_2CUyX^XUO@q;HOGOxR+xW$#2!?3U z49YE`Gk}Shp9453Qcj_n;DYQ#IvpyD3n-v~0tzUgfC8EZ{Rh32<6h%O>oouX002ov JPDHLkV1m<6^w0nR diff --git a/wear/src/main/res/drawable-xhdpi/settings_on.png b/wear/src/main/res/drawable-xhdpi/settings_on.png deleted file mode 100644 index db90aa602c5066ed4071315e5ad271dec6e0187b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmV+m1N8ifP)!7DgB^8 zB`pzK%qY}M|EKMH;0!Fw?m9Eh+&SL42R?7R_uTK7JNMVQIXNawm@r`?m`EfN2SG`g z4Y&h3!zz9!SODKaUKkB%0vpWbFd8tHWWY$+#MdN=x2On{0ljGqcp4V*C153u0l&e% zFc{F8M!ZG4?&2f7>}4`wntr3R0hh9fx2V(EfMFX34C*Sr!iIR_A1K$+fG0K$ARg!@ zzL1wWy9O+QJvtfC?m)ant4>SbvURq42-px>s{Tz3^{8m0zIN>zTg_%x?qn zv}#oPwfr3hp9PDjrT38Edw>EkBvAYtuvgVaXa{&MNc`hKiYrLk1=a%;PIm{lgWeWj z&2Y=>H_KuwO6bU0u&7Y{4{%D_0qGd{szCe{I4bp&cv^u0)soNttqKfik!(Pp0t0#^ z8!)TDfJv$1OBJmEwC~t2(SR!om%)n?4S1x`fS5!BJ}NX|Oq%!t-j}N~VAa!GU=Iwq z;6emFk!uFmK-|Uu&q*@iuEP`DL#h`h{lAEdr%pyuwp9BLIl7>4C*QzzXrAQQwHF~BM-$)uO^1&bkIFL}X{4ncd&+&g@Gd;EF4* zxZ;W{uDIfgE3U}O^78U3KrtW;C_#kr-&Q#b@fv#rpbpRqxDJQ{MgS9lNx&4~CH_2t zzZ(Kv!@oHw9ONuXH@Ilc4S=hFF~9;~NfV-uQ9u{q2w=Ul^oK@Y3pfPm1xy1L8H}C@ zi`Z*!0`>zwTFHhlMw%EmZ1ikB<1wHG5L#(8(~hlu$rAhpI1N}==(Cq&fTuZX@f3P` z0yqjNDm3G70Sqt=s(w(@Z9r8a7(NI%0eEG=Q1gH{h|i4d@2!64YftuOh%6K#xaCoUnde00kp}=ZYUT2lx(YBj4iGTK!Le3JZI16-H7Q6b9z74XvkJVWlZ%Hft;%!$N?I3O%7K*9tci7eW65 zPUX=wTEvCk64wchxl*!*IExS~)#Ensz2cO$ndpRB-v?z7xEk;?k#<`0$@nQwI8CIY z+r9?yKv)xD>Lv!WGX)UOx=0w9#qW>$rO-yq!OB`izs&=#;=nva_}(YJ^b_UwXmMx2Tq@7F{)^Nfef<2CK zIzSfj9QD%ragj4fT<(+TCSS%AC)?ADY~hcrV?-bXyrP6BZq<0r{`FPROMa5$h|@-Z*OMq36sUnn@? z13FTqojAuz9k;y9NMs%4aKP8Hpc^CADbtakw39~Ps6<{XhY;D6>m2ixSCx)@qn$Lm zc1dJj<48*UDiOk-l2fE3-)JX|o-Go&LmaX2afy&!hGI`DbmSZDr0BR$B6~#Z;2;Lz zCM6@iv3#f^9r;2#Df(?A>>n!D5m17s5VIxRjqdT$prg3yyaXm{<|T=#u#SLINdjh0 zC$MFZj$WH=`6&U!YtEVfX#Efgdhgy#(p z!nGcauNBHx%#ax!gelX|otDs!?{tJZ8l8p~5sn%ivxs(lr6b(Fm`!e!LrAYg$hSG9 zo!4BUY>&ELlE}QyA*4eh4cPZLfM)V6xnqP zbsP?;ln8mN8xP_LDRXAlh&u1Z^8wkyG#j|On(X}7SANot$;_I9-kp;A$2bR@TM}Up zHKw^y&e)D39SwL)$_EM4^Q)W=Xd>(e+v>4yk#qiyGqyvdqcN{x6g*5W+m_P6>3}lA zuIS4e^$RCF;tVNE=xA8O_>_Z*)9iQE;U1c7LT7Z&1Ylg{5obs_104-B=qaPPUK7ji zdIG1O)s&G;M=T-b6gnEyjo#w53NrdRWWoU-6OJa$=xoqUazd1O_d*>mnskj{EeX#j zZhBd3D*D$!=mk9tazX}l4{82=5bw5FGQRqi^a2_Gi4gVYfdVVoixvojZ?S1b&JkKc z%#Tc&kH)XS3r1wz-|mMpn=t+(b3&hqvtBtc{u;bsME1Q;eY++Z1f3+D7!*|0Rsas@ zBp%d0=69>0gb)^R6`hY)6^KFi6!9{r0pD+K2Z1|?(Z_!nn)1j2EyTtp&Ig>xrJ_ZIlw~powc1*gkvbd77CQwKPSD7b?q3m2?5`%}U1BF^JpKy-(95Baw zG2%AJje(U?FumEKxB}%y4C7Pbz)CIXhupB++!JE{|p zIVTokiASA71@{c0E3UZWiYuV4Ujd;uunK>+KC|FXljzhKD~i z7Pnd#@FzWFy5l0{D$vxsdxO8AKuq_tFNW1!&rh|m6dJfbn|Gkbe$J%>w&kBrrkG4p z@kF4yD81>AXS|-_eEUS?Kb>c`X-UeZ)9a;-`!jF-?AW<=W|e5MNn~>>Cd28yjohB(PiGIOw;wIsS;v)b(~{ujGCyJTrQ>);1*afQ0o|zPM@s zf4y$lJZri^O4+(3FrGH1OE@65TM?QguC6=xy!#XHQ>u!5K(D?UE=h@MGYfhQ1{{Oa} zmVcISU0c{P*QIa6TNkL_$PFL_|bH zL_|bH#Enc$OeBSca1C%f;U-}s9P(3y9fY^#O$f&TwS=>TQ-o?^BzOaK6RrSjgppv$ zznXB|Vt}6sR|zx08Q>8@#$o{e-73rkXMh71^0OEeW`ZGqo(=hoal#y7$mfL@VY|Wr zj5j1C_16H^gwq-W{6)A=nkmC4a8r=(oNFb;6u?2H5O^{46#IbKa1DJ>hQ!$^7qU6n{HGm@W(! zZh)sWqkKIUU#h>a6b1_;zk=|Cg52|j*@T-3ql#+|6Uv0i{0(rwX7c^OlAah;Tyu%g zB24CQfV~Q0Gge~h_X9}A*;Hfmpr;o9!qoM%8{D*ls|IkFEYw{*hR7r1W2a28)`i~P zA?un!lCa&AA^|+;e25+TmtC6+eXFnl3rpWKo)?PI0~-myh18*KdFb00lCHn$+CXUM4jj(O@VBBF60`tcp1#_x%_3Y~I8 z?ny*GeBXOWGdybv2^$ePRU@yH^g-`3td{FwoP~s?h|*qwq1oUEF#yiFB>&^UHh>T_ zZ#7VgM_Y4*!|H_wbKf|kpo*ZC;}P|uX60!$!m=nWau9wm)ogcK7kBB00oEAw=>kIZRI$9OBL*(%Ev|4YV&W$|q`|Gl08PcF{H+G1gX}MN7h|;o@<9Uz z3(jF(LNM%3)F6Cx8bODPX_pE~K@+{d;^bkm`_Cyzx;e$!yr^4HBya99gVe&#$Q1p; zm%eV0oEtI8aQdj{BCJt#I&!vlL*y#1IW!|YZQxVK5J{y1)Gdk7c+_CzcSL%hfRum8 zAfD!qz7oVJ!;V{z!N52j=G*CYr<-!l^{R}p!zAZl;0nIifPB`qF%c)B4$ack?pVPS zc)3p_zu$1AS+HgJj)sJ8AKUKHwA<^a`ztmh zEYT3r>|?w4YT9j0l!|EbEf@X#=mz#0RBMyhN`?F~YBiWaRE8~P-r)e4kbI{R}Jm8IjTvhh5*KjelSV7=0YB*B{&v{pKw6!wM z2DnXAv9{d6b@V$_yp4g}8i!}C(%e5U&IahvB;w{O?%`7QE`y9}?mk0@DyM|P*-Xiu zEyk{rU8jG|J$8gicClds?~3LyUyH&Os6xfcT-hXC} zE_+miA+83PsUfM$5}|Zzz70_bc!FJ>ouoPB)T~FU;%I z>P8Of(gj!t40+Jb!B{2cPhi z%b4Ml9!V4rn?_tG>^=$-MFTV$)QAq5W->j{Cxto5$u03Je104Z(B*K@p)-u{x*=Lh zJA4d$bsP+^TQR!&!mdEG?5YhYzFF~p91?K3{{IMEK(dJROyL_3zvR}4M%@6ja~3yU z#aw5P;@vd9jgi&6I?4uE0e8du0QC{ldk$e2+){g#4X_sOCKW;5C&4Yr|4}9)A|fIp mA|fIpA|fIpA|fKqGv}Rq@445sGzkd_2?+@a2?+^_M53psCtXxX ztpT&a6j35I;)lQma7MlfsWBiQd;_0AR21>wfJ5Lfvqu#1SNxHnGsb`?V3;W5p8@N@ z?-&E<=VhXde+Jx&5#OR&l<`OWqCUhY{(wSJ$m59@sO!f7qDD$mZw-io&jT3n4vZ0{ zyfdI;0P!u#L@95?AI|0GUbh(8W|NWy?OAX^l4ZosZ2#JAWa3OW-%3?4c#;4T; z(ga_=@%#b{Makq1XmlXH#YIsvIq~zkoOEhH7rn?u(Zmg?c0qiLN>Ma1@yBo(>6QU6 zz$j7Hz5$zE6yKs$l(i>*CV1e10k@?jP3zs&qWV4yL_iLh1{U#V`%x|*-8O(;#+6_# zm8M`SKRd!>32VQb#@%Y!ym&SrtfmbTa2T8d4WNzJ>^pgP%L}pX@{=38UV?Ve3a;?l z6ODNXSOw;RiC{GSjeZLnV}lm(h}UbnQz)ii(BJr;XXq`gK@DrN zmD*!KF>4le^sVA_u@QWAI3o=jq}3O&#+9^26$JP$!rJDG>y2Xgg>%3w5qD6YgXvzq z6AC!ri_m>@AB^|<#XJ_=5V8NG(YFmC>O=;oMfBd5$Qs{UVer5Vp4fB+So|Mgf68Xq zJWtrd0|}b=R26PeV)l$dEC3$^BtG?^&QWa{V!F-NLEWJl@MKljg7Ux}gT-%E{y-o% z(Kc{(VA9e;y*5q180b)N+>pgNTCJ_puH%|YGq79pMZ9ia;S8ne8W{XaUYycRd|F;F zF=ZF5IPP4p>O2E8Oxuc_03K@~e!J%jYAG~6(Fa3W{G#C3H|a zBUUJAz~Ugarc^6vz>%PcpTSL1su|Ftb-kZ}0TD#hWH2!a6%6|RD21;K!W3LCH| z2nIAOY`_)M#n0m1BvlQdzNeuk8!(d_VpZN`pK7uJWg4snZ8X_{iy9bEXR7$rY5iIQ z1D=>_K(0oeZrLUpu-;{%Uh{V0P7f-pWhNR>>tdx+8`~a28z|tci*1s}OcOuMt=mq8 zxku-<26)aQK7Z!)Ic-LrsN}O!PEOdoFre5*k7x&{ijWWE3GqAWv5gNzkqHKr57Pd(*G_fg z!MHN{bo)S;fp0g#fNTBS(Lm`YUxD>0I(mD#pF1n+O;~`7&;O4&1*9u9&Jf>&@icC% zow^%P7^ansc_S2-<}>TJM1PB$S9$3BG9 vlKhV{2?+@a2?+@a2?+@a2?+@a30LADm|toE9`Xib00000NkvXXu0mjfcdALD diff --git a/wear/src/main/res/drawable/ic_action_add.png b/wear/src/main/res/drawable/ic_action_add.png deleted file mode 100644 index ca13239a7d6102d789ddef86e219ccb44ae56950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtAWs*^kcwMxZ*1gcP~dQN{1*Q! zJNXeqltbT>uQ86!sw>Zl0#yOQ0ha^w=0KPX47-@$wbrp42tDXvgbLY|Ls;{+F)({= UU3IEMqYNbD>FVdQ&MBb@0GInDp#T5? diff --git a/wear/src/main/res/drawable/ic_action_add.xml b/wear/src/main/res/drawable/ic_action_add.xml new file mode 100644 index 0000000000..a910bfb5bc --- /dev/null +++ b/wear/src/main/res/drawable/ic_action_add.xml @@ -0,0 +1,9 @@ + + + + diff --git a/wear/src/main/res/drawable/ic_action_minus.png b/wear/src/main/res/drawable/ic_action_minus.png deleted file mode 100644 index e68aed5a2f8985f44411ecbdc5a2fa7074c86f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCFHaZ8kcwMxFCXM&P!M1~_~m}d z77jswwGFIilrv|aWCbcg1`l!%#O1SoP(9Geh%C&&(6^1@ytJ!kYjBknNW#{;R diff --git a/wear/src/main/res/drawable/ic_action_minus.xml b/wear/src/main/res/drawable/ic_action_minus.xml new file mode 100644 index 0000000000..40b17dc531 --- /dev/null +++ b/wear/src/main/res/drawable/ic_action_minus.xml @@ -0,0 +1,8 @@ + + + diff --git a/wear/src/main/res/drawable/ic_cancel.xml b/wear/src/main/res/drawable/ic_cancel.xml new file mode 100644 index 0000000000..a922f972ec --- /dev/null +++ b/wear/src/main/res/drawable/ic_cancel.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/wear/src/main/res/drawable/ic_confirm.xml b/wear/src/main/res/drawable/ic_confirm.xml new file mode 100644 index 0000000000..de281376b2 --- /dev/null +++ b/wear/src/main/res/drawable/ic_confirm.xml @@ -0,0 +1,8 @@ + + + diff --git a/wear/src/main/res/drawable/ic_icon.png b/wear/src/main/res/drawable/ic_icon.png deleted file mode 100644 index 584d65de70f6d1a23a376ded4666a876c469834c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3218 zcmV;D3~lp?P)2GeP0~wq#%3jD%HzUC zAOSBTTqQu_Q5Il4h0E*m<^q>{FI?`$KStLY_k6#@ImdJE15ue`t-Uy$^L=~&e&62T z-upWTh2k22h{%n}cqZ=nJ&N(-Sj<)YRzJ-6I3^QZJo94W&E!sAaP8${>;&lgO@W{4 zzVPtQGVA^q3;QbS(J(2#ixjb)XvvHzB^m*($yL%V6Zpw4VO}^o>bfw21-CY_^bbaEQ*GJ2#>jtwW?~v2b(#kkrMI zfiCC_=RLrC!)>ga0tu!U6#o<22Vh-j)2XsLvbi>B>l7Yk5OhTNT^kQ-p_)yCM?O&9kP^Q~~f? zPxsLfi`lGJ3;iy!lT&U_U_x96`JL#Y_exEqZW^Fy7TdFqwTlGCv**jQddTOvW4L+q zx}Y02U<)>JFZfhTDmdas=QV>yYE~S{5?PnOD5+ya`*d3ERGzJ>;coqt8xv1dmuJ zq;bE1r88s%Y%0X15H^B%vXx8KnJ=631p=4@K+eVtF=BhGdL6^_`jwmqpdH%JcJ_n=e zIt%AwJYU52j4Kb=%RNW+RBh)m?32ZO9gx-uV2RQWkRrO3-pp(MQsxC|YVtd2=tF;k z5)YS372Wi0m&2+du02$j_Q#bFfS|=_GRd=7X}6V2xzcgK0!-+;mZY^98PsticA-EV zYqUIw4iQZj6rt2hmFzAz$-(v8#AfVj2|$+eaW0+r;`avGn7PM?^@f}_k!MUZ9muPk zFBUf;E$#Tp7=iH7u&xrD(amn-+NaCyC5~;x)ewLrG{_exzhls$cS5t6*)qt5(HmI} z2gQ^scwlv&p&Gq9TH^h7;q!D(ugn14K3%OFGXnnEtz6*}Q!A4hDe?sZCSY@qYp1|W zT@9+Uw7qa+1!DjQ4k$p|E1kTrQl5GCR+ydkLRU)w+3j@Kplt4XI}E^t`@py$wb{Zj zUrMC~1qEJrr06f;)PzCk-KCRr+vItFWlpbC0>T0a(%5C9`~RLt_r94!w}cmyXGFbA z0`_|hizXcdOt>GIYoI?K)?L`MXU{Z|Kvh-MZ8*1v@EaJ}K{~m?D9;o~fzAj_{;Hlb ze{A8#*la`e&pkQx_=<1nu_q7Flgq#6WckV{TJTZ|-M2NHymuAT_#^D?1R}8`_3azjpy>>^%+i}uj1!`(cBYCrx zeIP_b{(*7BAXglqSGF9bRh!l1_eu&a+MG`F-pHW&o6_l#jVa{6Hi1^Wprj{OULv(( zWh8}to-c0%+buE-u!;L`6`N>Wl#bMD^(>Jq~-j*~Bwb-VLv?PvMoeNh;x`7fu^qw5mrolkOQHh!sS zBmb8ZY5ook-S=q`&5Eg!5m2dAvqb_Ljb?_k5OPzt)Aj$Vrk0)o`3BpNM9Wsi(ZY2{ z=%H8B>Cc-ooeDsz3mV0Fs+C2xuqppAp;*wl1=vAmPP#* zc`E%tSv+P0lJgrJ#@Q19rr}nig*GOa#_*N+QY-Pk^4JoO_|A($Gq>uKe3^nH`Asqd zt$H*0ZqK@A0zsb^kkvLcA^~6-VjkMWnz>2QjTblXJ+z!Jz!RkHwAYeMz41oAorcS# zhMsuu6j=u4UdS$Or-xqGTr~l|uxx7VFgZP;NeKYU03!)(zDMfOPG2uO3JCk))r{(I z6fAY(Kx1YhM zEKEc1D}N@vL0(%LJB+fwOKSC;4q)Jplt;ViE>+$6ISc&mbb7Go8BN-lR*{5vF*ryg zGpzf(NVcl}%tbqd2IMP`SmHW&D={Ryj&`%?4r4w<#FyG znn_V7>zrng$|eI(;5(PV5!W9lR&d@zsC*DtCOgpJfIq-0x38v`yrSx9&ED8IfsHku z?xT6Nc*B|_B^g}KEi!U$JW<>xBOz4cXLo&1$5{)FHbH#H!!|pf&EK3s&7JaaGc(`` zEURD>OLeVgsS zvTr4p?)Z+vB1^eGN!SBu=AQd7ms0X|TpbBz6@AgRET^pmeuqVs(jfCFY{4cL@QH-d zI$!~&QGd1J_k+7)(xkhVC!cMDBCG~ninzq)8ci=Gw9S_r2VKw!-LL_#!{)NYigtyE z2f9vomvMiY4;&s$!97oXTdq|^>bQ8srn1^>Tza#w6IVk3I-m zc}?J@;WT^p?1_lO=RZ0a`rzRj8@z$Sg6i1MVitW0nk@iA+Z(*QkOJP#Wi{g@C%DEv zJd0;zFcx#r9zX|lLFb(Kv$p4VeZ2#=VDpN@W~7bHl!3%F#l(q!3RdQ+?~1EE4_9-a zSy_{%X|A&L+H4p^XGvXW0`y^>C7!wqo zlY}{J?krx1Cv=AMAM}3h|Cs=psXP#Dy!*Yqy?p`#0{jC510RRr8u##wA9FK5$Ng9T zXAfr{L8j1ZwG;V$B6#OICR2F1j=$&5$G1D?j76OP59x)p{r%~gi2wiq07*qoM6N<$ Ef-@R4=Kufz diff --git a/wear/src/main/res/drawable/ic_icon.xml b/wear/src/main/res/drawable/ic_icon.xml new file mode 100644 index 0000000000..ae7fa78499 --- /dev/null +++ b/wear/src/main/res/drawable/ic_icon.xml @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/wear/src/main/res/drawable/ic_icon_snooze.png b/wear/src/main/res/drawable/ic_icon_snooze.png deleted file mode 100644 index 31b80685be1ddc6ae6e41d146641773bb06a122c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/wear/src/main/res/drawable/ic_icon_snooze.xml b/wear/src/main/res/drawable/ic_icon_snooze.xml new file mode 100644 index 0000000000..15e6a5c105 --- /dev/null +++ b/wear/src/main/res/drawable/ic_icon_snooze.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/wear/src/main/res/drawable/loop_green_25.png b/wear/src/main/res/drawable/loop_green_25.png deleted file mode 100644 index 37076d5577c90d853bd24ec600a7f91fb10cef00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21623 zcmeHP2UJtp*1ilXy;!gzP5=u6Nk~Y5#1Mo~MMRo_m5|(o2qZCyQXCOf6w8Q+ih^Jp zMT%HZ6hTEq>>xNcKv4k^9q6(9u^6LFz>aLW~oGff0%X99|F%L7^4N9$Zh4hS8R-Pu|)%$3$*-7PxCEV%%*uMUIM_VyLU6 zIWtCg|06B8OT+E#hG<{g7bCxAOXOxPH)GX}$`2K4bq{P=b1-J(jZe>391Ogl-}>Tq z`{@Vt`plN(>{5jSMb({-rf%d&)ij%l!=J9XT2%b37B?eGd6E#)RLo}Uire(%pbrr= znvq_C!Uae!^sb5`RN#_SU@~EShsG z;sNa&0{Pu!`PV>mu#n%>RWI&Bk;xx+uaJZ0Z`ak5+ZP96M#3?+P{4F3vvlr8JIKcb z8pUxgqCgL^kcpEw#}PVy1}Z4gR5=MLszN4iG11eYAuAxiYx?@3(AwS5DEnq_+Mh;Q zn)QZ&sof`Oxsxb%QS%kCOBKAmaT5(noW>Z9GGqS4Oq_u$4BI`97)8=}+Hwnm_Qh#| z-nO)bmZ)cyl$dSFQD2OGb#YjSp1*%hdtGUUa0UcDlSGuY8{@ObM@}CW8Qgwga?_B2 zMJoH2wQk~^)R=J^+SgFw-6BM|vD?2j_tB%e+S-RRi)`jIZ+Ne4=N2w5@NNtGD}wg9 z_1)78&nHC@7e+Y@`S7&x*4tT!CX{YdTI*l+BG%#a8I_LDI(PMoocwcr3`fm@d4fy7 z8z{<02CR8j8q)E`s?A~FWGIs3v~4K_EwY`2^SqI5byX39Z1+VO9=Fzhdugn3!LSLJ zhE`ot`Rr%5)@D*sp^c`EGCOjD$ZuNaY8!)fw~y->`r&_{p+hQg3s@H~RL2#1omICK zYJ6lWrd%?}k5U?9eNAyBQ@0{U&VQqi{uaeCyQ4qoUUD2VV$&qd^_Wp^dd_iVM}qrC zPmGtNPP3)xC(8N-_UGcJUxSFNKd;MoAZ(91>1O%6>S;#q5%ckD?GLEjVM_>!v7`4T z-4UG{Z@JlQfBl_|0F8=RI^(KI!OO79qU;Kk%!Y*6V3-rF9erl`%zo&21T$e0X?TT_xsv=^x5BA<@kg9bO*uFG zucER3M8bL>M`Qi_BVtG5HCMziip(dC*uWr8&E5Kw(}~|a%SV*km-F5A8;sMENRH$6 z_21aZy!9K8@S(CGILy=W*w<+7`%&U z?R7BG{qd3gp2Nwp^K6dp&v8HIw*JUS(y~O#?KPvFoDUs6u;cFdfH48BykjpV=Y~Jt zF>!Xn9q;m+4Gu38Udq1>QB_-~wdQIJ*I-=IScS3NaUo-m?V5FX+}%y%u6ml76JGDC z->tD*;N@eOWB7|!+zsU&Gj~kcp>2rwOiMqU{v=(+tHtZ4XKdOckCj>WUZx&3X-dEE z%Q?mGPU~z7vaU@{2JltZ~_)#=3!O z8S9osk&C9Bxc%st<%W5?+H~?ZS*EA$r!Y)sntEruw`}KFDb(y*`eBb`wo<)8YC=oI z#wVlROnW{}`!H!%E&*N;n7%V%r%#4shFgZi>+@z=jj73p&)enseu`4JzB+U2f~gMN z*pi{i^&XEr9;Yg&j&`x6zRSX;2OiSipJy9#k)PVME9JtX$dp-v)F)x*>pxCdiEs04 z3;vk;&Oy~@Shnh@>PA6;U9rkU?$>&GUqxc^3@tU_V+x}?s(aHDoj^?EfPtBbj zKRYAkKKJtRKXb0D_NJD;?KvgJh$@KHcJJy^^epu zbmr+qh);<|QRh;hB$n)HvRZlN?al@~*QZpo^r2}@&d8h7ig?K$Np~H%W4O8EH7zll zHaM@oiA$j4lC+B-UprqrQ}S-f?X98L(9E9@ zpZG4mWnOUR+L@cKmjx+{qpKOK^gGxc;T>gAYUE@&uKb25>!|rZefkjoi|)lOR@6%P z{mDm-)|>a`T5DOyu0FcD?$S}+fNOtjJ*wMUzpEs!gr^=oC*tM(I||Gf%uSagRHsI- zkM>??wM7`?Gro+FKn^LZVu-74KiclJeUii_xKfT`XOa!+>9{4d3iETMb5_MTj_<8| zKFK~#LCzB>IKwP6e$a*L&y6kXpC><8saY{*7yjBpVc7nX!ne_>qtkFBjHx?k%!-+9 zvHf4xnubS4Z=T#dGGy`=<*-7XLarXZ%&aWtA!C8z#M#Y`hA!dT{)o#bhfTU-ddRpg zckR@)t@*RmW<5@#ri@NpjtM4OQqL3CY>V5v)FxfmB|eAyiu;1I{AMN`eX{)uf72QK z#2pIP1GBeg4)w(<=hz&6={e8ffuX`lF6_;@czeSQ%Fc`wquY(QvTsywHQ)1QZ%5;Z z!V%B5L7lJmsN$4b_1sg9@7~*0;uCHgROYS8 zVdNgXNIRPkr(Q3)J>AOlH_x}8A3e>Q${(L*KKQ^dYtmkk|DN>6y~_Fdt!?z{7b?Bv zyj<>a?!lj&K4rIBWo<}r_^|U+@WP|BgO@g5l`ofXQ_xq>d64`2J)Lq(PxsjSMz0;z zul{_YJ^4)tR?SS!>(@QS&-I12VYLmdO4Y3s)u zkHk;&{pX)^y+tp(|LRHjXNSt4HTIBbzF{+4Jg@UA8dl$p=QfvaPTrBcG6MHkm0#t7 zoE7z~lIkTIf;ZT`$;eysHt?#NwKaLPhZ7aE% z_b6m))6sm_{Kao)G+IAmJYIj#YJPjw!#7o{mK22SYbmR8XdM>4rnEioU91LUXzcFT zo9oopy-u;9Qz*}^L~RY9QyHb~(kUrp+7Gnf%o;NqAMxSd>jx!eyUO+_G$+Jg4F2U% z+pB`t%V(A;wi1G@(s-Ue5+9dYRF)tZ$7BoqVO(gi5FA7yh-MWkWU>Nb3C17h^7xi| zZ}KkcVR&pyJ#Vs$iHnc{2k;!jMX*QsY)@8rAdAA*v!W~0La87?Ff3tWLW6_&VrreQxXi&Y1R@wi#+hMR1fnU%oPr~eEhy#|#u%ar!3=Lg z#1l-hCIl)0{G(vHMUSowG@6Lbp}O1Jcc%m2EcF5;5+N0j4+#mug_z<5A}*dlp-_-8 zL?RYgV8vm42{RPS7wdNg>4{?ti&-L`P{I@NF-TmdzhIffQcn*_)GOWn3KsSz;)}bv z11#c0nL<1PXM!KdiOuTu5iS!2bv_!Kg@=RSV3;ov13$ume!`x^f3N!&DSK~!Gcgzw z7ngyZd!9Eqc)-+RiQRHQK{user0ww(dxi;NygMuwEEBO{yXBxO`UCY|EOCeXM&}1Y z0rLR^NqC%Z#6j+SlLR=F_YF7XPM2Hfoa!2C8X%3z5W!4|K;$V91kt;uYu}5QUH7nI z2xOcI#=x7$XA45a(`fkqj(yXoFD7iul)!W_z0I)%0+vAZBoL`YGL>X%1m?Mk2`WgJ zWxp6M0yd8m_Eij1Dv{7H2FkL346q#8ObPRcqM&V2ao8*>M<5DjO6a^`CKtvF`CJ;l zuMuV0J4vYwL6ATM9t)kH@CMX68h)DTRn7nZqP3hfN}3DFl)!)`CT16G`U&1h$1) z=U}+FpxwU;Z7X0cLl!Xz-Bs_{0u~70*F6&whec*F&9N+VCJBr=Y>xFOn6R*Hm}5pU zXE9CL7Un&PP{F=R#;04t-j;CjGIzijQf5ya~(oI<8Z3?pU1Qm>~j^j6y5 zLW=lwmKQ3Mg_K-63t4P1n}+|QwePWdJ-gj_Uk~SxQP341<^Js)AptP|d&{&dRHxOq zgNOwjNeEK}TXVq-`SCi^75hu){z+(fWTOh={TGHq%v?UW!636t$OHm~g=LXgWGtCY zg0W24oPwp03I1jzGYgnV=JX8qe>NEX>fQhKVD!ysRsfUFh1qm`Pyc!v{)gko67ZM9 zqQA4Cz_Mk6LmDg+(>WqRFor1<2Ju)-WO3q`^V!{}oZgy-kq9uTvfsr%D#rh?uWVSv z`#ZB0^_0CdVg8@>dC=?g$M(LiVU?}V-rWaT<(*ac%U!T%XZ?EDL{5F+_+Z;LN9~c7 zg%oY+n)}xD14S1M_PElOWq>e! z*?O2q5scanX~;_f6`Xg#-rHHq=-|BgRU0Z==RF_f+!C~`^ISqPGXa7pAfMf?=-d5W zeZTLDzTMxo&(n*~lhBFX+4?o3ypT7St^>6Pcw2{&uJv!~Z#{<>3J3Yv^1x|TjGVfV zGhwGs{~H53`hLq1b)(y{YmuPdsXGUys};Plga0hR_x^7IYP`_v>>t+qdh`zmMu(Fn zL9-!Mm(eAaBD8^wE;Jibbs1e!DMA~_=t8q0RhQ8vl_Io(j4m`AQgsrC6ywyfs8IR8&Y){T~aAR8_4KFvmsTN(Iu54w1JE+G#gTN8C_B-LL12FLbD-N zm(eAaBD8^wE;Jibbs1e!DMA~_=t8q0RhQ8vl_Io(j4m`AQgsr zC6ywyfs8IR8&Y){T~aAR8_4KFvmsTN(Iu54w1JE+G#gTN8C_B-LL12FLbD-Nm(eAa zBD8^wE;Jibbs1e!DMA~_=t8q0RhQ8vl_Io(j4m`AQuXiBrQG-T_b?y)(R~Q`>-tX> z6IOx0%*U`C-CZCkd@=+@u7RMxI>5C7f|i*;&?`R(qV9sAF@kN2uh@g%lWKIbwe}2^ zgB~mCy_f6g0H*(Ck%PeRC;fmBfei&<8h{$WJAj7(*8pw+d{>5i_bvpD2KU(j^8kzn zu&n@XsQ@VeH2?$B^1Yq}0;gyI4S*(qivV{3-T)wNH~?z^Mp{T!r-)-vbC2}1w0pc)FPxgX#KY-H!NTNo7K}r9fa6mLa03?Ac zKpViI1>F-Z5bY7b2LNLLWE}nx`3V)pALzpYRssw*0W!^J19VDH5;^eA7vN8TjLtiQ z`(Oh1OaM?EAgCt^@;h@_fC7MKfWZh7D*|9BKr9ldCy8daE_L-HPTvtE-d2E--8RnP z>W9p(Z~$asAz}}JOn^9mrvQIfCISalfV%()Gsr^|k<7?6^#(x13cwNo6xaVqo&qoA z=|Ms66e0NJBS|&^6n8d3&_{4Z1`YgF+n~g}+xrjXiX>?V5FlTGYzIKPIv7Dp3_^P~ zz*B(UfxiWGq(*H<8V4yZz<(?NQtv(?vCu0X`94@d2E7abnZ^bH&jFzRwF_w*j3fhR zJ%A8^&ICv>WK8}EQ3pW~dgcOT0&E266=_Kp0!to%O0UP4iW2yW?3#A~ya12{3jn^5 z?~MsEOG*Hcef5QAWv%q&|fM* z1G2{_0o3)s+4KE-NqTIMD*?a)Uz;ytmbbMF-N9Qi6qr*r9N1QqKYdP{b NPIj|xvuylU{~Nk!O#T1> diff --git a/wear/src/main/res/drawable/loop_green_25.xml b/wear/src/main/res/drawable/loop_green_25.xml new file mode 100644 index 0000000000..8ee928194d --- /dev/null +++ b/wear/src/main/res/drawable/loop_green_25.xml @@ -0,0 +1,9 @@ + + + + diff --git a/wear/src/main/res/drawable/loop_grey_25.png b/wear/src/main/res/drawable/loop_grey_25.png deleted file mode 100644 index 781f68d17d7710e202d4ea655f4d8869a262a70d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22321 zcmeHPcUTkI79Z9^lVZV!xB;w4DkP8?f)J{RNE5I!B$E(PO%h)CRJ-+SNtzTA%=b8_dDxxahwnKSdpteZ8{ zUPEoP8U#Tajt(|%;5Z6}%0TeHur`VV4ys}YA1MTB7NStvHbqkxg4A3DZ1${K{vw%3 z>Ms)G9NBD~SR&#H0ucxbd6?wR_i(QrZqfMot+i8h#8xMfn~n<3&3Z$`u-FMk`l{N~ zqxJVZ&~ZIK*w(hc?&aOl{Wfii*r?-bJZQbzedQ|sy_;6;i(Y^A)6-@90`BHDKEKg? z;vTCey&);9L^)q&&~^tCS8BwdL)K#lKUsCDu;^(OVOpfxI5DKHlEu}RHW?~GAHtc; zDF*qWBBp5KNdl0NKQrUcF1s;{H8I~KwXMWSsW|EW-V$?WyEkT(e$ z#&as9L-+9z$L&Feg^-gG*-5W3FA5${5 zYm5L>JC8AQ#?fsf=c?crD|>kn#!f1B95H1W4gLX6m_{fF-8qU9X{z<4;W`BEj@1F9 zZDpZeWXnpI>EjbxE3d8U#I+g_kxP6SGD~OdS{z)Vz0meSiN2 z>bsXTZr~l$nsx%(UHj0hL5y-^yJvIGg9p`BRrjYCTF-^AdM$6}7c9*8Y6|=_ocX!& z-IKG=#zj)*N80!Q@TB1S+Zp@Elx$I5?N|Oh#{Tn3^_I_iw+#v%{c^mGhE=)_S-i<6 zVPgYjzri}|Et4;fztzHhR$=_9AFF~29a+RuS{92xIG@w+z0*W(Z(07cMhJS7D?0z% zB$a*<{;Qsr1h>4lY_i`y9*W>OZdnXL3v9*_Jg#P0UQ&S|o86H{N33+;o*!wPKXAFTaPO&u-3L#<3@~;_)bn=X+3GpjU#$SzQo_A>6zxc`mc!-YZ3}PPib0+ zwLZcs$>%5KMXL6w+wE1q$(4~4VutTd zyeT<8+F~PZPtDCVf31fxEcPW*{)>^yCWV0{LeT~5qvpn{ahz*M4blgt6^%YJJH21- zx_6wCqrv@$MB3)7()tHmh#ND`bnrt}Gu3{pT?-}}#2s`xKH>D> zKMP0tQOIk(9gGd{4v85`)Ls_NE;JiAWF4C_F=z7+jz@p>xHaUK-7TS;VXg6@L{o>+ zhH+OOas!Sj)3+Mqrd*DyN~*e0Wm2VErT=EGT9V(i#lL=Ve>TbO>Z0kRshng-)px;jrdBK}3cx50xn*66Id6wRMBDsiOpNdBnck%xE8I56t=hEbP1NM__$ zJ8E`n?G$->8)X~)q!W8pZQJy16SnCZ5j_s29!Pzhs_xm~dCeo{&;s}6nRcEg?v;mB zf7_nsnVK}~mAkGx|IpNfYg73LMIM&FhWj+F8|ZUk#swGludcg~F09Ne!l`pcWrY~) z2WX_NSrSPtoN)BUgP)cfwEiyJRy}YbK?{ zH-xW$JnZ%4XOndgn9j%{Bl7}Mx5sbyPIE|eO|yS>hL%~El62sVZLZI!NKLCt(TT*`VT)%!|~;BBmbkQrRD_?D-d_vG>E<;P|JjV{=NG`|jBN zY^SwRP&BV{TxC#EP|>~#11IQDaB_a>T%X|PoO59EfvGd5&bV~r`i;Fe?(U=}T9EHi zY7%P_?0#;nf=7Iy3|trmu;kgiu7<7wo4@cM2#VlLyYyxxOe2_{@~O``1J_ZdzR#vN>(M) z>@nrB&%*0w`6n-*yykL2l)Nyig1y49h1(L=QVOL+j923KTNh~+IroQ8AHsgpKex$} zQHH!f_Mpyc3YVkxzD^AI49o8nIFdi^h~{S*@zv)%k#yddx{I*Mx_itL>OYs*gkDW z^i1=u|FY6HIyije_%}m?$8S;#Ezm3A8xTurrP24<^NhyMeB)r`9Jb~6*gR_JxQizH zjjMB3Pdv0aZ-&Np9K6tfk>jN)5=1jV0qJbywd;FY?kT6NU&SLOHW=DThad&qX(`2)}s^fy${0DdfjDt?@fQdQ#LoRv59r% zY?-H$r}G`&9psbar>sWH%yp@?AGUuAnx8Q*mWLDm zEcY$jo4u@tQ(Un~OZ57*w(RLG+m;PAQ}d=4&wF!9_U2ew^-!-!3E{Qm3m6^rtNcQ=%l+cyr3T2;~<`z}U{ zJs@Uh%(XQdYhERrv*`3^mXfC0&nfH@Zpnn?5zTv>uVs!HP7MEW=heO9(jBFH;@`x_ zoeTPDf78qSSECM>6%`bXJ$og@guLMG>`!&)gUf^UUhk{Wa;f?Ww_;L@|DQ+Sx!+9r z6gMg^uBCs!9Sxs3CipT4vgQapyk*|bGZ-9E5CP_j{18G&kQfxA5X7_$5yPASM27Q2 z_yVDY!Ry>}1~>uN!oZ8_OmY^p5r2V0m;`YTo9V#`3*gYX29_)}W(Wf~2ts5qE+i;W zC}o6L7_|Cj02%Ej8sJ)0WC0ciR%k$+xAQChnR00jpAyZ6nW^@9XYECyZH^xy& zWEzn~A(Bn-Br<~x{^+>&X24Pd5>vwEG2CqI+QWfg76$$@nV3N&1_uWdf=vh_37<%& z)9I)i3Iz`|@X}DB3=Y8yrG{-zI{ermQjSC*mI*{c9O@VL6D^Th7#N^|I$Qg=g2bJH zgwl5I0E@&BSWF}nNW`9uxSUQK@e)a3>!ooyL?jRiLWD9Yup{?qC+;ZzJI%ic*?Ib# zfx(}m8;nH$nI zJKy07sQ2hdCg6R;4|?XCBp@MzZux&A)POBjPMUH!*PCmhZSC4shQ!JT8}RP9niPJjaaA1#^y=;r+-Y4xWqfXmm3U zY{E4+Yn^ov2;=OlKrRviNXKv>Mh6`W7X&jw%uNv!Qz{-YH=*K5Tp;<;xfDFt6rs_1 zbUzrO0;<}m=)uibp&SHKu=YbSdjjl?)`aVhEdH{$<3ymKHF1hzi4;N8f`vgxUg*rU zorx5+X-zK-n1iNV76;vI2$xCxqPOd^IxXAH1Yb|*_fgR1A7lRQ7{UICu(xg6=Bice z+fJk+o-7!aAXa>^LcTwbwE6zhxO)&L5xr3b3jPz*ArdY{B!6W>z_i2QCXYy@ES^LZ zgzL-+IGG3si^YKg4vfw;ajB5oe#`9KARV)g@$p|As}x?^w}nS1Q%tEm4uUtMP|fh> zW~MOS&m1A)X;eDh#LpC_aA5O}A^zQkXF>zzPsjb?f4%U!b}z>t7V;4;i`X%~j*kDQ z`QveEB#t?kjEAXYE}jCLQt&XBM#s}RR8w<0#e~bF(>liYx91OgZ&u77T3L3c{yyg# zIq3z>K%MERVxzG9a`|7l|O{LhMos|-rrCTe6 zFDtf=D)8$H4}C&GE6}zzYKPv%(E8^;F*9!A@yEmw_Pg6Sx>P=8FgZE4bI<)Rx-L+>4LXbdj8v%IElA_NG6l%Lo_Y*xD`h3d}bE4g_ZOdTZ2DMH~ zTQ7Lm1YUCyJKu9*<_o*){$aUmME|g3tUE;zEE{rV1zmC}!YU}}!m=S(R?sDvBCLXf zE-V{zWd&VwDZ(l!=)$rgS60v^mm;i!f-Wo@a%BZwaw)&?7Cq1qlE~Q2<&1^#Bo0GjVUp}w$b1zi<=ZRn(*yWwEI=s$ znmn}u&<%{<8PUy)&cPCZ9v4n;LH-0rHUPc==+(Nn0~|WrLm;6OoCr|e+1pL%El3N{ zeGae&;3R-KzytvF{@wsk4sZnkO&z_q|4Q8j?jtQN%$vL;=^NG2@&|IXooSP4?Yr{d D%90hr diff --git a/wear/src/main/res/drawable/loop_grey_25.xml b/wear/src/main/res/drawable/loop_grey_25.xml new file mode 100644 index 0000000000..34a7a80b72 --- /dev/null +++ b/wear/src/main/res/drawable/loop_grey_25.xml @@ -0,0 +1,9 @@ + + + + diff --git a/wear/src/main/res/drawable/loop_red_25.png b/wear/src/main/res/drawable/loop_red_25.png deleted file mode 100644 index e9dcdb0da310eb40299d50126dda5a528c8fdef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21623 zcmeHP2UJtZ`oAnnFE(t58^D4{DiBPBP(qa^O~6V>ZbAf-m_#YAET|}!Cn72ef~c!V z5eteUsE7zw5L_FesDOwr_!e|=Rp8B~UJ;G^*th@lKPTVempganD|db~^UYk&NjA-Q zu~Su=tOP-js)N0?JGf3lpdbf6i<_dE;G!t7_Z2~qS}_8dU9;6RAxO!UOQ+ADAHWy$ zMFD&P#(_@92!wn#HwcEH(5hq)j;BY{c(e8=Z>=0-B6m9S-8B?2?p9kO$HmRi*H#=g zFGl;oBMrC9qit+PXkJT=k=?c}a;t`$fy!p3hw}B>2e+*|6tnrp$7ib#1>P@ce{s9> z%mZ3uR$FpTxqP95%5Hl@H{(c^bgQYOpROw{E_qguvxrifCV)mMt9pVamoX^;cGV7t2Jhmnjs-&2dzS90ys1Z?ifAS=h=%ChwWy z0i}+B{BAP+>!A5q$ZzJ)FYZE-$?x~BmVp-S)Ygzmje{^_;TUTuU@nwZzF@NrA`Fe9q*^xpI-god>74j0jk& zoVv1o3;UG1#Th8Ismi-efN*1TV0+%9M-BD$59bwIEn?j8Uen1bT2|=Y5%gz->8JL0 zPcJ^77DZYTWjEse)1q5%oeoba-=VnPzve}(-KVq4U7xh>>J&Tp=lST5t8*K(Vw-j1 z);7{%olRCdW?h|L*~NNZYw%H)R%;BMSWc5!9fv)-gem)n{6#gk!*(@Dc)l$8=Ia*EJzR@Pc8y$!cdXzBamf3?suDs&6j5HC=}6?vUgGZUzP zU?`+q)+>lo9ASA)VJt(tDn`bCvybjJg$aA3-)mpCA2DXjG|cswac(+}amMyU_syOd zFMF+4GvN=Ejf-v1$IZP4k=B0NP+&*g8Fk9d>{pdD^t_`clh@lGRKCL!6BA>{rzYJI zo}O&Bm3*M_PG*35RVD>J95P>$O`KDJA<`toY@<$8$aR8_VZSY8cgE)F21%Az6AI zN_2mG^nmARD<;^C$mkBRr--f8DZqQg)8pF|>lr&L(B4<*_#N&IMj!e3{Wm2gp!G!pFPvc(o zy?iep{apQ@G~#Y3?V7i1#x6~Lyk~mGk&Gu9%3f_=H$7w1mwK$pw)Hafs7qJ;b$6y$ zM)LgE9-1DU^tnejW^j)3JIzCQ%FIbQp$6K4s+k*B zMj02+IC=ZgPpkCv_jG9GZ!ybAKR}@y&NKARac|qnHkYs4v*P_ev5R7(URpw1#O5dC z-pqPFOY?}4Qyvjs9GI~?VYg4FeWqKc-RleF?B=xOBNuG)eLqI2S(eV5xp<}>C$?;4 za-+v1kH=|BY2%&EsPD3I8G(m259C{iT;ip*>`A$}G&04BpY|l|LgR-iYw#VO9l;;c z-r1@6$mOU^ldD!Kn`nB~cm>~73tw9OyBmGU6$|=d#x6#}v-NR#6{d&o+5XE`eJi(Q zaox1K;F92yLo?)NXwPtTe&yVf=+^#z|(x2c*WN#-s;H zwP*bnhAuS7J(_zCb~shP@Q80qZUHZPA;tHwkJrK_Ikv}=k4?Xye=I+3bXuNEyh~=v zea@8=zvo`hO+P#7M8iY5>g?R$+%*i2{{+t2tJzmt;xELnIlty#9cJ>X8y~4+OyJ~+*0sfK+2pwP zCN6=7OVTWPeC6oIMY=Yo~4Fm?Al{%8!jKy4!HK)_G8-ZjeE-C%D8IL^CMo~za!6h!Ps&oLS<(3#%S*i z=Gz1@K9ehm3C1B6HFQy}^#|+S)=!c+L|4jj>^x(AS_W>pX_d)&qx0q^IJWPtdp^lN z4ndAnC^-FWGB4<2?Wg9pjn9*xE7z@_um^u_i6HDiS<&0*wDIYJA&hfdNSDY8@RX4NX=u@3nd0Wonr|y!! z9+s9Bk%cbWX zx@3B;08YDJc6+Y5=P#abJwJGoTPh!)VLW)xt7y?&UGRs|Z}+Mf6|{HIu3xP7lJRoB z$G!)DboiLlZl1jpiVXGf(%}`?Fu$sg?eC zu`~Hi2v(J>>h-UECC_yQ)?xKc?TWSSQ&p)|tG2GrdM1DO$5mP!E&Ot;#MVUHB#*?8 zi~JXzcfCccxc}-&_$RySAJz96nfiv!YxBI$t!i3(H=fg4zBPGQ@|pWPY16f(ac;rfvc;|E#I2{Q8^(H{^G-ZYT^9UG{K~X5{;q3j{=WRg z?7YQ+c`e}=&a7s)H)*Drls$fXA?)|@UH9*$P|O}*Xbb1JUu}O^JN|KmaArr@&HP6p zGh2=oxE3sXYtd}^i2iuvJ@ZAKH4op^{Jgv{B(<%g#;#p1dR=*E+`CwH`pDS5u{SrU zZg`zChen}1Hy3s^eM+O3v&v_rOz1q=c{6*$czneBd#@jqRqUxakkFbCe<}Et+R_lI$z!2)m)g&;ekvFOUIn1WEx5Z4uWAZ0}~n?#1m0N&2+l` zQb8H1#_M3ZRm6d2I+jR4jF0nt44p58F~&GDmPsTTVoWGFqVXJx$s7X=i9jUd2_!tx z5KACZiQtcd=@lKC5-6DpS!}AiwQX-WaA&3yAQlU#czj4m2rk4B#}{(&L<)t1xFM0S zKm#iZNT7b{?N_j%KM+sU%N<}5 zAIcEmi8um&C?giL-$t-f7}Wh}EG8Zff`eh6SOn~dL)r=Y4*&h;pM~si{%T+_CeF@7 z8}~hLaPW|!MPi#(fP!91KMUJuDe?>xz<769#9t|7!ZxcwS9FK!y-4g14~))txB}`! zIudi)U-5&qe3b+^l=~Gkq@~BKdrtKXwJ9KtN*BTmF<6S>=2VH|AeWFm!3#*%PEv>TKj%1`$K zpgQnGVg`>1J6O{|1&+&QQCS2M#Rw*ouq2plf;A=?nPC0N1R|DcY)qU(G-MOVWJ>p7 zI6I@wzi@5MXRbsRF>u|J?^t{$a6iyJ|2Zbc3?pL#mTAHufiZ_cAR>W@Wx;GR#e~T) zWX&<@3xsm^MIcup7o=lG5K0H>3kw7zkr)&@sM2gsS zrxz-NiKJW_6IpC9c*M_Y2Og{6ve%6J<#2u<1wH;z=3kEy5&-kQwM=_lb!&ayiHOe@ zhcJY&B?ruq@6RJWzCSk}9K;llY*azq|G{vG7^{Xi7!;O2g+*i%u?(0+z_N^ujIjPN z(FjX1_9rt~Y?w_kVe}35e>WI|^4)+V5c><>MdhD+?BK|H^Dd zJ!L;lnEz*e9`^eDzP+z!Sf%T;fA>LFd3V8E7S-;#hky9TyK3Mn6QCnnXAxT^E zCJFXAa0aHLxbHi*d~a$UWd7NT?DY-~Dt#xHzjl!5c{r5$P~Q2&J+Aab8N$s#v_9rh z1f#Y?Q{<(93eG!V@9j=yG;m)0q7LP)yUhnVw*;;1K9^9)1R!`K^4V*OZXRsv`)yNn z^I+2fOD`T*Oe6J18&r+5Lf%|@4%8mtZ5>9sHn?iA_Iz$A9OPro1*cUJa_S-(_u33@ z7}C)9Ylf(XUc;V6f_kU!9+aM1@Wu}QS%B~VZvkq&(Ch4PE)VqRZ+47!Ck=vTLt5@nhT0u$|nhl9%DP0mNLMuq=LbD;UETu~#MQ8;nU1&BWmZfw_ zqzJ7br3=l5#Ilqwi4>s~q;#R#kXV+|C6OYuf|M>a8xqS>x+GGBR*=$#WL7OX-qG5n4e?7n%);Whq?}DMBkq=|Zz1u`H!aB1LEgDP3qbB$lOgNu&s^ zAf*eK+K1z~8a#sxA0Esb&XjOV3al=&_>C zA2MBCK=pqtGT`TvzDGzvi2^VSKo#H}z(as*05<@>DI>nw3PIyRI}2bT!0aJ(t3X{E zKng$|z>u_jt0#fLC>lT=patL(z#V`$07xAUz!Cs?kQV^RL;M@y3mK{>vOp^tU>N{n z41T8x$^bwp8Z6*8<rn1~AV8 z0LcM@`hp<8GlvBz1ZV{qjv&4w07e4DB98ikjOr~*T)l|VHw5vw9bjy)jw87GA+swS z09jaw*a9FEAP(Ruz+aWAz(57yE&##|^3WtCGBQoQ0T3|SP$Si05mvvA$7x%WMHfV5CYI0 z0C9$l$=@MrzzIUn0)Q-l%>ex(DaaC_$pujExA?rE2yT&G^A3O)01{v^z-RKUF+pZY z833}czX7-ifbiV{fMf_{0V6vjvUrgxkED_zC(gHmAW0J$KtBNFX=eirmMTzz?D0te z4TBr|?!OhJPY1aY0pMG4uGVNZ^}P&?gFQnE@CAdVbM~7%nr!G#>G0@ I%5Uv|05$MU?*IS* diff --git a/wear/src/main/res/drawable/loop_red_25.xml b/wear/src/main/res/drawable/loop_red_25.xml new file mode 100644 index 0000000000..688ff02e24 --- /dev/null +++ b/wear/src/main/res/drawable/loop_red_25.xml @@ -0,0 +1,9 @@ + + + + diff --git a/wear/src/main/res/drawable/settings_off.xml b/wear/src/main/res/drawable/settings_off.xml new file mode 100644 index 0000000000..bbe06c1740 --- /dev/null +++ b/wear/src/main/res/drawable/settings_off.xml @@ -0,0 +1,10 @@ + + + diff --git a/wear/src/main/res/drawable/settings_on.xml b/wear/src/main/res/drawable/settings_on.xml new file mode 100644 index 0000000000..b63a5fba59 --- /dev/null +++ b/wear/src/main/res/drawable/settings_on.xml @@ -0,0 +1,10 @@ + + + From 88072ea752348022ef137ed616d90d86a6b9cc4b Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 1 Jul 2022 11:36:28 +0200 Subject: [PATCH 19/48] RFSpyReader -> kt --- .../pump/medtronic/MedtronicPumpPlugin.kt | 17 +-- .../common/hw/rileylink/ble/RFSpyReader.java | 127 ------------------ .../common/hw/rileylink/ble/RFSpyReader.kt | 98 ++++++++++++++ 3 files changed, 102 insertions(+), 140 deletions(-) delete mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.java create mode 100644 rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.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 01ff035702..ba19c40278 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 @@ -20,6 +20,7 @@ import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification import info.nightscout.androidaps.plugins.general.overview.notifications.Notification import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract +import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState import info.nightscout.androidaps.plugins.pump.common.defs.PumpType import info.nightscout.androidaps.plugins.pump.common.events.EventRefreshButtonState @@ -54,8 +55,6 @@ import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil.Comp import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.TimeChangeType -import info.nightscout.androidaps.interfaces.ResourceHelper -import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.LTag @@ -306,12 +305,8 @@ class MedtronicPumpPlugin @Inject constructor( private val isPumpNotReachable: Boolean get() { val rileyLinkServiceState = rileyLinkServiceData.rileyLinkServiceState - if (rileyLinkServiceState == null) { - aapsLogger.debug(LTag.PUMP, "RileyLink unreachable. RileyLinkServiceState is null.") - return false - } - if (rileyLinkServiceState != RileyLinkServiceState.PumpConnectorReady // - && rileyLinkServiceState != RileyLinkServiceState.RileyLinkReady // + if (rileyLinkServiceState != RileyLinkServiceState.PumpConnectorReady + && rileyLinkServiceState != RileyLinkServiceState.RileyLinkReady && rileyLinkServiceState != RileyLinkServiceState.TuneUpDevice ) { aapsLogger.debug(LTag.PUMP, "RileyLink unreachable.") @@ -998,11 +993,7 @@ 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!! diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.java deleted file mode 100644 index 9e3a094a9c..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.java +++ /dev/null @@ -1,127 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble; - -import android.os.SystemClock; - -import java.util.UUID; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; - -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.GattAttributes; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkEncodingType; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.operations.BLECommOperationResult; -import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil; -import info.nightscout.androidaps.plugins.pump.common.utils.ThreadUtil; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; - -/** - * Created by geoff on 5/26/16. - */ -public class RFSpyReader { - - private final AAPSLogger aapsLogger; - ExecutorService executor = Executors.newSingleThreadExecutor(); - private final RileyLinkBLE rileyLinkBle; - private final Semaphore waitForRadioData = new Semaphore(0, true); - private final LinkedBlockingQueue mDataQueue = new LinkedBlockingQueue<>(); - private int acquireCount = 0; - private int releaseCount = 0; - private boolean stopAtNull = true; - - - RFSpyReader(AAPSLogger aapsLogger, RileyLinkBLE rileyLinkBle) { - this.aapsLogger = aapsLogger; - this.rileyLinkBle = rileyLinkBle; - } - - - void setRileyLinkEncodingType(RileyLinkEncodingType encodingType) { - aapsLogger.debug("setRileyLinkEncodingType: " + encodingType); - stopAtNull = !(encodingType == RileyLinkEncodingType.Manchester || // - encodingType == RileyLinkEncodingType.FourByteSixByteRileyLink); - } - - - // This timeout must be coordinated with the length of the RFSpy radio operation or Bad Things Happen. - byte[] poll(int timeout_ms) { - aapsLogger.debug(LTag.PUMPBTCOMM, ThreadUtil.sig() + "Entering poll at t==" + SystemClock.uptimeMillis() + ", timeout is " + timeout_ms - + " mDataQueue size is " + mDataQueue.size()); - - if (mDataQueue.isEmpty()) { - try { - // block until timeout or data available. - // returns null if timeout. - byte[] dataFromQueue = mDataQueue.poll(timeout_ms, TimeUnit.MILLISECONDS); - if (dataFromQueue != null) { - aapsLogger.debug(LTag.PUMPBTCOMM, "Got data [" + ByteUtil.shortHexString(dataFromQueue) + "] at t==" - + SystemClock.uptimeMillis()); - } else { - aapsLogger.debug(LTag.PUMPBTCOMM, "Got data [null] at t==" + SystemClock.uptimeMillis()); - } - return dataFromQueue; - } catch (InterruptedException e) { - aapsLogger.error(LTag.PUMPBTCOMM, "poll: Interrupted waiting for data"); - } - } - - return null; - } - - - // Call this from the "response count" notification handler. - void newDataIsAvailable() { - releaseCount++; - - aapsLogger.debug(LTag.PUMPBTCOMM, ThreadUtil.sig() + "waitForRadioData released(count=" + releaseCount + ") at t=" - + SystemClock.uptimeMillis()); - waitForRadioData.release(); - } - - - public void start() { - executor.execute(() -> { - UUID serviceUUID = UUID.fromString(GattAttributes.SERVICE_RADIO); - UUID radioDataUUID = UUID.fromString(GattAttributes.CHARA_RADIO_DATA); - BLECommOperationResult result; - //noinspection InfiniteLoopStatement - while (true) { - try { - acquireCount++; - waitForRadioData.acquire(); - aapsLogger.debug(LTag.PUMPBTCOMM, ThreadUtil.sig() + "waitForRadioData acquired (count=" + acquireCount + ") at t=" - + SystemClock.uptimeMillis()); - SystemClock.sleep(100); - SystemClock.sleep(1); - result = rileyLinkBle.readCharacteristicBlocking(serviceUUID, radioDataUUID); - SystemClock.sleep(100); - - if (result.resultCode == BLECommOperationResult.RESULT_SUCCESS) { - if (stopAtNull) { - // only data up to the first null is valid - for (int i = 0; i < result.value.length; i++) { - if (result.value[i] == 0) { - result.value = ByteUtil.substring(result.value, 0, i); - break; - } - } - } - mDataQueue.add(result.value); - } else if (result.resultCode == BLECommOperationResult.RESULT_INTERRUPTED) { - aapsLogger.error(LTag.PUMPBTCOMM, "Read operation was interrupted"); - } else if (result.resultCode == BLECommOperationResult.RESULT_TIMEOUT) { - aapsLogger.error(LTag.PUMPBTCOMM, "Read operation on Radio Data timed out"); - } else if (result.resultCode == BLECommOperationResult.RESULT_BUSY) { - aapsLogger.error(LTag.PUMPBTCOMM, "FAIL: RileyLinkBLE reports operation already in progress"); - } else if (result.resultCode == BLECommOperationResult.RESULT_NONE) { - aapsLogger.error(LTag.PUMPBTCOMM, "FAIL: got invalid result code: " + result.resultCode); - } - } catch (InterruptedException e) { - aapsLogger.error(LTag.PUMPBTCOMM, "Interrupted while waiting for data"); - } - } - }); - } -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.kt new file mode 100644 index 0000000000..62abb3fd8e --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpyReader.kt @@ -0,0 +1,98 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble + +import android.os.SystemClock +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.GattAttributes +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkEncodingType +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.operations.BLECommOperationResult +import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil +import info.nightscout.androidaps.plugins.pump.common.utils.ThreadUtil +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import java.util.* +import java.util.concurrent.Executors +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.Semaphore +import java.util.concurrent.TimeUnit + +/** + * Created by geoff on 5/26/16. + */ +class RFSpyReader internal constructor(private val aapsLogger: AAPSLogger, private val rileyLinkBle: RileyLinkBLE) { + + private var executor = Executors.newSingleThreadExecutor() + private val waitForRadioData = Semaphore(0, true) + private val mDataQueue = LinkedBlockingQueue() + private var acquireCount = 0 + private var releaseCount = 0 + private var stopAtNull = true + fun setRileyLinkEncodingType(encodingType: RileyLinkEncodingType) { + aapsLogger.debug("setRileyLinkEncodingType: $encodingType") + stopAtNull = !(encodingType == RileyLinkEncodingType.Manchester || encodingType == RileyLinkEncodingType.FourByteSixByteRileyLink) + } + + // This timeout must be coordinated with the length of the RFSpy radio operation or Bad Things Happen. + fun poll(timeout_ms: Int): ByteArray? { + aapsLogger.debug(LTag.PUMPBTCOMM, "${ThreadUtil.sig()}Entering poll at t==${SystemClock.uptimeMillis()}, timeout is $timeout_ms mDataQueue size is ${mDataQueue.size}") + if (mDataQueue.isEmpty()) { + try { + // block until timeout or data available. + // returns null if timeout. + val dataFromQueue = mDataQueue.poll(timeout_ms.toLong(), TimeUnit.MILLISECONDS) + if (dataFromQueue != null) + aapsLogger.debug(LTag.PUMPBTCOMM, "Got data [${ByteUtil.shortHexString(dataFromQueue)}] at t==${SystemClock.uptimeMillis()}") + else + aapsLogger.debug(LTag.PUMPBTCOMM, "Got data [null] at t==" + SystemClock.uptimeMillis()) + return dataFromQueue + } catch (e: InterruptedException) { + aapsLogger.error(LTag.PUMPBTCOMM, "poll: Interrupted waiting for data") + } + } + return null + } + + // Call this from the "response count" notification handler. + fun newDataIsAvailable() { + releaseCount++ + aapsLogger.debug(LTag.PUMPBTCOMM, "${ThreadUtil.sig()}waitForRadioData released(count=$releaseCount) at t=${SystemClock.uptimeMillis()}") + waitForRadioData.release() + } + + fun start() { + executor.execute { + val serviceUUID = UUID.fromString(GattAttributes.SERVICE_RADIO) + val radioDataUUID = UUID.fromString(GattAttributes.CHARA_RADIO_DATA) + var result: BLECommOperationResult + while (true) { + try { + acquireCount++ + waitForRadioData.acquire() + aapsLogger.debug(LTag.PUMPBTCOMM, "${ThreadUtil.sig()}waitForRadioData acquired (count=$acquireCount) at t=${SystemClock.uptimeMillis()}") + SystemClock.sleep(100) + result = rileyLinkBle.readCharacteristicBlocking(serviceUUID, radioDataUUID) + SystemClock.sleep(100) + if (result.resultCode == BLECommOperationResult.RESULT_SUCCESS) { + if (stopAtNull) { + // only data up to the first null is valid + for (i in result.value.indices) { + if (result.value[i].toInt() == 0) { + result.value = ByteUtil.substring(result.value, 0, i) + break + } + } + } + mDataQueue.add(result.value) + } else if (result.resultCode == BLECommOperationResult.RESULT_INTERRUPTED) + aapsLogger.error(LTag.PUMPBTCOMM, "Read operation was interrupted") + else if (result.resultCode == BLECommOperationResult.RESULT_TIMEOUT) + aapsLogger.error(LTag.PUMPBTCOMM, "Read operation on Radio Data timed out") + else if (result.resultCode == BLECommOperationResult.RESULT_BUSY) + aapsLogger.error(LTag.PUMPBTCOMM, "FAIL: RileyLinkBLE reports operation already in progress") + else if (result.resultCode == BLECommOperationResult.RESULT_NONE) + aapsLogger.error(LTag.PUMPBTCOMM, "FAIL: got invalid result code: ${result.resultCode}") + } catch (e: InterruptedException) { + aapsLogger.error(LTag.PUMPBTCOMM, "Interrupted while waiting for data") + } + } + } + } +} \ No newline at end of file From ad89d54319208ca58cf382021b5d2bdcf59b09e5 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 1 Jul 2022 12:38:05 +0200 Subject: [PATCH 20/48] MedtronicPumpPlugin -> kt --- .../pump/medtronic/MedtronicPumpPlugin.kt | 54 +++---------------- 1 file changed, 8 insertions(+), 46 deletions(-) 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 ba19c40278..a3849304e5 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 @@ -201,9 +201,7 @@ class MedtronicPumpPlugin @Inject constructor( do { SystemClock.sleep(60000) if (this.isInitialized) { - val statusRefresh = workWithStatusRefresh( - StatusRefreshAction.GetData, null, null - )!! + val statusRefresh = synchronized(statusRefreshMap) { HashMap(statusRefreshMap) } if (doWeHaveAnyStatusNeededRefreshing(statusRefresh)) { if (!commandQueue.statusInQueue()) { commandQueue.readStatus(rh.gs(R.string.scheduled_status_refresh), null) @@ -316,10 +314,7 @@ class MedtronicPumpPlugin @Inject constructor( } private fun refreshAnyStatusThatNeedsToBeRefreshed() { - val statusRefresh = workWithStatusRefresh( - StatusRefreshAction.GetData, null, - null - )!! + val statusRefresh = synchronized(statusRefreshMap) { HashMap(statusRefreshMap) } if (!doWeHaveAnyStatusNeededRefreshing(statusRefresh)) { return } @@ -659,19 +654,9 @@ class MedtronicPumpPlugin @Inject constructor( @Suppress("SameParameterValue") private fun setNotReachable(isBolus: Boolean, success: Boolean): PumpEnactResult { setRefreshButtonEnabled(true) - if (isBolus) { - bolusDeliveryType = BolusDeliveryType.Idle - } - return if (success) { - PumpEnactResult(injector) // - .success(true) // - .enacted(false) - } else { - PumpEnactResult(injector) // - .success(false) // - .enacted(false) // - .comment(R.string.medtronic_pump_status_pump_unreachable) - } + if (isBolus) bolusDeliveryType = BolusDeliveryType.Idle + return if (success) PumpEnactResult(injector).success(true).enacted(false) + else PumpEnactResult(injector).success(false).enacted(false).comment(R.string.medtronic_pump_status_pump_unreachable) } override fun stopBolusDelivering() { @@ -688,7 +673,7 @@ class MedtronicPumpPlugin @Inject constructor( } // if enforceNew===true current temp basal is canceled and new TBR set (duration is prolonged), - // if false and the same rate is requested enacted=false and success=true is returned and TBR is not changed +// if false and the same rate is requested enacted=false and success=true is returned and TBR is not changed @Synchronized override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: TemporaryBasalType): PumpEnactResult { setRefreshButtonEnabled(false) @@ -975,38 +960,15 @@ class MedtronicPumpPlugin @Inject constructor( MedtronicStatusRefreshType.RemainingInsulin -> { val remaining = medtronicPumpStatus.reservoirRemainingUnits val min: Int = if (remaining > 50) 4 * 60 else if (remaining > 20) 60 else 15 - workWithStatusRefresh(StatusRefreshAction.Add, refreshType, getTimeInFutureFromMinutes(min)) + synchronized(statusRefreshMap) { statusRefreshMap[refreshType] = getTimeInFutureFromMinutes(min) } } MedtronicStatusRefreshType.PumpTime, MedtronicStatusRefreshType.Configuration, MedtronicStatusRefreshType.BatteryStatus, MedtronicStatusRefreshType.PumpHistory -> { - workWithStatusRefresh( - StatusRefreshAction.Add, refreshType, - getTimeInFutureFromMinutes(refreshType.refreshTime + additionalTimeInMinutes) - ) + synchronized(statusRefreshMap) { statusRefreshMap[refreshType] = getTimeInFutureFromMinutes(refreshType.refreshTime + additionalTimeInMinutes) } } } } - private enum class StatusRefreshAction { - Add, // - GetData - } - - @Synchronized - private fun workWithStatusRefresh(action: StatusRefreshAction, statusRefreshType: MedtronicStatusRefreshType?, time: Long?): Map? { - return when (action) { - StatusRefreshAction.Add -> { - statusRefreshMap[statusRefreshType!!] = time!! - null - } - - StatusRefreshAction.GetData -> { - HashMap(statusRefreshMap) - } - - } - } - private fun getTimeInFutureFromMinutes(minutes: Int): Long { return System.currentTimeMillis() + getTimeInMs(minutes) } From a3de99b993d481219a4e64948f06a54563cabde1 Mon Sep 17 00:00:00 2001 From: Theo van Elsberg Date: Sun, 3 Jul 2022 19:36:46 +0200 Subject: [PATCH 21/48] Fixing on problem introduced by fixing "Fake TBR": wipe pod adsress on Discard but keep state object --- .../driver/manager/ErosPodStateManager.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/driver/manager/ErosPodStateManager.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/driver/manager/ErosPodStateManager.java index 27eb849931..caa6d72f4d 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/driver/manager/ErosPodStateManager.java +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/driver/manager/ErosPodStateManager.java @@ -49,24 +49,38 @@ public abstract class ErosPodStateManager { this.gsonInstance = createGson(); } + /** + * Discard Pod state + */ public final void discardState() { - this.podState = new PodState(this.podState.address); + // Change on commit 4cea57acf6d74baffef83e1f04376b10bb5c1978 Nov 2021 + // As by commit, keep podState object but wipe address to 0x0 to signal hasPodState() + // there is no state ( = no Pod address). + this.podState = new PodState(0x0); storePodState(); } + /** + * Init Pod state but only if it has valid state. + * @param address New Pod address + */ public final void initState(int address) { if (hasPodState()) { - throw new IllegalStateException("Can not init a new pod state: podState <> null"); + throw new IllegalStateException("Can not init a new pod state: State is " + + "null or discarded?"); } podState = new PodState(address); storePodState(); } /** - * @return true if we have a Pod state (which at least contains an address), indicating it is legal to call getters on PodStateManager + * @return true if we have a Pod state (which at least contains an valid address), indicating + * it is legal to call getters on PodStateManager */ public final boolean hasPodState() { - return podState != null; + + return this.podState != null + && this.podState.getAddress() != 0x0; // 0x0=discarded } /** From e344ecae205032760ce4cc109212faba7f1d3256 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Mon, 4 Jul 2022 10:22:42 +0200 Subject: [PATCH 22/48] feat: add tdd stats today --- .../androidaps/utils/stats/TddCalculator.kt | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) 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 e07e492e9a..f9b7ba509a 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 @@ -1,6 +1,5 @@ package info.nightscout.androidaps.utils.stats -import android.annotation.SuppressLint import android.content.Context import android.graphics.Typeface import android.util.LongSparseArray @@ -99,9 +98,19 @@ class TddCalculator @Inject constructor( return result } + fun calculateToday(): TotalDailyDose { + var startTime = MidnightTime.calc(dateUtil.now()) + val endTime = dateUtil.now() + return calculate(startTime, endTime) + } + 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() + return calculate(startTime, endTime) + } + + fun calculate(startTime: Long, endTime: Long): TotalDailyDose { val tdd = TotalDailyDose(timestamp = startTime) repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() .filter { it.type != Bolus.Type.PRIMING } @@ -147,10 +156,10 @@ class TddCalculator @Inject constructor( return totalTdd } - @SuppressLint("SetTextI18n") fun stats(context: Context): TableLayout { val tdds = calculate(7) val averageTdd = averageTDD(tdds) + val todayTdd = calculateToday() val lp = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT) return TableLayout(context).also { layout -> layout.layoutParams = TableLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f) @@ -172,6 +181,13 @@ class TddCalculator @Inject constructor( }) layout.addView(averageTdd.toTableRow(context, rh, tdds.size(), includeCarbs = true)) } + layout.addView(TextView(context).apply { + text = rh.gs(R.string.today) + setTypeface(typeface, Typeface.BOLD) + gravity = Gravity.CENTER_HORIZONTAL + setTextAppearance(android.R.style.TextAppearance_Material_Medium) + }) + layout.addView(todayTdd.toTableRow(context, rh, dateUtil, includeCarbs = true)) } } -} \ No newline at end of file +} From fb4276f461bc654683340b6474ec0f51f16cf879 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Mon, 4 Jul 2022 16:32:31 +0200 Subject: [PATCH 23/48] fix: remove tint light theme action icons --- app/src/main/res/drawable/ic_sort.xml | 1 - core/src/main/res/drawable/ic_close.xml | 3 +-- core/src/main/res/drawable/ic_sort.xml | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/res/drawable/ic_sort.xml b/app/src/main/res/drawable/ic_sort.xml index 4b1317ac20..8ff707c8ca 100644 --- a/app/src/main/res/drawable/ic_sort.xml +++ b/app/src/main/res/drawable/ic_sort.xml @@ -2,7 +2,6 @@ android:width="24dp" android:height="24dp" android:autoMirrored="true" - android:tint="#FFFFFF" android:viewportWidth="24" android:viewportHeight="24"> diff --git a/core/src/main/res/drawable/ic_sort.xml b/core/src/main/res/drawable/ic_sort.xml index 4b1317ac20..8ff707c8ca 100644 --- a/core/src/main/res/drawable/ic_sort.xml +++ b/core/src/main/res/drawable/ic_sort.xml @@ -2,7 +2,6 @@ android:width="24dp" android:height="24dp" android:autoMirrored="true" - android:tint="#FFFFFF" android:viewportWidth="24" android:viewportHeight="24"> Date: Tue, 5 Jul 2022 11:49:53 +0200 Subject: [PATCH 24/48] chore: style fix light plugin icons --- .../userEntry/UserEntryPresentationHelper.kt | 6 +- core/src/main/res/drawable/ic_generic_cgm.xml | 32 +--- core/src/main/res/drawable/ic_glimp.xml | 163 +++++++++--------- core/src/main/res/drawable/ic_insulin.xml | 36 ++-- .../res/drawable/ic_patch_pump_outline.xml | 13 ++ core/src/main/res/drawable/ic_sensor.xml | 15 +- .../src/main/res/drawable/ic_virtual_pump.xml | 7 +- 7 files changed, 128 insertions(+), 144 deletions(-) create mode 100644 core/src/main/res/drawable/ic_patch_pump_outline.xml diff --git a/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt b/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt index 0bc1c3d8ca..faae359445 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt @@ -91,9 +91,9 @@ class UserEntryPresentationHelper @Inject constructor( Sources.Insight -> R.drawable.ic_insight_128 Sources.Combo -> R.drawable.ic_combo_128 Sources.Medtronic -> R.drawable.ic_veo_128 - Sources.Omnipod -> R.drawable.ic_pod_128 - Sources.OmnipodEros -> R.drawable.ic_pod_128 - Sources.OmnipodDash -> R.drawable.ic_pod_128 + Sources.Omnipod -> R.drawable.ic_patch_pump_outline + Sources.OmnipodEros -> R.drawable.ic_patch_pump_outline + Sources.OmnipodDash -> R.drawable.ic_patch_pump_outline Sources.MDI -> R.drawable.ic_ict Sources.VirtualPump -> R.drawable.ic_virtual_pump Sources.SMS -> R.drawable.ic_sms diff --git a/core/src/main/res/drawable/ic_generic_cgm.xml b/core/src/main/res/drawable/ic_generic_cgm.xml index 2758d5d8b8..2838fce45f 100644 --- a/core/src/main/res/drawable/ic_generic_cgm.xml +++ b/core/src/main/res/drawable/ic_generic_cgm.xml @@ -1,45 +1,21 @@ - - - - - - - - - - - + android:fillColor="?attr/colorControlNormal"/> diff --git a/core/src/main/res/drawable/ic_glimp.xml b/core/src/main/res/drawable/ic_glimp.xml index ed10736e93..d58294f27e 100644 --- a/core/src/main/res/drawable/ic_glimp.xml +++ b/core/src/main/res/drawable/ic_glimp.xml @@ -3,85 +3,86 @@ android:height="64dp" android:viewportWidth="64" android:viewportHeight="64"> - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/drawable/ic_insulin.xml b/core/src/main/res/drawable/ic_insulin.xml index a273562b2d..a4f653fe07 100644 --- a/core/src/main/res/drawable/ic_insulin.xml +++ b/core/src/main/res/drawable/ic_insulin.xml @@ -3,28 +3,16 @@ android:height="64dp" android:viewportWidth="64" android:viewportHeight="64"> - - - - - - - - + + + + diff --git a/core/src/main/res/drawable/ic_patch_pump_outline.xml b/core/src/main/res/drawable/ic_patch_pump_outline.xml new file mode 100644 index 0000000000..6a86ec1503 --- /dev/null +++ b/core/src/main/res/drawable/ic_patch_pump_outline.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/core/src/main/res/drawable/ic_sensor.xml b/core/src/main/res/drawable/ic_sensor.xml index 39caee867c..4ce0d49c60 100644 --- a/core/src/main/res/drawable/ic_sensor.xml +++ b/core/src/main/res/drawable/ic_sensor.xml @@ -1,5 +1,12 @@ - - - + + + diff --git a/core/src/main/res/drawable/ic_virtual_pump.xml b/core/src/main/res/drawable/ic_virtual_pump.xml index 1f813674ff..e2360921d1 100644 --- a/core/src/main/res/drawable/ic_virtual_pump.xml +++ b/core/src/main/res/drawable/ic_virtual_pump.xml @@ -5,13 +5,12 @@ android:viewportHeight="64"> + android:fillColor="?attr/colorControlNormal"/> From d77c0fd8cb1da022939e303d3d7d3a34fb3ccaf0 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 5 Jul 2022 12:08:55 +0200 Subject: [PATCH 25/48] chore: fix alligment chart menu button --- app/src/main/res/layout/overview_graphs_layout.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/overview_graphs_layout.xml b/app/src/main/res/layout/overview_graphs_layout.xml index 70bcfa678e..d1e35bb237 100644 --- a/app/src/main/res/layout/overview_graphs_layout.xml +++ b/app/src/main/res/layout/overview_graphs_layout.xml @@ -22,6 +22,7 @@ android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" + android:layout_marginEnd="3dp" android:contentDescription="@string/chart_menu" android:paddingTop="5dp" app:srcCompat="@drawable/ic_arrow_drop_down_white_24dp" /> From 401d009ce45b49de036f995ac0d8844de372931e Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 5 Jul 2022 12:13:44 +0200 Subject: [PATCH 26/48] chore: fix light icon refresh --- core/src/main/res/drawable/ic_refresh.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/res/drawable/ic_refresh.xml b/core/src/main/res/drawable/ic_refresh.xml index 8229a9a64c..ceda60bb9a 100644 --- a/core/src/main/res/drawable/ic_refresh.xml +++ b/core/src/main/res/drawable/ic_refresh.xml @@ -4,6 +4,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> From 882400caa33422f07aacea90df3123967eb22310 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 5 Jul 2022 13:38:34 +0200 Subject: [PATCH 27/48] fix: wear ecarb input default --- .../java/info/nightscout/shared/SafeParse.kt | 8 +++--- .../interaction/actions/BolusActivity.kt | 2 +- .../interaction/actions/CarbActivity.kt | 9 ++---- .../interaction/actions/ECarbActivity.kt | 23 +++++---------- .../interaction/actions/FillActivity.kt | 7 ++--- .../actions/ProfileSwitchActivity.kt | 15 +++------- .../interaction/actions/TempTargetActivity.kt | 28 +++++++------------ .../interaction/actions/TreatmentActivity.kt | 13 ++++----- .../interaction/actions/WizardActivity.kt | 20 ++++--------- 9 files changed, 42 insertions(+), 83 deletions(-) diff --git a/shared/src/main/java/info/nightscout/shared/SafeParse.kt b/shared/src/main/java/info/nightscout/shared/SafeParse.kt index badcc231d6..f8d9aefa0b 100644 --- a/shared/src/main/java/info/nightscout/shared/SafeParse.kt +++ b/shared/src/main/java/info/nightscout/shared/SafeParse.kt @@ -3,12 +3,12 @@ package info.nightscout.shared object SafeParse { // private static Logger log = StacktraceLoggerWrapper.getLogger(SafeParse.class); - fun stringToDouble(inputString: String?): Double { - var input = inputString ?: return 0.0 - var result = 0.0 + fun stringToDouble(inputString: String?, defaultValue: Double = 0.0): Double { + var input = inputString ?: return defaultValue + var result = defaultValue input = input.replace(",", ".") input = input.replace("−", "-") - if (input == "") return 0.0 + if (input == "") return defaultValue try { result = input.toDouble() } catch (e: Exception) { diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt index 012d5ec516..f67a34f690 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/BolusActivity.kt @@ -42,7 +42,7 @@ class BolusActivity : ViewSelectorActivity() { override fun instantiateItem(container: ViewGroup, row: Int, col: Int): View = when (col) { 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) - val initValue = if (editInsulin != null) SafeParse.stringToDouble(editInsulin?.editText?.text.toString()) else 0.0 + val initValue = SafeParse.stringToDouble(editInsulin?.editText?.text.toString(), 0.0) val maxBolus = sp.getDouble(getString(R.string.key_treatments_safety_max_bolus), 3.0) val title = getString(R.string.action_insulin) editInsulin = PlusMinusEditText(viewAdapter, initValue, 0.0, maxBolus, stepValues, DecimalFormat("#0.0"), false, title) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt index b941049002..6521ffd413 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/CarbActivity.kt @@ -42,12 +42,9 @@ class CarbActivity : ViewSelectorActivity() { 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) val view = viewAdapter.root - var def = 0.0 - if (editCarbs != null) { - def = SafeParse.stringToDouble(editCarbs?.editText?.text.toString()) - } - val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - editCarbs = PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), stepValues, DecimalFormat("0"), true, getString(R.string.action_carbs)) + var initValue = SafeParse.stringToDouble(editCarbs?.editText?.text.toString(), 0.0) + val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48).toDouble() + editCarbs = PlusMinusEditText(viewAdapter, initValue, 0.0, maxCarbs, stepValues, DecimalFormat("0"), true, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() view diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt index 919d92b1dd..bc2662066d 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.kt @@ -45,12 +45,9 @@ class ECarbActivity : ViewSelectorActivity() { 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) val view = viewAdapter.root - var def = 0.0 - if (editCarbs != null) { - def = stringToDouble(editCarbs?.editText?.text.toString()) - } - val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - editCarbs = PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), stepValues, DecimalFormat("0"), true, getString(R.string.action_carbs)) + var initValue = stringToDouble(editCarbs?.editText?.text.toString(), 0.0) + val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48).toDouble() + editCarbs = PlusMinusEditText(viewAdapter, initValue, 0.0, maxCarbs, stepValues, DecimalFormat("0"), true, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() view @@ -59,11 +56,8 @@ class ECarbActivity : ViewSelectorActivity() { 1 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root - var def = 0.0 - if (editStartTime != null) { - def = stringToDouble(editStartTime?.editText?.text.toString()) - } - editStartTime = PlusMinusEditText(viewAdapter, 15.0, def, -60.0, 300.0, DecimalFormat("0"), false, getString(R.string.action_start_min)) + var initValue = stringToDouble(editStartTime?.editText?.text.toString(), 0.0) + editStartTime = PlusMinusEditText(viewAdapter, initValue, -60.0, 300.0, 15.0, DecimalFormat("0"), false, getString(R.string.action_start_min)) container.addView(view) view } @@ -71,11 +65,8 @@ class ECarbActivity : ViewSelectorActivity() { 2 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root - var def = 0.0 - if (editDuration != null) { - def = stringToDouble(editDuration?.editText?.text.toString()) - } - editDuration = PlusMinusEditText(viewAdapter, 1.0, def, 0.0, 8.0, DecimalFormat("0"), false, getString(R.string.action_duration_h)) + var initValue = stringToDouble(editDuration?.editText?.text.toString(), 0.0) + editDuration = PlusMinusEditText(viewAdapter, initValue, 0.0, 8.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_duration_h)) container.addView(view) view } diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt index 9fdfa97d26..d2c3abc2a3 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.kt @@ -38,11 +38,8 @@ class FillActivity : ViewSelectorActivity() { 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root - var def = 0.0 - if (editInsulin != null) { - def = stringToDouble(editInsulin?.editText?.text.toString()) - } - editInsulin = PlusMinusEditText(viewAdapter, def, 0.0, 30.0, 0.1, DecimalFormat("#0.0"), false, getString(R.string.action_insulin)) + var initValue = stringToDouble(editInsulin?.editText?.text.toString(), 0.0) + editInsulin = PlusMinusEditText(viewAdapter, initValue, 0.0, 30.0, 0.1, DecimalFormat("#0.0"), false, getString(R.string.action_insulin)) container.addView(view) view.requestFocus() view diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt index 8aa2a26437..75de43d82d 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ProfileSwitchActivity.kt @@ -48,11 +48,8 @@ class ProfileSwitchActivity : ViewSelectorActivity() { 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root - var def = timeshift.toDouble() - if (editTimeshift != null) { - def = SafeParse.stringToDouble(editTimeshift?.editText?.text.toString()) - } - editTimeshift = PlusMinusEditText(viewAdapter, def, 0.0, 23.0, 1.0, DecimalFormat("0"), true, getString(R.string.action_timeshift), true) + var initValue = SafeParse.stringToDouble(editTimeshift?.editText?.text.toString(), timeshift.toDouble()) + editTimeshift = PlusMinusEditText(viewAdapter, initValue, 0.0, 23.0, 1.0, DecimalFormat("0"), true, getString(R.string.action_timeshift), true) container.addView(view) view.requestFocus() view @@ -61,12 +58,8 @@ class ProfileSwitchActivity : ViewSelectorActivity() { 1 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root - var def = percentage.toDouble() - if (editPercentage != null) { - def = SafeParse.stringToDouble(editPercentage?.editText?.text.toString()) - } - editPercentage = PlusMinusEditText(viewAdapter, def, 30.0, 250.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) - + var initValue = SafeParse.stringToDouble(editPercentage?.editText?.text.toString(), percentage.toDouble()) + editPercentage = PlusMinusEditText(viewAdapter, initValue, 30.0, 250.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) container.addView(view) view } diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt index 77f1c256dc..dd18434b38 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TempTargetActivity.kt @@ -50,12 +50,8 @@ class TempTargetActivity : ViewSelectorActivity() { col == 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root - time = if (time == null) { - PlusMinusEditText(viewAdapter, 60.0, 0.0, 24 * 60.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_duration)) - } else { - val def = SafeParse.stringToDouble(time?.editText?.text.toString()) - PlusMinusEditText(viewAdapter, def, 0.0, 24 * 60.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_duration)) - } + val initValue = SafeParse.stringToDouble(time?.editText?.text.toString(), 60.0) + time = PlusMinusEditText(viewAdapter, initValue, 0.0, 24 * 60.0, 5.0, DecimalFormat("0"), false, getString(R.string.action_duration)) container.addView(view) view.requestFocus() view @@ -66,13 +62,11 @@ class TempTargetActivity : ViewSelectorActivity() { val view = viewAdapter.root val title = if (isSingleTarget) getString(R.string.action_target) else getString(R.string.action_low) if (isMGDL) { - var def = 100.0 - if (lowRange != null) def = SafeParse.stringToDouble(lowRange?.editText?.text.toString()) - lowRange = PlusMinusEditText(viewAdapter, def, 72.0, 180.0, 1.0, DecimalFormat("0"), false, title) + var initValue = SafeParse.stringToDouble(lowRange?.editText?.text.toString(), 100.0) + lowRange = PlusMinusEditText(viewAdapter, initValue, 72.0, 180.0, 1.0, DecimalFormat("0"), false, title) } else { - var def = 5.5 - if (lowRange != null) def = SafeParse.stringToDouble(lowRange?.editText?.text.toString()) - lowRange = PlusMinusEditText(viewAdapter, def, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false, title) + var initValue = SafeParse.stringToDouble(lowRange?.editText?.text.toString(), 5.5) + lowRange = PlusMinusEditText(viewAdapter, initValue, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false, title) } container.addView(view) view @@ -82,13 +76,11 @@ class TempTargetActivity : ViewSelectorActivity() { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root if (isMGDL) { - var def = 100.0 - if (highRange != null) def = SafeParse.stringToDouble(highRange?.editText?.text.toString()) - highRange = PlusMinusEditText(viewAdapter, def, 72.0, 180.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_high)) + var initValue = SafeParse.stringToDouble(highRange?.editText?.text.toString(), 100.0) + highRange = PlusMinusEditText(viewAdapter, initValue, 72.0, 180.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_high)) } else { - var def = 5.5 - if (highRange != null) def = SafeParse.stringToDouble(highRange?.editText?.text.toString()) - highRange = PlusMinusEditText(viewAdapter, def, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false, getString(R.string.action_high)) + var initValue = SafeParse.stringToDouble(highRange?.editText?.text.toString(), 5.5) + highRange = PlusMinusEditText(viewAdapter, initValue, 4.0, 10.0, 0.1, DecimalFormat("#0.0"), false, getString(R.string.action_high)) } container.addView(view) view diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt index 1cb7c36879..82e631de58 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/TreatmentActivity.kt @@ -48,10 +48,9 @@ class TreatmentActivity : ViewSelectorActivity() { 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) val view = viewAdapter.root - var def = 0.0 - if (editInsulin != null) def = stringToDouble(editInsulin?.editText?.text.toString()) + var initValue = stringToDouble(editInsulin?.editText?.text.toString(), 0.0) val maxBolus = sp.getDouble(getString(R.string.key_treatments_safety_max_bolus), 3.0) - editInsulin = PlusMinusEditText(viewAdapter, def, 0.0, maxBolus, stepValuesInsulin, DecimalFormat("#0.0"), false, getString(R.string.action_insulin)) + editInsulin = PlusMinusEditText(viewAdapter, initValue, 0.0, maxBolus, stepValuesInsulin, DecimalFormat("#0.0"), false, getString(R.string.action_insulin)) container.addView(view) view.requestFocus() view @@ -60,11 +59,9 @@ class TreatmentActivity : ViewSelectorActivity() { 1 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) val view = viewAdapter.root - var def = 0.0 - val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - if (editCarbs != null) def = stringToDouble(editCarbs?.editText?.text.toString()) - - editCarbs = PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), stepValuesCarbs, DecimalFormat("0"), false, getString(R.string.action_carbs)) + val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48).toDouble() + var initValue = stringToDouble(editCarbs?.editText?.text.toString(), 0.0) + editCarbs = PlusMinusEditText(viewAdapter, initValue, 0.0, maxCarbs, stepValuesCarbs, DecimalFormat("0"), false, getString(R.string.action_carbs)) container.addView(view) view } diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt index 9a9bd01967..58448f765f 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.kt @@ -44,13 +44,9 @@ class WizardActivity : ViewSelectorActivity() { col == 0 -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, true) val view = viewAdapter.root - val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48) - editCarbs = if (editCarbs == null) { - PlusMinusEditText(viewAdapter, 0.0, 0.0, maxCarbs.toDouble(), stepValues, DecimalFormat("0"), false, getString(R.string.action_carbs)) - } else { - val def = SafeParse.stringToDouble(editCarbs?.editText?.text.toString()) - PlusMinusEditText(viewAdapter, def, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false, getString(R.string.action_carbs)) - } + val maxCarbs = sp.getInt(getString(R.string.key_treatments_safety_max_carbs), 48).toDouble() + val initValue = SafeParse.stringToDouble(editCarbs?.editText?.text.toString(), 0.0) + editCarbs = PlusMinusEditText(viewAdapter, initValue, 0.0, maxCarbs, stepValues, DecimalFormat("0"), false, getString(R.string.action_carbs)) container.addView(view) view.requestFocus() view @@ -59,13 +55,9 @@ class WizardActivity : ViewSelectorActivity() { col == 1 && hasPercentage -> { val viewAdapter = EditPlusMinusViewAdapter.getViewAdapter(sp, applicationContext, container, false) val view = viewAdapter.root - val percentage = sp.getInt(getString(R.string.key_bolus_wizard_percentage), 100) - editPercentage = if (editPercentage == null) { - PlusMinusEditText(viewAdapter, percentage.toDouble(), 50.0, 150.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) - } else { - val def = SafeParse.stringToDouble(editPercentage?.editText?.text.toString()) - PlusMinusEditText(viewAdapter, def, 50.0, 150.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) - } + val percentage = sp.getInt(getString(R.string.key_bolus_wizard_percentage), 100).toDouble() + val initValue = SafeParse.stringToDouble(editPercentage?.editText?.text.toString(), percentage) + editPercentage = PlusMinusEditText(viewAdapter, initValue, 50.0, 150.0, 1.0, DecimalFormat("0"), false, getString(R.string.action_percentage)) container.addView(view) view } From 9a409a5d123a5a90849278fc987b5adb7ad803a1 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 5 Jul 2022 22:07:11 +0200 Subject: [PATCH 28/48] chore: move to utils folder --- .../watchfaces/{ => utils}/BaseWatchFace.kt | 204 ++++++------------ .../watchfaces/{ => utils}/BgGraphBuilder.kt | 2 +- 2 files changed, 69 insertions(+), 137 deletions(-) rename wear/src/main/java/info/nightscout/androidaps/watchfaces/{ => utils}/BaseWatchFace.kt (71%) rename wear/src/main/java/info/nightscout/androidaps/watchfaces/{ => utils}/BgGraphBuilder.kt (99%) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/BaseWatchFace.kt similarity index 71% rename from wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.kt rename to wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/BaseWatchFace.kt index 23f304a8b5..68fa4fe519 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/BaseWatchFace.kt @@ -1,6 +1,5 @@ @file:Suppress("DEPRECATION") - -package info.nightscout.androidaps.watchfaces +package info.nightscout.androidaps.watchfaces.utils import android.annotation.SuppressLint import android.content.BroadcastReceiver @@ -13,14 +12,10 @@ import android.os.Vibrator import android.support.wearable.watchface.WatchFaceStyle import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import android.view.WindowInsets import android.view.WindowManager -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.TextView -import androidx.annotation.LayoutRes import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import com.ustwo.clockwise.common.WatchFaceTime import com.ustwo.clockwise.common.WatchMode import com.ustwo.clockwise.common.WatchShape @@ -45,7 +40,6 @@ import info.nightscout.shared.weardata.EventData import info.nightscout.shared.weardata.EventData.ActionResendData import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign -import lecho.lib.hellocharts.view.LineChartView import javax.inject.Inject import kotlin.math.floor @@ -55,6 +49,7 @@ import kotlin.math.floor * Refactored by dlvoy on 2019-11-2019 * Refactored by MilosKozak 24/04/2022 */ + abstract class BaseWatchFace : WatchFace() { @Inject lateinit var wearUtil: WearUtil @@ -74,45 +69,10 @@ abstract class BaseWatchFace : WatchFace() { private val graphData get() = rawData.graphData // Layout - @LayoutRes abstract fun layoutResource(): Int + // @LayoutRes abstract fun layoutResource(): Int + abstract fun inflateLayout(inflater: LayoutInflater): ViewBinding private val displaySize = Point() - var mTime: TextView? = null - var mHour: TextView? = null - var mMinute: TextView? = null - var mSgv: TextView? = null - var mDirection: TextView? = null - var mTimestamp: TextView? = null - var mUploaderBattery: TextView? = null - var mRigBattery: TextView? = null - var mDelta: TextView? = null - var mAvgDelta: TextView? = null - var mStatus: TextView? = null - var mBasalRate: TextView? = null - var mIOB1: TextView? = null - var mIOB2: TextView? = null - var mCOB1: TextView? = null - var mCOB2: TextView? = null - var mBgi: TextView? = null - var mLoop: TextView? = null - private var mTimePeriod: TextView? = null - var mDay: TextView? = null - private var mDayName: TextView? = null - var mMonth: TextView? = null - private var isAAPSv2: View? = null - var mHighLight: TextView? = null - var mLowLight: TextView? = null - var mGlucoseDial: ImageView? = null - var mDeltaGauge: ImageView? = null - var mHourHand: ImageView? = null - var mMinuteHand: ImageView? = null - var mRelativeLayout: ViewGroup? = null - var mLinearLayout: LinearLayout? = null - var mLinearLayout2: LinearLayout? = null - private var mDate: LinearLayout? = null - private var mChartTap: LinearLayout? = null // Steampunk only - private var mMainMenuTap: LinearLayout? = null // Steampunk,Digital only - var chart: LineChartView? = null var ageLevel = 1 var loopLevel = -1 @@ -148,10 +108,12 @@ abstract class BaseWatchFace : WatchFace() { private lateinit var mTimePaint: Paint private lateinit var mSvgPaint: Paint private lateinit var mDirectionPaint: Paint + private lateinit var binding: WatchfaceViewAdapter private var mLastSvg = "" private var mLastDirection = "" private var mYOffset = 0f + override fun onCreate() { // Not derived from DaggerService, do injection here AndroidInjection.inject(this) @@ -188,13 +150,17 @@ abstract class BaseWatchFace : WatchFace() { persistence.turnOff() setupBatteryReceiver() setupSimpleUi() - layoutView = (getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater).inflate(layoutResource(), null) + + val inflater = (getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater) + val bindLayout = inflateLayout(inflater) + binding = WatchfaceViewAdapter.getBinding(bindLayout) + layoutView = binding.root performViewSetup() rxBus.send(EventWearToMobile(ActionResendData("BaseWatchFace::onCreate"))) } override fun onTapCommand(tapType: Int, x: Int, y: Int, eventTime: Long) { - chart?.let { chart -> + binding.chart?.let { chart -> if (tapType == TAP_TYPE_TAP && x >= chart.left && x <= chart.right && y >= chart.top && y <= chart.bottom) { if (eventTime - chartTapTime < 800) { changeChartTimeframe() @@ -203,7 +169,7 @@ abstract class BaseWatchFace : WatchFace() { return } } - mSgv?.let { mSgv -> + binding.sgv?.let { mSgv -> val extra = (mSgv.right - mSgv.left) / 2 if (tapType == TAP_TYPE_TAP && x + extra >= mSgv.left && x - extra <= mSgv.right && y >= mSgv.top && y <= mSgv.bottom) { if (eventTime - sgvTapTime < 800) { @@ -212,7 +178,7 @@ abstract class BaseWatchFace : WatchFace() { sgvTapTime = eventTime } } - mChartTap?.let { mChartTap -> + binding.chartZoomTap?.let { mChartTap -> if (tapType == TAP_TYPE_TAP && x >= mChartTap.left && x <= mChartTap.right && y >= mChartTap.top && y <= mChartTap.bottom) { if (eventTime - chartTapTime < 800) { changeChartTimeframe() @@ -221,7 +187,7 @@ abstract class BaseWatchFace : WatchFace() { return } } - mMainMenuTap?.let { mMainMenuTap -> + binding.mainMenuTap?.let { mMainMenuTap -> if (tapType == TAP_TYPE_TAP && x >= mMainMenuTap.left && x <= mMainMenuTap.right && y >= mMainMenuTap.top && y <= mMainMenuTap.bottom) { if (eventTime - mainMenuTapTime < 800) { startActivity(Intent(this, MainMenuActivity::class.java).also { it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }) @@ -288,42 +254,6 @@ abstract class BaseWatchFace : WatchFace() { } private fun performViewSetup() { - mTime = layoutView?.findViewById(R.id.watch_time) - mHour = layoutView?.findViewById(R.id.hour) - mMinute = layoutView?.findViewById(R.id.minute) - mDay = layoutView?.findViewById(R.id.day) - mDayName = layoutView?.findViewById(R.id.dayname) - mMonth = layoutView?.findViewById(R.id.month) - mTimePeriod = layoutView?.findViewById(R.id.timePeriod) - mDate = layoutView?.findViewById(R.id.date_time) - mLoop = layoutView?.findViewById(R.id.loop) - mSgv = layoutView?.findViewById(R.id.sgv) - mDirection = layoutView?.findViewById(R.id.direction) - mTimestamp = layoutView?.findViewById(R.id.timestamp) - mIOB1 = layoutView?.findViewById(R.id.iob_text) - mIOB2 = layoutView?.findViewById(R.id.iobView) - mCOB1 = layoutView?.findViewById(R.id.cob_text) - mCOB2 = layoutView?.findViewById(R.id.cobView) - mBgi = layoutView?.findViewById(R.id.bgiView) - mStatus = layoutView?.findViewById(R.id.externaltstatus) - mBasalRate = layoutView?.findViewById(R.id.tmpBasal) - mUploaderBattery = layoutView?.findViewById(R.id.uploader_battery) - mRigBattery = layoutView?.findViewById(R.id.rig_battery) - mDelta = layoutView?.findViewById(R.id.delta) - mAvgDelta = layoutView?.findViewById(R.id.avgdelta) - isAAPSv2 = layoutView?.findViewById(R.id.AAPSv2) - mHighLight = layoutView?.findViewById(R.id.highLight) - mLowLight = layoutView?.findViewById(R.id.lowLight) - mRelativeLayout = layoutView?.findViewById(R.id.main_layout) - mLinearLayout = layoutView?.findViewById(R.id.secondary_layout) - mLinearLayout2 = layoutView?.findViewById(R.id.tertiary_layout) - mGlucoseDial = layoutView?.findViewById(R.id.glucose_dial) - mDeltaGauge = layoutView?.findViewById(R.id.delta_pointer) - mHourHand = layoutView?.findViewById(R.id.hour_hand) - mMinuteHand = layoutView?.findViewById(R.id.minute_hand) - mChartTap = layoutView?.findViewById(R.id.chart_zoom_tap) - mMainMenuTap = layoutView?.findViewById(R.id.main_menu_tap) - chart = layoutView?.findViewById(R.id.chart) layoutSet = true setupCharts() setDataFields() @@ -364,10 +294,10 @@ abstract class BaseWatchFace : WatchFace() { onDrawSimpleUi(canvas) } else { if (layoutSet) { - mRelativeLayout?.measure(specW, specH) + binding.mainLayout.measure(specW, specH) val y = if (forceSquareCanvas) displaySize.x else displaySize.y // Square Steampunk - mRelativeLayout?.layout(0, 0, displaySize.x, y) - mRelativeLayout?.draw(canvas) + binding.mainLayout.layout(0, 0, displaySize.x, y) + binding.mainLayout.draw(canvas) } } } @@ -417,6 +347,7 @@ abstract class BaseWatchFace : WatchFace() { return status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL } + @SuppressLint("MissingPermission") @Suppress("DEPRECATION") private fun checkVibrateHourly(oldTime: WatchFaceTime, newTime: WatchFaceTime) { val hourlyVibratePref = sp.getBoolean(R.string.key_vibrate_hourly, false) @@ -431,54 +362,54 @@ abstract class BaseWatchFace : WatchFace() { @SuppressLint("SetTextI18n") open fun setDataFields() { setDateAndTime() - mSgv?.text = singleBg.sgvString - mSgv?.visibility = sp.getBoolean(R.string.key_show_bg, true).toVisibilityKeepSpace() + binding.sgv?.text = singleBg.sgvString + binding.sgv?.visibility = sp.getBoolean(R.string.key_show_bg, true).toVisibilityKeepSpace() strikeThroughSgvIfNeeded() - mDirection?.text = "${singleBg.slopeArrow}\uFE0E" - mDirection?.visibility = sp.getBoolean(R.string.key_show_direction, true).toVisibility() - mDelta?.text = singleBg.delta - mDelta?.visibility = sp.getBoolean(R.string.key_show_delta, true).toVisibility() - mAvgDelta?.text = singleBg.avgDelta - mAvgDelta?.visibility = sp.getBoolean(R.string.key_show_avg_delta, true).toVisibility() - mCOB1?.visibility = sp.getBoolean(R.string.key_show_cob, true).toVisibility() - mCOB2?.text = status.cob - mCOB2?.visibility = sp.getBoolean(R.string.key_show_cob, true).toVisibility() - mIOB1?.visibility = sp.getBoolean(R.string.key_show_iob, true).toVisibility() - mIOB2?.visibility = sp.getBoolean(R.string.key_show_iob, true).toVisibility() - mIOB1?.text = if (status.detailedIob) status.iobSum else getString(R.string.activity_IOB) - mIOB2?.text = if (status.detailedIob) status.iobDetail else status.iobSum - mTimestamp?.visibility = sp.getBoolean(R.string.key_show_ago, true).toVisibility() - mTimestamp?.text = readingAge(if (isAAPSv2 != null) true else sp.getBoolean(R.string.key_show_external_status, true)) - mUploaderBattery?.visibility = sp.getBoolean(R.string.key_show_uploader_battery, true).toVisibility() - mUploaderBattery?.text = + binding.direction?.text = "${singleBg.slopeArrow}\uFE0E" + binding.direction?.visibility = sp.getBoolean(R.string.key_show_direction, true).toVisibility() + binding.delta?.text = singleBg.delta + binding.delta?.visibility = sp.getBoolean(R.string.key_show_delta, true).toVisibility() + binding.avgDelta?.text = singleBg.avgDelta + binding.avgDelta?.visibility = sp.getBoolean(R.string.key_show_avg_delta, true).toVisibility() + binding.cob1?.visibility = sp.getBoolean(R.string.key_show_cob, true).toVisibility() + binding.cob2?.text = status.cob + binding.cob2?.visibility = sp.getBoolean(R.string.key_show_cob, true).toVisibility() + binding.iob1?.visibility = sp.getBoolean(R.string.key_show_iob, true).toVisibility() + binding.iob2?.visibility = sp.getBoolean(R.string.key_show_iob, true).toVisibility() + binding.iob1?.text = if (status.detailedIob) status.iobSum else getString(R.string.activity_IOB) + binding.iob2?.text = if (status.detailedIob) status.iobDetail else status.iobSum + binding.timestamp.visibility = sp.getBoolean(R.string.key_show_ago, true).toVisibility() + binding.timestamp.text = readingAge(if (binding.AAPSv2 != null) true else sp.getBoolean(R.string.key_show_external_status, true)) + binding.uploaderBattery?.visibility = sp.getBoolean(R.string.key_show_uploader_battery, true).toVisibility() + binding.uploaderBattery?.text = when { - isAAPSv2 != null -> status.battery + "%" + binding.AAPSv2 != null -> status.battery + "%" sp.getBoolean(R.string.key_show_external_status, true) -> "U: ${status.battery}%" else -> "Uploader: ${status.battery}%" } - mRigBattery?.visibility = sp.getBoolean(R.string.key_show_rig_battery, false).toVisibility() - mRigBattery?.text = status.rigBattery - mBasalRate?.text = status.currentBasal - mBasalRate?.visibility = sp.getBoolean(R.string.key_show_temp_basal, true).toVisibility() - mBgi?.text = status.bgi - mBgi?.visibility = status.showBgi.toVisibility() - mStatus?.text = status.externalStatus - mStatus?.visibility = sp.getBoolean(R.string.key_show_external_status, true).toVisibility() - mLoop?.visibility = sp.getBoolean(R.string.key_show_external_status, true).toVisibility() + binding.rigBattery?.visibility = sp.getBoolean(R.string.key_show_rig_battery, false).toVisibility() + binding.rigBattery?.text = status.rigBattery + binding.basalRate?.text = status.currentBasal + binding.basalRate?.visibility = sp.getBoolean(R.string.key_show_temp_basal, true).toVisibility() + binding.bgi?.text = status.bgi + binding.bgi?.visibility = status.showBgi.toVisibility() + binding.status?.text = status.externalStatus + binding.status?.visibility = sp.getBoolean(R.string.key_show_external_status, true).toVisibility() + binding.loop?.visibility = sp.getBoolean(R.string.key_show_external_status, true).toVisibility() if (status.openApsStatus != -1L) { val minutes = ((System.currentTimeMillis() - status.openApsStatus) / 1000 / 60).toInt() - mLoop?.text = "$minutes'" + binding.loop?.text = "$minutes'" if (minutes > 14) { loopLevel = 0 - mLoop?.setBackgroundResource(R.drawable.loop_red_25) + binding.loop?.setBackgroundResource(R.drawable.loop_red_25) } else { loopLevel = 1 - mLoop?.setBackgroundResource(R.drawable.loop_green_25) + binding.loop?.setBackgroundResource(R.drawable.loop_green_25) } } else { loopLevel = -1 - mLoop?.text = "-" - mLoop?.setBackgroundResource(R.drawable.loop_grey_25) + binding.loop?.text = "-" + binding.loop?.setBackgroundResource(R.drawable.loop_grey_25) } setColor() } @@ -491,15 +422,15 @@ abstract class BaseWatchFace : WatchFace() { } private fun setDateAndTime() { - mTime?.text = dateUtil.timeString() - mHour?.text = dateUtil.hourString() - mMinute?.text = dateUtil.minuteString() - mDate?.visibility = sp.getBoolean(R.string.key_show_date, false).toVisibility() - mDayName?.text = dateUtil.dayNameString() - mDay?.text = dateUtil.dayString() - mMonth?.text = dateUtil.monthString() - mTimePeriod?.visibility = android.text.format.DateFormat.is24HourFormat(this).not().toVisibility() - mTimePeriod?.text = dateUtil.amPm() + binding.time?.text = dateUtil.timeString() + binding.hour?.text = dateUtil.hourString() + binding.minute?.text = dateUtil.minuteString() + binding.dateTime?.visibility = sp.getBoolean(R.string.key_show_date, false).toVisibility() + binding.dayName?.text = dateUtil.dayNameString() + binding.day?.text = dateUtil.dayString() + binding.month?.text = dateUtil.monthString() + binding.timePeriod?.visibility = android.text.format.DateFormat.is24HourFormat(this).not().toVisibility() + binding.timePeriod?.text = dateUtil.amPm() } private fun setColor() { @@ -512,7 +443,8 @@ abstract class BaseWatchFace : WatchFace() { } private fun strikeThroughSgvIfNeeded() { - mSgv?.let { mSgv -> + @Suppress("DEPRECATION") + binding.sgv?.let { mSgv -> if (ageLevel() <= 0 && singleBg.timeStamp > 0) mSgv.paintFlags = mSgv.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG else mSgv.paintFlags = mSgv.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv() } @@ -559,7 +491,7 @@ abstract class BaseWatchFace : WatchFace() { if (isSimpleUi) { return } - if (chart != null && graphData.entries.size > 0) { + if (binding.chart != null && graphData.entries.size > 0) { val timeframe = sp.getInt(R.string.key_chart_time_frame, 3) val bgGraphBuilder = if (lowResMode) @@ -572,8 +504,8 @@ abstract class BaseWatchFace : WatchFace() { sp, dateUtil, graphData.entries, treatmentData.predictions, treatmentData.temps, treatmentData.basals, treatmentData.boluses, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe ) - chart?.lineChartData = bgGraphBuilder.lineData() - chart?.isViewportCalculationEnabled = true + binding.chart?.lineChartData = bgGraphBuilder.lineData() + binding.chart?.isViewportCalculationEnabled = true } } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/BgGraphBuilder.kt similarity index 99% rename from wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.kt rename to wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/BgGraphBuilder.kt index 48b7d340f4..5cce0bf6c0 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/BgGraphBuilder.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.watchfaces +package info.nightscout.androidaps.watchfaces.utils import android.graphics.DashPathEffect import info.nightscout.androidaps.R From 5c923d4a07750e328869f70b5bc54c78c950dc56 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 5 Jul 2022 22:07:38 +0200 Subject: [PATCH 29/48] chore: wear watchface use databinding --- .../androidaps/di/WearServicesModule.kt | 1 + .../watchfaces/AapsLargeWatchface.kt | 157 +++++------ .../androidaps/watchfaces/AapsV2Watchface.kt | 259 +++++++++--------- .../androidaps/watchfaces/AapsWatchface.kt | 172 ++++++------ .../watchfaces/BigChartWatchface.kt | 171 ++++++------ .../androidaps/watchfaces/CockpitWatchface.kt | 74 ++--- .../watchfaces/DigitalStyleWatchface.kt | 84 +++--- .../androidaps/watchfaces/NoChartWatchface.kt | 119 ++++---- .../watchfaces/SteampunkWatchface.kt | 140 +++++----- .../watchfaces/utils/WatchfaceViewAdapter.kt | 102 +++++++ .../res/layout-notround/activity_bigchart.xml | 6 +- .../activity_bigchart_small.xml | 6 +- .../res/layout-notround/activity_cockpit.xml | 10 +- .../layout-notround/activity_digitalstyle.xml | 24 +- .../res/layout-notround/activity_home.xml | 4 +- .../res/layout-notround/activity_home_2.xml | 16 +- .../layout-notround/activity_home_large.xml | 4 +- .../res/layout-notround/activity_nochart.xml | 6 +- .../activity_nochart_small.xml | 6 +- .../layout-notround/activity_steampunk.xml | 6 +- .../res/layout-round/activity_bigchart.xml | 6 +- .../layout-round/activity_bigchart_small.xml | 6 +- .../res/layout-round/activity_cockpit.xml | 10 +- .../layout-round/activity_digitalstyle.xml | 18 +- .../main/res/layout-round/activity_home.xml | 4 +- .../main/res/layout-round/activity_home_2.xml | 16 +- .../res/layout-round/activity_home_large.xml | 4 +- .../res/layout-round/activity_nochart.xml | 6 +- .../layout-round/activity_nochart_small.xml | 6 +- .../res/layout-round/activity_steampunk.xml | 6 +- 30 files changed, 743 insertions(+), 706 deletions(-) create mode 100644 wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/WatchfaceViewAdapter.kt diff --git a/wear/src/main/java/info/nightscout/androidaps/di/WearServicesModule.kt b/wear/src/main/java/info/nightscout/androidaps/di/WearServicesModule.kt index 6e318f0e45..93204ba917 100644 --- a/wear/src/main/java/info/nightscout/androidaps/di/WearServicesModule.kt +++ b/wear/src/main/java/info/nightscout/androidaps/di/WearServicesModule.kt @@ -6,6 +6,7 @@ import info.nightscout.androidaps.comm.DataLayerListenerServiceWear import info.nightscout.androidaps.complications.* import info.nightscout.androidaps.tile.* import info.nightscout.androidaps.watchfaces.* +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace @Module @Suppress("unused") diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsLargeWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsLargeWatchface.kt index 39e7252498..b8f922f300 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsLargeWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsLargeWatchface.kt @@ -1,116 +1,93 @@ package info.nightscout.androidaps.watchfaces import android.graphics.Color -import androidx.annotation.LayoutRes +import android.view.LayoutInflater import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import com.ustwo.clockwise.common.WatchMode import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActivityHomeLargeBinding +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace class AapsLargeWatchface : BaseWatchFace() { - @LayoutRes override fun layoutResource(): Int = R.layout.activity_home_large + private lateinit var binding: ActivityHomeLargeBinding + + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + binding = ActivityHomeLargeBinding.inflate(inflater) + return binding + } override fun setColorDark() { - mLinearLayout?.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_mLinearLayout)) - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - } + binding.secondaryLayout.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_mLinearLayout)) + binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.dark_highColor + 0L -> R.color.dark_midColor + -1L -> R.color.dark_lowColor + else -> R.color.dark_midColor } - if (ageLevel == 1) mTimestamp?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mTimestamp1_home)) - else mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld)) - - if (status.batteryLevel == 1) mUploaderBattery?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery)) - else mUploaderBattery?.setTextColor(ContextCompat.getColor(this, R.color.dark_uploaderBatteryEmpty)) - - mStatus?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mStatus_home)) + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.delta.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) + val colorTime = if (ageLevel == 1) if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mTimestamp1_home else R.color.dark_TimestampOld + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) + val colourBat = if (status.batteryLevel == 1) if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery else R.color.dark_uploaderBatteryEmpty + binding.uploaderBattery.setTextColor(ContextCompat.getColor(this, colourBat)) + binding.status.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mStatus_home)) } override fun setColorBright() { if (currentWatchMode == WatchMode.INTERACTIVE) { - mLinearLayout?.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - } + binding.secondaryLayout.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.light_highColor + 0L -> R.color.light_midColor + -1L -> R.color.light_lowColor + else -> R.color.light_midColor } - if (ageLevel == 1) mTimestamp?.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) - else mTimestamp?.setTextColor(Color.RED) + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.delta.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) - if (status.batteryLevel == 1) mUploaderBattery?.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) - else mUploaderBattery?.setTextColor(Color.RED) + val colorTime = if (ageLevel == 1) if (dividerMatchesBg) Color.BLACK else Color.WHITE else Color.RED + binding.timestamp.setTextColor(colorTime) + val colourBat = if (status.batteryLevel == 1) if (dividerMatchesBg) Color.BLACK else Color.WHITE else Color.RED + binding.uploaderBattery.setTextColor(colourBat) - mStatus?.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) - mTime?.setTextColor(Color.BLACK) + binding.status.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) + binding.time.setTextColor(Color.BLACK) } else { - mRelativeLayout?.setBackgroundColor(Color.BLACK) - mLinearLayout?.setBackgroundColor(if (dividerMatchesBg) Color.BLACK else Color.LTGRAY) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(Color.YELLOW) - mDirection?.setTextColor(Color.YELLOW) - mDelta?.setTextColor(Color.YELLOW) - } - - 0L -> { - mSgv?.setTextColor(Color.WHITE) - mDirection?.setTextColor(Color.WHITE) - mDelta?.setTextColor(Color.WHITE) - } - - -1L -> { - mSgv?.setTextColor(Color.RED) - mDirection?.setTextColor(Color.RED) - mDelta?.setTextColor(Color.RED) - } + binding.mainLayout.setBackgroundColor(Color.BLACK) + binding.secondaryLayout.setBackgroundColor(if (dividerMatchesBg) Color.BLACK else Color.LTGRAY) + val color = when (singleBg.sgvLevel) { + 1L -> Color.YELLOW + 0L -> Color.WHITE + -1L -> Color.RED + else -> Color.WHITE } - mUploaderBattery?.setTextColor(if (dividerMatchesBg) Color.WHITE else Color.BLACK) - mTimestamp?.setTextColor(if (dividerMatchesBg) Color.WHITE else Color.BLACK) - mStatus?.setTextColor(if (dividerMatchesBg) Color.WHITE else Color.BLACK) - mTime?.setTextColor(Color.WHITE) + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.delta.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) + + binding.uploaderBattery.setTextColor(if (dividerMatchesBg) Color.WHITE else Color.BLACK) + binding.timestamp.setTextColor(if (dividerMatchesBg) Color.WHITE else Color.BLACK) + binding.status.setTextColor(if (dividerMatchesBg) Color.WHITE else Color.BLACK) + binding.time.setTextColor(Color.WHITE) } } override fun setColorLowRes() { - mLinearLayout?.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_mLinearLayout)) - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mTimestamp?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mTimestamp1_home)) - mUploaderBattery?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery)) - mStatus?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mStatus_home)) + binding.secondaryLayout.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_mLinearLayout)) + binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.sgv.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.delta.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.direction.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.timestamp.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mTimestamp1_home)) + binding.uploaderBattery.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery)) + binding.status.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mStatus_home)) } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsV2Watchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsV2Watchface.kt index 5665af5c09..887fe53072 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsV2Watchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsV2Watchface.kt @@ -1,110 +1,109 @@ package info.nightscout.androidaps.watchfaces import android.graphics.Color +import android.view.LayoutInflater import androidx.annotation.ColorInt -import androidx.annotation.LayoutRes import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import com.ustwo.clockwise.common.WatchMode import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActivityHome2Binding +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace class AapsV2Watchface : BaseWatchFace() { - @LayoutRes override fun layoutResource(): Int = R.layout.activity_home_2 + private lateinit var binding: ActivityHome2Binding + + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + binding = ActivityHome2Binding.inflate(inflater) + return binding + } override fun setColorDark() { @ColorInt val dividerTxtColor = if (dividerMatchesBg) ContextCompat.getColor(this, R.color.dark_midColor) else Color.BLACK @ColorInt val dividerBatteryOkColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery) @ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView) - mLinearLayout?.setBackgroundColor(dividerBgColor) - mLinearLayout2?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mIOB1?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mIOB2?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mCOB1?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mCOB2?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDay?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mMonth?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mLoop?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.secondaryLayout.setBackgroundColor(dividerBgColor) + binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.iob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.iob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.cob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.cob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.day.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.month.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.loop.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) setTextSizes() - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - } + val color = when (singleBg.sgvLevel) { + 1L -> R.color.dark_highColor + 0L -> R.color.dark_midColor + -1L -> R.color.dark_lowColor + else -> R.color.dark_midColor } - if (ageLevel == 1) mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - else mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld)) + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) - if (status.batteryLevel == 1) mUploaderBattery?.setTextColor(dividerBatteryOkColor) - else mUploaderBattery?.setTextColor(ContextCompat.getColor(this, R.color.dark_uploaderBatteryEmpty)) + val colorTime = if (ageLevel == 1) R.color.dark_midColor else R.color.dark_TimestampOld + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) + val colourBat = if (status.batteryLevel == 1) dividerBatteryOkColor else ContextCompat.getColor(this, R.color.dark_uploaderBatteryEmpty) + binding.uploaderBattery.setTextColor(colourBat) - mRigBattery?.setTextColor(dividerTxtColor) - mDelta?.setTextColor(dividerTxtColor) - mAvgDelta?.setTextColor(dividerTxtColor) - mBasalRate?.setTextColor(dividerTxtColor) - mBgi?.setTextColor(dividerTxtColor) + binding.rigBattery.setTextColor(dividerTxtColor) + binding.delta.setTextColor(dividerTxtColor) + binding.avgDelta.setTextColor(dividerTxtColor) + binding.basalRate?.setTextColor(dividerTxtColor) + binding.bgi.setTextColor(dividerTxtColor) when (loopLevel) { - -1 -> mLoop?.setBackgroundResource(R.drawable.loop_grey_25) - 1 -> mLoop?.setBackgroundResource(R.drawable.loop_green_25) - else -> mLoop?.setBackgroundResource(R.drawable.loop_red_25) - } - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.dark_highColor) - lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) - midColor = ContextCompat.getColor(this, R.color.dark_midColor) - gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) - pointSize = 2 - setupCharts() + -1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25) + 1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25) + else -> binding.loop.setBackgroundResource(R.drawable.loop_red_25) } + + highColor = ContextCompat.getColor(this, R.color.dark_highColor) + lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) + midColor = ContextCompat.getColor(this, R.color.dark_midColor) + gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) + pointSize = 2 + setupCharts() } override fun setColorLowRes() { @ColorInt val dividerTxtColor = if (dividerMatchesBg) ContextCompat.getColor(this, R.color.dark_midColor) else Color.BLACK @ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView) - mLinearLayout?.setBackgroundColor(dividerBgColor) - mLinearLayout2?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mLoop?.setBackgroundResource(R.drawable.loop_grey_25) - mLoop?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) - mDelta?.setTextColor(dividerTxtColor) - mAvgDelta?.setTextColor(dividerTxtColor) - mRigBattery?.setTextColor(dividerTxtColor) - mUploaderBattery?.setTextColor(dividerTxtColor) - mBasalRate?.setTextColor(dividerTxtColor) - mBgi?.setTextColor(dividerTxtColor) - mIOB1?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mIOB2?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mCOB1?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mCOB2?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDay?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mMonth?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.dark_midColor) - lowColor = ContextCompat.getColor(this, R.color.dark_midColor) - midColor = ContextCompat.getColor(this, R.color.dark_midColor) - gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres) - pointSize = 2 - setupCharts() - } + binding.secondaryLayout.setBackgroundColor(dividerBgColor) + binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.loop.setBackgroundResource(R.drawable.loop_grey_25) + binding.loop.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.sgv.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.direction.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) + binding.delta.setTextColor(dividerTxtColor) + binding.avgDelta.setTextColor(dividerTxtColor) + binding.rigBattery.setTextColor(dividerTxtColor) + binding.uploaderBattery.setTextColor(dividerTxtColor) + binding.basalRate?.setTextColor(dividerTxtColor) + binding.bgi.setTextColor(dividerTxtColor) + binding.iob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.iob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.cob1.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.cob2.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.day.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.month.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + + highColor = ContextCompat.getColor(this, R.color.dark_midColor) + lowColor = ContextCompat.getColor(this, R.color.dark_midColor) + midColor = ContextCompat.getColor(this, R.color.dark_midColor) + gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres) + pointSize = 2 + setupCharts() + setTextSizes() } @@ -112,58 +111,50 @@ class AapsV2Watchface : BaseWatchFace() { if (currentWatchMode == WatchMode.INTERACTIVE) { @ColorInt val dividerTxtColor = if (dividerMatchesBg) Color.BLACK else ContextCompat.getColor(this, R.color.dark_midColor) @ColorInt val dividerBgColor = ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background) - mLinearLayout?.setBackgroundColor(dividerBgColor) - mLinearLayout2?.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) - mTime?.setTextColor(Color.BLACK) - mIOB1?.setTextColor(Color.BLACK) - mIOB2?.setTextColor(Color.BLACK) - mCOB1?.setTextColor(Color.BLACK) - mCOB2?.setTextColor(Color.BLACK) - mDay?.setTextColor(Color.BLACK) - mMonth?.setTextColor(Color.BLACK) - mLoop?.setTextColor(Color.BLACK) + binding.secondaryLayout.setBackgroundColor(dividerBgColor) + binding.tertiaryLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) + binding.time.setTextColor(Color.BLACK) + binding.iob1.setTextColor(Color.BLACK) + binding.iob2.setTextColor(Color.BLACK) + binding.cob1.setTextColor(Color.BLACK) + binding.cob2.setTextColor(Color.BLACK) + binding.day.setTextColor(Color.BLACK) + binding.month.setTextColor(Color.BLACK) + binding.loop.setTextColor(Color.BLACK) setTextSizes() - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - } + val color = when (singleBg.sgvLevel) { + 1L -> R.color.light_highColor + 0L -> R.color.light_midColor + -1L -> R.color.light_lowColor + else -> R.color.light_midColor } - if (ageLevel == 1) mTimestamp?.setTextColor(Color.BLACK) - else mTimestamp?.setTextColor(Color.RED) - if (status.batteryLevel == 1) mUploaderBattery?.setTextColor(dividerTxtColor) - else mUploaderBattery?.setTextColor(Color.RED) - mRigBattery?.setTextColor(dividerTxtColor) - mDelta?.setTextColor(dividerTxtColor) - mAvgDelta?.setTextColor(dividerTxtColor) - mBasalRate?.setTextColor(dividerTxtColor) - mBgi?.setTextColor(dividerTxtColor) + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) + val colorTime = if (ageLevel == 1) Color.BLACK else Color.RED + binding.timestamp.setTextColor(colorTime) + val colourBat = if (status.batteryLevel == 1) dividerTxtColor else Color.RED + binding.uploaderBattery.setTextColor(colourBat) + binding.rigBattery.setTextColor(dividerTxtColor) + binding.delta.setTextColor(dividerTxtColor) + binding.avgDelta.setTextColor(dividerTxtColor) + binding.basalRate?.setTextColor(dividerTxtColor) + binding.bgi.setTextColor(dividerTxtColor) when (loopLevel) { - -1 -> mLoop?.setBackgroundResource(R.drawable.loop_grey_25) - 1 -> mLoop?.setBackgroundResource(R.drawable.loop_green_25) - else -> mLoop?.setBackgroundResource(R.drawable.loop_red_25) - } - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.light_highColor) - lowColor = ContextCompat.getColor(this, R.color.light_lowColor) - midColor = ContextCompat.getColor(this, R.color.light_midColor) - gridColor = ContextCompat.getColor(this, R.color.light_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) - pointSize = 2 - setupCharts() + -1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25) + 1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25) + else -> binding.loop.setBackgroundResource(R.drawable.loop_red_25) } + + highColor = ContextCompat.getColor(this, R.color.light_highColor) + lowColor = ContextCompat.getColor(this, R.color.light_lowColor) + midColor = ContextCompat.getColor(this, R.color.light_midColor) + gridColor = ContextCompat.getColor(this, R.color.light_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) + pointSize = 2 + setupCharts() + } else { setColorDark() } @@ -171,11 +162,11 @@ class AapsV2Watchface : BaseWatchFace() { private fun setTextSizes() { if (status.detailedIob) { - mIOB1?.textSize = 14f - mIOB2?.textSize = 10f + binding.iob1.textSize = 14f + binding.iob2.textSize = 10f } else { - mIOB1?.textSize = 10f - mIOB2?.textSize = 14f + binding.iob1.textSize = 10f + binding.iob2.textSize = 14f } } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsWatchface.kt index 48e457a3d1..4086d479ec 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/AapsWatchface.kt @@ -1,114 +1,106 @@ package info.nightscout.androidaps.watchfaces import android.graphics.Color -import androidx.annotation.LayoutRes +import android.view.LayoutInflater import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import com.ustwo.clockwise.common.WatchMode import info.nightscout.androidaps.R +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace +import info.nightscout.androidaps.databinding.ActivityHomeBinding class AapsWatchface : BaseWatchFace() { - @LayoutRes override fun layoutResource(): Int = R.layout.activity_home + private lateinit var binding: ActivityHomeBinding + + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + binding = ActivityHomeBinding.inflate(inflater) + return binding + } override fun setColorDark() { - mLinearLayout?.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView)) - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - } - } - if (ageLevel == 1) mTimestamp?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mTimestamp1_home)) - else mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld)) - if (status.batteryLevel == 1) mUploaderBattery?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery)) - else mUploaderBattery?.setTextColor(ContextCompat.getColor(this, R.color.dark_uploaderBatteryEmpty)) - mStatus?.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mStatus_home)) - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.dark_highColor) - lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) - midColor = ContextCompat.getColor(this, R.color.dark_midColor) - gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) - pointSize = 2 - setupCharts() + binding.secondaryLayout.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_background else R.color.dark_statusView)) + binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.dark_highColor + 0L -> R.color.dark_midColor + -1L -> R.color.dark_lowColor + else -> R.color.dark_midColor } + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.delta.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) + + val colorTime = if (ageLevel == 1) if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mTimestamp1_home else R.color.dark_TimestampOld + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) + + val colourBat = if (status.batteryLevel == 1) if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_uploaderBattery else R.color.dark_uploaderBatteryEmpty + binding.uploaderBattery.setTextColor(ContextCompat.getColor(this, colourBat)) + + binding.status.setTextColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.dark_midColor else R.color.dark_mStatus_home)) + + highColor = ContextCompat.getColor(this, R.color.dark_highColor) + lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) + midColor = ContextCompat.getColor(this, R.color.dark_midColor) + gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) + pointSize = 2 + setupCharts() + } override fun setColorLowRes() { - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.dark_midColor) - lowColor = ContextCompat.getColor(this, R.color.dark_midColor) - midColor = ContextCompat.getColor(this, R.color.dark_midColor) - gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres) - pointSize = 2 - setupCharts() - } + binding.time.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.sgv.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.delta.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) + + highColor = ContextCompat.getColor(this, R.color.dark_midColor) + lowColor = ContextCompat.getColor(this, R.color.dark_midColor) + midColor = ContextCompat.getColor(this, R.color.dark_midColor) + gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres) + pointSize = 2 + setupCharts() } override fun setColorBright() { if (currentWatchMode == WatchMode.INTERACTIVE) { - mLinearLayout?.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - } - } - if (ageLevel == 1) mTimestamp?.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) - else mTimestamp?.setTextColor(Color.RED) - if (status.batteryLevel == 1) mUploaderBattery?.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) - else mUploaderBattery?.setTextColor(Color.RED) - mStatus?.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) - mTime?.setTextColor(Color.BLACK) - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.light_highColor) - lowColor = ContextCompat.getColor(this, R.color.light_lowColor) - midColor = ContextCompat.getColor(this, R.color.light_midColor) - gridColor = ContextCompat.getColor(this, R.color.light_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) - pointSize = 2 - setupCharts() + binding.secondaryLayout.setBackgroundColor(ContextCompat.getColor(this, if (dividerMatchesBg) R.color.light_background else R.color.light_stripe_background)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.light_highColor + 0L -> R.color.light_midColor + -1L -> R.color.light_lowColor + else -> R.color.light_midColor } + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.delta.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) + + val colorTime = if (ageLevel == 1) if (dividerMatchesBg) Color.BLACK else Color.WHITE else Color.RED + binding.timestamp.setTextColor(colorTime) + + val colourBat = if (status.batteryLevel == 1) if (dividerMatchesBg) Color.BLACK else Color.WHITE else Color.RED + binding.uploaderBattery.setTextColor(colourBat) + + binding.status.setTextColor(if (dividerMatchesBg) Color.BLACK else Color.WHITE) + binding.time.setTextColor(Color.BLACK) + + highColor = ContextCompat.getColor(this, R.color.light_highColor) + lowColor = ContextCompat.getColor(this, R.color.light_lowColor) + midColor = ContextCompat.getColor(this, R.color.light_midColor) + gridColor = ContextCompat.getColor(this, R.color.light_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) + pointSize = 2 + setupCharts() + } else { setColorDark() } } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BigChartWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BigChartWatchface.kt index 698ce41142..f6b472797b 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BigChartWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BigChartWatchface.kt @@ -3,119 +3,110 @@ package info.nightscout.androidaps.watchfaces import android.annotation.SuppressLint -import androidx.annotation.LayoutRes +import android.view.LayoutInflater import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import com.ustwo.clockwise.common.WatchMode import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActivityBigchartBinding +import info.nightscout.androidaps.databinding.ActivityBigchartSmallBinding +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace +import info.nightscout.androidaps.watchfaces.utils.WatchfaceViewAdapter class BigChartWatchface : BaseWatchFace() { - @LayoutRes override fun layoutResource(): Int = - if (resources.displayMetrics.widthPixels < SCREEN_SIZE_SMALL || resources.displayMetrics.heightPixels < SCREEN_SIZE_SMALL) R.layout.activity_bigchart_small - else R.layout.activity_bigchart + private lateinit var binding: WatchfaceViewAdapter + + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + if (resources.displayMetrics.widthPixels < SCREEN_SIZE_SMALL || resources.displayMetrics.heightPixels < SCREEN_SIZE_SMALL) { + val layoutBinding = ActivityBigchartSmallBinding.inflate(inflater) + binding = WatchfaceViewAdapter.getBinding(layoutBinding) + return layoutBinding + } + val layoutBinding = ActivityBigchartBinding.inflate(inflater) + binding = WatchfaceViewAdapter.getBinding(layoutBinding) + return layoutBinding + } @SuppressLint("SetTextI18n") override fun setDataFields() { super.setDataFields() - mStatus?.text = status.externalStatus + if (sp.getBoolean(R.string.key_show_cob, true)) (" " + this.status.cob) else "" + binding.status?.text = status.externalStatus + if (sp.getBoolean(R.string.key_show_cob, true)) (" " + this.status.cob) else "" } override fun setColorLowRes() { - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mStatus?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.dark_midColor) - lowColor = ContextCompat.getColor(this, R.color.dark_midColor) - midColor = ContextCompat.getColor(this, R.color.dark_midColor) - gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres) - pointSize = 2 - setupCharts() - } + binding.time?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + binding.status?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.sgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.delta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.avgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) + + highColor = ContextCompat.getColor(this, R.color.dark_midColor) + lowColor = ContextCompat.getColor(this, R.color.dark_midColor) + midColor = ContextCompat.getColor(this, R.color.dark_midColor) + gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark_lowres) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_light_lowres) + pointSize = 2 + setupCharts() } override fun setColorDark() { - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mStatus?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - } + binding.time?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + binding.status?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.dark_highColor + 0L -> R.color.dark_midColor + -1L -> R.color.dark_lowColor + else -> R.color.dark_midColor + } + binding.sgv?.setTextColor(ContextCompat.getColor(this, color)) + binding.delta?.setTextColor(ContextCompat.getColor(this, color)) + binding.avgDelta?.setTextColor(ContextCompat.getColor(this, color)) - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - } + val colorTime = if (ageLevel == 1) R.color.dark_Timestamp else R.color.dark_TimestampOld + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - } - } - if (ageLevel == 1) { - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) - } else { - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld)) - } - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.dark_highColor) - lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) - midColor = ContextCompat.getColor(this, R.color.dark_midColor) - gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) - pointSize = 2 - setupCharts() - } + highColor = ContextCompat.getColor(this, R.color.dark_highColor) + lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) + midColor = ContextCompat.getColor(this, R.color.dark_midColor) + gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) + pointSize = 2 + setupCharts() } override fun setColorBright() { if (currentWatchMode == WatchMode.INTERACTIVE) { - mTime?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_time)) - mStatus?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_status)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - } - } - if (ageLevel == 1) mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.light_mTimestamp1)) - else mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.light_mTimestamp)) - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.light_highColor) - lowColor = ContextCompat.getColor(this, R.color.light_lowColor) - midColor = ContextCompat.getColor(this, R.color.light_midColor) - gridColor = ContextCompat.getColor(this, R.color.light_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) - pointSize = 2 - setupCharts() + binding.time?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_time)) + binding.status?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_status)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.light_highColor + 0L -> R.color.light_midColor + -1L -> R.color.light_lowColor + else -> R.color.light_midColor } + binding.sgv?.setTextColor(ContextCompat.getColor(this, color)) + binding.delta?.setTextColor(ContextCompat.getColor(this, color)) + binding.avgDelta?.setTextColor(ContextCompat.getColor(this, color)) + + val colorTime = if (ageLevel == 1) R.color.light_mTimestamp1 else R.color.light_mTimestamp + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) + + highColor = ContextCompat.getColor(this, R.color.light_highColor) + lowColor = ContextCompat.getColor(this, R.color.light_lowColor) + midColor = ContextCompat.getColor(this, R.color.light_midColor) + gridColor = ContextCompat.getColor(this, R.color.light_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_light) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) + pointSize = 2 + setupCharts() + } else { setColorDark() } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/CockpitWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/CockpitWatchface.kt index cb15fbc7f9..2736b49e1b 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/CockpitWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/CockpitWatchface.kt @@ -1,8 +1,11 @@ package info.nightscout.androidaps.watchfaces +import android.view.LayoutInflater import android.view.View -import androidx.annotation.LayoutRes +import androidx.viewbinding.ViewBinding import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActivityCockpitBinding +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace /** * Created by andrew-warrington on 18/11/2017. @@ -10,37 +13,36 @@ import info.nightscout.androidaps.R */ class CockpitWatchface : BaseWatchFace() { - @LayoutRes override fun layoutResource(): Int = R.layout.activity_cockpit + private lateinit var binding: ActivityCockpitBinding + + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + binding = ActivityCockpitBinding.inflate(inflater) + return binding + } override fun setColorDark() { - mRelativeLayout?.setBackgroundResource(R.drawable.airplane_cockpit_outside_clouds) + binding.mainLayout.setBackgroundResource(R.drawable.airplane_cockpit_outside_clouds) setTextSizes() - when (singleBg.sgvLevel) { - 1L -> { - mHighLight?.setBackgroundResource(R.drawable.airplane_led_yellow_lit) - mLowLight?.setBackgroundResource(R.drawable.airplane_led_grey_unlit) - } - - 0L -> { - mHighLight?.setBackgroundResource(R.drawable.airplane_led_grey_unlit) - mLowLight?.setBackgroundResource(R.drawable.airplane_led_grey_unlit) - } - - -1L -> { - mHighLight?.setBackgroundResource(R.drawable.airplane_led_grey_unlit) - mLowLight?.setBackgroundResource(R.drawable.airplane_led_red_lit) - } + val led = when (singleBg.sgvLevel) { + 1L -> R.drawable.airplane_led_yellow_lit + 0L -> R.drawable.airplane_led_grey_unlit + -1L -> R.drawable.airplane_led_red_lit + else -> R.drawable.airplane_led_grey_unlit } + + binding.highLight.setBackgroundResource(led) + binding.lowLight.setBackgroundResource(led) + when (loopLevel) { - -1 -> mLoop?.setBackgroundResource(R.drawable.loop_grey_25) - 1 -> mLoop?.setBackgroundResource(R.drawable.loop_green_25) - else -> mLoop?.setBackgroundResource(R.drawable.loop_red_25) + -1 -> binding.loop.setBackgroundResource(R.drawable.loop_grey_25) + 1 -> binding.loop.setBackgroundResource(R.drawable.loop_green_25) + else -> binding.loop.setBackgroundResource(R.drawable.loop_red_25) } invalidate() } override fun setColorLowRes() { - mRelativeLayout?.setBackgroundResource(R.drawable.airplane_cockpit_outside_clouds_lowres) + binding.mainLayout.setBackgroundResource(R.drawable.airplane_cockpit_outside_clouds_lowres) } override fun setColorBright() { @@ -49,28 +51,28 @@ class CockpitWatchface : BaseWatchFace() { private fun setTextSizes() { if (status.detailedIob) { - if (bIsRound) mIOB2?.textSize = 10f - else mIOB2?.textSize = 9f + if (bIsRound) binding.iob2.textSize = 10f + else binding.iob2.textSize = 9f } else { - if (bIsRound) mIOB2?.textSize = 13f - else mIOB2?.textSize = 12f + if (bIsRound) binding.iob2.textSize = 13f + else binding.iob2.textSize = 12f } - if (mUploaderBattery?.visibility != View.GONE && mRigBattery?.visibility != View.GONE) { + if (binding.uploaderBattery.visibility != View.GONE && binding.rigBattery.visibility != View.GONE) { if (bIsRound) { - mUploaderBattery?.textSize = 12f - mRigBattery?.textSize = 12f + binding.uploaderBattery.textSize = 12f + binding.rigBattery.textSize = 12f } else { - mUploaderBattery?.textSize = 10f - mRigBattery?.textSize = 10f + binding.uploaderBattery.textSize = 10f + binding.rigBattery.textSize = 10f } } else { if (bIsRound) { - mUploaderBattery?.textSize = 13f - mRigBattery?.textSize = 13f + binding.uploaderBattery.textSize = 13f + binding.rigBattery.textSize = 13f } else { - mUploaderBattery?.textSize = 12f - mRigBattery?.textSize = 12f + binding.uploaderBattery.textSize = 12f + binding.rigBattery.textSize = 12f } } } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt index de808a21be..d2aa2257fa 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/DigitalStyleWatchface.kt @@ -4,18 +4,26 @@ package info.nightscout.androidaps.watchfaces import android.annotation.SuppressLint import android.support.wearable.watchface.WatchFaceStyle +import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout import android.widget.TextView -import androidx.annotation.LayoutRes import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActivityDigitalstyleBinding import info.nightscout.androidaps.extensions.toVisibility +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace import info.nightscout.shared.logging.LTag class DigitalStyleWatchface : BaseWatchFace() { - @LayoutRes override fun layoutResource(): Int = R.layout.activity_digitalstyle + private lateinit var binding: ActivityDigitalstyleBinding + + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + binding = ActivityDigitalstyleBinding.inflate(inflater) + return binding + } override fun getWatchFaceStyle(): WatchFaceStyle { return WatchFaceStyle.Builder(this) @@ -26,39 +34,31 @@ class DigitalStyleWatchface : BaseWatchFace() { } override fun setColorDark() { - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDirection?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - } + val color = when (singleBg.sgvLevel) { + 1L -> R.color.dark_highColor + 0L -> R.color.dark_midColor + -1L -> R.color.dark_lowColor + else -> R.color.dark_midColor } - if (ageLevel == 1) mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - else mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld)) + binding.sgv.setTextColor(ContextCompat.getColor(this, color)) + binding.direction.setTextColor(ContextCompat.getColor(this, color)) - if (status.batteryLevel == 1) mUploaderBattery?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - else mUploaderBattery?.setTextColor(ContextCompat.getColor(this, R.color.dark_uploaderBatteryEmpty)) + val colorTime = if (ageLevel == 1) R.color.dark_midColor else R.color.dark_TimestampOld + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) + + val colorBat = if (status.batteryLevel == 1) R.color.dark_midColor else R.color.dark_uploaderBatteryEmpty + binding.uploaderBattery.setTextColor(ContextCompat.getColor(this, colorBat)) + + highColor = ContextCompat.getColor(this, R.color.dark_highColor) + lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) + midColor = ContextCompat.getColor(this, R.color.dark_midColor) + gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) + pointSize = 1 + setupCharts() + setWatchfaceStyle() - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.dark_highColor) - lowColor = ContextCompat.getColor(this, R.color.dark_lowColor) - midColor = ContextCompat.getColor(this, R.color.dark_midColor) - gridColor = ContextCompat.getColor(this, R.color.dark_gridColor) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_light) - pointSize = 1 - setupCharts() - setWatchfaceStyle() - } } @SuppressLint("SetTextI18n") @@ -103,19 +103,19 @@ class DigitalStyleWatchface : BaseWatchFace() { val isShowDate = sp.getBoolean(R.string.key_show_date, false) if (!isShowDate) { layoutView?.findViewById(R.id.date_time)?.visibility = View.GONE - mHour?.textSize = 62f - mMinute?.textSize = 40f - mHour?.letterSpacing = (-0.066).toFloat() - mMinute?.letterSpacing = (-0.066).toFloat() + binding.hour.textSize = 62f + binding.minute.textSize = 40f + binding.hour.letterSpacing = (-0.066).toFloat() + binding.minute.letterSpacing = (-0.066).toFloat() } else { layoutView?.findViewById(R.id.date_time)?.visibility = View.VISIBLE - mHour?.textSize = 40f - mMinute?.textSize = 26f - mHour?.letterSpacing = 0.toFloat() - mMinute?.letterSpacing = 0.toFloat() + binding.hour.textSize = 40f + binding.minute.textSize = 26f + binding.hour.letterSpacing = 0.toFloat() + binding.minute.letterSpacing = 0.toFloat() /* display week number */ - val mWeekNumber = layoutView?.findViewById(R.id.weeknumber) + val mWeekNumber = layoutView?.findViewById(R.id.week_number) mWeekNumber?.visibility = sp.getBoolean(R.string.key_show_week_number, false).toVisibility() mWeekNumber?.text = "(" + dateUtil.weekString() + ")" } @@ -128,4 +128,4 @@ class DigitalStyleWatchface : BaseWatchFace() { override fun setColorBright() { setColorDark() /* getCurrentWatchMode() == WatchMode.AMBIENT or WatchMode.INTERACTIVE */ } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/NoChartWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/NoChartWatchface.kt index bcbb388684..e277945540 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/NoChartWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/NoChartWatchface.kt @@ -1,87 +1,78 @@ package info.nightscout.androidaps.watchfaces -import androidx.annotation.LayoutRes +import android.view.LayoutInflater import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import com.ustwo.clockwise.common.WatchMode import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActivityBigchartBinding +import info.nightscout.androidaps.databinding.ActivityBigchartSmallBinding +import info.nightscout.androidaps.databinding.ActivityNochartBinding +import info.nightscout.androidaps.databinding.ActivityNochartSmallBinding +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace +import info.nightscout.androidaps.watchfaces.utils.WatchfaceViewAdapter class NoChartWatchface : BaseWatchFace() { - @LayoutRes override fun layoutResource(): Int = - if (resources.displayMetrics.widthPixels < SCREEN_SIZE_SMALL || resources.displayMetrics.heightPixels < SCREEN_SIZE_SMALL) R.layout.activity_nochart_small - else R.layout.activity_nochart + private lateinit var binding: WatchfaceViewAdapter + + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + if (resources.displayMetrics.widthPixels < SCREEN_SIZE_SMALL || resources.displayMetrics.heightPixels < SCREEN_SIZE_SMALL) { + val layoutBinding = ActivityNochartSmallBinding.inflate(inflater) + binding = WatchfaceViewAdapter.getBinding(layoutBinding) + return layoutBinding + } + val layoutBinding = ActivityNochartBinding.inflate(inflater) + binding = WatchfaceViewAdapter.getBinding(layoutBinding) + return layoutBinding + } override fun setColorLowRes() { - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mStatus?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) + binding.time?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + binding.status?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + binding.sgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.delta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.avgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) + binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) } override fun setColorDark() { - mTime?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) - mStatus?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.dark_lowColor)) - } - } - if (ageLevel == 1) { - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_Timestamp)) - } else { - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.dark_TimestampOld)) + binding.time?.setTextColor(ContextCompat.getColor(this, R.color.dark_mTime)) + binding.status?.setTextColor(ContextCompat.getColor(this, R.color.dark_statusView)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.dark_background)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.dark_highColor + 0L -> R.color.dark_midColor + -1L -> R.color.dark_lowColor + else -> R.color.dark_midColor } + binding.sgv?.setTextColor(ContextCompat.getColor(this, color)) + binding.delta?.setTextColor(ContextCompat.getColor(this, color)) + binding.avgDelta?.setTextColor(ContextCompat.getColor(this, color)) + val colorTime = if (ageLevel == 1) R.color.dark_Timestamp else R.color.dark_TimestampOld + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) } override fun setColorBright() { if (currentWatchMode == WatchMode.INTERACTIVE) { - mTime?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_time)) - mStatus?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_status)) - mRelativeLayout?.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) - when (singleBg.sgvLevel) { - 1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_highColor)) - } - - 0L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_midColor)) - } - - -1L -> { - mSgv?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - mAvgDelta?.setTextColor(ContextCompat.getColor(this, R.color.light_lowColor)) - } - } - if (ageLevel == 1) { - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.light_mTimestamp1)) - } else { - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.light_mTimestamp)) + binding.time?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_time)) + binding.status?.setTextColor(ContextCompat.getColor(this, R.color.light_bigchart_status)) + binding.mainLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.light_background)) + val color = when (singleBg.sgvLevel) { + 1L -> R.color.light_highColor + 0L -> R.color.light_midColor + -1L -> R.color.light_lowColor + else -> R.color.light_midColor } + binding.sgv?.setTextColor(ContextCompat.getColor(this, color)) + binding.delta?.setTextColor(ContextCompat.getColor(this, color)) + binding.avgDelta?.setTextColor(ContextCompat.getColor(this, color)) + val colorTime = if (ageLevel == 1) R.color.light_mTimestamp1 else R.color.light_mTimestamp + binding.timestamp.setTextColor(ContextCompat.getColor(this, colorTime)) + } else { setColorDark() } } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt index eba08790d6..e387062017 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt @@ -2,12 +2,15 @@ package info.nightscout.androidaps.watchfaces +import android.view.LayoutInflater import android.view.animation.Animation import android.view.animation.LinearInterpolator import android.view.animation.RotateAnimation -import androidx.annotation.LayoutRes import androidx.core.content.ContextCompat +import androidx.viewbinding.ViewBinding import info.nightscout.androidaps.R +import info.nightscout.androidaps.databinding.ActivitySteampunkBinding +import info.nightscout.androidaps.watchfaces.utils.BaseWatchFace import info.nightscout.shared.SafeParse.stringToFloat import org.joda.time.TimeOfDay @@ -19,8 +22,12 @@ class SteampunkWatchface : BaseWatchFace() { private var lastEndDegrees = 0f private var deltaRotationAngle = 0f + private lateinit var binding: ActivitySteampunkBinding - @LayoutRes override fun layoutResource(): Int = R.layout.activity_steampunk + override fun inflateLayout(inflater: LayoutInflater): ViewBinding { + binding = ActivitySteampunkBinding.inflate(inflater) + return binding + } override fun onCreate() { forceSquareCanvas = true @@ -29,48 +36,48 @@ class SteampunkWatchface : BaseWatchFace() { override fun setColorDark() { if (ageLevel() <= 0 && singleBg.timeStamp != 0L) { - mLinearLayout2?.setBackgroundResource(R.drawable.redline) - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.red_600)) + binding.tertiaryLayout.setBackgroundResource(R.drawable.redline) + binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.red_600)) } else { - mLinearLayout2?.setBackgroundResource(0) - mTimestamp?.setTextColor(ContextCompat.getColor(this, R.color.black_86p)) + binding.tertiaryLayout.setBackgroundResource(0) + binding.timestamp.setTextColor(ContextCompat.getColor(this, R.color.black_86p)) } - mLoop?.setTextColor(ContextCompat.getColor(this, if (loopLevel == 0) R.color.red_600 else R.color.black_86p)) + binding.loop.setTextColor(ContextCompat.getColor(this, if (loopLevel == 0) R.color.red_600 else R.color.black_86p)) if (singleBg.sgvString != "---") { - var rotationAngle = 0f //by default, show ? on the dial (? is at 0 degrees on the dial) + var rotationAngle = 0f // by default, show ? on the dial (? is at 0 degrees on the dial) if (singleBg.glucoseUnits != "-") { - //ensure the glucose dial is the correct units - mGlucoseDial?.setImageResource(if (singleBg.glucoseUnits == "mmol") R.drawable.steampunk_dial_mmol else R.drawable.steampunk_dial_mgdl) + // ensure the glucose dial is the correct units + binding.glucoseDial.setImageResource(if (singleBg.glucoseUnits == "mmol") R.drawable.steampunk_dial_mmol else R.drawable.steampunk_dial_mgdl) - //convert the Sgv to degrees of rotation + // convert the Sgv to degrees of rotation rotationAngle = if (singleBg.glucoseUnits == "mmol") stringToFloat(singleBg.sgvString) * 18f //convert to mg/dL, which is equivalent to degrees - else stringToFloat(singleBg.sgvString) //if glucose a value is received, use it to determine the amount of rotation of the dial. + else stringToFloat(singleBg.sgvString) // if glucose a value is received, use it to determine the amount of rotation of the dial. } - if (rotationAngle > 330) rotationAngle = 330f //if the glucose value is higher than 330 then show "HIGH" on the dial. ("HIGH" is at 330 degrees on the dial) - if (rotationAngle != 0f && rotationAngle < 30) rotationAngle = 30f //if the glucose value is lower than 30 show "LOW" on the dial. ("LOW" is at 30 degrees on the dial) + if (rotationAngle > 330) rotationAngle = 330f // if the glucose value is higher than 330 then show "HIGH" on the dial. ("HIGH" is at 330 degrees on the dial) + if (rotationAngle != 0f && rotationAngle < 30) rotationAngle = 30f // if the glucose value is lower than 30 show "LOW" on the dial. ("LOW" is at 30 degrees on the dial) if (lastEndDegrees == 0f) lastEndDegrees = rotationAngle - //rotate glucose dial + // rotate glucose dial val rotate = RotateAnimation(lastEndDegrees, rotationAngle - lastEndDegrees, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f).apply { fillAfter = true interpolator = LinearInterpolator() duration = 1 } - mGlucoseDial?.startAnimation(rotate) + binding.glucoseDial.startAnimation(rotate) lastEndDegrees = rotationAngle //store the final angle as a starting point for the next rotation. } - //set the delta gauge and rotate the delta pointer - var deltaIsNegative = 1f //by default go clockwise - if (singleBg.avgDelta != "--") { //if a legitimate delta value is + // set the delta gauge and rotate the delta pointer + var deltaIsNegative = 1f // by default go clockwise + if (singleBg.avgDelta != "--") { // if a legitimate delta value is // received, // then... if (singleBg.avgDelta[0] == '-') deltaIsNegative = -1f //if the delta is negative, go counter-clockwise val absAvgDelta = stringToFloat(singleBg.avgDelta.substring(1)) //get rid of the sign so it can be converted to float. var autoGranularity = "0" //auto-granularity off - //ensure the delta gauge is the right units and granularity + // ensure the delta gauge is the right units and granularity if (singleBg.glucoseUnits != "-") { if (singleBg.glucoseUnits == "mmol") { if (sp.getString("delta_granularity", "2") == "4") { //Auto granularity @@ -82,15 +89,15 @@ class SteampunkWatchface : BaseWatchFace() { } } if (sp.getString("delta_granularity", "2") == "1" || autoGranularity == "1") { //low - mLinearLayout?.setBackgroundResource(R.drawable.steampunk_gauge_mmol_10) + binding.secondaryLayout.setBackgroundResource(R.drawable.steampunk_gauge_mmol_10) deltaRotationAngle = absAvgDelta * 30f } if (sp.getString("delta_granularity", "2") == "2" || autoGranularity == "2") { //medium - mLinearLayout?.setBackgroundResource(R.drawable.steampunk_gauge_mmol_05) + binding.secondaryLayout.setBackgroundResource(R.drawable.steampunk_gauge_mmol_05) deltaRotationAngle = absAvgDelta * 60f } if (sp.getString("delta_granularity", "2") == "3" || autoGranularity == "3") { //high - mLinearLayout?.setBackgroundResource(R.drawable.steampunk_gauge_mmol_03) + binding.secondaryLayout.setBackgroundResource(R.drawable.steampunk_gauge_mmol_03) deltaRotationAngle = absAvgDelta * 100f } } else { @@ -103,44 +110,40 @@ class SteampunkWatchface : BaseWatchFace() { } } if (sp.getString("delta_granularity", "2") == "1" || autoGranularity == "1") { //low - mLinearLayout?.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_20) + binding.secondaryLayout.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_20) deltaRotationAngle = absAvgDelta * 1.5f } if (sp.getString("delta_granularity", "2") == "2" || autoGranularity == "2") { //medium - mLinearLayout?.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_10) + binding.secondaryLayout.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_10) deltaRotationAngle = absAvgDelta * 3f } if (sp.getString("delta_granularity", "2") == "3" || autoGranularity == "3") { //high - mLinearLayout?.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_5) + binding.secondaryLayout.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_5) deltaRotationAngle = absAvgDelta * 6f } } } if (deltaRotationAngle > 40) deltaRotationAngle = 40f - mDeltaGauge?.rotation = deltaRotationAngle * deltaIsNegative + binding.deltaPointer.rotation = deltaRotationAngle * deltaIsNegative } - //rotate the minute hand. - mMinuteHand?.rotation = TimeOfDay().minuteOfHour * 6f + // rotate the minute hand. + binding.minuteHand.rotation = TimeOfDay().minuteOfHour * 6f - //rotate the hour hand. - mHourHand?.rotation = TimeOfDay().hourOfDay * 30f + TimeOfDay().minuteOfHour * 0.5f + // rotate the hour hand. + binding.hourHand.rotation = TimeOfDay().hourOfDay * 30f + TimeOfDay().minuteOfHour * 0.5f setTextSizes() - mLoop?.setBackgroundResource(0) - if (chart != null) { - highColor = ContextCompat.getColor(this, R.color.black) - lowColor = ContextCompat.getColor(this, R.color.black) - midColor = ContextCompat.getColor(this, R.color.black) - gridColor = ContextCompat.getColor(this, R.color.grey_steampunk) - basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) - basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) - pointSize = if (sp.getInt(R.string.key_chart_time_frame, 3) < 3) { - 2 - } else { - 1 - } - setupCharts() - } + binding.loop.setBackgroundResource(0) + + highColor = ContextCompat.getColor(this, R.color.black) + lowColor = ContextCompat.getColor(this, R.color.black) + midColor = ContextCompat.getColor(this, R.color.black) + gridColor = ContextCompat.getColor(this, R.color.grey_steampunk) + basalBackgroundColor = ContextCompat.getColor(this, R.color.basal_dark) + basalCenterColor = ContextCompat.getColor(this, R.color.basal_dark) + pointSize = if (sp.getInt(R.string.key_chart_time_frame, 3) < 3) 2 else 1 + setupCharts() + invalidate() } @@ -162,36 +165,23 @@ class SteampunkWatchface : BaseWatchFace() { fontLarge = 13f } - //top row. large font unless text too big (i.e. detailedIOB) - mCOB2?.textSize = fontLarge - mBasalRate?.textSize = fontLarge - if (status.iobDetail.length < 7) { - mIOB2?.textSize = fontLarge - } else { - mIOB2?.textSize = fontSmall - } + // top row. large font unless text too big (i.e. detailedIOB) + binding.cob2.textSize = fontLarge + binding.basalRate.textSize = fontLarge + val fontIob = if (status.iobDetail.length < 7) fontLarge else fontSmall + binding.iob2.textSize = fontIob - //bottom row. font medium unless text too long (i.e. longer than 9' timestamp) - mLoop?.let { mLoop -> - mTimestamp?.let { mTimestamp -> - if (mTimestamp.text.length < 3 || mLoop.text.length < 3) { //always resize these fields together, for symmetry. - mTimestamp.textSize = fontMedium - mLoop.textSize = fontMedium - } else { - mTimestamp.textSize = fontSmall - mLoop.textSize = fontSmall - } - } - } + // bottom row. font medium unless text too long (i.e. longer than 9' timestamp) + // always resize these fields together, for symmetry. + val font = if (binding.timestamp.text.length < 3 || binding.loop.text.length < 3) fontMedium else fontSmall + binding.loop.textSize = font + binding.timestamp.textSize = font + + // if both batteries are shown, make them smaller. + val fontBat = if (sp.getBoolean(R.string.key_show_uploader_battery, true) && sp.getBoolean(R.string.key_show_rig_battery, false)) fontSmall else fontMedium + binding.uploaderBattery.textSize = fontBat + binding.rigBattery.textSize = fontBat - //if both batteries are shown, make them smaller. - if (sp.getBoolean(R.string.key_show_uploader_battery, true) && sp.getBoolean(R.string.key_show_rig_battery, false)) { - mUploaderBattery?.textSize = fontSmall - mRigBattery?.textSize = fontSmall - } else { - mUploaderBattery?.textSize = fontMedium - mRigBattery?.textSize = fontMedium - } } override fun changeChartTimeframe() { @@ -200,4 +190,4 @@ class SteampunkWatchface : BaseWatchFace() { pointSize = if (timeframe < 3) 2 else 1 sp.putString(R.string.key_chart_time_frame, timeframe.toString()) } -} \ No newline at end of file +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/WatchfaceViewAdapter.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/WatchfaceViewAdapter.kt new file mode 100644 index 0000000000..3b1b8113b8 --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/utils/WatchfaceViewAdapter.kt @@ -0,0 +1,102 @@ +package info.nightscout.androidaps.watchfaces.utils + +import androidx.viewbinding.ViewBinding +import info.nightscout.androidaps.databinding.ActivityHomeLargeBinding +import info.nightscout.androidaps.databinding.ActivityHome2Binding +import info.nightscout.androidaps.databinding.ActivityHomeBinding +import info.nightscout.androidaps.databinding.ActivityBigchartBinding +import info.nightscout.androidaps.databinding.ActivityBigchartSmallBinding +import info.nightscout.androidaps.databinding.ActivityCockpitBinding +import info.nightscout.androidaps.databinding.ActivityDigitalstyleBinding +import info.nightscout.androidaps.databinding.ActivityNochartBinding +import info.nightscout.androidaps.databinding.ActivitySteampunkBinding + +/** + * WatchfaceViewAdapter binds all WatchFace variants shared attributes to one common view adapter. + * Requires at least one of the ViewBinding as a parameter. Recommended to use the factory object to create the binding. + */ +class WatchfaceViewAdapter( + aL: ActivityHomeLargeBinding? = null, + a2: ActivityHome2Binding? = null, + aa: ActivityHomeBinding? = null, + bC: ActivityBigchartBinding? = null, + bCs: ActivityBigchartSmallBinding? = null, + cp: ActivityCockpitBinding? = null, + ds: ActivityDigitalstyleBinding? = null, + nC: ActivityNochartBinding? = null, + sP: ActivitySteampunkBinding? = null +) { + + init { + if (aL == null && a2 == null && aa == null && bC == null && bCs == null && cp == null && ds == null && nC == null && sP == null) { + throw IllegalArgumentException("Require at least on Binding parameter") + } + } + + private val errorMessage = "Missing require View Binding parameter" + // Required attributes + val mainLayout = + aL?.mainLayout ?: a2?.mainLayout ?: aa?.mainLayout ?: bC?.mainLayout ?: bC?.mainLayout ?: cp?.mainLayout ?: ds?.mainLayout ?: nC?.mainLayout ?: sP?.mainLayout + ?: throw IllegalArgumentException(errorMessage) + val timestamp = + aL?.timestamp ?: a2?.timestamp ?: aa?.timestamp ?: bC?.timestamp ?: bC?.timestamp ?: cp?.timestamp ?: ds?.timestamp ?: nC?.timestamp ?: sP?.timestamp + ?: throw IllegalArgumentException(errorMessage) + val root = + aL?.root ?: a2?.root ?: aa?.root ?: bC?.root ?: bC?.root ?: cp?.root ?: ds?.root ?: nC?.root ?: sP?.root + ?: throw IllegalArgumentException(errorMessage) + + // Optional attributes + val sgv = aL?.sgv ?: a2?.sgv ?: aa?.sgv ?: bC?.sgv ?: bC?.sgv ?: cp?.sgv ?: ds?.sgv ?: nC?.sgv + val direction = aL?.direction ?: a2?.direction ?: aa?.direction ?: cp?.direction ?: ds?.direction + val loop = a2?.loop ?: cp?.loop ?: sP?.loop + val delta = aL?.delta ?: a2?.delta ?: aa?.delta ?: bC?.delta ?: bC?.delta ?: cp?.delta ?: ds?.delta ?: nC?.delta + val avgDelta = a2?.avgDelta ?: bC?.avgDelta ?: bC?.avgDelta ?: cp?.avgDelta ?: ds?.avgDelta ?: nC?.avgDelta + val uploaderBattery = aL?.uploaderBattery ?: a2?.uploaderBattery ?: aa?.uploaderBattery ?: cp?.uploaderBattery ?: ds?.uploaderBattery ?: sP?.uploaderBattery + val rigBattery = a2?.rigBattery ?: cp?.rigBattery ?: ds?.rigBattery ?: sP?.rigBattery + val basalRate = a2?.basalRate ?: cp?.basalRate ?: ds?.basalRate ?: sP?.basalRate + val bgi = a2?.bgi ?: ds?.bgi + val AAPSv2 = a2?.AAPSv2 ?: cp?.AAPSv2 ?: ds?.AAPSv2 ?: sP?.AAPSv2 + val cob1 = a2?.cob1 ?: ds?.cob1 + val cob2 = a2?.cob2 ?: cp?.cob2 ?: ds?.cob2 ?: sP?.cob2 + val time = aL?.time ?: a2?.time ?: aa?.time ?: bC?.time ?: bC?.time ?: cp?.time ?: nC?.time + val minute = ds?.minute + val hour = ds?.hour + val day = a2?.day ?: ds?.day + val month = a2?.month ?: ds?.month + val iob1 = a2?.iob1 ?: ds?.iob1 + val iob2 = a2?.iob2 ?: cp?.iob2 ?: ds?.iob2 ?: sP?.iob2 + val chart = a2?.chart ?: aa?.chart ?: bC?.chart ?: bC?.chart ?: ds?.chart ?: sP?.chart + val status = aL?.status ?: aa?.status ?: bC?.status ?: bC?.status ?: nC?.status + val timePeriod = ds?.timePeriod + val dayName = ds?.dayName + val mainMenuTap = ds?.mainMenuTap ?: sP?.mainMenuTap + val chartZoomTap = sP?.chartZoomTap + val dateTime = ds?.dateTime ?: a2?.dateTime + // val minuteHand = sP?.minuteHand + // val secondaryLayout = aL?.secondaryLayout ?: a2?.secondaryLayout ?: aa?.secondaryLayout ?: ds?.secondaryLayout ?: sP?.secondaryLayout + // val tertiaryLayout = a2?.tertiaryLayout ?: sP?.tertiaryLayout + // val highLight = cp?.highLight + // val lowLight = cp?.lowLight + // val deltaGauge = sP?.deltaPointer + // val hourHand = sP?.hourHand + // val glucoseDial = sP?.glucoseDial + + companion object { + + fun getBinding(bindLayout: ViewBinding): WatchfaceViewAdapter { + return when (bindLayout) { + is ActivityHomeLargeBinding -> WatchfaceViewAdapter(bindLayout) + is ActivityHome2Binding -> WatchfaceViewAdapter(null, bindLayout) + is ActivityHomeBinding -> WatchfaceViewAdapter(null, null, bindLayout) + is ActivityBigchartBinding -> WatchfaceViewAdapter(null, null, null, bindLayout) + is ActivityBigchartSmallBinding -> WatchfaceViewAdapter(null, null, null, null, bindLayout) + is ActivityCockpitBinding -> WatchfaceViewAdapter(null, null, null, null, null, bindLayout) + is ActivityDigitalstyleBinding -> WatchfaceViewAdapter(null, null, null, null, null, null, bindLayout) + is ActivityNochartBinding -> WatchfaceViewAdapter(null, null, null, null, null, null, null, bindLayout) + is ActivitySteampunkBinding -> WatchfaceViewAdapter(null, null, null, null, null, null, null, null, bindLayout) + else -> throw IllegalArgumentException("ViewBinding is not implement in WatchfaceViewAdapter") + } + } + } + +} diff --git a/wear/src/main/res/layout-notround/activity_bigchart.xml b/wear/src/main/res/layout-notround/activity_bigchart.xml index 8c3a136e6a..28be3ae4bb 100644 --- a/wear/src/main/res/layout-notround/activity_bigchart.xml +++ b/wear/src/main/res/layout-notround/activity_bigchart.xml @@ -46,7 +46,7 @@ tools:ignore="HardcodedText" /> - + - + - + Date: Tue, 5 Jul 2022 23:22:11 +0200 Subject: [PATCH 30/48] Fix Double Time in Popup for profile name --- .../androidaps/plugins/general/autotune/AutotuneFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b0f3303c4e..9fcc4b8db2 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 @@ -126,7 +126,7 @@ class AutotuneFragment : DaggerFragment() { 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), + rh.gs(R.string.autotune_copy_local_profile_message) + "\n" + localName, Runnable { localProfilePlugin.addProfile(localProfilePlugin.copyFrom(tunedProfile.getProfile(circadian), localName)) rxBus.send(EventLocalProfileChanged()) From a4be4bb0a79bc9f77f8ce00a547a057df40f674c Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Tue, 5 Jul 2022 12:52:30 +0200 Subject: [PATCH 31/48] chore: add no watch connected messgae --- .../wear/wearintegration/DataLayerListenerServiceMobile.kt | 2 +- app/src/main/res/layout/wear_fragment.xml | 2 +- app/src/main/res/values/strings.xml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt index ed1ac23bdb..4535cda62f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt @@ -134,7 +134,7 @@ class DataLayerListenerServiceMobile : WearableListenerService() { aapsLogger.debug(LTag.WEAR, "Nodes: ${capabilityInfo.nodes.joinToString(", ") { it.displayName + "(" + it.id + ")" }}") val bestNode = pickBestNodeId(capabilityInfo.nodes) transcriptionNodeId = bestNode?.id - wearPlugin.connectedDevice = bestNode?.displayName ?: "---" + wearPlugin.connectedDevice = bestNode?.displayName ?: rh.gs(R.string.no_watch_connected) rxBus.send(EventWearUpdateGui()) aapsLogger.debug(LTag.WEAR, "Selected node: ${bestNode?.displayName} $transcriptionNodeId") rxBus.send(EventMobileToWear(EventData.ActionPing(System.currentTimeMillis()))) diff --git a/app/src/main/res/layout/wear_fragment.xml b/app/src/main/res/layout/wear_fragment.xml index 2bcbb389ac..5c6dd20d9a 100644 --- a/app/src/main/res/layout/wear_fragment.xml +++ b/app/src/main/res/layout/wear_fragment.xml @@ -13,7 +13,7 @@ android:gravity="center_vertical|center_horizontal" android:paddingTop="10dp" android:paddingBottom="10dp" - android:text="---" + android:text="@string/no_watch_connected" android:textAppearance="@style/TextAppearance.AppCompat.Medium" tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d33d543dd9..b4bb05b480 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1249,6 +1249,7 @@ Receive BG values from GlucoRx Aidex CGMS. Blocked by charging options Blocked by connectivity options + (No Watch Connected) From ad71a38cfbb0ae6003c76715b86112b23a659eaa Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 6 Jul 2022 23:00:07 +0200 Subject: [PATCH 32/48] Objectives: new questions --- .../objectives/objectives/Objective2.kt | 15 +++++++++++++++ app/src/main/res/values/exam.xml | 14 +++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective2.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective2.kt index b32fab8e96..4c79036f9b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective2.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective2.kt @@ -178,6 +178,21 @@ class Objective2(injector: HasAndroidInjector) : Objective(injector, "exam", R.s .option(Option(R.string.iob_negiob, true)) .option(Option(R.string.iob_posiob, true)) ) + tasks.add(ExamTask(this, R.string.cob_label, R.string.cob_question, "cob1") + .option(Option(R.string.cob_longer, true)) + .option(Option(R.string.cob_shorter, false)) + .option(Option(R.string.cob_no_effect, false)) + ) + tasks.add(ExamTask(this, R.string.cob_label, R.string.cob2_question, "cob2") + .option(Option(R.string.cob2_longer, false)) + .option(Option(R.string.cob2_shorter, true)) + .option(Option(R.string.cob2_no_effect, false)) + ) + tasks.add(ExamTask(this, R.string.cob_label, R.string.cob3_question, "cob3") + .option(Option(R.string.cob3_longer, false)) + .option(Option(R.string.cob3_shorter, false)) + .option(Option(R.string.cob3_no_effect, true)) + ) tasks.add(ExamTask(this, R.string.breadgrams_label, R.string.blank, "breadgrams") .option(Option(R.string.breadgrams_grams, true)) .option(Option(R.string.breadgrams_exchange, false)) diff --git a/app/src/main/res/values/exam.xml b/app/src/main/res/values/exam.xml index d61962065a..2ca128b413 100644 --- a/app/src/main/res/values/exam.xml +++ b/app/src/main/res/values/exam.xml @@ -136,8 +136,20 @@ Compare values in AndroidAPS and pump history (if pump supports this). Bolus a proportion of your calculated ‘missed’ insulin by either syringe/pen or using a prime. Do nothing and allow AndroidAPS to correct any resulting high blood glucose level. + Carbs on Board (COB) + How changing ISF value affects COB calculation? + Increasing ISF will make absorbing carbs longer time + Increasing ISF will make absorbing carbs shorter time + Increasing ISF will not affect calculated carbs absorption + How changing IC value affects COB calculation? + Increasing IC will make absorbing carbs longer time + Increasing IC will make absorbing carbs shorter time + Increasing IC will not affect calculated carbs absorption + How changing profile percentage affects COB calculation? + Setting profile to 150% will make absorbing carbs longer time + Setting profile to 150% will make absorbing carbs shorter time + Setting profile to 150% will not affect calculated carbs absorption Insulin on Board (IOB) - Check all the correct answers. IOB value is affected by issued temporary basals. High temp basal will not be given when your blood sugar is below target. Negative IOB for a substantial period in the absence of exercise suggests your profile is too strong and less insulin is needed in your settings. From 8b496c45c28dd852dcc887275bb8a318105b8293 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 6 Jul 2022 23:11:45 +0200 Subject: [PATCH 33/48] prevent NPE --- .../androidaps/plugins/profile/local/LocalProfileFragment.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt index 7e0e29fc8f..77f0139d4b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt @@ -394,6 +394,7 @@ class LocalProfileFragment : DaggerFragment() { } private fun updateProtectedUi() { + _binding ?: return val isLocked = protectionCheck.isLocked(ProtectionCheck.Protection.PREFERENCES) binding.mainLayout.visibility = isLocked.not().toVisibility() binding.unlock.visibility = isLocked.toVisibility() From 5c26c1ddb6a84291a46caaa93bfdea9faef13b2e Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 6 Jul 2022 23:14:55 +0200 Subject: [PATCH 34/48] prevent NPE --- .../main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt | 1 + 1 file changed, 1 insertion(+) 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 8af683bcdb..9c8fe4ba91 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt @@ -345,6 +345,7 @@ class WizardDialog : DaggerDialogFragment() { val basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round() runOnUiThread { + _binding ?: return@runOnUiThread if (carbsPassedIntoWizard != 0.0) { binding.carbsInput.value = carbsPassedIntoWizard } From cf1f31ab78ac629e465165108f242d11aca0a11a Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Thu, 7 Jul 2022 10:09:36 +0200 Subject: [PATCH 35/48] fix build --- .../info/nightscout/androidaps/utils/ui/TimeListEdit.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java b/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java index 437bb3cbd2..e1645c907f 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java +++ b/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java @@ -182,7 +182,7 @@ public class TimeListEdit { numberPickers1[position].setTextWatcher(new TextWatcher() { @Override public void afterTextChanged(Editable s) { - Double value1 = SafeParse.INSTANCE.stringToDouble(numberPickers1[position].getText()); + Double value1 = SafeParse.INSTANCE.stringToDouble(numberPickers1[position].getText(), 0.0); Double value2 = value2(position); if (data2 != null && value1 > value2) { value2 = value1; @@ -209,7 +209,7 @@ public class TimeListEdit { @Override public void afterTextChanged(Editable s) { Double value1 = value1(position); - Double value2 = SafeParse.INSTANCE.stringToDouble(numberPickers2[position].getText()); + Double value2 = SafeParse.INSTANCE.stringToDouble(numberPickers2[position].getText(), 0.0); if (data2 != null && value2 < value1) { value1 = value2; numberPickers1[position].setValue(value1); From 396bfc8304b4a07ecdbf97d5982adf2821683259 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Thu, 7 Jul 2022 11:38:06 +0200 Subject: [PATCH 36/48] fix: option parameter java --- .../info/nightscout/androidaps/utils/ui/TimeListEdit.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java b/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java index 437bb3cbd2..e1645c907f 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java +++ b/app/src/main/java/info/nightscout/androidaps/utils/ui/TimeListEdit.java @@ -182,7 +182,7 @@ public class TimeListEdit { numberPickers1[position].setTextWatcher(new TextWatcher() { @Override public void afterTextChanged(Editable s) { - Double value1 = SafeParse.INSTANCE.stringToDouble(numberPickers1[position].getText()); + Double value1 = SafeParse.INSTANCE.stringToDouble(numberPickers1[position].getText(), 0.0); Double value2 = value2(position); if (data2 != null && value1 > value2) { value2 = value1; @@ -209,7 +209,7 @@ public class TimeListEdit { @Override public void afterTextChanged(Editable s) { Double value1 = value1(position); - Double value2 = SafeParse.INSTANCE.stringToDouble(numberPickers2[position].getText()); + Double value2 = SafeParse.INSTANCE.stringToDouble(numberPickers2[position].getText(), 0.0); if (data2 != null && value2 < value1) { value1 = value2; numberPickers1[position].setValue(value1); From e7bd9ad81ea2669cba7cbe017ebaa35575fa9cb7 Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Thu, 7 Jul 2022 11:38:36 +0200 Subject: [PATCH 37/48] feat: preference search in actionbar --- .../activities/PreferencesActivity.kt | 37 +++++++++++-------- .../main/res/layout/activity_preferences.xml | 22 ----------- app/src/main/res/menu/menu_preferences.xml | 11 ++++++ app/src/main/res/values/strings.xml | 3 +- 4 files changed, 34 insertions(+), 39 deletions(-) create mode 100644 app/src/main/res/menu/menu_preferences.xml diff --git a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt index 60f0f5006a..7725617e88 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.kt @@ -2,9 +2,9 @@ package info.nightscout.androidaps.activities import android.content.Context import android.os.Bundle -import android.text.Editable -import android.text.TextWatcher +import android.view.Menu import android.view.MenuItem +import androidx.appcompat.widget.SearchView import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceScreen import info.nightscout.androidaps.R @@ -15,6 +15,7 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa private var preferenceId = 0 private var myPreferenceFragment: MyPreferenceFragment? = null + private var searchView: SearchView? = null private lateinit var binding: ActivityPreferencesBinding @@ -24,15 +25,6 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa binding = ActivityPreferencesBinding.inflate(layoutInflater) setContentView(binding.root) - binding.prefFilter.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { - filterPreferences() - } - - override fun afterTextChanged(s: Editable) {} - }) - title = rh.gs(R.string.nav_preferences) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true) @@ -40,12 +32,29 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa preferenceId = intent.getIntExtra("id", -1) myPreferenceFragment?.arguments = Bundle().also { it.putInt("id", preferenceId) - it.putString("filter", binding.prefFilter.text.toString()) } if (savedInstanceState == null) supportFragmentManager.beginTransaction().replace(R.id.frame_layout, myPreferenceFragment!!).commit() } + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.menu_preferences, menu) + val searchItem = menu.findItem(R.id.menu_search) + searchView = searchItem.actionView as SearchView + searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + + override fun onQueryTextChange(newText: String): Boolean { + myPreferenceFragment?.setFilter(newText) + return false + } + + override fun onQueryTextSubmit(query: String): Boolean { + return false + } + }) + return super.onCreateOptionsMenu(menu) + } + override fun onPreferenceStartScreen(caller: PreferenceFragmentCompat, pref: PreferenceScreen): Boolean { val fragment = MyPreferenceFragment() fragment.arguments = Bundle().also { @@ -60,10 +69,6 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa super.attachBaseContext(LocaleHelper.wrap(newBase)) } - private fun filterPreferences() { - myPreferenceFragment?.setFilter(binding.prefFilter.text.toString()) - } - override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { android.R.id.home -> { diff --git a/app/src/main/res/layout/activity_preferences.xml b/app/src/main/res/layout/activity_preferences.xml index 2ff946628a..ae72eaf113 100644 --- a/app/src/main/res/layout/activity_preferences.xml +++ b/app/src/main/res/layout/activity_preferences.xml @@ -5,28 +5,6 @@ android:layout_height="match_parent" android:orientation="vertical"> - - - - - - + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b4bb05b480..7bc428a968 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1242,8 +1242,9 @@ only on watch only on phone drag and drop handle + Search - + GlucoRx Aidex Aidex Receive BG values from GlucoRx Aidex CGMS. From 943e68d1be4e860b3315c784bb69301fd8cee17e Mon Sep 17 00:00:00 2001 From: Andries Smit Date: Fri, 8 Jul 2022 08:58:53 +0200 Subject: [PATCH 38/48] fix: nightscout icons --- .../res/drawable/ic_nightscout_profile.xml | 29 +++++++++++----- .../main/res/drawable/ic_nightscout_syncs.xml | 34 ++++++++++++++----- core/src/main/res/drawable/ic_nsclient_bg.xml | 27 +++++++++------ 3 files changed, 62 insertions(+), 28 deletions(-) diff --git a/core/src/main/res/drawable/ic_nightscout_profile.xml b/core/src/main/res/drawable/ic_nightscout_profile.xml index 7fb7c6f4a5..9b9b07d3f9 100644 --- a/core/src/main/res/drawable/ic_nightscout_profile.xml +++ b/core/src/main/res/drawable/ic_nightscout_profile.xml @@ -1,10 +1,23 @@ - - - + + - - - + android:strokeWidth="3.09" + android:strokeColor="?attr/colorControlNormal" /> + + + diff --git a/core/src/main/res/drawable/ic_nightscout_syncs.xml b/core/src/main/res/drawable/ic_nightscout_syncs.xml index d90bc99dd3..381de5de2c 100644 --- a/core/src/main/res/drawable/ic_nightscout_syncs.xml +++ b/core/src/main/res/drawable/ic_nightscout_syncs.xml @@ -1,11 +1,27 @@ - - - - - + - - + android:strokeWidth="3.09" + android:strokeColor="?attr/colorControlNormal" /> + + + + + diff --git a/core/src/main/res/drawable/ic_nsclient_bg.xml b/core/src/main/res/drawable/ic_nsclient_bg.xml index 00e95c65cb..fff0a558f6 100644 --- a/core/src/main/res/drawable/ic_nsclient_bg.xml +++ b/core/src/main/res/drawable/ic_nsclient_bg.xml @@ -3,15 +3,20 @@ android:height="64dp" android:viewportWidth="64" android:viewportHeight="64"> - - - + + + + + From 6b1f495c283d3b66b2620582efb123054dff4029 Mon Sep 17 00:00:00 2001 From: Philoul Date: Fri, 8 Jul 2022 23:13:12 +0200 Subject: [PATCH 39/48] Synchronized aapsAutotune call to avoid multi-thread conflicts --- .../general/autotune/AutotunePlugin.kt | 33 +++++++++++++------ .../androidaps/interfaces/Autotune.kt | 2 +- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt index 5f926c28c5..e379f22026 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt @@ -76,21 +76,31 @@ class AutotunePlugin @Inject constructor( private lateinit var profile: Profile val autotuneStartHour: Int = 4 - override fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String): String { + @Synchronized + override fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String) { + lastRunSuccess = false + calculationRunning = true tunedProfile = null updateButtonVisibility = View.GONE - lastRunSuccess = false var logResult = "" result = "" if (profileFunction.getProfile() == null) { result = rh.gs(R.string.profileswitch_ismissing) - return result + rxBus.send(EventAutotuneUpdateGui()) + calculationRunning = false + return } val detailedLog = sp.getBoolean(R.string.key_autotune_additional_log, false) calculationRunning = true lastNbDays = "" + daysBack lastRun = dateUtil.now() - val profileStore = activePlugin.activeProfileSource.profile ?: return rh.gs(R.string.profileswitch_ismissing) + val profileStore = activePlugin.activeProfileSource.profile + if (profileStore == null) { + result = rh.gs(R.string.profileswitch_ismissing) + rxBus.send(EventAutotuneUpdateGui()) + calculationRunning = false + return + } selectedProfile = if (profileToTune.isEmpty()) profileFunction.getProfileName() else profileToTune profileFunction.getProfile()?.let { currentProfile -> profile = profileStore.getSpecificProfile(profileToTune)?.let { ProfileSealed.Pure(it) } ?: currentProfile @@ -144,11 +154,11 @@ class AutotunePlugin @Inject constructor( if (tunedProfile == null) { result = rh.gs(R.string.autotune_error) log("TunedProfile is null on day ${i + 1}") - calculationRunning = false - rxBus.send(EventAutotuneUpdateGui()) autotuneFS.exportResult(result) autotuneFS.exportLogAndZip(lastRun) - return result + rxBus.send(EventAutotuneUpdateGui()) + calculationRunning = false + return } } result = rh.gs(R.string.autotune_result, dateUtil.dateAndTimeString(lastRun)) @@ -193,13 +203,16 @@ class AutotunePlugin @Inject constructor( } tunedProfile?.let { - lastRunSuccess = true saveLastRun() + lastRunSuccess = true rxBus.send(EventAutotuneUpdateGui()) calculationRunning = false - return result + return } - return rh.gs(R.string.autotune_error) + result = rh.gs(R.string.autotune_error) + rxBus.send(EventAutotuneUpdateGui()) + calculationRunning = false + return } private fun showResults(tunedProfile: ATProfile?, pumpProfile: ATProfile): String { diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt index b90934475e..83ebcd2530 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt @@ -2,7 +2,7 @@ package info.nightscout.androidaps.interfaces interface Autotune { - fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String = ""): String + fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String = "") fun atLog(message: String) var lastRunSuccess: Boolean From 4c52081a8fecce7420600fd95be71f74dc977025 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sat, 9 Jul 2022 00:57:23 +0200 Subject: [PATCH 40/48] Prevent NPE (Trial) convert ArrayList to List to execute Sort --- .../androidaps/plugins/general/autotune/AutotuneIob.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 bac89d9f9e..925d290ee4 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 @@ -39,7 +39,7 @@ open class AutotuneIob @Inject constructor( private val autotuneFS: AutotuneFS ) { - private val nsTreatments = ArrayList() + private var nsTreatments = ArrayList() private var dia: Double = Constants.defaultDIA var boluses: ArrayList = ArrayList() var meals = ArrayList() @@ -59,11 +59,11 @@ open class AutotuneIob @Inject constructor( initializeTreatmentData(from - range(), to) initializeTempBasalData(from - range(), to, tunedProfile) initializeExtendedBolusData(from - range(), to, tunedProfile) - tempBasals.sortWith { o1: TemporaryBasal, o2: TemporaryBasal -> (o2.timestamp - o1.timestamp).toInt() } + tempBasals = ArrayList(tempBasals.toList().sortedWith { 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) - nsTreatments.sortWith { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() } - this.boluses.sortWith { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() } + nsTreatments = ArrayList(nsTreatments.toList().sortedWith { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() }) + boluses = ArrayList(boluses.toList().sortedWith { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() }) aapsLogger.debug(LTag.AUTOTUNE, "Nb Treatments: " + nsTreatments.size + " Nb meals: " + meals.size) } From a9c7b5c15b1185e73b3c1c635de6b357b465a25f Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 9 Jul 2022 18:18:14 +0200 Subject: [PATCH 41/48] fix tests --- .../omnipod/eros/manager/AapsErosPodStateManagerTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt b/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt index 7d0748726d..8c15bc9fa8 100644 --- a/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt +++ b/omnipod-eros/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsErosPodStateManagerTest.kt @@ -27,7 +27,7 @@ class AapsErosPodStateManagerTest : TestBase() { val now = DateTime(2020, 1, 1, 1, 2, 3, timeZone) DateTimeUtils.setCurrentMillisFixed(now.millis) val podStateManager = AapsErosPodStateManager(aapsLogger, sp, rxBus) - podStateManager.initState(0x0) + podStateManager.initState(0x01) podStateManager.setInitializationParameters( 0, 0, FirmwareVersion(1, 1, 1), FirmwareVersion(2, 2, 2), timeZone, PodProgressStatus.ABOVE_FIFTY_UNITS @@ -46,7 +46,7 @@ class AapsErosPodStateManagerTest : TestBase() { val now = DateTime(2020, 1, 1, 1, 2, 3, timeZone) DateTimeUtils.setCurrentMillisFixed(now.millis) val podStateManager = AapsErosPodStateManager(aapsLogger, sp, rxBus) - podStateManager.initState(0x0) + podStateManager.initState(0x01) podStateManager.setInitializationParameters( 0, 0, FirmwareVersion(1, 1, 1), FirmwareVersion(2, 2, 2), timeZone, PodProgressStatus.ABOVE_FIFTY_UNITS @@ -70,7 +70,7 @@ class AapsErosPodStateManagerTest : TestBase() { val now = DateTime(2020, 1, 1, 1, 2, 3, timeZone) DateTimeUtils.setCurrentMillisFixed(now.millis) val podStateManager = AapsErosPodStateManager(aapsLogger, sp, rxBus) - podStateManager.initState(0x0) + podStateManager.initState(0x01) podStateManager.setInitializationParameters( 0, 0, FirmwareVersion(1, 1, 1), FirmwareVersion(2, 2, 2), timeZone, PodProgressStatus.ABOVE_FIFTY_UNITS From cf87185976a0e157d0520adce193f0c46c1fca63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Jul 2022 16:40:44 +0000 Subject: [PATCH 42/48] Bump org.jetbrains.kotlin.android from 1.7.0 to 1.7.10 Bumps org.jetbrains.kotlin.android from 1.7.0 to 1.7.10. --- updated-dependencies: - dependency-name: org.jetbrains.kotlin.android 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 0f1228a852..f287edcd30 100644 --- a/build.gradle +++ b/build.gradle @@ -66,7 +66,7 @@ plugins { id "io.gitlab.arturbosch.detekt" version "1.20.0" id "org.jlleitschuh.gradle.ktlint" version "10.3.0" id 'org.barfuin.gradle.jacocolog' version '2.0.0' - id 'org.jetbrains.kotlin.android' version '1.7.0' apply false + id 'org.jetbrains.kotlin.android' version '1.7.10' apply false } allprojects { From 28972e2923ab053ac360ecbf220a0be103b440f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Jul 2022 16:41:05 +0000 Subject: [PATCH 43/48] Bump kotlin_version from 1.7.0 to 1.7.10 Bumps `kotlin_version` from 1.7.0 to 1.7.10. Updates `kotlin-gradle-plugin` from 1.7.0 to 1.7.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.10/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.0...v1.7.10) Updates `kotlin-allopen` from 1.7.0 to 1.7.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.10/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.0...v1.7.10) Updates `kotlin-serialization` from 1.7.0 to 1.7.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.10/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.0...v1.7.10) Updates `kotlin-stdlib-jdk8` from 1.7.0 to 1.7.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.10/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.0...v1.7.10) Updates `kotlin-reflect` from 1.7.0 to 1.7.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.10/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.0...v1.7.10) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-allopen dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-serialization dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib-jdk8 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-reflect 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 0f1228a852..57c1a25da2 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - kotlin_version = '1.7.0' + kotlin_version = '1.7.10' core_version = '1.8.0' rxjava_version = '3.1.5' rxandroid_version = '3.0.0' From 5de98fab938cc7ee3ec94342fbeaa38e56a3fe8c Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 9 Jul 2022 23:03:42 +0200 Subject: [PATCH 44/48] language style --- app/src/main/res/values/exam.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values/exam.xml b/app/src/main/res/values/exam.xml index 2ca128b413..ff2a4f9d5d 100644 --- a/app/src/main/res/values/exam.xml +++ b/app/src/main/res/values/exam.xml @@ -138,16 +138,16 @@ Do nothing and allow AndroidAPS to correct any resulting high blood glucose level. Carbs on Board (COB) How changing ISF value affects COB calculation? - Increasing ISF will make absorbing carbs longer time - Increasing ISF will make absorbing carbs shorter time + Increasing ISF will take absorbing carbs a longer time + Increasing ISF will take absorbing carbs a shorter time Increasing ISF will not affect calculated carbs absorption How changing IC value affects COB calculation? - Increasing IC will make absorbing carbs longer time - Increasing IC will make absorbing carbs shorter time + Increasing IC will take absorbing carbs a longer time + Increasing IC will take absorbing carbs a shorter time Increasing IC will not affect calculated carbs absorption How changing profile percentage affects COB calculation? - Setting profile to 150% will make absorbing carbs longer time - Setting profile to 150% will make absorbing carbs shorter time + Setting profile to 150% will take absorbing carbs a longer time + Setting profile to 150% will take absorbing carbs a shorter time Setting profile to 150% will not affect calculated carbs absorption Insulin on Board (IOB) IOB value is affected by issued temporary basals. From 10d92b89fda5a0b9b40ae61272af0c59d9d71597 Mon Sep 17 00:00:00 2001 From: Philoul Date: Sun, 10 Jul 2022 00:35:54 +0200 Subject: [PATCH 45/48] Avoid AutotuneRun from automation if Run detected --- app/build.gradle | 2 +- .../general/autotune/AutotuneFragment.kt | 1 - .../plugins/general/autotune/AutotunePlugin.kt | 8 ++++++-- .../automation/actions/ActionRunAutotune.kt | 18 ++++++++++++------ .../androidaps/interfaces/Autotune.kt | 1 + core/src/main/res/values/strings.xml | 1 + 6 files changed, 21 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ffa92cddd2..da06e17acd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -105,7 +105,7 @@ android { defaultConfig { multiDexEnabled true versionCode 1500 - version "3.0.0.2-dev-n" + version "3.0.0.2-autotune-dev-n0" buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"' buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"' 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 9fcc4b8db2..0f2834c90e 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 @@ -100,7 +100,6 @@ class AutotuneFragment : DaggerFragment() { ) binding.autotuneRun.setOnClickListener { val daysBack = SafeParse.stringToInt(binding.tuneDays.text) - autotunePlugin.calculationRunning = true autotunePlugin.lastNbDays = daysBack.toString() log("Run Autotune $profileName, $daysBack days") Thread { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt index e379f22026..6a4f3d6a94 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt @@ -22,6 +22,7 @@ import info.nightscout.androidaps.utils.MidnightTime import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.interfaces.BuildHelper import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag import info.nightscout.shared.sharedPreferences.SP import org.json.JSONException import org.json.JSONObject @@ -65,7 +66,7 @@ class AutotunePlugin @Inject constructor( ), Autotune { @Volatile override var lastRunSuccess: Boolean = false @Volatile var result: String = "" - @Volatile var calculationRunning: Boolean = false + @Volatile override var calculationRunning: Boolean = false @Volatile var lastRun: Long = 0 @Volatile var selectedProfile = "" @Volatile var lastNbDays: String = "" @@ -76,9 +77,12 @@ class AutotunePlugin @Inject constructor( private lateinit var profile: Profile val autotuneStartHour: Int = 4 - @Synchronized override fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String) { lastRunSuccess = false + if (calculationRunning) { + aapsLogger.debug(LTag.AUTOMATION, "Autotune run detected, Autotune Run Cancelled") + return + } calculationRunning = true tunedProfile = null updateButtonVisibility = View.GONE diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionRunAutotune.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionRunAutotune.kt index c2687fffed..b1da120478 100644 --- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionRunAutotune.kt +++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionRunAutotune.kt @@ -42,13 +42,19 @@ class ActionRunAutotune(injector: HasAndroidInjector) : Action(injector) { val profileName = if (inputProfileName.value == rh.gs(R.string.active)) "" else inputProfileName.value var message = if (autoSwitch) R.string.autotune_run_with_autoswitch else R.string.autotune_run_without_autoswitch Thread { - autotunePlugin.atLog("[Automation] Run Autotune $profileName, ${daysBack.value} days, Autoswitch $autoSwitch") - autotunePlugin.aapsAutotune(daysBack.value, autoSwitch, profileName) - if (!autotunePlugin.lastRunSuccess) { - message = R.string.autotune_run_with_error - aapsLogger.error(LTag.AUTOMATION, "Error during Autotune Run") + if (!autotunePlugin.calculationRunning) { + autotunePlugin.atLog("[Automation] Run Autotune $profileName, ${daysBack.value} days, Autoswitch $autoSwitch") + autotunePlugin.aapsAutotune(daysBack.value, autoSwitch, profileName) + if (!autotunePlugin.lastRunSuccess) { + message = R.string.autotune_run_with_error + aapsLogger.error(LTag.AUTOMATION, "Error during Autotune Run") + } + callback.result(PumpEnactResult(injector).success(autotunePlugin.lastRunSuccess).comment(message)).run() + } else { + message = R.string.autotune_run_cancelled + aapsLogger.debug(LTag.AUTOMATION, "Autotune run detected, Autotune Run Cancelled") + callback.result(PumpEnactResult(injector).success(false).comment(message)).run() } - callback.result(PumpEnactResult(injector).success(autotunePlugin.lastRunSuccess).comment(message)).run() }.start() return } diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt index 83ebcd2530..93c20f71d5 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/Autotune.kt @@ -6,4 +6,5 @@ interface Autotune { fun atLog(message: String) var lastRunSuccess: Boolean + var calculationRunning: Boolean } \ No newline at end of file diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 30974f7512..3f5832b0cd 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -600,6 +600,7 @@ Autotune runned without profile switch Autotune runned and profile automatically switched Error during last Autotune run + Another run of Autotune is detected, run cancelled %1$d day From c37bbeedc1278908cc81d7d00d309f90cc331f6b Mon Sep 17 00:00:00 2001 From: Philoul Date: Sun, 10 Jul 2022 00:56:08 +0200 Subject: [PATCH 46/48] @Synchronized functions with Array --- .../plugins/general/autotune/AutotuneIob.kt | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 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 925d290ee4..a634ee876c 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 @@ -59,14 +59,28 @@ open class AutotuneIob @Inject constructor( initializeTreatmentData(from - range(), to) initializeTempBasalData(from - range(), to, tunedProfile) initializeExtendedBolusData(from - range(), to, tunedProfile) - tempBasals = ArrayList(tempBasals.toList().sortedWith { 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) - nsTreatments = ArrayList(nsTreatments.toList().sortedWith { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() }) - boluses = ArrayList(boluses.toList().sortedWith { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() }) + sortTempBasal() + addNeutralTempBasal(from - range(), to, tunedProfile) // Without Neutral TBR, Autotune Web will ignore iob for periods without TBR running + sortNsTreatments() + sortBoluses() aapsLogger.debug(LTag.AUTOTUNE, "Nb Treatments: " + nsTreatments.size + " Nb meals: " + meals.size) } + @Synchronized + private fun sortTempBasal() { + tempBasals = ArrayList(tempBasals.toList().sortedWith { o1: TemporaryBasal, o2: TemporaryBasal -> (o2.timestamp - o1.timestamp).toInt() }) + } + + @Synchronized + private fun sortNsTreatments() { + nsTreatments = ArrayList(nsTreatments.toList().sortedWith { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() }) + } + + @Synchronized + private fun sortBoluses() { + boluses = ArrayList(boluses.toList().sortedWith { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() }) + } + private fun initializeBgreadings(from: Long, to: Long) { glucose = repository.compatGetBgReadingsDataFromTime(from, to, false).blockingGet() } @@ -146,6 +160,7 @@ open class AutotuneIob @Inject constructor( // addNeutralTempBasal will add a fake neutral TBR (100%) to have correct basal rate in exported file for periods without TBR running // to be able to compare results between oref0 algo and aaps + @Synchronized private fun addNeutralTempBasal(from: Long, to: Long, tunedProfile: ATProfile) { var previousStart = to for (i in tempBasals.indices) { @@ -180,6 +195,7 @@ open class AutotuneIob @Inject constructor( // toSplittedTimestampTB will split all TBR across hours in different TBR with correct absolute value to be sure to have correct basal rate // even if profile rate is not the same + @Synchronized private fun toSplittedTimestampTB(tb: TemporaryBasal, tunedProfile: ATProfile) { var splittedTimestamp = tb.timestamp val cutInMilliSec = T.mins(60).msecs() //30 min to compare with oref0, 60 min to improve accuracy @@ -295,7 +311,7 @@ open class AutotuneIob @Inject constructor( return result } - + @Synchronized fun glucoseToJSON(): String { val glucoseJson = JSONArray() for (bgreading in glucose) @@ -303,6 +319,7 @@ open class AutotuneIob @Inject constructor( return glucoseJson.toString(2) } + @Synchronized fun bolusesToJSON(): String { val bolusesJson = JSONArray() for (bolus in boluses) @@ -310,6 +327,7 @@ open class AutotuneIob @Inject constructor( return bolusesJson.toString(2) } + @Synchronized fun nsHistoryToJSON(): String { val json = JSONArray() for (t in nsTreatments) { From 09bcad5b2659fd06990a7bed80346104eb98a02b Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sun, 10 Jul 2022 10:25:03 +0200 Subject: [PATCH 47/48] New Crowdin updates (#1870) * New translations strings.xml (Italian) * Update source file strings.xml * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (Russian) * New translations objectives.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Turkish) * Update source file strings.xml * New translations exam.xml (Portuguese, Brazilian) * New translations exam.xml (Chinese Simplified) * New translations exam.xml (Turkish) * New translations exam.xml (Swedish) * New translations exam.xml (Slovak) * New translations exam.xml (Portuguese) * New translations exam.xml (Polish) * New translations exam.xml (Norwegian) * New translations exam.xml (Lithuanian) * New translations exam.xml (Korean) * New translations exam.xml (German) * New translations strings.xml (Spanish) * New translations exam.xml (Czech) * New translations exam.xml (Catalan) * New translations exam.xml (Spanish) * New translations exam.xml (French) * New translations exam.xml (Romanian) * New translations exam.xml (Russian) * New translations exam.xml (Dutch) * New translations exam.xml (Italian) * New translations exam.xml (Hebrew) * New translations exam.xml (Danish) * Update source file exam.xml * New translations strings.xml (Norwegian) * New translations exam.xml (Spanish) * New translations exam.xml (Norwegian) * New translations exam.xml (Turkish) * New translations strings.xml (Czech) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations exam.xml (Czech) * New translations exam.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations exam.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations exam.xml (Spanish) * New translations exam.xml (Spanish) * New translations exam.xml (Turkish) * New translations exam.xml (Norwegian) * New translations exam.xml (Czech) * New translations exam.xml (Spanish) * Update source file strings.xml * Update source file exam.xml * New translations exam.xml (Czech) * New translations exam.xml (Hebrew) * New translations strings.xml (Hebrew) * New translations strings.xml (Hebrew) --- app/src/main/res/values-ca-rES/exam.xml | 1 - app/src/main/res/values-cs-rCZ/exam.xml | 14 +++- app/src/main/res/values-cs-rCZ/strings.xml | 1 + app/src/main/res/values-da-rDK/exam.xml | 1 - app/src/main/res/values-de-rDE/exam.xml | 1 - app/src/main/res/values-es-rES/exam.xml | 8 ++- app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-fr-rFR/exam.xml | 1 - 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-iw-rIL/exam.xml | 14 +++- app/src/main/res/values-iw-rIL/strings.xml | 1 + app/src/main/res/values-ko-rKR/exam.xml | 1 - app/src/main/res/values-lt-rLT/exam.xml | 1 - app/src/main/res/values-nl-rNL/exam.xml | 1 - app/src/main/res/values-no-rNO/exam.xml | 8 ++- app/src/main/res/values-no-rNO/strings.xml | 1 + app/src/main/res/values-pl-rPL/exam.xml | 1 - app/src/main/res/values-pt-rBR/exam.xml | 1 - app/src/main/res/values-pt-rPT/exam.xml | 1 - app/src/main/res/values-ro-rRO/exam.xml | 1 - app/src/main/res/values-ru-rRU/exam.xml | 1 - app/src/main/res/values-ru-rRU/objectives.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 5 ++ app/src/main/res/values-sk-rSK/exam.xml | 1 - app/src/main/res/values-sv-rSE/exam.xml | 1 - app/src/main/res/values-tr-rTR/exam.xml | 22 +++--- app/src/main/res/values-tr-rTR/strings.xml | 68 ++++++++++--------- app/src/main/res/values-zh-rCN/exam.xml | 1 - .../src/main/res/values-tr-rTR/strings.xml | 4 +- core/src/main/res/values-tr-rTR/strings.xml | 2 +- .../src/main/res/values-iw-rIL/strings.xml | 1 + 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-ru-rRU/strings.xml | 2 + wear/src/main/res/values-tr-rTR/strings.xml | 2 +- 36 files changed, 113 insertions(+), 66 deletions(-) diff --git a/app/src/main/res/values-ca-rES/exam.xml b/app/src/main/res/values-ca-rES/exam.xml index e954253896..1d7fce44c7 100644 --- a/app/src/main/res/values-ca-rES/exam.xml +++ b/app/src/main/res/values-ca-rES/exam.xml @@ -134,7 +134,6 @@ Lliurar un bolus amb part de la insulina que falta utilitzant una jeringa/ploma o el menú d\'encebat. No fer res i permetre que AndroidAPS corregeixi els possibles valors alts de glucèmia que es produeixin. Insulina \"a bord\" (IOB) - Marqueu totes les respostes correctes. El valor d\'IOB es veu afectat per les basals temporals lliurades. Una basal temporal alta no serà lliurada si la glucèmia està per sota de l\'objectiu. Un valor d\'IOB positiu durant un període de temps important suggereix resistència a la insulina o àpats no anunciats. diff --git a/app/src/main/res/values-cs-rCZ/exam.xml b/app/src/main/res/values-cs-rCZ/exam.xml index 674f46bec9..6b78dc52c1 100644 --- a/app/src/main/res/values-cs-rCZ/exam.xml +++ b/app/src/main/res/values-cs-rCZ/exam.xml @@ -136,8 +136,20 @@ Porovnat hodnoty v AndroidAPS s hodnotami v historii pumpy (pokud to pumpa podporuje). Pošlete bolus na vypočtený „chybějící“ inzulín buď injekční stříkačkou nebo perem nebo pomocí plnění na pumpě. Neudělejte nic a dovolte AndroidAPS opravit jakoukoliv výslednou vysokou hladinu glukózy v krvi. + Zbývající sacharidy (COB) + Jak změna hodnoty citlivosti ovlivňuje výpočet COB? + Zvýšení hodnoty citlivosti prodlouží dobu pohlcování sacharidů + Zvýšení hodnoty citlivosti zkrátí dobu pohlcování sacharidů + Zvýšení citlivosti neovlivní vypočtenou absorpci sacharidů + Jak změna inzulíno-sacharidového poměru ovlivňuje výpočet COB? + Zvýšení hodnoty inzulíno-sacharidového poměru prodlouží dobu pohlcování sacharidů + Zvýšení hodnoty inzulíno-sacharidového poměru zkrátí dobu pohlcování sacharidů + Zvýšení inzulíno-sacharidového poměru neovlivní vypočtenou absorpci sacharidů + Jak procentuální změna profilu ovlivňuje výpočet COB? + Nastavením profilu na 150% dojde k prodloužení doby pohlcování sacharidů + Nastavením profilu na 150% dojde ke zkrácení doby pohlcování sacharidů + Nastavení profilu na 150% neovlivní vypočtenou absorpci sacharidů Aktivní inzulín (IOB) - Zatrhněte všechny správné odpovědi. Hodnota IOB je ovlivněna vydanými dočasnými bazály. Vysoký dočasný bazál nebude spuštěn, pokud je Vaše glykémie nižší než cíl. Negativní IOB po značnou dobu bez cvičení naznačuje, že váš profil je příliš \"silný\" a ve vašem profilu je potřeba méně inzulínu. diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index c577d77db7..3805308216 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -1043,4 +1043,5 @@ Přijímat hodnoty glykémie ze senzoru GlucoRx Aidex. Zablokováno možností nabíjení Zablokováno možností připojení + (Žádné hodinky nejsou připojeny) diff --git a/app/src/main/res/values-da-rDK/exam.xml b/app/src/main/res/values-da-rDK/exam.xml index 31dc1e91d2..2a4276dfe3 100644 --- a/app/src/main/res/values-da-rDK/exam.xml +++ b/app/src/main/res/values-da-rDK/exam.xml @@ -136,7 +136,6 @@ Bolus en del af din beregnede \"glemte\" insulin med enten sprøjter / pen eller brug af en kanylefyldning. Gør ingenting og tillad AndroidAPS at rette op på højt blodsukker. Insulin om bord (IOB) - Tjek alle de korrekte svar. IOB-værdi påvirkes af midlertidige basaler. Høj midlertidlig basal vil ikke blive givet, når dit blodsukker er under målet. Negative IOB i en længere periode uden motion tyder på, at din profil er for stærk, og at der er behov for mindre insulin i dine indstillinger. diff --git a/app/src/main/res/values-de-rDE/exam.xml b/app/src/main/res/values-de-rDE/exam.xml index 2037d190da..6b25674a29 100644 --- a/app/src/main/res/values-de-rDE/exam.xml +++ b/app/src/main/res/values-de-rDE/exam.xml @@ -134,7 +134,6 @@ Gib einen Teil-Bolus des \'nicht erhaltenen\' Insulins mit Spritze / Pen oder durch Befüllen der Kanüle. Unternimm nichts und lass AndroidAPS die entstehenden hohen Glukosewerte korrigieren. Aktives Insulin (IOB) - Kreuze alle richtigen Antworten an. IOB wird von den abgegebenen temporären Basalraten beeinflusst. Eine hohe temporäre Basalrate wird nicht abgegeben, wenn der BZ unterhalb des Zielwerts liegt. Ein negativer IOB über einen längeren Zeitraum bei fehlender Bewegung deutet darauf hin, dass Dein Profil zu stark ist und weniger Insulin in Deinen Einstellungen benötigt wird. diff --git a/app/src/main/res/values-es-rES/exam.xml b/app/src/main/res/values-es-rES/exam.xml index d4ca2b6d4a..b7fb70e16d 100644 --- a/app/src/main/res/values-es-rES/exam.xml +++ b/app/src/main/res/values-es-rES/exam.xml @@ -136,8 +136,14 @@ Comparar valores en AndroidAPS con el historial de la bomba (si la bomba lo soporta). Bolo una proporción de la insulina calculada “perdida” por jeringa/pluma o usando menú de llenado. No haga nada y permite que AndroidAPS corrija cualquier nivel alto de glucosa en la sangre resultante. + Carbohidratos activos (COB) + ¿Cómo afecta el cambio del valor ISF al cálculo de COB? + Incrementar el ISF no afectará la absorción calculada de carbohidratos + ¿Cómo afecta cambiar los valores de IC a los cálculos de COB? + Incrementar el IC no afectará la absorción calculada de carbohidratos + ¿Cómo afecta el cambio de porcentaje del perfil al cálculo de los COB? + Establecer el perfil a 150% no afectará la absorción calculada de carbohidratos Insulina a bordo (IOB) - Marca todas las respuestas correctas. El valor del IOB se ve afectado por las bases temporales ejecutadas. No se dará alta tasa basal temporal cuando su nivel de azúcar en sangre esté por debajo del objetivo. El IOB negativo durante un período sustancial en ausencia de ejercicio sugiere que tu perfil es demasiado fuerte y que se necesita menos insulina en tus ajustes. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index d80010a14a..4ea56784c9 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1043,4 +1043,5 @@ Recibir los valores de glucosa de GlucoRx Aidex CGMS Bloqueado por opciones de carga Bloqueado por opciones de conectividad + (Ningún reloj conectado) diff --git a/app/src/main/res/values-fr-rFR/exam.xml b/app/src/main/res/values-fr-rFR/exam.xml index bab13d862d..5eb4d70a4c 100644 --- a/app/src/main/res/values-fr-rFR/exam.xml +++ b/app/src/main/res/values-fr-rFR/exam.xml @@ -137,7 +137,6 @@ Faites un bolus du montant de votre insuline calculée « manquante » soit par seringue / stylo ou en utilisant un amorçage. Ne faites rien et laissez AndroidAPS corriger tout taux élevé de glycémie qui en résulte. Insuline Active (IA) - Sélectionnez toutes les bonnes réponses. La valeur de l\'IA est impactée par les débits de basal temporaires émis. Une basale temp haute ne sera pas donnée quand votre glycémie est en dessous de la cible. Une IA négative pendant une période significative en l\'absence d\'exercice indique que votre profil est trop fort et qu\'il faut moins d\'insuline dans vos paramètres. diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index a278365845..f6f45e5c90 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -434,6 +434,8 @@ 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 @@ -968,6 +970,7 @@ 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 temp:\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 c91b576f44..1841752c18 100644 --- a/app/src/main/res/values-it-rIT/exam.xml +++ b/app/src/main/res/values-it-rIT/exam.xml @@ -137,7 +137,6 @@ Erogare un bolo con parte della tua insulina calcolata \"mancante\" usando una siringa/penna o la funzione caricamento. Non fare nulla e permettere ad AndroidAPS di correggere eventuali glicemie alte. Insulina attiva (IOB) - Seleziona tutte le risposte corrette. Il valore IOB è influenzato dalle basali temporanee emesse. Non verrà emessa una basale temporanea alta quando la tua glicemia è al di sotto del target. IOB negativo per un periodo considerevole in assenza di esercizio fisico suggerisce che il tuo profilo è troppo incisivo e che è necessaria meno insulina nelle tue impostazioni. diff --git a/app/src/main/res/values-iw-rIL/exam.xml b/app/src/main/res/values-iw-rIL/exam.xml index e4f2d5dd9e..3e03a6e498 100644 --- a/app/src/main/res/values-iw-rIL/exam.xml +++ b/app/src/main/res/values-iw-rIL/exam.xml @@ -136,8 +136,20 @@ השוו את הרשומות שב-AndroidAPS עם היסטוריית המשאבה (אם המשאבה תומכת בכך). מזריקים בולוס על חלק מהאינסולין המחושב \"שחסר\" עם מזרק\\עט או באמצעות תיחול (Prime). לא לעשות דבר ולאפשר ל-AndroidAPS לתקן כל רמת סוכר גבוהה. + פחמ\' פעילות + איך שינויים ביחס התיקון משפיעים על חישוב הפחמימות הפעילות? + הגדלת ערך יחס התיקון תגרום להארכת משך ספיגת הפחמימות + הגדלת ערך יחס התיקון תגרום לקיצור משך ספיגת הפחמימות + הגדלת ערך יחס התיקון לא תשפיע על חישוב ספיגת הפחמימות + איך שינויים ביחס הפחמימות משפיעים על חישוב הפחמימות הפעילות? + הגדלת ערך יחס הפחמימות תגרום להארכת משך ספיגת הפחמימות + הגדלת ערך יחס הפחמימות תגרום לקיצור משך ספיגת הפחמימות + הגדלת ערך יחס הפחמימות לא תשפיע על חישוב ספיגת הפחמימות + איך שינויים באחוזי הפרופיל משפיעים על חישוב הפחמימות הפעילות? + הגדרת 150% פרופיל תגרום להארכת משך ספיגת הפחמימות + הגדרת 150% פרופיל תגרום לקיצור משך ספיגת הפחמימות + הגדרת 150% פרופיל לא תשפיע על חישוב משך ספיגת הפחמימות אינסולין פעיל בגוף (IOB) - סמנו את כל התשובות הנכונות. ערך האינסולין הפעיל (IOB) מושפע ממינונים בזאליים זמניים שסופקו. מינון בזאלי גבוה לא יינתן כאשר רמת הסוכר נמוכה מערך המטרה. אינסולין פעיל שלילי לאורך זמן בו לא נעשית פעילות מצביע על כך שהפרופיל חזק מדי, נדרש פחות אינסולין ויש להגדיר זאת בפרופיל. diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 0be19f2f23..1fe66ba7f5 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -1039,4 +1039,5 @@ קבלת נתוני סוכר מחיישני GlucoRx Aidex. חסום ע\"י הגדרות טעינה חסום ע\"י הגדרות חיבור + (השעון לא מחובר) diff --git a/app/src/main/res/values-ko-rKR/exam.xml b/app/src/main/res/values-ko-rKR/exam.xml index 8aaf183241..89ae40d8dc 100644 --- a/app/src/main/res/values-ko-rKR/exam.xml +++ b/app/src/main/res/values-ko-rKR/exam.xml @@ -134,7 +134,6 @@ \"주입되지 않은\" 인슐린양을 계산하여 시린지/펜 또는 prime 기능을 사용하여 인슐린을 주입합니다. 특별한 조치를 취하지 않고, AndroidAPS가 결과적으로 높은 혈당 정도를 조정할 수 있도록 합니다. 활성 인슐린 (IOB) - 올바른 답변을 모두 체크하세요. IOB 값은 실행된 임시 basal의 영향을 받습니다. 혈당이 목표보다 낮을 경우 높은 임시 basal은 실행되지 않습니다. 운동 없이도 음수의 IOB (마이너스 IOB) 구간이 많을 경우, 프로파일이 너무 강한 것이며 인슐린 양을 적게 설정해야 합니다. diff --git a/app/src/main/res/values-lt-rLT/exam.xml b/app/src/main/res/values-lt-rLT/exam.xml index 9e5bb2cb09..dc3d8612f4 100644 --- a/app/src/main/res/values-lt-rLT/exam.xml +++ b/app/src/main/res/values-lt-rLT/exam.xml @@ -134,7 +134,6 @@ Susileisti trūkstamą insulino kiekį švirkštu ar naudojantis infuzinės sistemos užpildymo funkcija. Nieko nedaryti ir leisti AndroidAPS koreguoti padidėjusį gliukozės kiekį kraujyje. Aktyvus insulinas organizme (AIO) - Pasirinkite visus teisingus atsakymus. AIO reikšmei įtakos turi nustatyta laikina valandinė bazė. Padidinta laikina bazė nebus nustatyta, jei kraujo glikemija yra žemiau nustatyto tikslo. Jei ilgą laiką stebima neigiama AIO reikšmė ir nėra fizinio aktyvumo, tai rodo, kad jūsų nustatymai yra per „agresyvūs“ ir kad jums reikia mažiau insulino nei nustatyta. diff --git a/app/src/main/res/values-nl-rNL/exam.xml b/app/src/main/res/values-nl-rNL/exam.xml index 5a64cd78c6..e871ace199 100644 --- a/app/src/main/res/values-nl-rNL/exam.xml +++ b/app/src/main/res/values-nl-rNL/exam.xml @@ -137,7 +137,6 @@ Bolus een deel van je berekende \'gemiste\' insuline door een injectiespuit/pen of door de uitvulfunctie te gebruiken. Doe niets en laat AndroidAPS de resulterende hoge bloedglucosespiegel corrigeren. Insuline aan boord (IOB) - Selecteer alle juiste antwoorden. De IOB-waarde wordt beïnvloed door eerdere tijdelijke basaalstanden. Een hoge tijdelijke basaal zal niet worden ingesteld wanneer je bloedsuiker onder het streefdoel ligt. Negatieve IOB voor een aanzienlijke periode vrij van inspanning, suggereert dat je profiel te hoog is ingesteld, dus dat er minder insuline nodig is. diff --git a/app/src/main/res/values-no-rNO/exam.xml b/app/src/main/res/values-no-rNO/exam.xml index 087dc7d9be..2565916e50 100644 --- a/app/src/main/res/values-no-rNO/exam.xml +++ b/app/src/main/res/values-no-rNO/exam.xml @@ -136,8 +136,14 @@ Sammenlign verdiene i AndroidAPS og pumpehistorikken (hvis pumpen støtter dette). Gi en bolus med en del av det insulinet du mangler enten med penn eller ved å bruke prime funksjonen. Ikke gjør noe og la AndroidAPS korrigere eventuelle høye blodsukkerverdier. + Karbohydrater ombord (COB) + Hvordan vil endring av ISF-verdi påvirke COB-beregning? + Økning av ISF påvirker ikke beregningen av absorbering av karbohydrater + Hvordan vil endring av IC-verdi påvirke COB-beregning? + Økning av IC påvirker ikke beregningen av absorbering av karbohydrater + Hvordan vil endring av profil-prosent påvirke COB-beregning? + Ved å sette profilen til 150% påvirkes ikke beregningen av absorbering av karbohydrater Aktivt insulin (IOB) - Marker alle riktige svar. IOB verdi påvirkes av midlertidige temp basaler. Høy temp basal vil ikke bli gitt når ditt blodsukker er under målverdi. Negativ IOB i en lengre periode selv om du ikke trener tyder på at profilen din gir for mye insulin og kanskje bør reduseres i innstillingene. diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 5967430250..73b4a8a093 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -1043,4 +1043,5 @@ Motta BS verdier fra GlucoRx Aidex CGM. Blokkert på grunn av ladealternativer Blokkert på grunn av tilkoblingsalternativer + (Ingen klokke tilkoblet) diff --git a/app/src/main/res/values-pl-rPL/exam.xml b/app/src/main/res/values-pl-rPL/exam.xml index dfa9014d5e..b9ce8332d5 100644 --- a/app/src/main/res/values-pl-rPL/exam.xml +++ b/app/src/main/res/values-pl-rPL/exam.xml @@ -134,7 +134,6 @@ Podaj obliczoną dawkę „pominiętej” insuliny za pomocą strzykawki / wstrzykiwacza lub za pomocą pompy funkcji wypełnienia. Nie rób nic i pozwól AndroidAPS na skorygowanie każdego uzyskanego wysokiego stężenia glukozy we krwi. Aktywna insulina (IOB) - Sprawdź/Zaznacz wszystkie prawidłowe odpowiedzi. Na wartość IOB mają wpływ wykonane tymczasowe dawki bazowe. Wysoka tymczasowa dawka bazowa nie zostanie podana, gdy twóje poziom cukru we krwi jest poniżej poziomu docelowego. Negatywne IOB utrzymujące się przez znaczny okres czasu bez wysiłku fizycznego sugeruje, że Twój profil jest zbyt silny i mniej insuliny jest wymagane w Twoich ustawieniach. diff --git a/app/src/main/res/values-pt-rBR/exam.xml b/app/src/main/res/values-pt-rBR/exam.xml index 0a6e10f3a3..c2bf8ae20a 100644 --- a/app/src/main/res/values-pt-rBR/exam.xml +++ b/app/src/main/res/values-pt-rBR/exam.xml @@ -136,7 +136,6 @@ Dê uma porção do bolus calculado não administrado por meio de seringa/caneta ou usando o menu ações -> purgar/preencher. Não faça nada e permita que o AndroidAPS corrija qualquer nível de glicose elevado resultante. Insulina ativa (IA) - Marque todas as respostas corretas. O valor de IA é afetado por basais temporárias efetuadas. Um basal alto temporário não será efetuado quando sua glicose estiver abaixo do alvo. Insulina Ativa (IA) negativa por um período substancial na ausência de exercícios, sugere que seu perfil é muito agressivo e menos insulina deve ser considerada nas suas configurações. diff --git a/app/src/main/res/values-pt-rPT/exam.xml b/app/src/main/res/values-pt-rPT/exam.xml index 3b66353316..5d3cd2fca4 100644 --- a/app/src/main/res/values-pt-rPT/exam.xml +++ b/app/src/main/res/values-pt-rPT/exam.xml @@ -134,7 +134,6 @@ Bólus uma proporção de insulina calculada \'não administrada\' ou com seringa/caneta ou purgando. Faça nada e permita que o AndroidAPS corrija qualquer nível de glicose elevado que daí resulte. Insulina ativa (IA ) - Marque todas as respostas corretas. O valor do IA é afectado por basais temporárias emitidas. Basal temporária alta não será dada quando a sua glicose estiver abaixo do alvo. IA negativa por um período substancial na ausência de exercício, sugere que o seu perfil é muito alto e é necessária menos insulina nas suas configurações. diff --git a/app/src/main/res/values-ro-rRO/exam.xml b/app/src/main/res/values-ro-rRO/exam.xml index e71e92bee4..4b5f2acaf1 100644 --- a/app/src/main/res/values-ro-rRO/exam.xml +++ b/app/src/main/res/values-ro-rRO/exam.xml @@ -134,7 +134,6 @@ Bolusati o cantitate parțiala de insulina din insulina calculata ca fiind lipsa utilizând seringa/penul sau amorsarea. Nu faceți nimic și permiteți AndroidAPS să corecteze valorile mari ale glicemiei. Insulină activă (IOB) - Bifați toate răspunsurile corecte. Valoarea IOB este afectată de bazalele temporare emise. Rata bazala ridicata temporara nu va fi livrata atunci când glicemia este sub nivelul țintă. Un IOB negativ pentru o perioadă substanțială în absența exercițiilor fizice sugerează că profilul tău este prea puternic și este nevoie de mai puţină insulină în setările inițiale. diff --git a/app/src/main/res/values-ru-rRU/exam.xml b/app/src/main/res/values-ru-rRU/exam.xml index d5edb09ce2..bef3de9917 100644 --- a/app/src/main/res/values-ru-rRU/exam.xml +++ b/app/src/main/res/values-ru-rRU/exam.xml @@ -137,7 +137,6 @@ Рассчитать и ввести «пропущенный» вами инсулин шприцем/ручкой или через кнопку заполнения канюли. Ничего не делать и позволить AndroidAPS исправить возможный высокий уровень ГК. Активный инсулин (IOB) - Отметьте все правильные ответы. На величину IOB влияют устанавливаемые ВБС. Высокая ВБС не будет применяться, если уровень сахара в крови ниже целевого. Отрицательный IOB в течение длительного периода при отсутствии физнагрузки указывает на то, что ваш профиль завышен и требуется снизить кол-во инсулина в настройках. diff --git a/app/src/main/res/values-ru-rRU/objectives.xml b/app/src/main/res/values-ru-rRU/objectives.xml index 65f4dd716f..499fa398bf 100644 --- a/app/src/main/res/values-ru-rRU/objectives.xml +++ b/app/src/main/res/values-ru-rRU/objectives.xml @@ -6,7 +6,7 @@ Цель %1$d не начата Цель %1$d не завершена Настройка визуализации и мониторинга, анализ базала и коэффициентов - Убедитесь, что BG доступен в Nightscut, и данные инсулина помпы загружаются + Убедитесь, что значения ГК и данные по инсулину помпы передаются в Nightscout Старт незамкнутого цикла Начинайте работу в режиме незамкнутого цикла и ручной подстройки величины временного базала. Установите и применяйте временные цели и временные цели по умолчанию (напр. углеводы при нагрузке или купировании гипо) Глубже понимаем незакольцованную систему Open Loop, включая ее рекомендации по временным базалам diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 9baf342a88..81ad3a36a1 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -6,6 +6,7 @@ Безопасность терапии Макс разрешенный болюс [U] ед. Макс разрешенные углеводы (г) + Уровень ГК, ниже которого происходит остановка подачи инсулина Настройки %1$s Настройки Синхронизировать назначения с NS @@ -432,6 +433,8 @@ Активировать локальную передачу Супер микро болюс OpenAPS Динамический ISF + Коэффициент регулировки динамического диапазона чувствительности ISF % + Коэффициент корректировки динамического диапазона чувствительности ISF. Установите более 100% для агрессивных доз коррекции и менее 100% для менее агрессивной коррекции. Включить непредвиденный прием пищи UAM Включить супер микро болюс SMB Для ускорения действия используйте супер микро болюсы SMB вместо временного базала @@ -590,6 +593,7 @@ Эта величина называется Max IOB в OpenAPS context\nOpenAPS не будет добавлять инсулин если текущий активный инсулин ее превысит Максимальное время усваимости пищи [h] Время, за которое любая еда считается усвоившейся. Оставшиеся углеводы не будут учтены. + Значение уровня ГК, на котором происходит приостановка подачи инсулина. Значения по умолчанию являются стандартными для целевого диапазона. Пользователь может установить значения между 60 мг/дл (3.3 ммоль/л) и 100 мг/дл (5.5 ммоль/л) Параметры, заданные ниже 65/3.6 приводят к использованию значений по умолчанию Показать поле примечаний в диалогах назначений Далее Назад @@ -965,6 +969,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$dg Мастер:\nИнсулин: %1$.2fЕд\nУгл: %2$dg Показать запись на устройстве: diff --git a/app/src/main/res/values-sk-rSK/exam.xml b/app/src/main/res/values-sk-rSK/exam.xml index 54aaa5002d..00592c1bdb 100644 --- a/app/src/main/res/values-sk-rSK/exam.xml +++ b/app/src/main/res/values-sk-rSK/exam.xml @@ -137,7 +137,6 @@ Pošlite bolus na vypočítaný „chýbajúci“ inzulín buď injekčnou striekačkou, alebo perom, alebo pomocou plnenia na pumpe. Nerobte nič a dovoľte AndroidAPS upraviť akúkoľvek výslednú vysokú hladinu glukózy v krvi. Aktívny inzulín (IOB) - Zaškrtnite všetky správne odpovede. Hodnota IOB je ovplyvnená vydanými dočasnými bazálmi. Vysoký dočasný bazál nebude spustený, pokiaľ je Vaša glykémia nižšia, ako cieľ. Negatívne IOB po značnú dobu bez cvičenia naznačuje, že váš profil je príliš \"silný\" a vo vašom profile je potrebného menej inzulínu. diff --git a/app/src/main/res/values-sv-rSE/exam.xml b/app/src/main/res/values-sv-rSE/exam.xml index 9657e08fdd..cf588d6136 100644 --- a/app/src/main/res/values-sv-rSE/exam.xml +++ b/app/src/main/res/values-sv-rSE/exam.xml @@ -134,7 +134,6 @@ Ge en bolus med en del av det insulin du saknar antingen med penna eller genom att använda förfyllningsfunktionen. Gör ingenting och låt AndroidAPS korrigera eventuella höga blodglukosnivåer. Aktivt Insulin (IOB) - Markera ett eller flera alternativ. IOB-värdet påverkas av temp basaler. Hög temp basal kommer inte att ges när ditt BG-värde är under målet. Negativ IOB under en längre period även om du inte motionerat, tyder på att din profil ger för mycket insulin. diff --git a/app/src/main/res/values-tr-rTR/exam.xml b/app/src/main/res/values-tr-rTR/exam.xml index 979bfb5b2e..99937663ce 100644 --- a/app/src/main/res/values-tr-rTR/exam.xml +++ b/app/src/main/res/values-tr-rTR/exam.xml @@ -136,16 +136,22 @@ AndroidAPS ve pompa geçmişindeki değerleri karşılaştırın (pompa bunu destekliyorsa). Şırınga/kalem veya başlatma kullanarak hesaplanan \"eksik\" insülininizi bolus olarak karşılayın. Hiçbir şey yapmayın ve AndroidAPS\'in ortaya çıkabilecek yüksek kan şekeri seviyesini düzeltmesine müsade edin. - Aktif İnsülin (IOB) - Tüm doğru cevapları kontrol edin. - IOB değeri, verilen geçici bazallardan etkilenir. + Aktif Karbonhidrat (AKRB) + İDF değerinin değiştirilmesi AKRB (Aktif karbonhidrat) hesaplamasını nasıl etkiler? + Artan İDF, hesaplanan karbonhidrat emilimini etkilemez + Değişen Kİ değeri AKRB hesaplamasını nasıl etkiler? + Artan Kİ oranı, hesaplanan karbonhidrat emilimini etkilemez + Değişen profil yüzdesi AKRB hesaplamasını nasıl etkiler? + Profili %150\'ye ayarlamak hesaplanan karbonhidrat emilimini etkilemez + Aktif İnsülin (AİNS) + AİNS değeri, verilen geçici bazallardan etkilenir. Kan şekeriniz hedefin altına düştüğünde yüksek geçici bazal verilmeyecektir. - Egzersiz yapmadığınız halde uzun bir dönem için negatif IOB, profilinizin çok güçlü olduğunu ve ayarlarınızda daha az insüline ihtiyaç duyulduğunu gösterir. + Egzersiz yapmadığınız halde uzun bir dönem için negatif AİNS, profilinizin çok güçlü olduğunu ve ayarlarınızda daha az insüline ihtiyaç duyulduğunu gösterir. Önemli bir süre için pozitif IOB, insülin direncini veya habersiz öğünleri gösterir. Karbonhidrat girişi ve boluslar Tüketilen karbonhidratları tahmin etmek ve kaydetmek için sadece gram kullanılmalıdır. Tüketilen karbonhidratlar uygun bir değişim sistemi kullanılarak kaydedilebilir (örn. DAFNE \"CHO\" değişimleri veya Avrupa \"Ekmek Birimleri\"). - AndroidAPS, karbonhidrat \"çözünmesini\" tahmin etmek ve COB\'ı hesaplamak için dinamik bir model kullanır. + AndroidAPS, karbonhidrat \"çözünmesini\" tahmin etmek ve AKRB\'ı hesaplamak için dinamik bir model kullanır. Kan şekeri seviyeleri kabul edilebilir değerlerin dışındaysa (çok düşük veya çok yüksek), karbonhidrat veya insülin düzeltmeleri için öneriler sağlamak için bolus hesaplayıcı kullanılabilir. https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u yayma-karbonhidratlar @@ -158,11 +164,11 @@ Uzaktan İzleme AndroidAPS\'i (örneğin çocuğunuz için) uzaktan nasıl izleyebilirsiniz? NS Client uygulaması, Nightscout uygulaması ve Nightscout web sayfasının tümü, AndroidAPS\'i uzaktan takip etmenize olanak tanır. - Diğer uygulamalar (ör. Dexcom takip, xDrip) bazı parametreleri (ör. kan şekeri/sensör değerleri) uzaktan takip etmenize izin verir, ancak farklı algoritma kullanımı, hatalı IOB veya COB değerlerine sebep olabilir. + Diğer uygulamalar (ör. Dexcom takip, xDrip) bazı parametreleri (ör. kan şekeri/sensör değerleri) uzaktan takip etmenize izin verir, ancak farklı algoritma kullanımı, hatalı AİNS veya AKRB değerlerine sebep olabilir. AndroidAPS\'yi uzaktan takip etmek için her iki cihazın da internet erişimine sahip olması gerekir (ör. Wi-Fi veya mobil/hücresel ağ verileri aracılığıyla). Uzak takipçi olarak kullanılan NS İstemcisi, AndroidAPS\'i hem izleyecek hem de tam kontrol sağlayacaktır. https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html - İnsülin Duyarlılık Faktörü (ISF) + İnsülin Duyarlılık Faktörü (İDF) ISF değerlerini yükseltmek, belirli bir karbonhidrat miktarını karşılamak için daha fazla insülin verilmesine yol açacaktır. ISF değerinin düşürülmesi, hedeflenen kan şekerinin üzerinde bir düzeltme için daha fazla insülin verilmesine yol açar. Kan şekeri seviyeleri hedefin altında olduğunda ISF\'yi yükseltmenin veya düşürmenin insülin iletimi üzerinde hiçbir etkisi yoktur. @@ -175,7 +181,7 @@ Karbonhidrat insülin Oranı (I:C oranı) Daha yüksek I:C oranları, belirli bir miktarda karbonhidrat için daha az insülin verilmesine yol açar. Daha düşük I:C oranları, belirli bir miktarda karbonhidrat için daha az insülin verilmesine yol açar. - 0 COB\'niz varsa, IC oranını değiştirmek, belirli bir KŞ değerini düzeltmek için farklı insülin miktarına sebep olur. + 0 AKRB varsa, Kİ oranını değiştirmek, belirli bir KŞ değerini düzeltmek için farklı insülin miktarına sebep olur. Ekmek (değişim) birimini 10g veya 12g olarak sayarsanız IC farklı olacaktır. IC anlamı şudur: 1Ü insülin kaç ekmek birimi (değişim) kapsar. https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 7e728fcaef..778403faab 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -6,6 +6,7 @@ Tedavi güvenliği Maks izin verilen bolus [U] Maks izin verilen karbonhidrat [g] + KŞ seviyesi altında düşük glikoz duraklatma meydana gelir %1$s Tercihler Tercihler NS\'tan tedavileri güncelle @@ -44,27 +45,27 @@ SMS komutlarını kullanarak uzaktan AndroidAPS kontrolü. İnsülin: Karbonhidrat: - IOB: - IOB: - Toplam IOB: - Toplam IOB etkinliği: + AİNS: + AİNS: + Toplam AİNS: + Toplam AİNS etkinliği: Süre: Oran: İns: - IOB: - Toplam IOB: + AİNS: + Toplam AİNS: GH Karbonhidrat Düzeltme - Bolus IOB + Bolus AİNS Şimdi Çalıştır SANAL POMPA Son Çalıştırma Girdi Parametreleri Glikoz durumu Mevcut Geçici Bazal - IOB Verisi + AİNS Verisi Profil Yemek Verisi Sonuç @@ -115,7 +116,7 @@ Yeni öneri mevcut Karbonhidrat Önerisi Nightscout\'un desteklenmeyen sürümü - Bazal IOB + Bazal AİNS Bolus kısıtlaması uygulandı Karbonhidrat kısıtlaması uygulandı Diğer @@ -139,8 +140,8 @@ İçe aktarma ayarları 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 Maks IOB denir.\nAPS\'de bir kerede verilebilen maksimum insülin [U] ü. + OpenAPS\'in gönderebileceği maksimum bazal AİNS (Aktif insülin) [U] + Bu değere OpenAPS bağlamında Maks AİNS 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ı! @@ -316,8 +317,8 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Günlüğü temizle NSCLIENT yazma izni yok. Yanlış API Anahtarı? Wear ayarları - Ayrıntılı IOB göster - Saat arayüzü üzerinde IOB\'yi bolus ve bazal olarak ayırın + Ayrıntılı AİNS göster + Saat arayüzü üzerinde AİNS\'i bolus ve bazal olarak ayırın başarısız - lütfen telefonu kontrol edin n/a Hasta tipi @@ -356,7 +357,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Döngü duraklatıldı Döngü devam ettirildi 15 dk eğilim - COB + AKRB Süperbolus NS\'a uygulama başlangıcını kaydet Ayarları uygulamak için uygulamadan çıkılıyor. @@ -439,7 +440,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d SMB (Super Micro Bolus) etkinleştir Daha hızlı bir etki için geçici bazal yerine Super Micro Bolus kullanın (Uam) Bildirilmemiş öğünlerin tespiti - IOB Eğrisi Tepe Zamanı + AİNS Eğrisi Tepe Zamanı Tepe zamanı [min] Tepe Serbest tepe Oref @@ -495,28 +496,28 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Nightscout Client KŞ NS KŞ KŞ Hesaplaması - Bolus IOB (Aktif İnsülin) hesaplaması - Bazal IOB (Aktif İnsülin) hesaplaması + Bolus AİNS hesaplaması + Bazal AİNS hesaplaması Trend hesapla Süperbolus hesapla Sadece pozitif Sadece negatif - COB (Aktif Karbonhidrat) hesaplaması + AKRB (Aktif Karbonhidrat) hesaplaması Geçici hedef hesaplaması Yüzde Hesaplaması Döngü etkin APS Seçildi NSClient\'in yazma izni var Kapalı mod etkin - Maksimal IOB doğru şekilde ayarlandı + Maksimal AİNS doğru şekilde ayarlandı Seçili kaynaktan KŞ kullanılabilir Yayma bolus iletim hatası SMB\'yi her zaman etkinleştir SMB\'yi her zaman bağımsız olarak boluslarla etkinleştirin. G5 gibi verilerin yalnızca filtrelenmesiyle yalnızca KŞ kaynağıyla mümkündür Yemeklerden sonra SMB\'yi etkinleştir - Karbonhidrat alındıktan sonra 6 saat süreyle SMB\'yi (Super Micro Bolus) etkinleştirin.0 COB (Aktif Karbonhidrat) ile de çalışır, Şayet KŞ kaynağıyla kullanılacaksa verilerin iyice filtrelenmesiyle mümkündür.örn. Dexcom G5 gibi - SMB\'yi COB ile etkinleştir - COB (Aktif Karbonhidrat) aktif olduğunda SMB\'yi (Super Micro Bolus) etkinleştirin. + 0 AKRB (Aktif Karbonhidrat) olsa dahi, karbonhidrat alındıktan sonra 6 saat süreyle SMB\'yi (Süper Mikro Bolus) etkinleştirir. Şayet KŞ kaynağıyla kullanılacaksa verilerin iyice filtrelenmesiyle (Dexcom G5-G6 gibi) mümkündür. + SMB\'yi AKRB ile etkinleştir + AKRB (Aktif Karbonhidrat) aktif olduğunda SMB\'yi (Süper Mikro Bolus) etkinleştirin. Geçici hedeflerle SMB\'yi etkinleştir Geçici hedef aktif olduğunda SMB\'yi etkinleştir (yakında yeme, egzersiz) Yüksek geçici hedeflerle SMB\'yi etkinleştir @@ -579,7 +580,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Bazal doğru ayarlanmış %2$s\'den dolayı yayma bolus %1$.1f Ü ile sınırlandırılıyor %2$s\'den dolayı karbonhidratlar %1$d g ile sınırlandırılıyor - %2$s\'den dolayı IOB (Aktif İnsülin)%1$.1f Ü ile sınırlandırılıyor + %2$s\'den dolayı AİNS %1$.1f Ü ile sınırlandırılıyor tercihlerde maksimum değer sert sınır Durumu okumak başarısız oldu @@ -589,8 +590,8 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Açık Döngü modunda SMB\'ye (Super Micro Bolus) izin verilmiyor Yiyecek sıfırla - OpenAPS tarafından aşılmayacak, maksimum toplam IOB(Aktif İnsülin)[U] - 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 + OpenAPS tarafından aşılamayacak maksimum toplam AİNS (Aktif İnsülin)[U] + Bu değer OpenAPS bağlamında Max AİNS (Aktif İnsülin) olarak adlandırılır\nOpenAPS, mevcut AİNS bu değerden daha büyükse daha fazla insülin vermez 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 @@ -632,7 +633,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Durum oku Kurulum sihirbazını atla AndroidAPS\'ın bazal değişiklikleri önerme/yapmasını sağlamak için aşağıdaki düğmeye basın - Duyarlılık eklentisi, duyarlılık tespiti ve COB hesaplaması için kullanılır. Daha fazla bilgi için ziyaret edin: + Duyarlılık eklentisi, duyarlılık tespiti ve AKRB hesaplaması için kullanılır. Daha fazla bilgi için ziyaret edin: https://androidaps.readthedocs.io/en/latest/Configuration/Sensitivity-detection-and-COB.html NSClient, Nightscout\'a bağlantıyı sağlar. Şimdi bu kısmı atlayabilirsiniz, ancak ayarlamadan görevleri geçemezsiniz. Lütfen unutmayın: yeni insülin profilleri en az 5 saat DIA gerektirir. Yeni profildeki DIA 5–6 saat, eski insülin profillerinde DIA 3saat\'e eşittir. @@ -736,9 +737,9 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d BYODA BYODA \'Kendi Dexcom Uygulamanızı Oluşturun\' uygulamasından KŞ değerlerini alın. - COB vs IOB + AKRB vs AİNS Bolus kısıtlaması uygulandı: %1$.2f Ü ile %2$.2f Ü - !!!!! Yavaş karbonhidrat emilimi tespit edildi: zamanın %2$d%% si. Hesaplamanızı iki kez kontrol edin. Aktif Karbonhidrat (COB) olduğundan fazla tahmin edilebilir, bu nedenle daha fazla insülin verilebilir !!!!!]]> + !!!!! Yavaş karbonhidrat emilimi tespit edildi: zamanın %2$d%% si. Hesaplamanızı iki kez kontrol edin. Aktif Karbonhidrat (AKRB) olduğundan fazla tahmin edilebilir, bu nedenle daha fazla insülin verilebilir !!!!!]]> Bolus sihirbazı sonucunun bu kadarını ilet [%] Bolus sihirbazı hesaplamayı gerçekleştirir ancak hesaplanan insülinin yalnızca bu kısmı iletilir. SMB algoritması ile kullanışlıdır. Ertele @@ -746,7 +747,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Geçersiz mesaj %1$s ISF: %2$.1f %1$.0fg IC: %2$.1f - %1$.1fg IC: %2$.1f + %1$.1fg Kİ: %2$.1f %1$d%% dk. Profil adı: @@ -897,7 +898,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d GBO ve EB (Yayma Bolus) alın Başka bir örnek üzerinden girilen GBO ve EB (Yayma Bolusu) kabul edin İnsülinleri alın - NS veya NSClient aracılığıyla girilen insülini kabul edin (iletilmez, yalnızca aktif insüline göre (IOB) hesaplanır) + NS veya NSClient aracılığıyla girilen insülini kabul edin (iletilmez, yalnızca AİNS\'e göre hesaplanır) Karbonhidratları alın NS veya NSClient aracılığıyla girilen karbonhidratları kabul edin Terapi etkinlikleri alın @@ -977,13 +978,13 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Seçili hızlı asistan artık mevcut değil, lütfen kutucuğu yenileyin Hesaplamayı temel alacak yeni bir KŞ yok! Etkin profil ayarlanmadı! - Aktif karbonhidrat bilinmiyor! KŞ okuması eksik veya son uygulama yeniden başlatılsın mı? + Aktif karbonhidrat (AKRB) bilinmiyor! KŞ okuması eksik veya son uygulama yeniden başlatılsın mı? Karbonhidrat kısıtlaması ihlali! Hesap (KİO: %1$.1f, İDF: %2$.1f) Karb: %1$.2fÜ - COB: %1$.0fg %2$.2fÜ + AKRB: %1$.0fg %2$.2fÜ KŞ: %1$.2fÜ - Aktif İnsülin: %1$.2fÜ + AİNS: %1$.2fÜ Süperbolus: %1$.2fÜ 15\' trend: %1$.2fÜ Yüzde: %1$.2fÜ x %2$d%% ≈ %3$.2fÜ @@ -1043,4 +1044,5 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d GlucoRx Aidex CGMS\'den KŞ değerleri alır. Şarj seçenekleri tarafından engellendi Bağlantı seçenekleri tarafından engellendi + (Saat Bağlı Değil) diff --git a/app/src/main/res/values-zh-rCN/exam.xml b/app/src/main/res/values-zh-rCN/exam.xml index ae7b8c0ad4..bb37fdc4ef 100644 --- a/app/src/main/res/values-zh-rCN/exam.xml +++ b/app/src/main/res/values-zh-rCN/exam.xml @@ -137,7 +137,6 @@ 通过注射器或胰岛素笔输注你计算出的“遗漏”胰岛素的一部分。 不做任何事情,允许AndroidAPS纠正高血糖导致的任何结果。 活性胰岛素(IOB) - 选择所有正确的答案。 活性胰岛素IOB数值受发布的临时基础率影响。 当您的血糖低于目标值时,不会被给予高临时基础率。 在没有运动的情况下,活性胰岛素IOB长时间负数表明你的个人配置太强,你需要在配置中减少的胰岛素用量。 diff --git a/automation/src/main/res/values-tr-rTR/strings.xml b/automation/src/main/res/values-tr-rTR/strings.xml index 2873b09421..5c34548fc0 100644 --- a/automation/src/main/res/values-tr-rTR/strings.xml +++ b/automation/src/main/res/values-tr-rTR/strings.xml @@ -93,8 +93,8 @@ Hedef [%1$s]: Son bolus önce Son bolus zamanı %1$s %2$s dakika önce - COB - AK (COB) %1$s %2$.0f + AKRB + AKRB %1$s %2$.0f IOB [U]: Mesafe [m]: Yinelenen zaman diff --git a/core/src/main/res/values-tr-rTR/strings.xml b/core/src/main/res/values-tr-rTR/strings.xml index 07bb349882..3452cc4f66 100644 --- a/core/src/main/res/values-tr-rTR/strings.xml +++ b/core/src/main/res/values-tr-rTR/strings.xml @@ -103,7 +103,7 @@ yok Glikoz IOB - COB + AKRB İsim: Zaman WiFi SSID diff --git a/diaconn/src/main/res/values-iw-rIL/strings.xml b/diaconn/src/main/res/values-iw-rIL/strings.xml index 793e713ae8..18a3277051 100644 --- a/diaconn/src/main/res/values-iw-rIL/strings.xml +++ b/diaconn/src/main/res/values-iw-rIL/strings.xml @@ -135,4 +135,5 @@ בעת השהייה עקב סוכר נמוך, ההזרקה מוגבלת מצב השהייה עקב סוכר נמוך מופעל, פקודת ON נדחתה. מצב השהייה עקב סוכר נמוך כבוי, פקודת OFF נדחתה. + שלח יומני משאבה לענן Diaconn. diff --git a/wear/src/main/res/values-fr-rFR/strings.xml b/wear/src/main/res/values-fr-rFR/strings.xml index e4bd273b2d..586ae78b10 100644 --- a/wear/src/main/res/values-fr-rFR/strings.xml +++ b/wear/src/main/res/values-fr-rFR/strings.xml @@ -184,4 +184,6 @@ 000 g 00,0 0,00 U + AAPS Mise en veille Alerte + Envoi Mise en veille à AAPS diff --git a/wear/src/main/res/values-it-rIT/strings.xml b/wear/src/main/res/values-it-rIT/strings.xml index ccf8bfec97..3e3d1105ac 100644 --- a/wear/src/main/res/values-it-rIT/strings.xml +++ b/wear/src/main/res/values-it-rIT/strings.xml @@ -184,4 +184,6 @@ 000g 00,0 0,00U + Avviso snooze AAPS + Invio snooze ad AAPS diff --git a/wear/src/main/res/values-ru-rRU/strings.xml b/wear/src/main/res/values-ru-rRU/strings.xml index 034531f610..6dd54951ae 100644 --- a/wear/src/main/res/values-ru-rRU/strings.xml +++ b/wear/src/main/res/values-ru-rRU/strings.xml @@ -184,4 +184,6 @@ 000г 00,0 0,00 ед + Отложить оповещения AAPS + Отправка команды отложить оповещения AAPS diff --git a/wear/src/main/res/values-tr-rTR/strings.xml b/wear/src/main/res/values-tr-rTR/strings.xml index f9db54975d..ed3f2c0666 100644 --- a/wear/src/main/res/values-tr-rTR/strings.xml +++ b/wear/src/main/res/values-tr-rTR/strings.xml @@ -24,7 +24,7 @@ Eylemler için Birimler Tarihi Göster IOB\'yi göster - COB\'u göster + AKRB göster Deltayı göster OrtDelta\'yı Göster Telefon Pilini Göster From 12b21eee72de2b5b2fec4e7d1424cf1e7d53db6f Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sun, 10 Jul 2022 10:25:27 +0200 Subject: [PATCH 48/48] 3.0.0.2-dev-o --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index da06e17acd..65236b15cf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -105,7 +105,7 @@ android { defaultConfig { multiDexEnabled true versionCode 1500 - version "3.0.0.2-autotune-dev-n0" + version "3.0.0.2-dev-o" buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"' buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'