فهرست منبع

Check is BG not too flat

Ivan Valkou 5 سال پیش
والد
کامیت
d6a810741c
2فایلهای تغییر یافته به همراه14 افزوده شده و 0 حذف شده
  1. 6 0
      FreeAPS/Sources/APS/APSManager.swift
  2. 8 0
      FreeAPS/Sources/APS/Storage/GlucoseStorage.swift

+ 6 - 0
FreeAPS/Sources/APS/APSManager.swift

@@ -225,6 +225,12 @@ final class BaseAPSManager: APSManager, Injectable {
             return Just(false).eraseToAnyPublisher()
         }
 
+        guard glucoseStorage.isGlucoseNotFlat() else {
+            debug(.apsManager, "Glucose data is stale")
+            processError(APSError.glucoseError(message: "Glucose data is too flat"))
+            return Just(false).eraseToAnyPublisher()
+        }
+
         let now = Date()
         let temp = currentTemp(date: now)
 

+ 8 - 0
FreeAPS/Sources/APS/Storage/GlucoseStorage.swift

@@ -9,6 +9,7 @@ protocol GlucoseStorage {
     func filterTooFrequentGlucose(_ glucose: [BloodGlucose], at: Date) -> [BloodGlucose]
     func lastGlucoseDate() -> Date
     func isGlucoseFresh() -> Bool
+    func isGlucoseNotFlat() -> Bool
 }
 
 final class BaseGlucoseStorage: GlucoseStorage, Injectable {
@@ -79,6 +80,13 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
 
         return filtered
     }
+
+    func isGlucoseNotFlat() -> Bool {
+        let last3 = recent().suffix(3)
+        guard last3.count == 3 else { return true }
+
+        return Array(last3.compactMap { $0.filtered ?? Decimal($0.sgv ?? 0) }.uniqued()).count > 1
+    }
 }
 
 protocol GlucoseObserver {