Merge remote-tracking branch 'origin/dev' into combo-dev-merge

* origin/dev:
  check for null profile
  remove profile dependency from pump drivers, TRB optimalization
  split enacting TRB and SMB
This commit is contained in:
Johannes Mockenhaupt 2018-03-17 13:39:38 +01:00
commit 8457cd3843
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1
57 changed files with 414 additions and 338 deletions

View file

@ -366,7 +366,7 @@ public class DataService extends IntentService {
String activeProfile = bundles.getString("activeprofile"); String activeProfile = bundles.getString("activeprofile");
String profile = bundles.getString("profile"); String profile = bundles.getString("profile");
ProfileStore profileStore = new ProfileStore(new JSONObject(profile)); ProfileStore profileStore = new ProfileStore(new JSONObject(profile));
NSProfilePlugin.storeNewProfile(profileStore); NSProfilePlugin.getPlugin().storeNewProfile(profileStore);
MainApp.bus().post(new EventNSProfileUpdateGUI()); MainApp.bus().post(new EventNSProfileUpdateGUI());
// if there are no profile switches this should lead to profile update // if there are no profile switches this should lead to profile update
if (MainApp.getConfigBuilder().getProfileSwitchesFromHistory().size() == 0) if (MainApp.getConfigBuilder().getProfileSwitchesFromHistory().size() == 0)

View file

@ -22,8 +22,8 @@ public class PumpEnactResult {
// 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 {
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;
} }
@ -72,12 +72,12 @@ public class PumpEnactResult {
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;
} }
@ -94,7 +94,11 @@ public class PumpEnactResult {
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);
@ -120,7 +124,11 @@ public class PumpEnactResult {
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);
@ -147,15 +155,17 @@ public class PumpEnactResult {
public PumpEnactResult() { public PumpEnactResult() {
} }
public JSONObject json() { public JSONObject json(Profile profile) {
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) {
// Nightscout is expecting absolute value // Nightscout is expecting absolute value
Double abs = Round.roundTo(MainApp.getConfigBuilder().getProfile().getBasal() * percent / 100, 0.01); Double abs = Round.roundTo(profile.getBasal() * percent / 100, 0.01);
result.put("rate", abs); result.put("rate", abs);
result.put("duration", duration); result.put("duration", duration);
} else { } else {

View file

@ -262,13 +262,13 @@ public class TemporaryBasal implements Interval {
return (remainingMin < 0) ? 0 : Math.round(remainingMin); return (remainingMin < 0) ? 0 : Math.round(remainingMin);
} }
public double tempBasalConvertedToAbsolute(long time) { public double tempBasalConvertedToAbsolute(long time, Profile profile) {
if(isFakeExtended){ if(isFakeExtended){
return MainApp.getConfigBuilder().getProfile(time).getBasal(time) + netExtendedRate; return profile.getBasal(time) + netExtendedRate;
} else if (isAbsolute) { } else if (isAbsolute) {
return absoluteRate; return absoluteRate;
} else { } else {
return MainApp.getConfigBuilder().getProfile(time).getBasal(time) * percentRate / 100; return profile.getBasal(time) * percentRate / 100;
} }
} }

View file

@ -3,6 +3,7 @@ package info.nightscout.androidaps.interfaces;
import java.util.Date; import java.util.Date;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
/** /**

View file

@ -44,7 +44,7 @@ public interface PumpInterface {
PumpEnactResult cancelExtendedBolus(); PumpEnactResult cancelExtendedBolus();
// Status to be passed to NS // Status to be passed to NS
JSONObject getJSONStatus(); JSONObject getJSONStatus(Profile profile, String profileName);
String deviceID(); String deviceID();
// Pump capabilities // Pump capabilities

View file

@ -41,8 +41,6 @@ public interface TreatmentsInterface {
// basal that can be faked by extended boluses // basal that can be faked by extended boluses
boolean isTempBasalInProgress(); boolean isTempBasalInProgress();
TemporaryBasal getTempBasalFromHistory(long time); TemporaryBasal getTempBasalFromHistory(long time);
double getTempBasalAbsoluteRateHistory();
double getTempBasalRemainingMinutesFromHistory();
Intervals<TemporaryBasal> getTemporaryBasalsFromHistory(); Intervals<TemporaryBasal> getTemporaryBasalsFromHistory();
boolean isInHistoryExtendedBoluslInProgress(); boolean isInHistoryExtendedBoluslInProgress();

View file

@ -354,10 +354,12 @@ 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, Profile profile, Callback callback) {
PumpInterface pump = getActivePump(); PumpInterface pump = getActivePump();
request.rate = applyBasalConstraints(request.rate); request.rate = applyBasalConstraints(request.rate);
long now = System.currentTimeMillis();
if (!pump.isInitialized()) { if (!pump.isInitialized()) {
log.debug("applyAPSRequest: " + MainApp.sResources.getString(R.string.pumpNotInitialized)); log.debug("applyAPSRequest: " + MainApp.sResources.getString(R.string.pumpNotInitialized));
if (callback != null) { if (callback != null) {
@ -378,8 +380,9 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
log.debug("applyAPSRequest: " + request.toString()); log.debug("applyAPSRequest: " + request.toString());
if (request.tempBasalReqested) { if (request.tempBasalReqested) {
TemporaryBasal activeTemp = getTempBasalFromHistory(now);
if ((request.rate == 0 && request.duration == 0) || Math.abs(request.rate - pump.getBaseBasalRate()) < pump.getPumpDescription().basalStep) { if ((request.rate == 0 && request.duration == 0) || Math.abs(request.rate - pump.getBaseBasalRate()) < pump.getPumpDescription().basalStep) {
if (isTempBasalInProgress()) { if (activeTemp != null) {
if (Config.logCongigBuilderActions) if (Config.logCongigBuilderActions)
log.debug("applyAPSRequest: cancelTempBasal()"); log.debug("applyAPSRequest: cancelTempBasal()");
getCommandQueue().cancelTempBasal(false, callback); getCommandQueue().cancelTempBasal(false, callback);
@ -390,13 +393,13 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
callback.result(new PumpEnactResult().absolute(request.rate).duration(0).enacted(false).success(true).comment("Basal set correctly")).run(); callback.result(new PumpEnactResult().absolute(request.rate).duration(0).enacted(false).success(true).comment("Basal set correctly")).run();
} }
} }
} else if (isTempBasalInProgress() } else if (activeTemp != null
&& getTempBasalRemainingMinutesFromHistory() > 5 && activeTemp.getPlannedRemainingMinutes() > 5
&& Math.abs(request.rate - getTempBasalAbsoluteRateHistory()) < pump.getPumpDescription().basalStep) { && Math.abs(request.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < pump.getPumpDescription().basalStep) {
if (Config.logCongigBuilderActions) if (Config.logCongigBuilderActions)
log.debug("applyAPSRequest: Temp basal set correctly"); log.debug("applyAPSRequest: Temp basal set correctly");
if (callback != null) { if (callback != null) {
callback.result(new PumpEnactResult().absolute(getTempBasalAbsoluteRateHistory()).duration(getTempBasalFromHistory(System.currentTimeMillis()).getPlannedRemainingMinutes()).enacted(false).success(true).comment("Temp basal set correctly")).run(); callback.result(new PumpEnactResult().absolute(activeTemp.tempBasalConvertedToAbsolute(now, profile)).duration(activeTemp.getPlannedRemainingMinutes()).enacted(false).success(true).comment("Temp basal set correctly")).run();
} }
} else { } else {
if (Config.logCongigBuilderActions) if (Config.logCongigBuilderActions)
@ -404,6 +407,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();
@ -622,16 +648,6 @@ public class ConfigBuilderPlugin implements PluginBase, ConstraintsInterface, Tr
return activeTreatments != null ? activeTreatments.getTempBasalFromHistory(time) : null; return activeTreatments != null ? activeTreatments.getTempBasalFromHistory(time) : null;
} }
@Override
public double getTempBasalAbsoluteRateHistory() {
return activeTreatments.getTempBasalAbsoluteRateHistory();
}
@Override
public double getTempBasalRemainingMinutesFromHistory() {
return activeTreatments.getTempBasalRemainingMinutesFromHistory();
}
@Override @Override
public Intervals<TemporaryBasal> getTemporaryBasalsFromHistory() { public Intervals<TemporaryBasal> getTemporaryBasalsFromHistory() {
return activeTreatments.getTemporaryBasalsFromHistory(); return activeTreatments.getTemporaryBasalsFromHistory();
@ -767,6 +783,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());
@ -779,8 +803,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) {
@ -796,8 +822,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;
@ -815,6 +843,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

@ -4,6 +4,7 @@ import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;

View file

@ -389,11 +389,12 @@ public class IobCobCalculatorPlugin implements PluginBase {
BasalData retval = basalDataTable.get(time); BasalData retval = basalDataTable.get(time);
if (retval == null) { if (retval == null) {
retval = new BasalData(); retval = new BasalData();
Profile profile = MainApp.getConfigBuilder().getProfile(time);
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(time); TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(time);
retval.basal = MainApp.getConfigBuilder().getProfile(time).getBasal(time); retval.basal = profile.getBasal(time);
if (tb != null) { if (tb != null) {
retval.isTempBasalRunning = true; retval.isTempBasalRunning = true;
retval.tempBasalAbsolute = tb.tempBasalConvertedToAbsolute(time); retval.tempBasalAbsolute = tb.tempBasalConvertedToAbsolute(time, profile);
} else { } else {
retval.isTempBasalRunning = false; retval.isTempBasalRunning = false;
retval.tempBasalAbsolute = retval.basal; retval.tempBasalAbsolute = retval.basal;

View file

@ -59,7 +59,7 @@ public class IobCobThread extends Thread {
log.debug("Aborting calculation thread (ConfigBuilder not ready): " + from); log.debug("Aborting calculation thread (ConfigBuilder not ready): " + from);
return; // app still initializing return; // app still initializing
} }
if (MainApp.getConfigBuilder().getProfile() == null) { if (!MainApp.getConfigBuilder().isProfileValid("IobCobThread")) {
log.debug("Aborting calculation thread (No profile): " + from); log.debug("Aborting calculation thread (No profile): " + from);
return; // app still initializing return; // app still initializing
} }

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

@ -21,6 +21,7 @@ import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainActivity; import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.events.EventTreatmentChange;
@ -30,7 +31,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 +65,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 +267,9 @@ public class LoopPlugin implements PluginBase {
if (!isEnabled(PluginBase.LOOP)) if (!isEnabled(PluginBase.LOOP))
return; return;
if (MainApp.getConfigBuilder().getProfile() == null) { Profile profile = MainApp.getConfigBuilder().getProfile();
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 +307,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 +324,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, profile, 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

@ -218,11 +218,13 @@ public class DetermineBasalAdapterAMAJS {
mProfile.put("out_units", "mmol/L"); mProfile.put("out_units", "mmol/L");
} }
long now = System.currentTimeMillis();
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
mCurrentTemp = new JSONObject(); mCurrentTemp = new JSONObject();
mCurrentTemp.put("temp", "absolute"); mCurrentTemp.put("temp", "absolute");
mCurrentTemp.put("duration", MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()); mCurrentTemp.put("duration", tb != null ? tb.getPlannedRemainingMinutes() : 0);
mCurrentTemp.put("rate", MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory()); mCurrentTemp.put("rate", tb != null ? tb.tempBasalConvertedToAbsolute(now, profile) : 0d);
// as we have non default temps longer than 30 mintues // as we have non default temps longer than 30 mintues
TemporaryBasal tempBasal = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()); TemporaryBasal tempBasal = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis());

View file

@ -15,6 +15,7 @@ import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.interfaces.APSInterface; import info.nightscout.androidaps.interfaces.APSInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
@ -248,11 +249,13 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface {
determineBasalResultAMA.tempBasalReqested = false; determineBasalResultAMA.tempBasalReqested = false;
// limit requests on openloop mode // limit requests on openloop mode
if (!MainApp.getConfigBuilder().isClosedModeEnabled()) { if (!MainApp.getConfigBuilder().isClosedModeEnabled()) {
if (MainApp.getConfigBuilder().isTempBasalInProgress() && determineBasalResultAMA.rate == 0 && determineBasalResultAMA.duration == 0) { long now = System.currentTimeMillis();
TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
if (activeTemp != null && determineBasalResultAMA.rate == 0 && determineBasalResultAMA.duration == 0) {
// going to cancel // going to cancel
} else if (MainApp.getConfigBuilder().isTempBasalInProgress() && Math.abs(determineBasalResultAMA.rate - MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory()) < 0.1) { } else if (activeTemp != null && Math.abs(determineBasalResultAMA.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
determineBasalResultAMA.tempBasalReqested = false; determineBasalResultAMA.tempBasalReqested = false;
} else if (!MainApp.getConfigBuilder().isTempBasalInProgress() && Math.abs(determineBasalResultAMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1) } else if (activeTemp == null && Math.abs(determineBasalResultAMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
determineBasalResultAMA.tempBasalReqested = false; determineBasalResultAMA.tempBasalReqested = false;
} }

View file

@ -23,6 +23,7 @@ import info.nightscout.androidaps.data.GlucoseStatus;
import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.plugins.Loop.ScriptReader; import info.nightscout.androidaps.plugins.Loop.ScriptReader;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
@ -179,9 +180,12 @@ public class DetermineBasalAdapterMAJS {
mProfile.put("out_units", "mmol/L"); mProfile.put("out_units", "mmol/L");
} }
long now = System.currentTimeMillis();
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
mCurrentTemp = new JSONObject(); mCurrentTemp = new JSONObject();
mCurrentTemp.put("duration", MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()); mCurrentTemp.put("duration", tb != null ? tb.getPlannedRemainingMinutes() : 0);
mCurrentTemp.put("rate", MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory()); mCurrentTemp.put("rate", tb != null ? tb.tempBasalConvertedToAbsolute(now, profile) : 0d);
mIobData = new JSONObject(); mIobData = new JSONObject();
mIobData.put("iob", iobData.iob); //netIob mIobData.put("iob", iobData.iob); //netIob

View file

@ -15,6 +15,7 @@ import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.interfaces.APSInterface; import info.nightscout.androidaps.interfaces.APSInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
@ -173,8 +174,6 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
String units = profile.getUnits(); String units = profile.getUnits();
Date now = new Date();
double maxIob = SP.getDouble("openapsma_max_iob", 1.5d); double maxIob = SP.getDouble("openapsma_max_iob", 1.5d);
double maxBasal = SafeParse.stringToDouble(SP.getString("openapsma_max_basal", "1")); double maxBasal = SafeParse.stringToDouble(SP.getString("openapsma_max_basal", "1"));
double minBg = Profile.toMgdl(profile.getTargetLow(), units); double minBg = Profile.toMgdl(profile.getTargetLow(), units);
@ -231,17 +230,20 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
Profiler.log(log, "MA calculation", start); Profiler.log(log, "MA calculation", start);
long now = System.currentTimeMillis();
DetermineBasalResultMA determineBasalResultMA = determineBasalAdapterMAJS.invoke(); DetermineBasalResultMA determineBasalResultMA = determineBasalAdapterMAJS.invoke();
// Fix bug determinef basal // Fix bug determinef basal
if (determineBasalResultMA.rate == 0d && determineBasalResultMA.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress()) if (determineBasalResultMA.rate == 0d && determineBasalResultMA.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress())
determineBasalResultMA.tempBasalReqested = false; determineBasalResultMA.tempBasalReqested = false;
// limit requests on openloop mode // limit requests on openloop mode
if (!MainApp.getConfigBuilder().isClosedModeEnabled()) { if (!MainApp.getConfigBuilder().isClosedModeEnabled()) {
if (MainApp.getConfigBuilder().isTempBasalInProgress() && determineBasalResultMA.rate == 0 && determineBasalResultMA.duration == 0) { TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
if (activeTemp != null && determineBasalResultMA.rate == 0 && determineBasalResultMA.duration == 0) {
// going to cancel // going to cancel
} else if (MainApp.getConfigBuilder().isTempBasalInProgress() && Math.abs(determineBasalResultMA.rate - MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory()) < 0.1) { } else if (activeTemp != null && Math.abs(determineBasalResultMA.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
determineBasalResultMA.tempBasalReqested = false; determineBasalResultMA.tempBasalReqested = false;
} else if (!MainApp.getConfigBuilder().isTempBasalInProgress() && Math.abs(determineBasalResultMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1) } else if (activeTemp == null && Math.abs(determineBasalResultMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
determineBasalResultMA.tempBasalReqested = false; determineBasalResultMA.tempBasalReqested = false;
} }
@ -255,7 +257,7 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
lastDetermineBasalAdapterMAJS = determineBasalAdapterMAJS; lastDetermineBasalAdapterMAJS = determineBasalAdapterMAJS;
lastAPSResult = determineBasalResultMA; lastAPSResult = determineBasalResultMA;
lastAPSRun = now; lastAPSRun = new Date(now);
MainApp.bus().post(new EventOpenAPSUpdateGui()); MainApp.bus().post(new EventOpenAPSUpdateGui());
} }

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);
@ -263,10 +264,13 @@ public class DetermineBasalAdapterSMBJS {
} }
long now = System.currentTimeMillis();
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
mCurrentTemp = new JSONObject(); mCurrentTemp = new JSONObject();
mCurrentTemp.put("temp", "absolute"); mCurrentTemp.put("temp", "absolute");
mCurrentTemp.put("duration", MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()); mCurrentTemp.put("duration", tb != null ? tb.getPlannedRemainingMinutes() : 0);
mCurrentTemp.put("rate", MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory()); mCurrentTemp.put("rate", tb != null ? tb.tempBasalConvertedToAbsolute(now, profile) : 0d);
// as we have non default temps longer than 30 mintues // as we have non default temps longer than 30 mintues
TemporaryBasal tempBasal = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()); TemporaryBasal tempBasal = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis());

View file

@ -15,6 +15,7 @@ import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.interfaces.APSInterface; import info.nightscout.androidaps.interfaces.APSInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
@ -243,6 +244,7 @@ public class OpenAPSSMBPlugin implements PluginBase, APSInterface {
return; return;
} }
long now = System.currentTimeMillis();
DetermineBasalResultSMB determineBasalResultSMB = determineBasalAdapterSMBJS.invoke(); DetermineBasalResultSMB determineBasalResultSMB = determineBasalAdapterSMBJS.invoke();
Profiler.log(log, "SMB calculation", start); Profiler.log(log, "SMB calculation", start);
@ -252,17 +254,16 @@ public class OpenAPSSMBPlugin implements PluginBase, APSInterface {
determineBasalResultSMB.tempBasalReqested = false; determineBasalResultSMB.tempBasalReqested = false;
// limit requests on openloop mode // limit requests on openloop mode
if (!MainApp.getConfigBuilder().isClosedModeEnabled()) { if (!MainApp.getConfigBuilder().isClosedModeEnabled()) {
if (MainApp.getConfigBuilder().isTempBasalInProgress() && determineBasalResultSMB.rate == 0 && determineBasalResultSMB.duration == 0) { TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
if (activeTemp != null && determineBasalResultSMB.rate == 0 && determineBasalResultSMB.duration == 0) {
// going to cancel // going to cancel
} else if (MainApp.getConfigBuilder().isTempBasalInProgress() && Math.abs(determineBasalResultSMB.rate - MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory()) < 0.1) { } else if (activeTemp != null && Math.abs(determineBasalResultSMB.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
determineBasalResultSMB.tempBasalReqested = false; determineBasalResultSMB.tempBasalReqested = false;
} else if (!MainApp.getConfigBuilder().isTempBasalInProgress() && Math.abs(determineBasalResultSMB.rate - pump.getBaseBasalRate()) < 0.1) { } else if (activeTemp == null && Math.abs(determineBasalResultSMB.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
determineBasalResultSMB.tempBasalReqested = false; determineBasalResultSMB.tempBasalReqested = false;
} }
}
determineBasalResultSMB.iob = iobArray[0]; determineBasalResultSMB.iob = iobArray[0];
Date now = new Date();
try { try {
determineBasalResultSMB.json.put("timestamp", DateUtil.toISOString(now)); determineBasalResultSMB.json.put("timestamp", DateUtil.toISOString(now));
@ -272,7 +273,7 @@ public class OpenAPSSMBPlugin implements PluginBase, APSInterface {
lastDetermineBasalAdapterSMBJS = determineBasalAdapterSMBJS; lastDetermineBasalAdapterSMBJS = determineBasalAdapterSMBJS;
lastAPSResult = determineBasalResultSMB; lastAPSResult = determineBasalResultSMB;
lastAPSRun = now; lastAPSRun = new Date(now);
MainApp.bus().post(new EventOpenAPSUpdateGui()); MainApp.bus().post(new EventOpenAPSUpdateGui());
//deviceStatus.suggested = determineBasalResultAMA.json; //deviceStatus.suggested = determineBasalResultAMA.json;

View file

@ -404,6 +404,7 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
if (profile == null) { if (profile == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile));
dismiss();
return; return;
} }

View file

@ -627,7 +627,9 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
} }
private void onClickAcceptTemp() { private void onClickAcceptTemp() {
if (ConfigBuilderPlugin.getActiveLoop() != null) { Profile profile = MainApp.getConfigBuilder().getProfile();
if (ConfigBuilderPlugin.getActiveLoop() != null && profile != null) {
ConfigBuilderPlugin.getActiveLoop().invoke("Accept temp button", false); ConfigBuilderPlugin.getActiveLoop().invoke("Accept temp button", false);
final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun; final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun;
if (finalLastRun != null && finalLastRun.lastAPSRun != null && finalLastRun.constraintsProcessed.isChangeRequested()) { if (finalLastRun != null && finalLastRun.lastAPSRun != null && finalLastRun.constraintsProcessed.isChangeRequested()) {
@ -638,11 +640,11 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
public void onClick(DialogInterface dialog, int id) { public void onClick(DialogInterface dialog, int id) {
hideTempRecommendation(); hideTempRecommendation();
clearNotification(); clearNotification();
MainApp.getConfigBuilder().applyAPSRequest(finalLastRun.constraintsProcessed, new Callback() { MainApp.getConfigBuilder().applyTBRRequest(finalLastRun.constraintsProcessed, profile, new Callback() {
@Override @Override
public void run() { public void run() {
if (result.enacted) { if (result.enacted) {
finalLastRun.setByPump = result; finalLastRun.tbrSetByPump = result;
finalLastRun.lastEnact = new Date(); finalLastRun.lastEnact = new Date();
finalLastRun.lastOpenModeAccept = new Date(); finalLastRun.lastOpenModeAccept = new Date();
NSUpload.uploadDeviceStatus(); NSUpload.uploadDeviceStatus();
@ -670,7 +672,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
final TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(); final TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory();
final QuickWizardEntry quickWizardEntry = OverviewPlugin.getPlugin().quickWizard.getActive(); final QuickWizardEntry quickWizardEntry = OverviewPlugin.getPlugin().quickWizard.getActive();
if (quickWizardEntry != null && actualBg != null) { if (quickWizardEntry != null && actualBg != null && profile != null) {
quickWizardButton.setVisibility(View.VISIBLE); quickWizardButton.setVisibility(View.VISIBLE);
final BolusWizard wizard = quickWizardEntry.doCalc(profile, tempTarget, actualBg, true); final BolusWizard wizard = quickWizardEntry.doCalc(profile, tempTarget, actualBg, true);
@ -946,7 +948,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
if (timeView != null) { //must not exists if (timeView != null) { //must not exists
timeView.setText(DateUtil.timeString(new Date())); timeView.setText(DateUtil.timeString(new Date()));
} }
if (MainApp.getConfigBuilder().getProfile() == null) {// app not initialized yet if (!MainApp.getConfigBuilder().isProfileValid("Overview")) {// app not initialized yet
pumpStatusView.setText(R.string.noprofileset); pumpStatusView.setText(R.string.noprofileset);
pumpStatusLayout.setVisibility(View.VISIBLE); pumpStatusLayout.setVisibility(View.VISIBLE);
loopStatusLayout.setVisibility(View.GONE); loopStatusLayout.setVisibility(View.GONE);
@ -962,16 +964,15 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
final PumpInterface pump = ConfigBuilderPlugin.getActivePump(); final PumpInterface pump = ConfigBuilderPlugin.getActivePump();
Profile profile = MainApp.getConfigBuilder().getProfile(); final Profile profile = MainApp.getConfigBuilder().getProfile();
String units = profile.getUnits(); if (profile == null) {
if (units == null) {
pumpStatusView.setText(R.string.noprofileset); pumpStatusView.setText(R.string.noprofileset);
pumpStatusLayout.setVisibility(View.VISIBLE); pumpStatusLayout.setVisibility(View.VISIBLE);
loopStatusLayout.setVisibility(View.GONE); loopStatusLayout.setVisibility(View.GONE);
return; return;
} }
final String units = profile.getUnits();
final double lowLine = OverviewPlugin.getPlugin().determineLowLine(units); final double lowLine = OverviewPlugin.getPlugin().determineLowLine(units);
final double highLine = OverviewPlugin.getPlugin().determineHighLine(units); final double highLine = OverviewPlugin.getPlugin().determineHighLine(units);
@ -1090,12 +1091,12 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
if (activeTemp != null) { if (activeTemp != null) {
basalText = "T: " + activeTemp.toStringVeryShort(); basalText = "T: " + activeTemp.toStringVeryShort();
} else { } else {
basalText = DecimalFormatter.to2Decimal(MainApp.getConfigBuilder().getProfile().getBasal()) + "U/h"; basalText = DecimalFormatter.to2Decimal(profile.getBasal()) + "U/h";
} }
baseBasalView.setOnClickListener(new View.OnClickListener() { baseBasalView.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
String fullText = MainApp.sResources.getString(R.string.pump_basebasalrate_label) + ": " + DecimalFormatter.to2Decimal(MainApp.getConfigBuilder().getProfile().getBasal()) + "U/h\n"; String fullText = MainApp.sResources.getString(R.string.pump_basebasalrate_label) + ": " + DecimalFormatter.to2Decimal(profile.getBasal()) + "U/h\n";
if (activeTemp != null) { if (activeTemp != null) {
fullText += MainApp.sResources.getString(R.string.pump_tempbasal_label) + ": " + activeTemp.toStringFull(); fullText += MainApp.sResources.getString(R.string.pump_tempbasal_label) + ": " + activeTemp.toStringFull();
} }
@ -1108,7 +1109,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
basalText = activeTemp.toStringFull() + " "; basalText = activeTemp.toStringFull() + " ";
} }
if (Config.NSCLIENT || Config.G5UPLOADER) if (Config.NSCLIENT || Config.G5UPLOADER)
basalText += "(" + DecimalFormatter.to2Decimal(MainApp.getConfigBuilder().getProfile().getBasal()) + " U/h)"; basalText += "(" + DecimalFormatter.to2Decimal(profile.getBasal()) + " U/h)";
else if (pump.getPumpDescription().isTempBasalCapable) { else if (pump.getPumpDescription().isTempBasalCapable) {
basalText += "(" + DecimalFormatter.to2Decimal(pump.getBaseBasalRate()) + "U/h)"; basalText += "(" + DecimalFormatter.to2Decimal(pump.getBaseBasalRate()) + "U/h)";
} }
@ -1369,7 +1370,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
} }
// add target line // add target line
graphData.addTargetLine(fromTime, toTime); graphData.addTargetLine(fromTime, toTime, profile);
// **** NOW line **** // **** NOW line ****
graphData.addNowLine(now); graphData.addNowLine(now);

View file

@ -221,12 +221,7 @@ public class GraphData {
addSeries(absoluteBasalsLineSeries); addSeries(absoluteBasalsLineSeries);
} }
public void addTargetLine(long fromTime, long toTime) { public void addTargetLine(long fromTime, long toTime, Profile profile) {
Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) {
return;
}
LineGraphSeries<DataPoint> targetsSeries; LineGraphSeries<DataPoint> targetsSeries;
Scale targetsScale = new Scale(); Scale targetsScale = new Scale();

View file

@ -119,7 +119,7 @@ public class PersistentNotificationPlugin implements PluginBase {
String line1 = ctx.getString(R.string.noprofile); String line1 = ctx.getString(R.string.noprofile);
if (MainApp.getConfigBuilder().getActiveProfileInterface() == null || MainApp.getConfigBuilder().getProfile() == null) if (MainApp.getConfigBuilder().getActiveProfileInterface() == null || !MainApp.getConfigBuilder().isProfileValid("Notificiation"))
return; return;
String units = MainApp.getConfigBuilder().getProfileUnits(); String units = MainApp.getConfigBuilder().getProfileUnits();

View file

@ -46,7 +46,7 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
private boolean fragmentEnabled = true; private boolean fragmentEnabled = true;
private boolean fragmentVisible = true; private boolean fragmentVisible = true;
private static ProfileStore profile = null; private ProfileStore profile = null;
private NSProfilePlugin() { private NSProfilePlugin() {
MainApp.bus().register(this); MainApp.bus().register(this);
@ -116,10 +116,11 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
} }
@Subscribe @Subscribe
public static void storeNewProfile(ProfileStore newProfile) { public void storeNewProfile(ProfileStore newProfile) {
profile = new ProfileStore(newProfile.getData()); profile = new ProfileStore(newProfile.getData());
storeNSProfile(); storeNSProfile();
MainApp.bus().post(new EventNSProfileUpdateGUI()); MainApp.bus().post(new EventNSProfileUpdateGUI());
if (MainApp.getConfigBuilder().isProfileValid("storeNewProfile")) {
ConfigBuilderPlugin.getCommandQueue().setProfile(MainApp.getConfigBuilder().getProfile(), new Callback() { ConfigBuilderPlugin.getCommandQueue().setProfile(MainApp.getConfigBuilder().getProfile(), new Callback() {
@Override @Override
public void run() { public void run() {
@ -132,8 +133,9 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
} }
}); });
} }
}
private static void storeNSProfile() { private void storeNSProfile() {
SP.putString("profile", profile.getData().toString()); SP.putString("profile", profile.getData().toString());
if (Config.logPrefsChange) if (Config.logPrefsChange)
log.debug("Storing profile"); log.debug("Storing profile");

View file

@ -228,7 +228,8 @@ public abstract class AbstractDanaRPlugin implements PluginBase, PumpInterface,
} }
if (percent > getPumpDescription().maxTempPercent) if (percent > getPumpDescription().maxTempPercent)
percent = getPumpDescription().maxTempPercent; percent = getPumpDescription().maxTempPercent;
TemporaryBasal runningTB = MainApp.getConfigBuilder().getRealTempBasalFromHistory(System.currentTimeMillis()); long now = System.currentTimeMillis();
TemporaryBasal runningTB = MainApp.getConfigBuilder().getRealTempBasalFromHistory(now);
if (runningTB != null && runningTB.percentRate == percent && !enforceNew) { if (runningTB != null && runningTB.percentRate == percent && !enforceNew) {
result.enacted = false; result.enacted = false;
result.success = true; result.success = true;
@ -236,7 +237,6 @@ public abstract class AbstractDanaRPlugin implements PluginBase, PumpInterface,
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok); result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
result.duration = pump.tempBasalRemainingMin; result.duration = pump.tempBasalRemainingMin;
result.percent = pump.tempBasalPercent; result.percent = pump.tempBasalPercent;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.isPercent = true; result.isPercent = true;
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalPercent: Correct value already set"); log.debug("setTempBasalPercent: Correct value already set");
@ -251,7 +251,6 @@ public abstract class AbstractDanaRPlugin implements PluginBase, PumpInterface,
result.isTempCancel = false; result.isTempCancel = false;
result.duration = pump.tempBasalRemainingMin; result.duration = pump.tempBasalRemainingMin;
result.percent = pump.tempBasalPercent; result.percent = pump.tempBasalPercent;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.isPercent = true; result.isPercent = true;
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalPercent: OK"); log.debug("setTempBasalPercent: OK");
@ -365,7 +364,8 @@ public abstract class AbstractDanaRPlugin implements PluginBase, PumpInterface,
} }
@Override @Override
public JSONObject getJSONStatus() { public JSONObject getJSONStatus(Profile profile, String profilename) {
long now = System.currentTimeMillis();
if (pump.lastConnection + 5 * 60 * 1000L < System.currentTimeMillis()) { if (pump.lastConnection + 5 * 60 * 1000L < System.currentTimeMillis()) {
return null; return null;
} }
@ -383,13 +383,13 @@ public abstract class AbstractDanaRPlugin implements PluginBase, PumpInterface,
extended.put("LastBolus", pump.lastBolusTime.toLocaleString()); extended.put("LastBolus", pump.lastBolusTime.toLocaleString());
extended.put("LastBolusAmount", pump.lastBolusAmount); extended.put("LastBolusAmount", pump.lastBolusAmount);
} }
TemporaryBasal tb = MainApp.getConfigBuilder().getRealTempBasalFromHistory(System.currentTimeMillis()); TemporaryBasal tb = MainApp.getConfigBuilder().getRealTempBasalFromHistory(now);
if (tb != null) { if (tb != null) {
extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(System.currentTimeMillis())); extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(now, profile));
extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date)); extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date));
extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes()); extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes());
} }
ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis()); ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(now);
if (eb != null) { if (eb != null) {
extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate()); extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate());
extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date)); extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date));
@ -397,7 +397,7 @@ public abstract class AbstractDanaRPlugin implements PluginBase, PumpInterface,
} }
extended.put("BaseBasalRate", getBaseBasalRate()); extended.put("BaseBasalRate", getBaseBasalRate());
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName()); extended.put("ActiveProfile", profilename);
} catch (Exception e) { } catch (Exception e) {
} }

View file

@ -15,6 +15,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventAppExit;
@ -178,15 +179,19 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
final boolean doHighTemp = absoluteRate > getBaseBasalRate() && !useExtendedBoluses; final boolean doHighTemp = absoluteRate > getBaseBasalRate() && !useExtendedBoluses;
final boolean doExtendedTemp = absoluteRate > getBaseBasalRate() && useExtendedBoluses; final boolean doExtendedTemp = absoluteRate > getBaseBasalRate() && useExtendedBoluses;
long now = System.currentTimeMillis();
TemporaryBasal activeTemp = MainApp.getConfigBuilder().getRealTempBasalFromHistory(now);
ExtendedBolus activeExtended = MainApp.getConfigBuilder().getExtendedBolusFromHistory(now);
if (doTempOff) { if (doTempOff) {
// If extended in progress // If extended in progress
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) { if (activeExtended != null && useExtendedBoluses) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping extended bolus (doTempOff)"); log.debug("setTempBasalAbsolute: Stopping extended bolus (doTempOff)");
return cancelExtendedBolus(); return cancelExtendedBolus();
} }
// If temp in progress // If temp in progress
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { if (activeTemp != null) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping temp basal (doTempOff)"); log.debug("setTempBasalAbsolute: Stopping temp basal (doTempOff)");
return cancelRealTempBasal(); return cancelRealTempBasal();
@ -212,7 +217,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
log.debug("setTempBasalAbsolute: Calculated percent rate: " + percentRate); log.debug("setTempBasalAbsolute: Calculated percent rate: " + percentRate);
// If extended in progress // If extended in progress
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) { if (activeExtended != null && useExtendedBoluses) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping extended bolus (doLowTemp || doHighTemp)"); log.debug("setTempBasalAbsolute: Stopping extended bolus (doLowTemp || doHighTemp)");
result = cancelExtendedBolus(); result = cancelExtendedBolus();
@ -222,20 +227,18 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
} }
} }
// Check if some temp is already in progress // Check if some temp is already in progress
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { if (activeTemp != null) {
// Correct basal already set ? // Correct basal already set ?
TemporaryBasal running = MainApp.getConfigBuilder().getRealTempBasalFromHistory(System.currentTimeMillis());
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: currently running: " + running.toString()); log.debug("setTempBasalAbsolute: currently running: " + activeTemp.toString());
if (running.percentRate == percentRate) { if (activeTemp.percentRate == percentRate) {
if (enforceNew) { if (enforceNew) {
cancelTempBasal(true); cancelTempBasal(true);
} else { } else {
result.success = true; result.success = true;
result.percent = percentRate; result.percent = percentRate;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.enacted = false; result.enacted = false;
result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); result.duration = activeTemp.getPlannedRemainingMinutes();
result.isPercent = true; result.isPercent = true;
result.isTempCancel = false; result.isTempCancel = false;
if (Config.logPumpActions) if (Config.logPumpActions)
@ -251,7 +254,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
} }
if (doExtendedTemp) { if (doExtendedTemp) {
// Check if some temp is already in progress // Check if some temp is already in progress
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { if (activeTemp != null) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping temp basal (doExtendedTemp)"); log.debug("setTempBasalAbsolute: Stopping temp basal (doExtendedTemp)");
result = cancelRealTempBasal(); result = cancelRealTempBasal();
@ -272,12 +275,12 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
// What is current rate of extended bolusing in u/h? // What is current rate of extended bolusing in u/h?
if (Config.logPumpActions) { if (Config.logPumpActions) {
log.debug("setTempBasalAbsolute: Extended bolus in progress: " + MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() + " rate: " + pump.extendedBolusAbsoluteRate + "U/h duration remaining: " + pump.extendedBolusRemainingMinutes + "min"); log.debug("setTempBasalAbsolute: Extended bolus in progress: " + (activeExtended != null) + " rate: " + pump.extendedBolusAbsoluteRate + "U/h duration remaining: " + pump.extendedBolusRemainingMinutes + "min");
log.debug("setTempBasalAbsolute: Rate to set: " + extendedRateToSet + "U/h"); log.debug("setTempBasalAbsolute: Rate to set: " + extendedRateToSet + "U/h");
} }
// Compare with extended rate in progress // Compare with extended rate in progress
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && Math.abs(pump.extendedBolusAbsoluteRate - extendedRateToSet) < getPumpDescription().extendedBolusStep) { if (activeExtended != null && Math.abs(pump.extendedBolusAbsoluteRate - extendedRateToSet) < getPumpDescription().extendedBolusStep) {
// correct extended already set // correct extended already set
result.success = true; result.success = true;
result.absolute = pump.extendedBolusAbsoluteRate; result.absolute = pump.extendedBolusAbsoluteRate;

View file

@ -85,12 +85,6 @@ public class ProfileViewDialog extends DialogFragment {
} }
private void setContent() { private void setContent() {
// if (profile == null) {
// noProfile.setVisibility(View.VISIBLE);
// return;
// } else {
// noProfile.setVisibility(View.GONE);
// }
ProfileStore store = ((ProfileInterface)MainApp.getConfigBuilder().getActivePump()).getProfile(); ProfileStore store = ((ProfileInterface)MainApp.getConfigBuilder().getActivePump()).getProfile();
if (store != null) { if (store != null) {
noProfile.setVisibility(View.GONE); noProfile.setVisibility(View.GONE);

View file

@ -15,6 +15,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventAppExit;
@ -179,15 +180,19 @@ public class DanaRKoreanPlugin extends AbstractDanaRPlugin {
final boolean doHighTemp = absoluteRate > getBaseBasalRate() && !useExtendedBoluses; final boolean doHighTemp = absoluteRate > getBaseBasalRate() && !useExtendedBoluses;
final boolean doExtendedTemp = absoluteRate > getBaseBasalRate() && useExtendedBoluses; final boolean doExtendedTemp = absoluteRate > getBaseBasalRate() && useExtendedBoluses;
long now = System.currentTimeMillis();
TemporaryBasal activeTemp = MainApp.getConfigBuilder().getRealTempBasalFromHistory(now);
ExtendedBolus activeExtended = MainApp.getConfigBuilder().getExtendedBolusFromHistory(now);
if (doTempOff) { if (doTempOff) {
// If extended in progress // If extended in progress
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) { if (activeExtended != null && useExtendedBoluses) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping extended bolus (doTempOff)"); log.debug("setTempBasalAbsolute: Stopping extended bolus (doTempOff)");
return cancelExtendedBolus(); return cancelExtendedBolus();
} }
// If temp in progress // If temp in progress
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { if (activeTemp != null) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping temp basal (doTempOff)"); log.debug("setTempBasalAbsolute: Stopping temp basal (doTempOff)");
return cancelRealTempBasal(); return cancelRealTempBasal();
@ -213,7 +218,7 @@ public class DanaRKoreanPlugin extends AbstractDanaRPlugin {
log.debug("setTempBasalAbsolute: Calculated percent rate: " + percentRate); log.debug("setTempBasalAbsolute: Calculated percent rate: " + percentRate);
// If extended in progress // If extended in progress
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) { if (activeExtended != null && useExtendedBoluses) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping extended bolus (doLowTemp || doHighTemp)"); log.debug("setTempBasalAbsolute: Stopping extended bolus (doLowTemp || doHighTemp)");
result = cancelExtendedBolus(); result = cancelExtendedBolus();
@ -223,20 +228,18 @@ public class DanaRKoreanPlugin extends AbstractDanaRPlugin {
} }
} }
// Check if some temp is already in progress // Check if some temp is already in progress
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { if (activeTemp != null) {
// Correct basal already set ? // Correct basal already set ?
TemporaryBasal running = MainApp.getConfigBuilder().getRealTempBasalFromHistory(System.currentTimeMillis());
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: currently running: " + running.toString()); log.debug("setTempBasalAbsolute: currently running: " + activeTemp.toString());
if (running.percentRate == percentRate) { if (activeTemp.percentRate == percentRate) {
if (enforceNew) { if (enforceNew) {
cancelTempBasal(true); cancelTempBasal(true);
} else { } else {
result.success = true; result.success = true;
result.percent = percentRate; result.percent = percentRate;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.enacted = false; result.enacted = false;
result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); result.duration = activeTemp.getPlannedRemainingMinutes();
result.isPercent = true; result.isPercent = true;
result.isTempCancel = false; result.isTempCancel = false;
if (Config.logPumpActions) if (Config.logPumpActions)
@ -252,7 +255,7 @@ public class DanaRKoreanPlugin extends AbstractDanaRPlugin {
} }
if (doExtendedTemp) { if (doExtendedTemp) {
// Check if some temp is already in progress // Check if some temp is already in progress
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { if (activeTemp != null) {
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping temp basal (doExtendedTemp)"); log.debug("setTempBasalAbsolute: Stopping temp basal (doExtendedTemp)");
result = cancelRealTempBasal(); result = cancelRealTempBasal();
@ -273,12 +276,12 @@ public class DanaRKoreanPlugin extends AbstractDanaRPlugin {
// What is current rate of extended bolusing in u/h? // What is current rate of extended bolusing in u/h?
if (Config.logPumpActions) { if (Config.logPumpActions) {
log.debug("setTempBasalAbsolute: Extended bolus in progress: " + MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() + " rate: " + pump.extendedBolusAbsoluteRate + "U/h duration remaining: " + pump.extendedBolusRemainingMinutes + "min"); log.debug("setTempBasalAbsolute: Extended bolus in progress: " + (activeExtended != null) + " rate: " + pump.extendedBolusAbsoluteRate + "U/h duration remaining: " + pump.extendedBolusRemainingMinutes + "min");
log.debug("setTempBasalAbsolute: Rate to set: " + extendedRateToSet + "U/h"); log.debug("setTempBasalAbsolute: Rate to set: " + extendedRateToSet + "U/h");
} }
// Compare with extended rate in progress // Compare with extended rate in progress
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && Math.abs(pump.extendedBolusAbsoluteRate - extendedRateToSet) < getPumpDescription().extendedBolusStep) { if (activeExtended != null && Math.abs(pump.extendedBolusAbsoluteRate - extendedRateToSet) < getPumpDescription().extendedBolusStep) {
// correct extended already set // correct extended already set
result.success = true; result.success = true;
result.absolute = pump.extendedBolusAbsoluteRate; result.absolute = pump.extendedBolusAbsoluteRate;

View file

@ -554,15 +554,17 @@ public class DanaRSPlugin implements PluginBase, PumpInterface, DanaRInterface,
if (percentRate > 500) // Special high temp 500/15min if (percentRate > 500) // Special high temp 500/15min
percentRate = 500; percentRate = 500;
// Check if some temp is already in progress // Check if some temp is already in progress
if (MainApp.getConfigBuilder().isTempBasalInProgress()) { TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis());
if (activeTemp != null) {
if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: currently running: " + activeTemp.toString());
// Correct basal already set ? // Correct basal already set ?
if (MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()).percentRate == percentRate) { if (activeTemp.percentRate == percentRate) {
if (!enforceNew) { if (!enforceNew) {
result.success = true; result.success = true;
result.percent = percentRate; result.percent = percentRate;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.enacted = false; result.enacted = false;
result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); result.duration = activeTemp.getPlannedRemainingMinutes();
result.isPercent = true; result.isPercent = true;
result.isTempCancel = false; result.isTempCancel = false;
if (Config.logPumpActions) if (Config.logPumpActions)
@ -606,7 +608,8 @@ public class DanaRSPlugin implements PluginBase, PumpInterface, DanaRInterface,
} }
if (percent > getPumpDescription().maxTempPercent) if (percent > getPumpDescription().maxTempPercent)
percent = getPumpDescription().maxTempPercent; percent = getPumpDescription().maxTempPercent;
TemporaryBasal runningTB = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()); long now = System.currentTimeMillis();
TemporaryBasal runningTB = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
if (runningTB != null && runningTB.percentRate == percent && !enforceNew) { if (runningTB != null && runningTB.percentRate == percent && !enforceNew) {
result.enacted = false; result.enacted = false;
result.success = true; result.success = true;
@ -614,7 +617,6 @@ public class DanaRSPlugin implements PluginBase, PumpInterface, DanaRInterface,
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok); result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
result.duration = pump.tempBasalRemainingMin; result.duration = pump.tempBasalRemainingMin;
result.percent = pump.tempBasalPercent; result.percent = pump.tempBasalPercent;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.isPercent = true; result.isPercent = true;
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalPercent: Correct value already set"); log.debug("setTempBasalPercent: Correct value already set");
@ -634,7 +636,6 @@ public class DanaRSPlugin implements PluginBase, PumpInterface, DanaRInterface,
result.isTempCancel = false; result.isTempCancel = false;
result.duration = pump.tempBasalRemainingMin; result.duration = pump.tempBasalRemainingMin;
result.percent = pump.tempBasalPercent; result.percent = pump.tempBasalPercent;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.isPercent = true; result.isPercent = true;
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalPercent: OK"); log.debug("setTempBasalPercent: OK");
@ -760,7 +761,8 @@ public class DanaRSPlugin implements PluginBase, PumpInterface, DanaRInterface,
} }
@Override @Override
public JSONObject getJSONStatus() { public JSONObject getJSONStatus(Profile profile, String profileName) {
long now = System.currentTimeMillis();
if (pump.lastConnection + 5 * 60 * 1000L < System.currentTimeMillis()) { if (pump.lastConnection + 5 * 60 * 1000L < System.currentTimeMillis()) {
return null; return null;
} }
@ -778,13 +780,13 @@ public class DanaRSPlugin implements PluginBase, PumpInterface, DanaRInterface,
extended.put("LastBolus", pump.lastBolusTime.toLocaleString()); extended.put("LastBolus", pump.lastBolusTime.toLocaleString());
extended.put("LastBolusAmount", pump.lastBolusAmount); extended.put("LastBolusAmount", pump.lastBolusAmount);
} }
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()); TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
if (tb != null) { if (tb != null) {
extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(System.currentTimeMillis())); extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(now, profile));
extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date)); extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date));
extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes()); extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes());
} }
ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis()); ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(now);
if (eb != null) { if (eb != null) {
extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate()); extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate());
extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date)); extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date));
@ -800,7 +802,7 @@ public class DanaRSPlugin implements PluginBase, PumpInterface, DanaRInterface,
pumpjson.put("status", status); pumpjson.put("status", status);
pumpjson.put("extended", extended); pumpjson.put("extended", extended);
pumpjson.put("reservoir", (int) pump.reservoirRemainingUnits); pumpjson.put("reservoir", (int) pump.reservoirRemainingUnits);
pumpjson.put("clock", DateUtil.toISOString(new Date())); pumpjson.put("clock", DateUtil.toISOString(now));
} catch (JSONException e) { } catch (JSONException e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);
} }

View file

@ -225,15 +225,15 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin {
if (percentRate > 500) // Special high temp 500/15min if (percentRate > 500) // Special high temp 500/15min
percentRate = 500; percentRate = 500;
// Check if some temp is already in progress // Check if some temp is already in progress
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis());
if (activeTemp != null) {
// Correct basal already set ? // Correct basal already set ?
if (MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()).percentRate == percentRate) { if (activeTemp.percentRate == percentRate) {
if (!enforceNew) { if (!enforceNew) {
result.success = true; result.success = true;
result.percent = percentRate; result.percent = percentRate;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.enacted = false; result.enacted = false;
result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); result.duration = activeTemp.getPlannedRemainingMinutes();
result.isPercent = true; result.isPercent = true;
result.isTempCancel = false; result.isTempCancel = false;
if (Config.logPumpActions) if (Config.logPumpActions)
@ -277,7 +277,8 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin {
} }
if (percent > getPumpDescription().maxTempPercent) if (percent > getPumpDescription().maxTempPercent)
percent = getPumpDescription().maxTempPercent; percent = getPumpDescription().maxTempPercent;
TemporaryBasal runningTB = MainApp.getConfigBuilder().getRealTempBasalFromHistory(System.currentTimeMillis()); long now = System.currentTimeMillis();
TemporaryBasal runningTB = MainApp.getConfigBuilder().getRealTempBasalFromHistory(now);
if (runningTB != null && runningTB.percentRate == percent && !enforceNew) { if (runningTB != null && runningTB.percentRate == percent && !enforceNew) {
result.enacted = false; result.enacted = false;
result.success = true; result.success = true;
@ -285,7 +286,6 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin {
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok); result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
result.duration = pump.tempBasalRemainingMin; result.duration = pump.tempBasalRemainingMin;
result.percent = pump.tempBasalPercent; result.percent = pump.tempBasalPercent;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.isPercent = true; result.isPercent = true;
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalPercent: Correct value already set"); log.debug("setTempBasalPercent: Correct value already set");
@ -305,7 +305,6 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin {
result.isTempCancel = false; result.isTempCancel = false;
result.duration = pump.tempBasalRemainingMin; result.duration = pump.tempBasalRemainingMin;
result.percent = pump.tempBasalPercent; result.percent = pump.tempBasalPercent;
result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory();
result.isPercent = true; result.isPercent = true;
if (Config.logPumpActions) if (Config.logPumpActions)
log.debug("setTempBasalPercent: OK"); log.debug("setTempBasalPercent: OK");

View file

@ -790,8 +790,8 @@ public class InsightPumpPlugin implements PluginBase, PumpInterface, Constraints
} }
@Override @Override
public JSONObject getJSONStatus() { public JSONObject getJSONStatus(Profile profile, String profileName) {
long now = System.currentTimeMillis();
if (Helpers.msSince(connector.getLastContactTime()) > (60 * 60 * 1000)) { if (Helpers.msSince(connector.getLastContactTime()) > (60 * 60 * 1000)) {
log("getJSONStatus not returning as data likely stale"); log("getJSONStatus not returning as data likely stale");
return null; return null;
@ -810,26 +810,26 @@ public class InsightPumpPlugin implements PluginBase, PumpInterface, Constraints
extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName()); extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName());
} catch (Exception e) { } catch (Exception e) {
} }
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()); TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
if (tb != null) { if (tb != null) {
extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(System.currentTimeMillis())); extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(now, profile));
extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date)); extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date));
extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes()); extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes());
} }
ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis()); ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(now);
if (eb != null) { if (eb != null) {
extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate()); extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate());
extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date)); extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date));
extended.put("ExtendedBolusRemaining", eb.getPlannedRemainingMinutes()); extended.put("ExtendedBolusRemaining", eb.getPlannedRemainingMinutes());
} }
extended.put("BaseBasalRate", getBaseBasalRate()); extended.put("BaseBasalRate", getBaseBasalRate());
status.put("timestamp", DateUtil.toISOString(new Date())); status.put("timestamp", DateUtil.toISOString(now));
pump.put("battery", battery); pump.put("battery", battery);
pump.put("status", status); pump.put("status", status);
pump.put("extended", extended); pump.put("extended", extended);
pump.put("reservoir", reservoirInUnits); pump.put("reservoir", reservoirInUnits);
pump.put("clock", DateUtil.toISOString(new Date())); pump.put("clock", DateUtil.toISOString(now));
} catch (JSONException e) { } catch (JSONException e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);
} }

View file

@ -244,7 +244,8 @@ public class MDIPlugin implements PluginBase, PumpInterface {
} }
@Override @Override
public JSONObject getJSONStatus() { public JSONObject getJSONStatus(Profile profile, String profileName) {
long now = System.currentTimeMillis();
JSONObject pump = new JSONObject(); JSONObject pump = new JSONObject();
JSONObject status = new JSONObject(); JSONObject status = new JSONObject();
JSONObject extended = new JSONObject(); JSONObject extended = new JSONObject();
@ -252,14 +253,14 @@ public class MDIPlugin implements PluginBase, PumpInterface {
status.put("status", "normal"); status.put("status", "normal");
extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION); extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION);
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName()); extended.put("ActiveProfile", profileName);
} catch (Exception e) { } catch (Exception e) {
} }
status.put("timestamp", DateUtil.toISOString(new Date())); status.put("timestamp", DateUtil.toISOString(now));
pump.put("status", status); pump.put("status", status);
pump.put("extended", extended); pump.put("extended", extended);
pump.put("clock", DateUtil.toISOString(new Date())); pump.put("clock", DateUtil.toISOString(now));
} catch (JSONException e) { } catch (JSONException e) {
} }
return pump; return pump;

View file

@ -409,7 +409,8 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
} }
@Override @Override
public JSONObject getJSONStatus() { public JSONObject getJSONStatus(Profile profile, String profileName) {
long now = System.currentTimeMillis();
if (!SP.getBoolean("virtualpump_uploadstatus", false)) { if (!SP.getBoolean("virtualpump_uploadstatus", false)) {
return null; return null;
} }
@ -422,28 +423,28 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
status.put("status", "normal"); status.put("status", "normal");
extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION); extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION);
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName()); extended.put("ActiveProfile", profileName);
} catch (Exception e) { } catch (Exception e) {
} }
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()); TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
if (tb != null) { if (tb != null) {
extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(System.currentTimeMillis())); extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(now, profile));
extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date)); extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date));
extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes()); extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes());
} }
ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis()); ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(now);
if (eb != null) { if (eb != null) {
extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate()); extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate());
extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date)); extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date));
extended.put("ExtendedBolusRemaining", eb.getPlannedRemainingMinutes()); extended.put("ExtendedBolusRemaining", eb.getPlannedRemainingMinutes());
} }
status.put("timestamp", DateUtil.toISOString(new Date())); status.put("timestamp", DateUtil.toISOString(now));
pump.put("battery", battery); pump.put("battery", battery);
pump.put("status", status); pump.put("status", status);
pump.put("extended", extended); pump.put("extended", extended);
pump.put("reservoir", reservoirInUnits); pump.put("reservoir", reservoirInUnits);
pump.put("clock", DateUtil.toISOString(new Date())); pump.put("clock", DateUtil.toISOString(now));
} catch (JSONException e) { } catch (JSONException e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);
} }

View file

@ -114,6 +114,13 @@ public class SensitivityAAPSPlugin implements PluginBase, SensitivityInterface{
if (age.equals(MainApp.sResources.getString(R.string.key_child))) defaultHours = 4; if (age.equals(MainApp.sResources.getString(R.string.key_child))) defaultHours = 4;
int hoursForDetection = SP.getInt(R.string.key_openapsama_autosens_period, defaultHours); int hoursForDetection = SP.getInt(R.string.key_openapsama_autosens_period, defaultHours);
Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) {
log.debug("No profile");
return new AutosensResult();
}
if (autosensDataTable == null || autosensDataTable.size() < 4) { if (autosensDataTable == null || autosensDataTable.size() < 4) {
log.debug("No autosens data available"); log.debug("No autosens data available");
return new AutosensResult(); return new AutosensResult();
@ -159,8 +166,6 @@ public class SensitivityAAPSPlugin implements PluginBase, SensitivityInterface{
Double[] deviations = new Double[deviationsArray.size()]; Double[] deviations = new Double[deviationsArray.size()];
deviations = deviationsArray.toArray(deviations); deviations = deviationsArray.toArray(deviations);
Profile profile = MainApp.getConfigBuilder().getProfile();
double sens = profile.getIsf(); double sens = profile.getIsf();
String ratioLimit = ""; String ratioLimit = "";

View file

@ -124,6 +124,13 @@ public class SensitivityWeightedAveragePlugin implements PluginBase, Sensitivity
} }
Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) {
if (Config.logAutosensData)
log.debug("No profile available");
return new AutosensResult();
}
String pastSensitivity = ""; String pastSensitivity = "";
int index = 0; int index = 0;
LongSparseArray<Double> data = new LongSparseArray<>(); LongSparseArray<Double> data = new LongSparseArray<>();
@ -181,8 +188,6 @@ public class SensitivityWeightedAveragePlugin implements PluginBase, Sensitivity
return new AutosensResult(); return new AutosensResult();
} }
Profile profile = MainApp.getConfigBuilder().getProfile();
double sens = profile.getIsf(); double sens = profile.getIsf();
String ratioLimit = ""; String ratioLimit = "";

View file

@ -346,7 +346,8 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
if (!t.isEndingEvent()) { if (!t.isEndingEvent()) {
total.lastTempDate = t.date; total.lastTempDate = t.date;
total.lastTempDuration = t.durationInMinutes; total.lastTempDuration = t.durationInMinutes;
total.lastTempRate = t.tempBasalConvertedToAbsolute(t.date); Profile profile = MainApp.getConfigBuilder().getProfile(t.date);
total.lastTempRate = t.tempBasalConvertedToAbsolute(t.date, profile);
} }
} }
@ -363,7 +364,8 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
if (!t.isEndingEvent() && t.date > total.lastTempDate) { if (!t.isEndingEvent() && t.date > total.lastTempDate) {
total.lastTempDate = t.date; total.lastTempDate = t.date;
total.lastTempDuration = t.durationInMinutes; total.lastTempDuration = t.durationInMinutes;
total.lastTempRate = t.tempBasalConvertedToAbsolute(t.date); Profile profile = MainApp.getConfigBuilder().getProfile(t.date);
total.lastTempRate = t.tempBasalConvertedToAbsolute(t.date, profile);
} }
} }
} }
@ -410,34 +412,6 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
return extendedBoluses; return extendedBoluses;
} }
@Override
public double getTempBasalAbsoluteRateHistory() {
TemporaryBasal tb = getTempBasalFromHistory(System.currentTimeMillis());
if (tb != null) {
if (tb.isFakeExtended) {
double baseRate = ConfigBuilderPlugin.getActivePump().getBaseBasalRate();
double tempRate = baseRate + tb.netExtendedRate;
return tempRate;
} else if (tb.isAbsolute) {
return tb.absoluteRate;
} else {
double baseRate = ConfigBuilderPlugin.getActivePump().getBaseBasalRate();
double tempRate = baseRate * (tb.percentRate / 100d);
return tempRate;
}
}
return 0;
}
@Override
public double getTempBasalRemainingMinutesFromHistory() {
TemporaryBasal activeTemp = getTempBasalFromHistory(System.currentTimeMillis());
if (activeTemp != null) {
return activeTemp.getPlannedRemainingMinutes();
}
return 0;
}
@Override @Override
public Intervals<TemporaryBasal> getTemporaryBasalsFromHistory() { public Intervals<TemporaryBasal> getTemporaryBasalsFromHistory() {
return tempBasals; return tempBasals;

View file

@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.Source; import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventNewBG;
@ -86,8 +87,14 @@ public class TreatmentsTemporaryBasalsFragment extends SubscriberFragment {
} }
holder.duration.setText(DecimalFormatter.to0Decimal(tempBasal.durationInMinutes) + " min"); holder.duration.setText(DecimalFormatter.to0Decimal(tempBasal.durationInMinutes) + " min");
if (tempBasal.isAbsolute) { if (tempBasal.isAbsolute) {
holder.absolute.setText(DecimalFormatter.to0Decimal(tempBasal.tempBasalConvertedToAbsolute(tempBasal.date)) + " U/h"); Profile profile = MainApp.getConfigBuilder().getProfile(tempBasal.date);
if (profile != null) {
holder.absolute.setText(DecimalFormatter.to0Decimal(tempBasal.tempBasalConvertedToAbsolute(tempBasal.date, profile)) + " U/h");
holder.percent.setText(""); holder.percent.setText("");
} else {
holder.absolute.setText(MainApp.gs(R.string.noprofile));
holder.percent.setText("");
}
} else { } else {
holder.absolute.setText(""); holder.absolute.setText("");
holder.percent.setText(DecimalFormatter.to0Decimal(tempBasal.percentRate) + "%"); holder.percent.setText(DecimalFormatter.to0Decimal(tempBasal.percentRate) + "%");

View file

@ -332,16 +332,16 @@ public class ActionStringHandler {
private static String generateTDDMessage(List<DanaRHistoryRecord> historyList, List<DanaRHistoryRecord> dummies) { private static String generateTDDMessage(List<DanaRHistoryRecord> historyList, List<DanaRHistoryRecord> dummies) {
ProfileInterface activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (activeProfile == null) { if (profile == null) {
return "No profile loaded :("; return "No profile loaded :(";
} }
DateFormat df = new SimpleDateFormat("dd.MM."); DateFormat df = new SimpleDateFormat("dd.MM.");
String message = ""; String message = "";
double refTDD = activeProfile.getProfile().getDefaultProfile().baseBasalSum() * 2; double refTDD = profile.baseBasalSum() * 2;
int i = 0; int i = 0;
double sum = 0d; double sum = 0d;

View file

@ -388,13 +388,14 @@ public class WatchUpdaterService extends WearableListenerService implements
if (tb1 != null) { if (tb1 != null) {
tb_before = beginBasalValue; tb_before = beginBasalValue;
tb_amount = tb1.tempBasalConvertedToAbsolute(runningTime); Profile profileTB = MainApp.getConfigBuilder().getProfile(runningTime);
tb_amount = tb1.tempBasalConvertedToAbsolute(runningTime, profileTB);
tb_start = runningTime; tb_start = runningTime;
} }
for (; runningTime < now; runningTime += 5 * 60 * 1000) { for (; runningTime < now; runningTime += 5 * 60 * 1000) {
Profile profileTB = MainApp.getConfigBuilder().getProfile(runningTime);
//basal rate //basal rate
endBasalValue = profile.getBasal(runningTime); endBasalValue = profile.getBasal(runningTime);
if (endBasalValue != beginBasalValue) { if (endBasalValue != beginBasalValue) {
@ -422,10 +423,10 @@ public class WatchUpdaterService extends WearableListenerService implements
tb1 = tb2; tb1 = tb2;
tb_start = runningTime; tb_start = runningTime;
tb_before = endBasalValue; tb_before = endBasalValue;
tb_amount = tb1.tempBasalConvertedToAbsolute(runningTime); tb_amount = tb1.tempBasalConvertedToAbsolute(runningTime, profileTB);
} else if (tb1 != null && tb2 != null) { } else if (tb1 != null && tb2 != null) {
double currentAmount = tb2.tempBasalConvertedToAbsolute(runningTime); double currentAmount = tb2.tempBasalConvertedToAbsolute(runningTime, profileTB);
if (currentAmount != tb_amount) { if (currentAmount != tb_amount) {
temps.add(tempDatamap(tb_start, tb_before, runningTime, currentAmount, tb_amount)); temps.add(tempDatamap(tb_start, tb_before, runningTime, currentAmount, tb_amount));
tb_start = runningTime; tb_start = runningTime;
@ -446,7 +447,8 @@ public class WatchUpdaterService extends WearableListenerService implements
temps.add(tempDatamap(tb_start, tb_before, now - 1 * 60 * 1000, endBasalValue, tb_amount)); temps.add(tempDatamap(tb_start, tb_before, now - 1 * 60 * 1000, endBasalValue, tb_amount));
} else { } else {
//express currently running temp by painting it a bit into the future //express currently running temp by painting it a bit into the future
double currentAmount = tb2.tempBasalConvertedToAbsolute(now); Profile profileNow = MainApp.getConfigBuilder().getProfile(now);
double currentAmount = tb2.tempBasalConvertedToAbsolute(now, profileNow);
if (currentAmount != tb_amount) { if (currentAmount != tb_amount) {
temps.add(tempDatamap(tb_start, tb_before, now, tb_amount, tb_amount)); temps.add(tempDatamap(tb_start, tb_before, now, tb_amount, tb_amount));
temps.add(tempDatamap(now, tb_amount, runningTime + 5 * 60 * 1000, currentAmount, currentAmount)); temps.add(tempDatamap(now, tb_amount, runningTime + 5 * 60 * 1000, currentAmount, currentAmount));
@ -458,7 +460,8 @@ public class WatchUpdaterService extends WearableListenerService implements
tb2 = MainApp.getConfigBuilder().getTempBasalFromHistory(now); //use "now" to express current situation tb2 = MainApp.getConfigBuilder().getTempBasalFromHistory(now); //use "now" to express current situation
if (tb2 != null) { if (tb2 != null) {
//onset at the end //onset at the end
double currentAmount = tb2.tempBasalConvertedToAbsolute(runningTime); Profile profileTB = MainApp.getConfigBuilder().getProfile(runningTime);
double currentAmount = tb2.tempBasalConvertedToAbsolute(runningTime, profileTB);
temps.add(tempDatamap(now - 1 * 60 * 1000, endBasalValue, runningTime + 5 * 60 * 1000, currentAmount, currentAmount)); temps.add(tempDatamap(now - 1 * 60 * 1000, endBasalValue, runningTime + 5 * 60 * 1000, currentAmount, currentAmount));
} }
} }

View file

@ -149,14 +149,13 @@ public class StatuslinePlugin implements PluginBase {
private void sendStatus() { private void sendStatus() {
String status = ""; // sent once on disable String status = ""; // sent once on disable
if (fragmentEnabled) { Profile profile = MainApp.getConfigBuilder().getProfile();
status = buildStatusString();
}
if (fragmentEnabled && profile != null) {
status = buildStatusString(profile);
}
//sendData //sendData
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
@ -168,7 +167,7 @@ public class StatuslinePlugin implements PluginBase {
} }
@NonNull @NonNull
private String buildStatusString() { private String buildStatusString(Profile profile) {
String status = ""; String status = "";
LoopPlugin activeloop = ConfigBuilderPlugin.getActiveLoop(); LoopPlugin activeloop = ConfigBuilderPlugin.getActiveLoop();
@ -200,10 +199,6 @@ public class StatuslinePlugin implements PluginBase {
+ DecimalFormatter.to2Decimal(bolusIob.iob) + "|" + DecimalFormatter.to2Decimal(bolusIob.iob) + "|"
+ DecimalFormatter.to2Decimal(basalIob.basaliob) + ")"; + DecimalFormatter.to2Decimal(basalIob.basaliob) + ")";
} }
Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null)
return status;
if (!mPrefs.getBoolean("xdripstatus_showbgi", false)) { if (!mPrefs.getBoolean("xdripstatus_showbgi", false)) {
return status; return status;

View file

@ -419,10 +419,11 @@ public class CommandQueue {
public boolean isThisProfileSet(Profile profile) { public boolean isThisProfileSet(Profile profile) {
PumpInterface activePump = ConfigBuilderPlugin.getActivePump(); PumpInterface activePump = ConfigBuilderPlugin.getActivePump();
if (activePump != null) { Profile current = MainApp.getConfigBuilder().getProfile();
if (activePump != null && current != null) {
boolean result = activePump.isThisProfileSet(profile); boolean result = activePump.isThisProfileSet(profile);
if (!result) { if (!result) {
log.debug("Current profile: " + MainApp.getConfigBuilder().getProfile().getData().toString()); log.debug("Current profile: " + current.getData().toString());
log.debug("New profile: " + profile.getData().toString()); log.debug("New profile: " + profile.getData().toString());
} }
return result; return result;

View file

@ -4,7 +4,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config; import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.queue.Callback; import info.nightscout.androidaps.queue.Callback;

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.
@ -190,6 +188,14 @@ public class NSUpload {
} }
public static void uploadDeviceStatus() { public static void uploadDeviceStatus() {
Profile profile = MainApp.getConfigBuilder().getProfile();
String profileName = MainApp.getConfigBuilder().getProfileName();
if (profile == null || profileName == null) {
log.error("Profile is null. Skipping upload");
return;
}
DeviceStatus deviceStatus = new DeviceStatus(); DeviceStatus deviceStatus = new DeviceStatus();
try { try {
LoopPlugin.LastRun lastRun = LoopPlugin.lastRun; LoopPlugin.LastRun lastRun = LoopPlugin.lastRun;
@ -202,22 +208,31 @@ 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(profile).get("rate"));
deviceStatus.enacted.put("duration", lastRun.tbrSetByPump.json(profile).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");
} }
deviceStatus.device = "openaps://" + Build.MANUFACTURER + " " + Build.MODEL; deviceStatus.device = "openaps://" + Build.MANUFACTURER + " " + Build.MODEL;
JSONObject pumpstatus = ConfigBuilderPlugin.getActivePump().getJSONStatus(); JSONObject pumpstatus = ConfigBuilderPlugin.getActivePump().getJSONStatus(profile, profileName);
if (pumpstatus != null) { if (pumpstatus != null) {
deviceStatus.pump = pumpstatus; deviceStatus.pump = pumpstatus;
} }

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

@ -188,7 +188,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

@ -233,7 +233,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

@ -217,7 +217,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>
@ -985,6 +985,7 @@
<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>
<string name="pump_basebasalrate">%.2f U/h</string> <string name="pump_basebasalrate">%.2f U/h</string>
<string name="combo_actvity_reading_basal_profile">Reading basal profile</string> <string name="combo_actvity_reading_basal_profile">Reading basal profile</string>
<string name="combo_bolus_rejected_due_to_pump_history_change">The pump history has changed after the bolus calculation was performed. The bolus was not delivered. Please recalculate if a bolus is still needed. If the same bolus amount is required, please wait two minutes since boluses with the same amount are blocked when requested with less than two minutes between them for safety (regardless of whether they were administered or not).</string> <string name="combo_bolus_rejected_due_to_pump_history_change">The pump history has changed after the bolus calculation was performed. The bolus was not delivered. Please recalculate if a bolus is still needed. If the same bolus amount is required, please wait two minutes since boluses with the same amount are blocked when requested with less than two minutes between them for safety (regardless of whether they were administered or not).</string>