| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- //
- // Profile.swift
- // FreeAPS
- //
- // Created by Ivan Valkou on 21.01.2021.
- //
- import Foundation
- struct Profile: JSON {
- var maxIOB: Double
- var maxDailySafetyMultiplier: Double
- var currentBasalSafetyMultiplier: Double
- var autosensMax: Double
- var autosensMin: Double
- var rewindResetsAutosens: Bool
- var highTemptargetRaisesSensitivity: Bool
- var lowTemptargetLowersSensitivity: Bool
- var sensitivityRaisesTarget: Bool
- var resistanceLowersTarget: Bool
- var advTargetAdjustments: Bool
- var exerciseMode: Bool
- var halfBasalExerciseTarget: Double
- var maxCOB: Double
- var wideBGTargetRange: Bool
- var skipNeutralTemps: Bool
- var unsuspendIfNoTemp: Bool
- var bolusSnoozeDIADivisor: Double
- var min5mCarbimpact: Double
- var autotuneISFAdjustmentFraction: Double
- var remainingCarbsFraction: Double
- var remainingCarbsCap: Double
- var enableUAM: Bool
- var a52RiskEnable: Bool
- var enableSMBWithCOB: Bool
- var enableSMBWithTemptarget: Bool
- var enableSMBAlways: Bool
- var enableSMBAfterCarbs: Bool
- var allowSMBWithHighTemptarget: Bool
- var maxSMBBasalMinutes: Double
- var maxUAMSMBBasalMinutes: Double
- var smbInterval: Double
- var bolusIncrement: Double
- var curve: InsulinCurve
- var useCustomPeakTime: Bool
- var insulinPeakTime: Double
- var carbsReqThreshold: Double
- var offlineHotspot: Bool // unused, for compatibility
- var noisyCGMTargetMultiplier: Double
- var suspendZerosIOB: Bool
- var enableEnliteBgproxy: Bool // unused, for compatibility
- init(
- maxIOB: Double = 0,
- maxDailySafetyMultiplier: Double = 3,
- currentBasalSafetyMultiplier: Double = 4,
- autosensMax: Double = 1.2,
- autosensMin: Double = 0.7,
- rewindResetsAutosens: Bool = true,
- highTemptargetRaisesSensitivity: Bool = false,
- lowTemptargetLowersSensitivity: Bool = false,
- sensitivityRaisesTarget: Bool = true,
- resistanceLowersTarget: Bool = false,
- advTargetAdjustments: Bool = false,
- exerciseMode: Bool = false,
- halfBasalExerciseTarget: Double = 160,
- maxCOB: Double = 120,
- wideBGTargetRange: Bool = false,
- skipNeutralTemps: Bool = false,
- unsuspendIfNoTemp: Bool = false,
- bolusSnoozeDIADivisor: Double = 2,
- min5mCarbimpact: Double = 8,
- autotuneISFAdjustmentFraction: Double = 1.0,
- remainingCarbsFraction: Double = 1.0,
- remainingCarbsCap: Double = 90,
- enableUAM: Bool = false,
- a52RiskEnable: Bool = false,
- enableSMBWithCOB: Bool = false,
- enableSMBWithTemptarget: Bool = false,
- enableSMBAlways: Bool = false,
- enableSMBAfterCarbs: Bool = false,
- allowSMBWithHighTemptarget: Bool = false,
- maxSMBBasalMinutes: Double = 30,
- maxUAMSMBBasalMinutes: Double = 30,
- smbInterval: Double = 3,
- bolusIncrement: Double = 0.1,
- curve: InsulinCurve = .rapidActing,
- useCustomPeakTime: Bool = false,
- insulinPeakTime: Double = 75,
- carbsReqThreshold: Double = 1,
- offlineHotspot: Bool = false, // unused, for compatibility
- noisyCGMTargetMultiplier: Double = 1.3,
- suspendZerosIOB: Bool = true,
- enableEnliteBgproxy: Bool = false // unused, for compatibility
- ) {
- self.maxIOB = maxIOB
- self.maxDailySafetyMultiplier = maxDailySafetyMultiplier
- self.currentBasalSafetyMultiplier = currentBasalSafetyMultiplier
- self.autosensMax = autosensMax
- self.autosensMin = autosensMin
- self.rewindResetsAutosens = rewindResetsAutosens
- self.highTemptargetRaisesSensitivity = highTemptargetRaisesSensitivity
- self.lowTemptargetLowersSensitivity = lowTemptargetLowersSensitivity
- self.sensitivityRaisesTarget = sensitivityRaisesTarget
- self.resistanceLowersTarget = resistanceLowersTarget
- self.advTargetAdjustments = advTargetAdjustments
- self.exerciseMode = exerciseMode
- self.halfBasalExerciseTarget = halfBasalExerciseTarget
- self.maxCOB = maxCOB
- self.wideBGTargetRange = wideBGTargetRange
- self.skipNeutralTemps = skipNeutralTemps
- self.unsuspendIfNoTemp = unsuspendIfNoTemp
- self.bolusSnoozeDIADivisor = bolusSnoozeDIADivisor
- self.min5mCarbimpact = min5mCarbimpact
- self.autotuneISFAdjustmentFraction = autotuneISFAdjustmentFraction
- self.remainingCarbsFraction = remainingCarbsFraction
- self.remainingCarbsCap = remainingCarbsCap
- self.enableUAM = enableUAM
- self.a52RiskEnable = a52RiskEnable
- self.enableSMBWithCOB = enableSMBWithCOB
- self.enableSMBWithTemptarget = enableSMBWithTemptarget
- self.enableSMBAlways = enableSMBAlways
- self.enableSMBAfterCarbs = enableSMBAfterCarbs
- self.allowSMBWithHighTemptarget = allowSMBWithHighTemptarget
- self.maxSMBBasalMinutes = maxSMBBasalMinutes
- self.maxUAMSMBBasalMinutes = maxUAMSMBBasalMinutes
- self.smbInterval = smbInterval
- self.bolusIncrement = bolusIncrement
- self.curve = curve
- self.useCustomPeakTime = useCustomPeakTime
- self.insulinPeakTime = insulinPeakTime
- self.carbsReqThreshold = carbsReqThreshold
- self.offlineHotspot = offlineHotspot
- self.noisyCGMTargetMultiplier = noisyCGMTargetMultiplier
- self.suspendZerosIOB = suspendZerosIOB
- self.enableEnliteBgproxy = enableEnliteBgproxy
- }
- }
- extension Profile {
- private enum CodingKeys: String, CodingKey {
- case maxIOB = "max_iob"
- case maxDailySafetyMultiplier = "max_daily_safety_multiplier"
- case currentBasalSafetyMultiplier = "current_basal_safety_multiplier"
- case autosensMax = "autosens_max"
- case autosensMin = "autosens_min"
- case rewindResetsAutosens = "rewind_resets_autosens"
- case highTemptargetRaisesSensitivity = "high_temptarget_raises_sensitivity"
- case lowTemptargetLowersSensitivity = "low_temptarget_lowers_sensitivity"
- case sensitivityRaisesTarget = "sensitivity_raises_target"
- case resistanceLowersTarget = "resistanceLowersTarget"
- case advTargetAdjustments = "adv_target_adjustments"
- case exerciseMode = "exercise_mode"
- case halfBasalExerciseTarget = "half_basal_exercise_target"
- case maxCOB = "maxCOB"
- case wideBGTargetRange = "wide_bg_target_range"
- case skipNeutralTemps = "skip_neutral_temps"
- case unsuspendIfNoTemp = "unsuspend_if_no_temp"
- case bolusSnoozeDIADivisor = "bolussnooze_dia_divisor"
- case min5mCarbimpact = "min_5m_carbimpact"
- case autotuneISFAdjustmentFraction = "autotune_isf_adjustmentFraction"
- case remainingCarbsFraction = "remainingCarbsFraction"
- case remainingCarbsCap = "remainingCarbsCap"
- case enableUAM = "enableUAM"
- case a52RiskEnable = "A52_risk_enable"
- case enableSMBWithCOB = "enableSMB_with_COB"
- case enableSMBWithTemptarget = "enableSMB_with_temptarget"
- case enableSMBAlways = "enableSMB_always"
- case enableSMBAfterCarbs = "enableSMB_after_carbs"
- case allowSMBWithHighTemptarget = "allowSMB_with_high_temptarget"
- case maxSMBBasalMinutes = "maxSMBBasalMinutes"
- case maxUAMSMBBasalMinutes = "maxUAMSMBBasalMinutes"
- case smbInterval = "SMBInterval"
- case bolusIncrement = "bolus_increment"
- case curve = "curve"
- case useCustomPeakTime = "useCustomPeakTime"
- case insulinPeakTime = "insulinPeakTime"
- case carbsReqThreshold = "carbsReqThreshold"
- case offlineHotspot = "offline_hotspot"
- case noisyCGMTargetMultiplier = "noisyCGMTargetMultiplier"
- case suspendZerosIOB = "suspend_zeros_iob"
- case enableEnliteBgproxy = "enableEnliteBgproxy"
- }
- }
- enum InsulinCurve: String, Codable {
- case rapidActing = "rapid-acting"
- case ultraRapid = "ultra-rapid"
- case bilinear = "bilinear"
- }
|