Explorar o código

Recommended Insulin Fraction

Ivan Valkou %!s(int64=5) %!d(string=hai) anos
pai
achega
90d82c96e0

+ 2 - 1
FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json

@@ -6,5 +6,6 @@
     "isUploadEnabled": false,
     "useLocalGlucoseSource": false,
     "localGlucosePort": 8080,
-    "debugOptions": false
+    "debugOptions": false,
+    "insulinReqFraction": 0.7
 }

+ 2 - 2
FreeAPS/Sources/APS/Storage/CarbsStorage.swift

@@ -42,11 +42,11 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
 
     func syncDate() -> Date {
         guard let events = storage.retrieve(OpenAPS.Monitor.carbHistory, as: [CarbsEntry].self),
-              let recent = events.filter({ $0.enteredBy != CarbsEntry.manual }).first
+              let recent = events.filter({ !($0.enteredBy?.contains(CarbsEntry.manual) ?? false) }).first
         else {
             return Date().addingTimeInterval(-1.days.timeInterval)
         }
-        return recent.createdAt.addingTimeInterval(-6.minutes.timeInterval)
+        return recent.createdAt
     }
 
     func recent() -> [CarbsEntry] {

+ 2 - 2
FreeAPS/Sources/APS/Storage/TempTargetsStorage.swift

@@ -51,11 +51,11 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
 
     func syncDate() -> Date {
         guard let events = storage.retrieve(OpenAPS.Settings.tempTargets, as: [TempTarget].self),
-              let recent = events.filter({ $0.enteredBy != TempTarget.manual }).first
+              let recent = events.filter({ !($0.enteredBy?.contains(TempTarget.manual) ?? false) }).first
         else {
             return Date().addingTimeInterval(-1.days.timeInterval)
         }
-        return recent.createdAt.addingTimeInterval(-6.minutes.timeInterval)
+        return recent.createdAt
     }
 
     func recent() -> [TempTarget] {

+ 1 - 0
FreeAPS/Sources/Models/FreeAPSSettings.swift

@@ -9,4 +9,5 @@ struct FreeAPSSettings: JSON {
     var useLocalGlucoseSource: Bool?
     var localGlucosePort: Int?
     var debugOptions: Bool?
+    var insulinReqFraction: Decimal?
 }

+ 6 - 2
FreeAPS/Sources/Modules/AddCarbs/AddCarbsViewModel.swift

@@ -10,11 +10,15 @@ extension AddCarbs {
         override func subscribe() {}
 
         func add() {
+            guard carbs > 0 else {
+                showModal(for: nil)
+                return
+            }
+
             carbsStorage.storeCarbs([
                 CarbsEntry(createdAt: date, carbs: carbs, enteredBy: CarbsEntry.manual)
             ])
-            apsManager.determineBasal().sink { _ in }.store(in: &lifetime)
-            showModal(for: nil)
+            showModal(for: .bolus)
         }
     }
 }

+ 0 - 3
FreeAPS/Sources/Modules/AddTempTarget/AddTempTargetViewModel.swift

@@ -41,7 +41,6 @@ extension AddTempTarget {
                 reason: TempTarget.custom
             )
             storage.storeTempTargets([entry])
-            apsManager.determineBasal().sink { _ in }.store(in: &lifetime)
 
             showModal(for: nil)
         }
@@ -57,7 +56,6 @@ extension AddTempTarget {
                 reason: TempTarget.cancel
             )
             storage.storeTempTargets([entry])
-            apsManager.determineBasal().sink { _ in }.store(in: &lifetime)
 
             showModal(for: nil)
         }
@@ -91,7 +89,6 @@ extension AddTempTarget {
             if var preset = presets.first(where: { $0.id == id }) {
                 preset.createdAt = Date()
                 storage.storeTempTargets([preset])
-                apsManager.determineBasal().sink { _ in }.store(in: &lifetime)
                 showModal(for: nil)
             }
         }

+ 12 - 3
FreeAPS/Sources/Modules/PreferencesEditor/PreferencesEditorViewModel.swift

@@ -9,10 +9,11 @@ extension PreferencesEditor {
         private(set) var preferences = Preferences()
         @Published var unitsIndex = 1
         @Published var allowAnnouncements = false
+        @Published var insulinReqFraction: Decimal = 0.7
 
         @Published var decimalFields: [Field<Decimal>] = []
         @Published var boolFields: [Field<Bool>] = []
-        @Published var insulinCirveField = Field<InsulinCurve>(
+        @Published var insulinCurveField = Field<InsulinCurve>(
             displayName: "Insulin curve",
             keypath: \.curve,
             value: .rapidActing
@@ -22,8 +23,9 @@ extension PreferencesEditor {
             preferences = provider.preferences
             unitsIndex = settingsManager.settings.units == .mgdL ? 0 : 1
             allowAnnouncements = settingsManager.settings.allowAnnouncements
-            insulinCirveField.value = preferences.curve
-            insulinCirveField.settable = self
+            insulinCurveField.value = preferences.curve
+            insulinCurveField.settable = self
+            insulinReqFraction = settingsManager.settings.insulinReqFraction ?? 0.7
 
             $unitsIndex
                 .removeDuplicates()
@@ -39,6 +41,13 @@ extension PreferencesEditor {
                 }
                 .store(in: &lifetime)
 
+            $insulinReqFraction
+                .removeDuplicates()
+                .sink { [weak self] fraction in
+                    self?.settingsManager.settings.insulinReqFraction = fraction
+                }
+                .store(in: &lifetime)
+
             boolFields = [
                 Field(
                     displayName: "Rewind Resets Autosens",

+ 6 - 1
FreeAPS/Sources/Modules/PreferencesEditor/View/PreferencesEditorRootView.swift

@@ -19,10 +19,15 @@ extension PreferencesEditor {
                     }
 
                     Toggle("Remote control", isOn: $viewModel.allowAnnouncements)
+
+                    HStack {
+                        Text("Recommended Insulin Fraction")
+                        DecimalTextField("", value: $viewModel.insulinReqFraction, formatter: formatter)
+                    }
                 }
 
                 Section(header: Text("OpenAPS")) {
-                    Picker(selection: $viewModel.insulinCirveField.value, label: Text(viewModel.insulinCirveField.displayName)) {
+                    Picker(selection: $viewModel.insulinCurveField.value, label: Text(viewModel.insulinCurveField.displayName)) {
                         ForEach(InsulinCurve.allCases) { v in
                             Text(v.rawValue).tag(v)
                         }

+ 2 - 2
FreeAPS/Sources/Services/Network/NightscoutAPI.swift

@@ -107,7 +107,7 @@ extension NightscoutAPI {
         ]
         if let date = sinceDate {
             let dateItem = URLQueryItem(
-                name: "find[created_at][$gte]",
+                name: "find[created_at][$gt]",
                 value: Formatter.iso8601withFractionalSeconds.string(from: date)
             )
             components.queryItems?.append(dateItem)
@@ -176,7 +176,7 @@ extension NightscoutAPI {
         ]
         if let date = sinceDate {
             let dateItem = URLQueryItem(
-                name: "find[created_at][$gte]",
+                name: "find[created_at][$gt]",
                 value: Formatter.iso8601withFractionalSeconds.string(from: date)
             )
             components.queryItems?.append(dateItem)