split enacting TRB and SMB

This commit is contained in:
Milos Kozak 2018-03-15 18:30:18 +01:00
parent 390e5d6d11
commit db7671cd23
21 changed files with 188 additions and 123 deletions

View file

@ -22,8 +22,8 @@ public class PumpEnactResult extends Object {
// Result of basal change // Result of basal change
public Integer duration = -1; // duration set [minutes] public Integer duration = -1; // duration set [minutes]
public Double absolute = -1d; // absolute rate [U/h] , isPercent = false public double absolute = -1d; // absolute rate [U/h] , isPercent = false
public Integer percent = -1; // percent of current basal [%] (100% = current basal), isPercent = true public int percent = -1; // percent of current basal [%] (100% = current basal), isPercent = true
public boolean isPercent = false; // if true percent is used, otherwise absolute public boolean isPercent = false; // if true percent is used, otherwise absolute
public boolean isTempCancel = false; // if true we are caceling temp basal public boolean isTempCancel = false; // if true we are caceling temp basal
// Result of treatment delivery // Result of treatment delivery
@ -47,17 +47,17 @@ public class PumpEnactResult extends Object {
return this; return this;
} }
public PumpEnactResult duration(Integer duration) { public PumpEnactResult duration(int duration) {
this.duration = duration; this.duration = duration;
return this; return this;
} }
public PumpEnactResult absolute(Double absolute) { public PumpEnactResult absolute(double absolute) {
this.absolute = absolute; this.absolute = absolute;
return this; return this;
} }
public PumpEnactResult percent(Integer percent) { public PumpEnactResult percent(int percent) {
this.percent = percent; this.percent = percent;
return this; return this;
} }
@ -71,12 +71,12 @@ public class PumpEnactResult extends Object {
return this; return this;
} }
public PumpEnactResult bolusDelivered(Double bolusDelivered) { public PumpEnactResult bolusDelivered(double bolusDelivered) {
this.bolusDelivered = bolusDelivered; this.bolusDelivered = bolusDelivered;
return this; return this;
} }
public PumpEnactResult carbsDelivered(Double carbsDelivered) { public PumpEnactResult carbsDelivered(double carbsDelivered) {
this.carbsDelivered = carbsDelivered; this.carbsDelivered = carbsDelivered;
return this; return this;
} }
@ -93,7 +93,11 @@ public class PumpEnactResult extends Object {
public String toString() { public String toString() {
String ret = MainApp.sResources.getString(R.string.success) + ": " + success; String ret = MainApp.sResources.getString(R.string.success) + ": " + success;
if (enacted) { if (enacted) {
if (isTempCancel) { if (bolusDelivered > 0) {
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
ret += "\n" + MainApp.sResources.getString(R.string.smb_shortname) + ": " + bolusDelivered + "U";
} else if (isTempCancel) {
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted; ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment + "\n" + ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment + "\n" +
MainApp.sResources.getString(R.string.canceltemp); MainApp.sResources.getString(R.string.canceltemp);
@ -119,7 +123,11 @@ public class PumpEnactResult extends Object {
if (queued) { if (queued) {
ret = MainApp.sResources.getString(R.string.waitingforpumpresult); ret = MainApp.sResources.getString(R.string.waitingforpumpresult);
} else if (enacted) { } else if (enacted) {
if (isTempCancel) { if (bolusDelivered > 0) {
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
ret += "<br><b>" + MainApp.sResources.getString(R.string.smb_shortname) + "</b>: " + bolusDelivered + "U";
} else if (isTempCancel) {
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted; ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment + ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment +
"<br>" + MainApp.sResources.getString(R.string.canceltemp); "<br>" + MainApp.sResources.getString(R.string.canceltemp);
@ -149,7 +157,9 @@ public class PumpEnactResult extends Object {
public JSONObject json() { public JSONObject json() {
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
try { try {
if (isTempCancel) { if (bolusDelivered > 0) {
result.put("smb", bolusDelivered);
} else if (isTempCancel) {
result.put("rate", 0); result.put("rate", 0);
result.put("duration", 0); result.put("duration", 0);
} else if (isPercent) { } else if (isPercent) {

View file

@ -353,7 +353,7 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
/** /**
* expect absolute request and allow both absolute and percent response based on pump capabilities * expect absolute request and allow both absolute and percent response based on pump capabilities
*/ */
public void applyAPSRequest(APSResult request, Callback callback) { public void applyTBRRequest(APSResult request, Callback callback) {
PumpInterface pump = getActivePump(); PumpInterface pump = getActivePump();
request.rate = applyBasalConstraints(request.rate); request.rate = applyBasalConstraints(request.rate);
@ -403,6 +403,29 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
getCommandQueue().tempBasalAbsolute(request.rate, request.duration, false, callback); getCommandQueue().tempBasalAbsolute(request.rate, request.duration, false, callback);
} }
} }
}
public void applySMBRequest(APSResult request, Callback callback) {
PumpInterface pump = getActivePump();
if (!pump.isInitialized()) {
log.debug("applySMBRequest: " + MainApp.sResources.getString(R.string.pumpNotInitialized));
if (callback != null) {
callback.result(new PumpEnactResult().comment(MainApp.sResources.getString(R.string.pumpNotInitialized)).enacted(false).success(false)).run();
}
return;
}
if (pump.isSuspended()) {
log.debug("applySMBRequest: " + MainApp.sResources.getString(R.string.pumpsuspended));
if (callback != null) {
callback.result(new PumpEnactResult().comment(MainApp.sResources.getString(R.string.pumpsuspended)).enacted(false).success(false)).run();
}
return;
}
if (Config.logCongigBuilderActions)
log.debug("applySMBRequest: " + request.toString());
if (request.bolusRequested) { if (request.bolusRequested) {
long lastBolusTime = getLastBolusTime(); long lastBolusTime = getLastBolusTime();
@ -765,6 +788,14 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
return "Default"; return "Default";
} }
public boolean isProfileValid(String from) {
return getProfile() != null && getProfile().isValid(from) &&
activeProfile != null &&
activeProfile.getProfile() != null &&
activeProfile.getProfile().getDefaultProfile() != null &&
activeProfile.getProfile().getDefaultProfile().isValid(from);
}
@Nullable @Nullable
public Profile getProfile() { public Profile getProfile() {
return getProfile(System.currentTimeMillis()); return getProfile(System.currentTimeMillis());
@ -777,8 +808,10 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
@Nullable @Nullable
public Profile getProfile(long time) { public Profile getProfile(long time) {
if (activeTreatments == null) if (activeTreatments == null) {
log.debug("getProfile activeTreatments == null: returning null");
return null; //app not initialized return null; //app not initialized
}
//log.debug("Profile for: " + new Date(time).toLocaleString() + " : " + getProfileName(time)); //log.debug("Profile for: " + new Date(time).toLocaleString() + " : " + getProfileName(time));
boolean ignoreProfileSwitchEvents = SP.getBoolean(R.string.key_do_not_track_profile_switch, false); boolean ignoreProfileSwitchEvents = SP.getBoolean(R.string.key_do_not_track_profile_switch, false);
if (!ignoreProfileSwitchEvents) { if (!ignoreProfileSwitchEvents) {
@ -794,8 +827,10 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
} }
} }
// Unable to determine profile, failover to default // Unable to determine profile, failover to default
if (activeProfile.getProfile() == null) if (activeProfile.getProfile() == null) {
log.debug("getProfile activeProfile.getProfile() == null: returning null (activeProfile=" + activeProfile.getClass().getSimpleName() + ")");
return null; //app not initialized return null; //app not initialized
}
Profile defaultProfile = activeProfile.getProfile().getDefaultProfile(); Profile defaultProfile = activeProfile.getProfile().getDefaultProfile();
if (defaultProfile != null) if (defaultProfile != null)
return defaultProfile; return defaultProfile;
@ -813,6 +848,7 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
} catch (JSONException e) { } catch (JSONException e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);
} }
log.debug("getProfile at the end: returning null");
return null; return null;
} }

View file

@ -15,6 +15,9 @@ import com.squareup.otto.Subscribe;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.Common.SubscriberFragment; import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
@ -22,16 +25,25 @@ import info.nightscout.androidaps.plugins.Loop.events.EventLoopSetLastRunGui;
import info.nightscout.androidaps.plugins.Loop.events.EventLoopUpdateGui; import info.nightscout.androidaps.plugins.Loop.events.EventLoopUpdateGui;
import info.nightscout.utils.FabricPrivacy; import info.nightscout.utils.FabricPrivacy;
public class LoopFragment extends SubscriberFragment implements View.OnClickListener { public class LoopFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(LoopFragment.class); private static Logger log = LoggerFactory.getLogger(LoopFragment.class);
@BindView(R.id.loop_run)
Button runNowButton; Button runNowButton;
@BindView(R.id.loop_lastrun)
TextView lastRunView; TextView lastRunView;
@BindView(R.id.loop_lastenact)
TextView lastEnactView; TextView lastEnactView;
@BindView(R.id.loop_source)
TextView sourceView; TextView sourceView;
@BindView(R.id.loop_request)
TextView requestView; TextView requestView;
@BindView(R.id.loop_constraintsprocessed)
TextView constraintsProcessedView; TextView constraintsProcessedView;
TextView setByPumpView; @BindView(R.id.loop_tbrsetbypump)
TextView tbrSetByPumpView;
@BindView(R.id.loop_smbsetbypump)
TextView smbSetByPumpView;
@Override @Override
@ -39,41 +51,19 @@ public class LoopFragment extends SubscriberFragment implements View.OnClickList
Bundle savedInstanceState) { Bundle savedInstanceState) {
try { try {
View view = inflater.inflate(R.layout.loop_fragment, container, false); View view = inflater.inflate(R.layout.loop_fragment, container, false);
unbinder = ButterKnife.bind(this, view);
lastRunView = (TextView) view.findViewById(R.id.loop_lastrun);
lastEnactView = (TextView) view.findViewById(R.id.loop_lastenact);
sourceView = (TextView) view.findViewById(R.id.loop_source);
requestView = (TextView) view.findViewById(R.id.loop_request);
constraintsProcessedView = (TextView) view.findViewById(R.id.loop_constraintsprocessed);
setByPumpView = (TextView) view.findViewById(R.id.loop_setbypump);
runNowButton = (Button) view.findViewById(R.id.loop_run);
runNowButton.setOnClickListener(this);
updateGUI();
return view; return view;
} catch (Exception e) { } catch (Exception e) {
FabricPrivacy.logException(e); FabricPrivacy.logException(e);
} }
return null; return null;
} }
@Override @OnClick(R.id.loop_run)
public void onClick(View view) { void onRunClick() {
switch (view.getId()) {
case R.id.loop_run:
lastRunView.setText(MainApp.sResources.getString(R.string.executing)); lastRunView.setText(MainApp.sResources.getString(R.string.executing));
Thread thread = new Thread(new Runnable() { new Thread(() -> LoopPlugin.getPlugin().invoke("Loop button", true)).start();
@Override
public void run() {
LoopPlugin.getPlugin().invoke("Loop button", true);
}
});
thread.start();
FabricPrivacy.getInstance().logCustom(new CustomEvent("Loop_Run")); FabricPrivacy.getInstance().logCustom(new CustomEvent("Loop_Run"));
break;
}
} }
@Subscribe @Subscribe
@ -86,12 +76,7 @@ public class LoopFragment extends SubscriberFragment implements View.OnClickList
clearGUI(); clearGUI();
final Activity activity = getActivity(); final Activity activity = getActivity();
if (activity != null) if (activity != null)
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(() -> lastRunView.setText(ev.text));
@Override
public void run() {
lastRunView.setText(ev.text);
}
});
} }
@ -99,17 +84,15 @@ public class LoopFragment extends SubscriberFragment implements View.OnClickList
protected void updateGUI() { protected void updateGUI() {
Activity activity = getActivity(); Activity activity = getActivity();
if (activity != null) if (activity != null)
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(() -> {
@Override
public void run() {
if (LoopPlugin.lastRun != null) { if (LoopPlugin.lastRun != null) {
requestView.setText(LoopPlugin.lastRun.request != null ? LoopPlugin.lastRun.request.toSpanned() : ""); requestView.setText(LoopPlugin.lastRun.request != null ? LoopPlugin.lastRun.request.toSpanned() : "");
constraintsProcessedView.setText(LoopPlugin.lastRun.constraintsProcessed != null ? LoopPlugin.lastRun.constraintsProcessed.toSpanned() : ""); constraintsProcessedView.setText(LoopPlugin.lastRun.constraintsProcessed != null ? LoopPlugin.lastRun.constraintsProcessed.toSpanned() : "");
setByPumpView.setText(LoopPlugin.lastRun.setByPump != null ? LoopPlugin.lastRun.setByPump.toSpanned() : "");
sourceView.setText(LoopPlugin.lastRun.source != null ? LoopPlugin.lastRun.source : ""); sourceView.setText(LoopPlugin.lastRun.source != null ? LoopPlugin.lastRun.source : "");
lastRunView.setText(LoopPlugin.lastRun.lastAPSRun != null && LoopPlugin.lastRun.lastAPSRun.getTime() != 0 ? LoopPlugin.lastRun.lastAPSRun.toLocaleString() : ""); lastRunView.setText(LoopPlugin.lastRun.lastAPSRun != null && LoopPlugin.lastRun.lastAPSRun.getTime() != 0 ? LoopPlugin.lastRun.lastAPSRun.toLocaleString() : "");
lastEnactView.setText(LoopPlugin.lastRun.lastEnact != null && LoopPlugin.lastRun.lastEnact.getTime() != 0 ? LoopPlugin.lastRun.lastEnact.toLocaleString() : ""); lastEnactView.setText(LoopPlugin.lastRun.lastEnact != null && LoopPlugin.lastRun.lastEnact.getTime() != 0 ? LoopPlugin.lastRun.lastEnact.toLocaleString() : "");
} tbrSetByPumpView.setText(LoopPlugin.lastRun.tbrSetByPump != null ? LoopPlugin.lastRun.tbrSetByPump.toSpanned() : "");
smbSetByPumpView.setText(LoopPlugin.lastRun.smbSetByPump != null ? LoopPlugin.lastRun.smbSetByPump.toSpanned() : "");
} }
}); });
} }
@ -117,16 +100,14 @@ public class LoopFragment extends SubscriberFragment implements View.OnClickList
void clearGUI() { void clearGUI() {
Activity activity = getActivity(); Activity activity = getActivity();
if (activity != null) if (activity != null)
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(() -> {
@Override
public void run() {
requestView.setText(""); requestView.setText("");
constraintsProcessedView.setText(""); constraintsProcessedView.setText("");
setByPumpView.setText("");
sourceView.setText(""); sourceView.setText("");
lastRunView.setText(""); lastRunView.setText("");
lastEnactView.setText(""); lastEnactView.setText("");
} tbrSetByPumpView.setText("");
smbSetByPumpView.setText("");
}); });
} }
} }

View file

@ -30,7 +30,6 @@ import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventAutosensCalculationFinished; import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventAutosensCalculationFinished;
import info.nightscout.androidaps.plugins.Loop.events.EventLoopResult;
import info.nightscout.androidaps.plugins.Loop.events.EventLoopSetLastRunGui; import info.nightscout.androidaps.plugins.Loop.events.EventLoopSetLastRunGui;
import info.nightscout.androidaps.plugins.Loop.events.EventLoopUpdateGui; import info.nightscout.androidaps.plugins.Loop.events.EventLoopUpdateGui;
import info.nightscout.androidaps.plugins.Loop.events.EventNewOpenLoopNotification; import info.nightscout.androidaps.plugins.Loop.events.EventNewOpenLoopNotification;
@ -65,7 +64,8 @@ public class LoopPlugin implements PluginBase {
public class LastRun { public class LastRun {
public APSResult request = null; public APSResult request = null;
public APSResult constraintsProcessed = null; public APSResult constraintsProcessed = null;
public PumpEnactResult setByPump = null; public PumpEnactResult tbrSetByPump = null;
public PumpEnactResult smbSetByPump = null;
public String source = null; public String source = null;
public Date lastAPSRun = null; public Date lastAPSRun = null;
public Date lastEnact = null; public Date lastEnact = null;
@ -266,7 +266,7 @@ public class LoopPlugin implements PluginBase {
if (!isEnabled(PluginBase.LOOP)) if (!isEnabled(PluginBase.LOOP))
return; return;
if (MainApp.getConfigBuilder().getProfile() == null) { if (!MainApp.getConfigBuilder().isProfileValid("Loop")) {
log.debug(MainApp.sResources.getString(R.string.noprofileselected)); log.debug(MainApp.sResources.getString(R.string.noprofileselected));
MainApp.bus().post(new EventLoopSetLastRunGui(MainApp.sResources.getString(R.string.noprofileselected))); MainApp.bus().post(new EventLoopSetLastRunGui(MainApp.sResources.getString(R.string.noprofileselected)));
return; return;
@ -304,7 +304,8 @@ public class LoopPlugin implements PluginBase {
lastRun.constraintsProcessed = resultAfterConstraints; lastRun.constraintsProcessed = resultAfterConstraints;
lastRun.lastAPSRun = new Date(); lastRun.lastAPSRun = new Date();
lastRun.source = ((PluginBase) usedAPS).getName(); lastRun.source = ((PluginBase) usedAPS).getName();
lastRun.setByPump = null; lastRun.tbrSetByPump = null;
lastRun.smbSetByPump = null;
NSUpload.uploadDeviceStatus(); NSUpload.uploadDeviceStatus();
@ -320,31 +321,36 @@ public class LoopPlugin implements PluginBase {
return; return;
} }
MainApp.bus().post(new EventLoopResult(resultAfterConstraints));
if (constraintsInterface.isClosedModeEnabled()) { if (constraintsInterface.isClosedModeEnabled()) {
if (result.isChangeRequested()) { if (result.isChangeRequested()) {
final PumpEnactResult waiting = new PumpEnactResult(); final PumpEnactResult waiting = new PumpEnactResult();
final PumpEnactResult previousResult = lastRun.setByPump;
waiting.queued = true; waiting.queued = true;
lastRun.setByPump = waiting; lastRun.tbrSetByPump = waiting;
MainApp.bus().post(new EventLoopUpdateGui()); MainApp.bus().post(new EventLoopUpdateGui());
MainApp.getConfigBuilder().applyAPSRequest(resultAfterConstraints, new Callback() { FabricPrivacy.getInstance().logCustom(new CustomEvent("APSRequest"));
MainApp.getConfigBuilder().applyTBRRequest(resultAfterConstraints, new Callback() {
@Override @Override
public void run() { public void run() {
FabricPrivacy.getInstance().logCustom(new CustomEvent("APSRequest"));
if (result.enacted || result.success) { if (result.enacted || result.success) {
lastRun.setByPump = result; lastRun.tbrSetByPump = result;
lastRun.lastEnact = lastRun.lastAPSRun;
}
MainApp.bus().post(new EventLoopUpdateGui());
}
});
MainApp.getConfigBuilder().applySMBRequest(resultAfterConstraints, new Callback() {
@Override
public void run() {
if (result.enacted || result.success) {
lastRun.smbSetByPump = result;
lastRun.lastEnact = lastRun.lastAPSRun; lastRun.lastEnact = lastRun.lastAPSRun;
} else {
lastRun.setByPump = previousResult;
} }
MainApp.bus().post(new EventLoopUpdateGui()); MainApp.bus().post(new EventLoopUpdateGui());
} }
}); });
} else { } else {
lastRun.setByPump = null; lastRun.tbrSetByPump = null;
lastRun.source = null; lastRun.smbSetByPump = null;
} }
} else { } else {
if (result.isChangeRequested() && allowNotification) { if (result.isChangeRequested() && allowNotification) {

View file

@ -1,12 +0,0 @@
package info.nightscout.androidaps.plugins.Loop.events;
import info.nightscout.androidaps.plugins.Loop.APSResult;
public class EventLoopResult {
public final APSResult apsResult;
public EventLoopResult(APSResult apsResult) {
this.apsResult = apsResult;
}
}

View file

@ -246,11 +246,12 @@ public class DetermineBasalAdapterSMBJS {
mProfile.put("remainingCarbsCap", SMBDefaults.remainingCarbsCap); mProfile.put("remainingCarbsCap", SMBDefaults.remainingCarbsCap);
mProfile.put("enableUAM", SP.getBoolean(R.string.key_use_uam, false)); mProfile.put("enableUAM", SP.getBoolean(R.string.key_use_uam, false));
mProfile.put("A52_risk_enable", SMBDefaults.A52_risk_enable); mProfile.put("A52_risk_enable", SMBDefaults.A52_risk_enable);
mProfile.put("enableSMB_with_COB", SP.getBoolean(R.string.key_use_smb, false) && SP.getBoolean(R.string.key_enableSMB_with_COB, false)); boolean SMBEnabled = SP.getBoolean(R.string.key_use_smb, false) && MainApp.getConfigBuilder().isClosedModeEnabled();
mProfile.put("enableSMB_with_temptarget", SP.getBoolean(R.string.key_use_smb, false) && SP.getBoolean(R.string.key_enableSMB_with_temptarget, false)); mProfile.put("enableSMB_with_COB", SMBEnabled && SP.getBoolean(R.string.key_enableSMB_with_COB, false));
mProfile.put("allowSMB_with_high_temptarget", SP.getBoolean(R.string.key_use_smb, false) && SP.getBoolean(R.string.key_allowSMB_with_high_temptarget, false)); mProfile.put("enableSMB_with_temptarget", SMBEnabled && SP.getBoolean(R.string.key_enableSMB_with_temptarget, false));
mProfile.put("enableSMB_always", SP.getBoolean(R.string.key_use_smb, false) && SP.getBoolean(R.string.key_enableSMB_always, false) && ConfigBuilderPlugin.getActiveBgSource().advancedFilteringSupported()); mProfile.put("allowSMB_with_high_temptarget", SMBEnabled && SP.getBoolean(R.string.key_allowSMB_with_high_temptarget, false));
mProfile.put("enableSMB_after_carbs", SP.getBoolean(R.string.key_use_smb, false) && SP.getBoolean(R.string.key_enableSMB_after_carbs, false) && ConfigBuilderPlugin.getActiveBgSource().advancedFilteringSupported()); mProfile.put("enableSMB_always", SMBEnabled && SP.getBoolean(R.string.key_enableSMB_always, false) && ConfigBuilderPlugin.getActiveBgSource().advancedFilteringSupported());
mProfile.put("enableSMB_after_carbs", SMBEnabled && SP.getBoolean(R.string.key_enableSMB_after_carbs, false) && ConfigBuilderPlugin.getActiveBgSource().advancedFilteringSupported());
mProfile.put("maxSMBBasalMinutes", SP.getInt("key_smbmaxminutes", SMBDefaults.maxSMBBasalMinutes)); mProfile.put("maxSMBBasalMinutes", SP.getInt("key_smbmaxminutes", SMBDefaults.maxSMBBasalMinutes));
mProfile.put("carbsReqThreshold", SMBDefaults.carbsReqThreshold); mProfile.put("carbsReqThreshold", SMBDefaults.carbsReqThreshold);

View file

@ -34,8 +34,6 @@ import info.nightscout.androidaps.plugins.Loop.APSResult;
import info.nightscout.androidaps.plugins.Loop.DeviceStatus; import info.nightscout.androidaps.plugins.Loop.DeviceStatus;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.DbLogger; import info.nightscout.androidaps.plugins.NSClientInternal.data.DbLogger;
import info.nightscout.androidaps.plugins.OpenAPSAMA.DetermineBasalResultAMA;
import info.nightscout.androidaps.plugins.OpenAPSMA.DetermineBasalResultMA;
/** /**
* Created by mike on 26.05.2017. * Created by mike on 26.05.2017.
@ -202,17 +200,26 @@ public class NSUpload {
deviceStatus.iob = lastRun.request.iob.json(); deviceStatus.iob = lastRun.request.iob.json();
deviceStatus.iob.put("time", DateUtil.toISOString(lastRun.lastAPSRun)); deviceStatus.iob.put("time", DateUtil.toISOString(lastRun.lastAPSRun));
if (lastRun.setByPump != null && lastRun.setByPump.enacted) { // enacted
deviceStatus.enacted = lastRun.request.json();
deviceStatus.enacted.put("rate", lastRun.setByPump.json().get("rate"));
deviceStatus.enacted.put("duration", lastRun.setByPump.json().get("duration"));
deviceStatus.enacted.put("recieved", true);
JSONObject requested = new JSONObject(); JSONObject requested = new JSONObject();
if (lastRun.tbrSetByPump != null && lastRun.tbrSetByPump.enacted) { // enacted
deviceStatus.enacted = lastRun.request.json();
deviceStatus.enacted.put("rate", lastRun.tbrSetByPump.json().get("rate"));
deviceStatus.enacted.put("duration", lastRun.tbrSetByPump.json().get("duration"));
deviceStatus.enacted.put("recieved", true);
requested.put("duration", lastRun.request.duration); requested.put("duration", lastRun.request.duration);
requested.put("rate", lastRun.request.rate); requested.put("rate", lastRun.request.rate);
requested.put("temp", "absolute"); requested.put("temp", "absolute");
deviceStatus.enacted.put("requested", requested); deviceStatus.enacted.put("requested", requested);
} }
if (lastRun.smbSetByPump != null && lastRun.smbSetByPump.enacted) { // enacted
if (deviceStatus.enacted == null) {
deviceStatus.enacted = lastRun.request.json();
}
deviceStatus.enacted.put("smb", lastRun.smbSetByPump.bolusDelivered);
requested.put("smb", lastRun.request.smb);
deviceStatus.enacted.put("requested", requested);
}
} else { } else {
log.debug("OpenAPS data too old to upload"); log.debug("OpenAPS data too old to upload");
} }

View file

@ -256,7 +256,7 @@
android:layout_weight="2" android:layout_weight="2"
android:gravity="end" android:gravity="end"
android:paddingRight="5dp" android:paddingRight="5dp"
android:text="@string/loop_setbypump_label" android:text="@string/loop_tbrsetbypump_label"
android:textSize="14sp" /> android:textSize="14sp" />
<TextView <TextView
@ -270,7 +270,52 @@
android:textSize="14sp" /> android:textSize="14sp" />
<TextView <TextView
android:id="@+id/loop_setbypump" android:id="@+id/loop_tbrsetbypump"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
android:paddingLeft="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="5dp"
android:background="@color/listdelimiter" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="end"
android:paddingRight="5dp"
android:text="@string/loop_smbsetbypump_label"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:paddingEnd="2dp"
android:paddingStart="2dp"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/loop_smbsetbypump"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"

View file

@ -98,7 +98,6 @@
<string name="configbuilder_loop">Loop</string> <string name="configbuilder_loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">След ограничения</string> <string name="loop_constraintsprocessed_label">След ограничения</string>
<string name="loop_setbypump_label">Зададено на помпата</string>
<string name="openapsma_lastenact_label">Последно зададено</string> <string name="openapsma_lastenact_label">Последно зададено</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">Откажи</string> <string name="cancel">Откажи</string>

View file

@ -68,7 +68,8 @@
<string name="loop">Smyčka</string> <string name="loop">Smyčka</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Po zpracování omezení</string> <string name="loop_constraintsprocessed_label">Po zpracování omezení</string>
<string name="loop_setbypump_label">Nastaveno pumpou</string> <string name="loop_tbrsetbypump_label">Bazál nastavený pumpou</string>
<string name="loop_smbsetbypump_label">SMB provedené pumpou</string>
<string name="loopdisabled">SMYČKA ZAKÁZÁNA OMEZENÍM</string> <string name="loopdisabled">SMYČKA ZAKÁZÁNA OMEZENÍM</string>
<string name="objectives_manualenacts">Ručně spuštěno</string> <string name="objectives_manualenacts">Ručně spuštěno</string>
<string name="objectives_minimalduration">Minimální trvání</string> <string name="objectives_minimalduration">Minimální trvání</string>

View file

@ -160,7 +160,6 @@
<string name="constraintapllied">Beschränkungen angewendet!</string> <string name="constraintapllied">Beschränkungen angewendet!</string>
<string name="constraints_violation">Beschränkungen wurden verletzt oder Limit erreicht</string> <string name="constraints_violation">Beschränkungen wurden verletzt oder Limit erreicht</string>
<string name="cs_lang">Czech</string> <string name="cs_lang">Czech</string>
<string name="loop_setbypump_label">Gesetzt durch Pumpe</string>
<string name="loopdisabled">LOOP DEAKTIVIERT DURCH BESCHRÄNKUNGEN</string> <string name="loopdisabled">LOOP DEAKTIVIERT DURCH BESCHRÄNKUNGEN</string>
<string name="loop_constraintsprocessed_label">Beschränkungen angewendet</string> <string name="loop_constraintsprocessed_label">Beschränkungen angewendet</string>
<string name="loop">Loop</string> <string name="loop">Loop</string>

View file

@ -100,7 +100,6 @@
<string name="configbuilder_loop">Κύκλωμα</string> <string name="configbuilder_loop">Κύκλωμα</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Μετά από επεξεργασία περιορισμών</string> <string name="loop_constraintsprocessed_label">Μετά από επεξεργασία περιορισμών</string>
<string name="loop_setbypump_label">Ρυθμίστε με αντλία</string>
<string name="openapsma_lastenact_label">Τελευταία Εφαρμογή</string> <string name="openapsma_lastenact_label">Τελευταία Εφαρμογή</string>
<string name="ok">ΟΚ</string> <string name="ok">ΟΚ</string>
<string name="cancel">Ακύρωση</string> <string name="cancel">Ακύρωση</string>

View file

@ -92,7 +92,6 @@
<string name="configbuilder_loop">Lazo</string> <string name="configbuilder_loop">Lazo</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Tras procesar limitaciones</string> <string name="loop_constraintsprocessed_label">Tras procesar limitaciones</string>
<string name="loop_setbypump_label">Definido por la bomba</string>
<string name="openapsma_lastenact_label">Última aceptada</string> <string name="openapsma_lastenact_label">Última aceptada</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">Cancelar</string> <string name="cancel">Cancelar</string>

View file

@ -95,7 +95,6 @@
<string name="configbuilder_loop">Loop</string> <string name="configbuilder_loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Après traitement des restrictions</string> <string name="loop_constraintsprocessed_label">Après traitement des restrictions</string>
<string name="loop_setbypump_label">"Défini par pompe "</string>
<string name="openapsma_lastenact_label">Dérnière mise en marche</string> <string name="openapsma_lastenact_label">Dérnière mise en marche</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">Annuler</string> <string name="cancel">Annuler</string>

View file

@ -189,7 +189,6 @@
<string name="long_avgdelta">Delta acg. esteso</string> <string name="long_avgdelta">Delta acg. esteso</string>
<string name="loop">Loop</string> <string name="loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_setbypump_label">Set Micro</string>
<string name="loop_shortname">Loop</string> <string name="loop_shortname">Loop</string>
<string name="loopdisabled">Loop disabilitato da vincolo</string> <string name="loopdisabled">Loop disabilitato da vincolo</string>
<string name="loopmenu">Loop menu</string> <string name="loopmenu">Loop menu</string>

View file

@ -98,7 +98,6 @@
<string name="configbuilder_loop">Loop</string> <string name="configbuilder_loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">제약 적용 후</string> <string name="loop_constraintsprocessed_label">제약 적용 후</string>
<string name="loop_setbypump_label">펌프 설정</string>
<string name="openapsma_lastenact_label">최근 주입</string> <string name="openapsma_lastenact_label">최근 주입</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">취소</string> <string name="cancel">취소</string>

View file

@ -218,7 +218,6 @@
<string name="loop">Loop</string> <string name="loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Berekening met toepassing van limieten</string> <string name="loop_constraintsprocessed_label">Berekening met toepassing van limieten</string>
<string name="loop_setbypump_label">Gedefinieerd door de pomp</string>
<string name="loop_shortname">LOOP</string> <string name="loop_shortname">LOOP</string>
<string name="it_lang">Italiano</string> <string name="it_lang">Italiano</string>
<string name="nl_lang">Nederlands</string> <string name="nl_lang">Nederlands</string>

View file

@ -98,7 +98,6 @@
<string name="configbuilder_loop">Loop</string> <string name="configbuilder_loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Constrângeri după procesare<string> <string name="loop_constraintsprocessed_label">Constrângeri după procesare<string>
<string name="loop_setbypump_label">Setat de pompă</string>
<string name="openapsma_lastenact_label">Ultima acțiune</string> <string name="openapsma_lastenact_label">Ultima acțiune</string>
<string name="refreshtreatmentsfromnightscout">Doriți reîncărcarea tratamentelor din Nightscout</string> <string name="refreshtreatmentsfromnightscout">Doriți reîncărcarea tratamentelor din Nightscout</string>
<string name="refreshtemptargetsfromnightscout">Doriți reîncărcarea țintelor temporare din Nightscout</string> <string name="refreshtemptargetsfromnightscout">Doriți reîncărcarea țintelor temporare din Nightscout</string>

View file

@ -234,7 +234,6 @@
<string name="loop">замкнутый цикл</string> <string name="loop">замкнутый цикл</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">после наложенных ограничений</string> <string name="loop_constraintsprocessed_label">после наложенных ограничений</string>
<string name="loop_setbypump_label">задано помпой</string>
<string name="loop_shortname">ЗЦ</string> <string name="loop_shortname">ЗЦ</string>
<string name="loopdisabled">ЗЦ ОТМЕНЕН ОГРАНИЧЕНИЯМИ</string> <string name="loopdisabled">ЗЦ ОТМЕНЕН ОГРАНИЧЕНИЯМИ</string>
<string name="loopmenu">меню ЗЦ</string> <string name="loopmenu">меню ЗЦ</string>

View file

@ -218,7 +218,6 @@
<string name="loop">Loop</string> <string name="loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Efter avklarade begränsningar</string> <string name="loop_constraintsprocessed_label">Efter avklarade begränsningar</string>
<string name="loop_setbypump_label">Inställning i pump</string>
<string name="loop_shortname">LOOP</string> <string name="loop_shortname">LOOP</string>
<string name="loopdisabled">LOOP STOPPAD PGA BEGRÄNSNINGAR</string> <string name="loopdisabled">LOOP STOPPAD PGA BEGRÄNSNINGAR</string>
<string name="loopmenu">Loop meny</string> <string name="loopmenu">Loop meny</string>

View file

@ -104,7 +104,7 @@
<string name="configbuilder_loop">Loop</string> <string name="configbuilder_loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">After processed constraints</string> <string name="loop_constraintsprocessed_label">After processed constraints</string>
<string name="loop_setbypump_label">Set by pump</string> <string name="loop_tbrsetbypump_label">Temp basal set by pump</string>
<string name="openapsma_lastenact_label">Last enacted</string> <string name="openapsma_lastenact_label">Last enacted</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
@ -981,5 +981,6 @@
<string name="bolusrecordedonly">Bolus will be recorded only</string> <string name="bolusrecordedonly">Bolus will be recorded only</string>
<string name="ns_autobackfill">Autobackfill missig BGs from NS</string> <string name="ns_autobackfill">Autobackfill missig BGs from NS</string>
<string name="key_ns_autobackfill" translatable="false">ns_autobackfill</string> <string name="key_ns_autobackfill" translatable="false">ns_autobackfill</string>
<string name="loop_smbsetbypump_label">SMB set by pump</string>
</resources> </resources>