From 1a91e9686c658b1b93184501831a9f529cd22f39 Mon Sep 17 00:00:00 2001 From: kimberlieskandis Date: Fri, 31 May 2024 13:12:58 -0400 Subject: [PATCH 1/7] Set median of lower and upper correction range bound when importing Loop settings --- .../NightscoutConfigStateModel.swift | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift index 8b87cd08c..ff28e5372 100644 --- a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift +++ b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift @@ -84,6 +84,24 @@ extension NightscoutConfig { return NightscoutAPI(url: url, secret: secret) } + private func getMedianTarget( + lowTargetValue: Decimal, + lowTargetTime: String, + highTarget: [NightscoutTimevalue], + units: GlucoseUnits + ) -> Decimal { + if let idx = highTarget.firstIndex(where: { $0.time == lowTargetTime }) { + let median = (lowTargetValue + highTarget[idx].value) / 2 + switch units { + case .mgdL: + return Decimal(round(Double(median))) + case .mmolL: + return Decimal(round(Double(median) * 10) / 10) + } + } + return lowTargetValue + } + func importSettings() { guard let nightscout = nightscoutAPI else { saveError("Can't access nightscoutAPI") @@ -220,9 +238,14 @@ extension NightscoutConfig { let targets = fetchedProfile.target_low .map { target -> BGTargetEntry in - BGTargetEntry( - low: target.value, - high: target.value, + let median = loop! ? self.getMedianTarget( + lowTargetValue: target.value, + lowTargetTime: target.time, + highTarget: fetchedProfile.target_high, units: self.units + ) : target.value + return BGTargetEntry( + low: median, + high: median, start: target.time, offset: self.offset(target.time) / 60 ) } From 8b8645a2f467b537a5d3d9ee9df9143091ca0f57 Mon Sep 17 00:00:00 2001 From: kimberlieskandis Date: Mon, 3 Jun 2024 09:24:31 -0400 Subject: [PATCH 2/7] move units to its own line --- .../Modules/NightscoutConfig/NightscoutConfigStateModel.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift index ff28e5372..2e510f5a6 100644 --- a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift +++ b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift @@ -241,7 +241,8 @@ extension NightscoutConfig { let median = loop! ? self.getMedianTarget( lowTargetValue: target.value, lowTargetTime: target.time, - highTarget: fetchedProfile.target_high, units: self.units + highTarget: fetchedProfile.target_high, + units: self.units ) : target.value return BGTargetEntry( low: median, From 88027fcd53d1ea2a99fe2676794546a301b374cb Mon Sep 17 00:00:00 2001 From: kimberlieskandis Date: Mon, 3 Jun 2024 13:49:48 -0400 Subject: [PATCH 3/7] add conditional for AndroidAPS --- .../NightscoutConfig/NightscoutConfigStateModel.swift | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift index 2e510f5a6..6f1d754a4 100644 --- a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift +++ b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift @@ -151,9 +151,12 @@ extension NightscoutConfig { { do { let fetchedProfileStore = try jsonDecoder.decode([FetchedNightscoutProfileStore].self, from: data) - let loop = fetchedProfileStore.first?.enteredBy.contains("Loop") - guard let fetchedProfile: FetchedNightscoutProfile = fetchedProfileStore.first? - .store[loop! ? "Default" : "default"] + let loop = ((fetchedProfileStore.first?.enteredBy.contains("Loop")) != nil) || + ((fetchedProfileStore.first?.enteredBy.contains("AndroidAPS")) != nil) + guard let fetchedProfile: FetchedNightscoutProfile = + (fetchedProfileStore.first?.store["default"] != nil) ? + fetchedProfileStore.first?.store["default"] : + fetchedProfileStore.first?.store["Default"] else { error = "\nCan't find the default Nightscout Profile." group.leave() @@ -238,7 +241,7 @@ extension NightscoutConfig { let targets = fetchedProfile.target_low .map { target -> BGTargetEntry in - let median = loop! ? self.getMedianTarget( + let median = loop ? self.getMedianTarget( lowTargetValue: target.value, lowTargetTime: target.time, highTarget: fetchedProfile.target_high, From 2c12e40218d694e83888e39e1bfe2736bb677806 Mon Sep 17 00:00:00 2001 From: kimberlieskandis Date: Tue, 4 Jun 2024 09:50:12 -0400 Subject: [PATCH 4/7] removed conditional for AndroidAPS --- .../NightscoutConfig/NightscoutConfigStateModel.swift | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift index 6f1d754a4..6486cb24d 100644 --- a/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift +++ b/FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift @@ -151,8 +151,7 @@ extension NightscoutConfig { { do { let fetchedProfileStore = try jsonDecoder.decode([FetchedNightscoutProfileStore].self, from: data) - let loop = ((fetchedProfileStore.first?.enteredBy.contains("Loop")) != nil) || - ((fetchedProfileStore.first?.enteredBy.contains("AndroidAPS")) != nil) + let loop = fetchedProfileStore.first?.enteredBy.contains("Loop") guard let fetchedProfile: FetchedNightscoutProfile = (fetchedProfileStore.first?.store["default"] != nil) ? fetchedProfileStore.first?.store["default"] : @@ -241,7 +240,7 @@ extension NightscoutConfig { let targets = fetchedProfile.target_low .map { target -> BGTargetEntry in - let median = loop ? self.getMedianTarget( + let median = loop! ? self.getMedianTarget( lowTargetValue: target.value, lowTargetTime: target.time, highTarget: fetchedProfile.target_high, From 094e150594ae8b631ade7d73d0ca77f06e65de29 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 8 Jun 2024 07:35:00 -0700 Subject: [PATCH 5/7] update submodule OmniKit: fix handling error, limit 0x31 faults --- OmniKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniKit b/OmniKit index f51fe354e..a80e38b1b 160000 --- a/OmniKit +++ b/OmniKit @@ -1 +1 @@ -Subproject commit f51fe354ea6739ee09de922ed836d6844545b610 +Subproject commit a80e38b1b7f203014b461f8aff8cead2c067e39d From dc6a4853ebe4c1b38eed305a71d0e894b43e8280 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 8 Jun 2024 07:35:42 -0700 Subject: [PATCH 6/7] update submodule OmniBLE: fix handling error, limit 0x31 faults, improve parser --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 91abd9aba..85fc3c6d4 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 91abd9aba338903cc7bccd3a4c9df5dc4452cc1f +Subproject commit 85fc3c6d4805d580acdf6592b220717b6e842558 From 3201d26a8862dab3a0fd9396da292260f9b49949 Mon Sep 17 00:00:00 2001 From: kskandis Date: Sat, 8 Jun 2024 16:56:46 -0400 Subject: [PATCH 7/7] add observer on pump deactivated to initialize pump status --- FreeAPS/Sources/APS/DeviceDataManager.swift | 7 ++++++ .../Sources/Modules/Home/HomeStateModel.swift | 25 ++++++++++++------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/FreeAPS/Sources/APS/DeviceDataManager.swift b/FreeAPS/Sources/APS/DeviceDataManager.swift index 349149a1e..1fb46c79f 100644 --- a/FreeAPS/Sources/APS/DeviceDataManager.swift +++ b/FreeAPS/Sources/APS/DeviceDataManager.swift @@ -431,6 +431,9 @@ extension BaseDeviceDataManager: PumpManagerDelegate { func pumpManagerWillDeactivate(_: PumpManager) { dispatchPrecondition(condition: .onQueue(processQueue)) pumpManager = nil + broadcaster.notify(PumpDeactivatedObserver.self, on: processQueue) { + $0.pumpDeactivatedDidChange() + } } func pumpManager(_: PumpManager, didUpdatePumpRecordsBasalProfileStartEvents _: Bool) {} @@ -667,3 +670,7 @@ protocol PumpReservoirObserver { protocol PumpBatteryObserver { func pumpBatteryDidChange(_ battery: Battery) } + +protocol PumpDeactivatedObserver { + func pumpDeactivatedDidChange() +} diff --git a/FreeAPS/Sources/Modules/Home/HomeStateModel.swift b/FreeAPS/Sources/Modules/Home/HomeStateModel.swift index ca1223eb6..e556905d3 100644 --- a/FreeAPS/Sources/Modules/Home/HomeStateModel.swift +++ b/FreeAPS/Sources/Modules/Home/HomeStateModel.swift @@ -107,6 +107,7 @@ extension Home { broadcaster.register(EnactedSuggestionObserver.self, observer: self) broadcaster.register(PumpBatteryObserver.self, observer: self) broadcaster.register(PumpReservoirObserver.self, observer: self) + broadcaster.register(PumpDeactivatedObserver.self, observer: self) animatedBackground = settingsManager.settings.animatedBackground @@ -169,7 +170,7 @@ extension Home { } else { self.setupBattery() self.setupReservoir() - self.displaypumpStatusHighlightMessage() + self.displayPumpStatusHighlightMessage() } } .store(in: &lifetime) @@ -352,13 +353,14 @@ extension Home { /// Display the eventual status message provided by the manager of the pump /// Only display if state is warning or critical message else return nil - private func displaypumpStatusHighlightMessage() { + private func displayPumpStatusHighlightMessage(_ didDeactivate: Bool = false) { DispatchQueue.main.async { [weak self] in guard let self = self else { return } - if let statusHL = self.provider.deviceManager.pumpManager?.pumpStatusHighlight, - statusHL.state == .warning || statusHL.state == .critical + if let statusHighlight = self.provider.deviceManager.pumpManager?.pumpStatusHighlight, + statusHighlight.state == .warning || statusHighlight.state == .critical, !didDeactivate { - pumpStatusHighlightMessage = (statusHL.state == .warning ? "⚠️\n" : "‼️\n") + statusHL.localizedMessage + pumpStatusHighlightMessage = (statusHighlight.state == .warning ? "⚠️\n" : "‼️\n") + statusHighlight + .localizedMessage } else { pumpStatusHighlightMessage = nil } @@ -395,7 +397,8 @@ extension Home.StateModel: CarbsObserver, EnactedSuggestionObserver, PumpBatteryObserver, - PumpReservoirObserver + PumpReservoirObserver, + PumpDeactivatedObserver { func glucoseDidUpdate(_: [BloodGlucose]) { setupGlucose() @@ -429,7 +432,7 @@ extension Home.StateModel: setupBasals() setupBoluses() setupSuspensions() - displaypumpStatusHighlightMessage() + displayPumpStatusHighlightMessage() } func pumpSettingsDidChange(_: PumpSettings) { @@ -455,12 +458,16 @@ extension Home.StateModel: func pumpBatteryDidChange(_: Battery) { setupBattery() - displaypumpStatusHighlightMessage() + displayPumpStatusHighlightMessage() } func pumpReservoirDidChange(_: Decimal) { setupReservoir() - displaypumpStatusHighlightMessage() + displayPumpStatusHighlightMessage() + } + + func pumpDeactivatedDidChange() { + displayPumpStatusHighlightMessage(true) } }