Profile.swift 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. //
  2. // Profile.swift
  3. // FreeAPS
  4. //
  5. // Created by Ivan Valkou on 21.01.2021.
  6. //
  7. import Foundation
  8. struct Profile: JSON {
  9. var maxIOB: Double
  10. var maxDailySafetyMultiplier: Double
  11. var currentBasalSafetyMultiplier: Double
  12. var autosensMax: Double
  13. var autosensMin: Double
  14. var rewindResetsAutosens: Bool
  15. var highTemptargetRaisesSensitivity: Bool
  16. var lowTemptargetLowersSensitivity: Bool
  17. var sensitivityRaisesTarget: Bool
  18. var resistanceLowersTarget: Bool
  19. var advTargetAdjustments: Bool
  20. var exerciseMode: Bool
  21. var halfBasalExerciseTarget: Double
  22. var maxCOB: Double
  23. var wideBGTargetRange: Bool
  24. var skipNeutralTemps: Bool
  25. var unsuspendIfNoTemp: Bool
  26. var bolusSnoozeDIADivisor: Double
  27. var min5mCarbimpact: Double
  28. var autotuneISFAdjustmentFraction: Double
  29. var remainingCarbsFraction: Double
  30. var remainingCarbsCap: Double
  31. var enableUAM: Bool
  32. var a52RiskEnable: Bool
  33. var enableSMBWithCOB: Bool
  34. var enableSMBWithTemptarget: Bool
  35. var enableSMBAlways: Bool
  36. var enableSMBAfterCarbs: Bool
  37. var allowSMBWithHighTemptarget: Bool
  38. var maxSMBBasalMinutes: Double
  39. var maxUAMSMBBasalMinutes: Double
  40. var smbInterval: Double
  41. var bolusIncrement: Double
  42. var curve: InsulinCurve
  43. var useCustomPeakTime: Bool
  44. var insulinPeakTime: Double
  45. var carbsReqThreshold: Double
  46. var offlineHotspot: Bool // unused, for compatibility
  47. var noisyCGMTargetMultiplier: Double
  48. var suspendZerosIOB: Bool
  49. var enableEnliteBgproxy: Bool // unused, for compatibility
  50. init(
  51. maxIOB: Double = 0,
  52. maxDailySafetyMultiplier: Double = 3,
  53. currentBasalSafetyMultiplier: Double = 4,
  54. autosensMax: Double = 1.2,
  55. autosensMin: Double = 0.7,
  56. rewindResetsAutosens: Bool = true,
  57. highTemptargetRaisesSensitivity: Bool = false,
  58. lowTemptargetLowersSensitivity: Bool = false,
  59. sensitivityRaisesTarget: Bool = true,
  60. resistanceLowersTarget: Bool = false,
  61. advTargetAdjustments: Bool = false,
  62. exerciseMode: Bool = false,
  63. halfBasalExerciseTarget: Double = 160,
  64. maxCOB: Double = 120,
  65. wideBGTargetRange: Bool = false,
  66. skipNeutralTemps: Bool = false,
  67. unsuspendIfNoTemp: Bool = false,
  68. bolusSnoozeDIADivisor: Double = 2,
  69. min5mCarbimpact: Double = 8,
  70. autotuneISFAdjustmentFraction: Double = 1.0,
  71. remainingCarbsFraction: Double = 1.0,
  72. remainingCarbsCap: Double = 90,
  73. enableUAM: Bool = false,
  74. a52RiskEnable: Bool = false,
  75. enableSMBWithCOB: Bool = false,
  76. enableSMBWithTemptarget: Bool = false,
  77. enableSMBAlways: Bool = false,
  78. enableSMBAfterCarbs: Bool = false,
  79. allowSMBWithHighTemptarget: Bool = false,
  80. maxSMBBasalMinutes: Double = 30,
  81. maxUAMSMBBasalMinutes: Double = 30,
  82. smbInterval: Double = 3,
  83. bolusIncrement: Double = 0.1,
  84. curve: InsulinCurve = .rapidActing,
  85. useCustomPeakTime: Bool = false,
  86. insulinPeakTime: Double = 75,
  87. carbsReqThreshold: Double = 1,
  88. offlineHotspot: Bool = false, // unused, for compatibility
  89. noisyCGMTargetMultiplier: Double = 1.3,
  90. suspendZerosIOB: Bool = true,
  91. enableEnliteBgproxy: Bool = false // unused, for compatibility
  92. ) {
  93. self.maxIOB = maxIOB
  94. self.maxDailySafetyMultiplier = maxDailySafetyMultiplier
  95. self.currentBasalSafetyMultiplier = currentBasalSafetyMultiplier
  96. self.autosensMax = autosensMax
  97. self.autosensMin = autosensMin
  98. self.rewindResetsAutosens = rewindResetsAutosens
  99. self.highTemptargetRaisesSensitivity = highTemptargetRaisesSensitivity
  100. self.lowTemptargetLowersSensitivity = lowTemptargetLowersSensitivity
  101. self.sensitivityRaisesTarget = sensitivityRaisesTarget
  102. self.resistanceLowersTarget = resistanceLowersTarget
  103. self.advTargetAdjustments = advTargetAdjustments
  104. self.exerciseMode = exerciseMode
  105. self.halfBasalExerciseTarget = halfBasalExerciseTarget
  106. self.maxCOB = maxCOB
  107. self.wideBGTargetRange = wideBGTargetRange
  108. self.skipNeutralTemps = skipNeutralTemps
  109. self.unsuspendIfNoTemp = unsuspendIfNoTemp
  110. self.bolusSnoozeDIADivisor = bolusSnoozeDIADivisor
  111. self.min5mCarbimpact = min5mCarbimpact
  112. self.autotuneISFAdjustmentFraction = autotuneISFAdjustmentFraction
  113. self.remainingCarbsFraction = remainingCarbsFraction
  114. self.remainingCarbsCap = remainingCarbsCap
  115. self.enableUAM = enableUAM
  116. self.a52RiskEnable = a52RiskEnable
  117. self.enableSMBWithCOB = enableSMBWithCOB
  118. self.enableSMBWithTemptarget = enableSMBWithTemptarget
  119. self.enableSMBAlways = enableSMBAlways
  120. self.enableSMBAfterCarbs = enableSMBAfterCarbs
  121. self.allowSMBWithHighTemptarget = allowSMBWithHighTemptarget
  122. self.maxSMBBasalMinutes = maxSMBBasalMinutes
  123. self.maxUAMSMBBasalMinutes = maxUAMSMBBasalMinutes
  124. self.smbInterval = smbInterval
  125. self.bolusIncrement = bolusIncrement
  126. self.curve = curve
  127. self.useCustomPeakTime = useCustomPeakTime
  128. self.insulinPeakTime = insulinPeakTime
  129. self.carbsReqThreshold = carbsReqThreshold
  130. self.offlineHotspot = offlineHotspot
  131. self.noisyCGMTargetMultiplier = noisyCGMTargetMultiplier
  132. self.suspendZerosIOB = suspendZerosIOB
  133. self.enableEnliteBgproxy = enableEnliteBgproxy
  134. }
  135. }
  136. extension Profile {
  137. private enum CodingKeys: String, CodingKey {
  138. case maxIOB = "max_iob"
  139. case maxDailySafetyMultiplier = "max_daily_safety_multiplier"
  140. case currentBasalSafetyMultiplier = "current_basal_safety_multiplier"
  141. case autosensMax = "autosens_max"
  142. case autosensMin = "autosens_min"
  143. case rewindResetsAutosens = "rewind_resets_autosens"
  144. case highTemptargetRaisesSensitivity = "high_temptarget_raises_sensitivity"
  145. case lowTemptargetLowersSensitivity = "low_temptarget_lowers_sensitivity"
  146. case sensitivityRaisesTarget = "sensitivity_raises_target"
  147. case resistanceLowersTarget = "resistanceLowersTarget"
  148. case advTargetAdjustments = "adv_target_adjustments"
  149. case exerciseMode = "exercise_mode"
  150. case halfBasalExerciseTarget = "half_basal_exercise_target"
  151. case maxCOB = "maxCOB"
  152. case wideBGTargetRange = "wide_bg_target_range"
  153. case skipNeutralTemps = "skip_neutral_temps"
  154. case unsuspendIfNoTemp = "unsuspend_if_no_temp"
  155. case bolusSnoozeDIADivisor = "bolussnooze_dia_divisor"
  156. case min5mCarbimpact = "min_5m_carbimpact"
  157. case autotuneISFAdjustmentFraction = "autotune_isf_adjustmentFraction"
  158. case remainingCarbsFraction = "remainingCarbsFraction"
  159. case remainingCarbsCap = "remainingCarbsCap"
  160. case enableUAM = "enableUAM"
  161. case a52RiskEnable = "A52_risk_enable"
  162. case enableSMBWithCOB = "enableSMB_with_COB"
  163. case enableSMBWithTemptarget = "enableSMB_with_temptarget"
  164. case enableSMBAlways = "enableSMB_always"
  165. case enableSMBAfterCarbs = "enableSMB_after_carbs"
  166. case allowSMBWithHighTemptarget = "allowSMB_with_high_temptarget"
  167. case maxSMBBasalMinutes = "maxSMBBasalMinutes"
  168. case maxUAMSMBBasalMinutes = "maxUAMSMBBasalMinutes"
  169. case smbInterval = "SMBInterval"
  170. case bolusIncrement = "bolus_increment"
  171. case curve = "curve"
  172. case useCustomPeakTime = "useCustomPeakTime"
  173. case insulinPeakTime = "insulinPeakTime"
  174. case carbsReqThreshold = "carbsReqThreshold"
  175. case offlineHotspot = "offline_hotspot"
  176. case noisyCGMTargetMultiplier = "noisyCGMTargetMultiplier"
  177. case suspendZerosIOB = "suspend_zeros_iob"
  178. case enableEnliteBgproxy = "enableEnliteBgproxy"
  179. }
  180. }
  181. enum InsulinCurve: String, Codable {
  182. case rapidActing = "rapid-acting"
  183. case ultraRapid = "ultra-rapid"
  184. case bilinear = "bilinear"
  185. }