Handle DASH basal and TBR out of sync
This commit is contained in:
parent
2826854b7c
commit
38728bac01
1 changed files with 46 additions and 11 deletions
|
@ -324,7 +324,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
omnipodManager
|
omnipodManager
|
||||||
.getStatus(ResponseType.StatusResponseType.DEFAULT_STATUS_RESPONSE)
|
.getStatus(ResponseType.StatusResponseType.DEFAULT_STATUS_RESPONSE)
|
||||||
.ignoreElements(),
|
.ignoreElements(),
|
||||||
history.updateFromState(podStateManager),
|
updateFromState(),
|
||||||
podStateManager.updateActiveCommand()
|
podStateManager.updateActiveCommand()
|
||||||
.map { handleCommandConfirmation(it) }
|
.map { handleCommandConfirmation(it) }
|
||||||
.ignoreElement(),
|
.ignoreElement(),
|
||||||
|
@ -632,14 +632,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
if (podStateManager.activeCommand != null) {
|
if (podStateManager.activeCommand != null) {
|
||||||
val sound =
|
val sound = if (hasBolusErrorBeepEnabled()) info.nightscout.core.ui.R.raw.boluserror else 0
|
||||||
if (sp.getBoolean(
|
|
||||||
info.nightscout.androidaps.plugins.pump.omnipod.common.R.string
|
|
||||||
.key_omnipod_common_notification_uncertain_bolus_sound_enabled, true
|
|
||||||
)
|
|
||||||
) info.nightscout.core.ui.R.raw.boluserror
|
|
||||||
else 0
|
|
||||||
|
|
||||||
showErrorDialog(rh.gs(R.string.bolus_delivery_status_uncertain), sound)
|
showErrorDialog(rh.gs(R.string.bolus_delivery_status_uncertain), sound)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -714,7 +707,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
val percent = (waited.toFloat() / estimatedDeliveryTimeSeconds) * 100
|
val percent = (waited.toFloat() / estimatedDeliveryTimeSeconds) * 100
|
||||||
updateBolusProgressDialog(
|
updateBolusProgressDialog(
|
||||||
rh.gs(info.nightscout.pump.common.R.string.bolus_delivered_so_far, Round.roundTo(percent*requestedBolusAmount/100, PodConstants.POD_PULSE_BOLUS_UNITS), requestedBolusAmount),
|
rh.gs(info.nightscout.pump.common.R.string.bolus_delivered_so_far, Round.roundTo(percent * requestedBolusAmount / 100, PodConstants.POD_PULSE_BOLUS_UNITS), requestedBolusAmount),
|
||||||
percent.toInt()
|
percent.toInt()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -946,6 +939,13 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
return sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_basal_beeps_enabled, false)
|
return sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_basal_beeps_enabled, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun hasBolusErrorBeepEnabled(): Boolean {
|
||||||
|
return sp.getBoolean(
|
||||||
|
info.nightscout.androidaps.plugins.pump.omnipod.common.R.string
|
||||||
|
.key_omnipod_common_notification_uncertain_bolus_sound_enabled, true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult {
|
override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult {
|
||||||
if (!podStateManager.tempBasalActive &&
|
if (!podStateManager.tempBasalActive &&
|
||||||
pumpSync.expectedPumpState().temporaryBasal == null
|
pumpSync.expectedPumpState().temporaryBasal == null
|
||||||
|
@ -1319,7 +1319,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
podStateManager.activeCommand?.sendError = it
|
podStateManager.activeCommand?.sendError = it
|
||||||
aapsLogger.error(LTag.PUMP, "Error executing command", it)
|
aapsLogger.error(LTag.PUMP, "Error executing command", it)
|
||||||
}.onErrorComplete(),
|
}.onErrorComplete(),
|
||||||
history.updateFromState(podStateManager),
|
updateFromState(),
|
||||||
podStateManager.updateActiveCommand()
|
podStateManager.updateActiveCommand()
|
||||||
.map { handleCommandConfirmation(it) }
|
.map { handleCommandConfirmation(it) }
|
||||||
.ignoreElement(),
|
.ignoreElement(),
|
||||||
|
@ -1488,6 +1488,41 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateFromState(): Completable = Completable.defer {
|
||||||
|
val tbr = pumpSync.expectedPumpState().temporaryBasal
|
||||||
|
if (tbr != null && podStateManager.deliveryStatus?.tempBasalActive() == false && pumpSync.expectedPumpState().temporaryBasal?.pumpSerial != Constants
|
||||||
|
.PUMP_SERIAL_FOR_FAKE_TBR
|
||||||
|
) {
|
||||||
|
// AAPS thinks there is a TBR running but pump has no TBR running
|
||||||
|
aapsLogger.error(LTag.PUMP, "AAPS expected a TBR running but pump has no TBR running! AAPS: ${pumpSync.expectedPumpState().temporaryBasal} Pump: ${podStateManager.deliveryStatus}")
|
||||||
|
// Alert user
|
||||||
|
val sound = if (hasBolusErrorBeepEnabled()) info.nightscout.core.ui.R.raw.boluserror else 0
|
||||||
|
showErrorDialog(rh.gs(R.string.temp_basal_out_of_sync), sound)
|
||||||
|
// Sync stopped basal with AAPS
|
||||||
|
val ret = pumpSync.syncStopTemporaryBasalWithPumpId(
|
||||||
|
System.currentTimeMillis(), // Note: It would be nice if TBR end could be estimated, but this will add a lot of complexity
|
||||||
|
tbr.id,
|
||||||
|
PumpType.OMNIPOD_DASH,
|
||||||
|
serialNumber()
|
||||||
|
)
|
||||||
|
aapsLogger.info(LTag.PUMP, "syncStopTemporaryBasalWithPumpId ret=$ret pumpId=${tbr.id}")
|
||||||
|
podStateManager.tempBasal = null
|
||||||
|
}
|
||||||
|
if (tbr == null && podStateManager.deliveryStatus?.tempBasalActive() == true) {
|
||||||
|
// AAPS thinks there is no TBR running but pump has a TBR running
|
||||||
|
aapsLogger.error(LTag.PUMP, "AAPS expected no TBR running but pump has a TBR running! AAPS: ${pumpSync.expectedPumpState().temporaryBasal} Pump: ${podStateManager.deliveryStatus}")
|
||||||
|
// Alert user
|
||||||
|
val sound = if (hasBolusErrorBeepEnabled()) info.nightscout.core.ui.R.raw.boluserror else 0
|
||||||
|
showErrorDialog(rh.gs(R.string.temp_basal_out_of_sync), sound)
|
||||||
|
// If this is reached is reached there is probably a something wrong with the time (maybe it has changed?).
|
||||||
|
// No way to calculate the TBR end time and update pumpSync properly.
|
||||||
|
// Cancel TBR running on Pump, pod history will be updated by observeNoActiveTempBasal()
|
||||||
|
return@defer observeNoActiveTempBasal()
|
||||||
|
}
|
||||||
|
// Update pod history:
|
||||||
|
history.updateFromState(podStateManager)
|
||||||
|
}
|
||||||
|
|
||||||
private fun showErrorDialog(message: String, sound: Int) {
|
private fun showErrorDialog(message: String, sound: Int) {
|
||||||
uiInteraction.runAlarm(message, rh.gs(info.nightscout.core.ui.R.string.error), sound)
|
uiInteraction.runAlarm(message, rh.gs(info.nightscout.core.ui.R.string.error), sound)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue