diff --git a/app/src/main/java/info/nightscout/androidaps/data/IobTotal.java b/app/src/main/java/info/nightscout/androidaps/data/IobTotal.java index cd5df466f0..bd924d35b5 100644 --- a/app/src/main/java/info/nightscout/androidaps/data/IobTotal.java +++ b/app/src/main/java/info/nightscout/androidaps/data/IobTotal.java @@ -16,6 +16,10 @@ public class IobTotal { public double netbasalinsulin; public double hightempinsulin; + // oref1 + public double microBolusInsulin; + public double microBolusIOB; + public double netInsulin = 0d; // for calculations from temp basals only public double netRatio = 0d; // net ratio at start of temp basal @@ -30,6 +34,8 @@ public class IobTotal { this.basaliob = 0d; this.netbasalinsulin = 0d; this.hightempinsulin = 0d; + this.microBolusInsulin = 0d; + this.microBolusIOB = 0d; this.time = time; } @@ -42,6 +48,8 @@ public class IobTotal { hightempinsulin += other.hightempinsulin; netInsulin += other.netInsulin; extendedBolusInsulin += other.extendedBolusInsulin; + microBolusInsulin += other.microBolusInsulin; + microBolusIOB += other.microBolusIOB; return this; } @@ -53,6 +61,8 @@ public class IobTotal { result.basaliob = basalIob.basaliob; result.netbasalinsulin = basalIob.netbasalinsulin; result.hightempinsulin = basalIob.hightempinsulin; + result.microBolusInsulin = bolusIOB.microBolusInsulin + basalIob.microBolusInsulin; + result.microBolusIOB = bolusIOB.microBolusIOB + basalIob.microBolusIOB; return result; } @@ -63,6 +73,8 @@ public class IobTotal { this.basaliob = Round.roundTo(this.basaliob, 0.001); this.netbasalinsulin = Round.roundTo(this.netbasalinsulin, 0.001); this.hightempinsulin = Round.roundTo(this.hightempinsulin, 0.001); + this.microBolusInsulin = Round.roundTo(this.microBolusInsulin, 0.001); + this.microBolusIOB = Round.roundTo(this.microBolusIOB, 0.001); return this; } diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java index bb78ea1d0a..2db7564de7 100644 --- a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java @@ -31,12 +31,12 @@ public interface PumpInterface { PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo); void stopBolusDelivering(); - PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes); + PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean force); PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes); PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes); - //some pumps might set a very short temp close to 100% as canecelling a temp can be noisy - //when the cancel request is requested by the user, the pump should always do a real cancel - PumpEnactResult cancelTempBasal(boolean userRequested); + //some pumps might set a very short temp close to 100% as cancelling a temp can be noisy + //when the cancel request is requested by the user (forced), the pump should always do a real cancel + PumpEnactResult cancelTempBasal(boolean force); PumpEnactResult cancelExtendedBolus(); // Status to be passed to NS diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java index 0a379a904d..9582dced87 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java @@ -155,7 +155,7 @@ public class NewTempBasalDialog extends DialogFragment implements View.OnClickLi if (setAsPercent) { result = pump.setTempBasalPercent(finalBasalPercent, finalDurationInMinutes); } else { - result = pump.setTempBasalAbsolute(finalBasal, finalDurationInMinutes); + result = pump.setTempBasalAbsolute(finalBasal, finalDurationInMinutes, false); } if (!result.success) { if (context instanceof Activity) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java index ea995d2b6b..65b84ed79d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java @@ -475,14 +475,18 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain * @return */ @Override - public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean force) { Double rateAfterConstraints = applyBasalConstraints(absoluteRate); - PumpEnactResult result = activePump.setTempBasalAbsolute(rateAfterConstraints, durationInMinutes); + PumpEnactResult result = activePump.setTempBasalAbsolute(rateAfterConstraints, durationInMinutes, force); if (Config.logCongigBuilderActions) log.debug("setTempBasalAbsolute rate: " + rateAfterConstraints + " durationInMinutes: " + durationInMinutes + " success: " + result.success + " enacted: " + result.enacted); return result; } + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { + return setTempBasalAbsolute(absoluteRate, durationInMinutes, false); + } + /** * apply constraints, set temp based on percent and expecting result in percent * @@ -509,8 +513,8 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain } @Override - public PumpEnactResult cancelTempBasal(boolean userRequested) { - PumpEnactResult result = activePump.cancelTempBasal(userRequested); + public PumpEnactResult cancelTempBasal(boolean force) { + PumpEnactResult result = activePump.cancelTempBasal(force); if (Config.logCongigBuilderActions) log.debug("cancelTempBasal success: " + result.success + " enacted: " + result.enacted); return result; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java index d3f59de5ad..6e459a03b2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java @@ -10,6 +10,8 @@ import android.os.Handler; import android.os.HandlerThread; import android.support.v7.app.NotificationCompat; +import com.crashlytics.android.answers.Answers; +import com.crashlytics.android.answers.CustomEvent; import com.squareup.otto.Subscribe; import org.json.JSONException; @@ -277,6 +279,7 @@ public class LoopPlugin implements PluginBase { @Override public void run() { final PumpEnactResult applyResult = configBuilder.applyAPSRequest(resultAfterConstraints); + Answers.getInstance().logCustom(new CustomEvent("APSRequest")); if (applyResult.enacted || applyResult.success) { lastRun.setByPump = applyResult; lastRun.lastEnact = lastRun.lastAPSRun; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java index 4980b342e9..4829af714e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java @@ -188,6 +188,10 @@ public class NSSettingsStatus { return result; } } + if (settingsO.has("alarmTimeagoWarnMins") && what == "alarmTimeagoWarnMins"){ + Double result = settingsO.getDouble(what); + return result; + } } } catch (JSONException e) { e.printStackTrace(); @@ -197,6 +201,7 @@ public class NSSettingsStatus { private String getStringOrNull(String key) { String ret = null; + if(data == null) return null; if (data.has(key)) { try { ret = data.getString(key); @@ -271,7 +276,6 @@ public class NSSettingsStatus { , warnBattP: sbx.extendedSettings.warnBattP || 30 , urgentBattP: sbx.extendedSettings.urgentBattP || 20 , enableAlerts: sbx.extendedSettings.enableAlerts || false - */ public double extendedPumpSettings(String setting) { @@ -301,10 +305,12 @@ public class NSSettingsStatus { return 0d; } + @Nullable public JSONObject extentendedPumpSettings() { try { JSONObject extended = getExtendedSettings(); + if(extended == null) return null; if (extended.has("pump")) { JSONObject pump = extended.getJSONObject("pump"); return pump; @@ -339,5 +345,16 @@ public class NSSettingsStatus { return ""; } + public boolean openAPSEnabledAlerts() { + try { + JSONObject pump = extentendedPumpSettings(); + if (pump != null && pump.has("openaps")) { + return pump.getBoolean("enableAlerts"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + return false; + } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java index 6b15a9e17d..9f35599b36 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java @@ -1,3 +1,4 @@ + package info.nightscout.androidaps.plugins.Overview; import java.util.Date; @@ -9,11 +10,16 @@ import info.nightscout.androidaps.plugins.NSClientInternal.data.NSAlarm; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSettingsStatus; import info.nightscout.utils.SP; +// Added by Rumen for debugging +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Created by mike on 03.12.2016. */ public class Notification { + private static Logger log = LoggerFactory.getLogger(Notification.class); + public static final int URGENT = 0; public static final int NORMAL = 1; public static final int LOW = 2; @@ -93,7 +99,7 @@ public class Notification { this.id = NSALARM; this.level = NORMAL; this.text = nsAlarm.getTile(); - if (isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false)) + if (isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false) || isAlarmForStaleData() && SP.getBoolean(R.string.key_nsalarm_staledata,false)) this.soundId = R.raw.alarm; break; case 2: @@ -111,9 +117,11 @@ public class Notification { return true; if (level == ANNOUNCEMENT) return true; - if (level == NORMAL && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false)) + if (level == NORMAL && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false) || isAlarmForStaleData() && SP.getBoolean(R.string.key_nsalarm_staledata, false)) + { return true; - if (level == URGENT && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_urgent_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_urgent_high, false)) + } + if (level == URGENT && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_urgent_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_urgent_high, false) || isAlarmForStaleData() && SP.getBoolean(R.string.key_nsalarm_urgent_staledata, false)) return true; return false; } @@ -141,4 +149,35 @@ public class Notification { return true; return false; } + + static boolean isAlarmForStaleData(){ + if(SP.getLong("snoozedTo", 0L) != 0L){ + if(System.currentTimeMillis() < SP.getLong("snoozedTo", 0L)) { + //log.debug("Alarm is snoozed for next "+(SP.getLong("snoozedTo", 0L)-System.currentTimeMillis())/1000+" seconds"); + return false; + } + } + BgReading bgReading = MainApp.getDbHelper().lastBg(); + if (bgReading == null) + return false; + long bgReadingAgo = System.currentTimeMillis() - bgReading.date; + int bgReadingAgoMin = (int) (bgReadingAgo / (1000 * 60)); + // Added for testing + //bgReadingAgoMin = 20; + log.debug("bgReadingAgoMin value is:"+bgReadingAgoMin); + Double threshold = NSSettingsStatus.getInstance().getThreshold("alarmTimeagoWarnMins"); + boolean openAPSEnabledAlerts = NSSettingsStatus.getInstance().openAPSEnabledAlerts(); + log.debug("OpenAPS Alerts enabled: "+openAPSEnabledAlerts); + // if no thresshold from Ns get it loccally + if(threshold == null) threshold = SP.getDouble(R.string.key_nsalarm_staledatavalue,15D); + // No threshold of OpenAPS Alarm so using the one for BG + // Added OpenAPSEnabledAlerts to alarm check + if((bgReadingAgoMin > threshold && SP.getBoolean(R.string.key_nsalarm_staledata, false))||(bgReadingAgoMin > threshold && openAPSEnabledAlerts)){ + return true; + } + //snoozing for threshold + SP.putLong("snoozedTo", (long) (bgReading.date+(threshold*1000*60L))); + //log.debug("New bg data is available Alarm is snoozed for next "+threshold*1000*60+" seconds"); + return false; + } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java index 45393f3659..e869d1191b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java @@ -15,7 +15,8 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.Services.AlarmSoundService; import info.nightscout.androidaps.plugins.Wear.WearPlugin; - +//Added by Rumen for snooze time +import info.nightscout.utils.SP; /** * Created by mike on 03.12.2016. @@ -24,7 +25,7 @@ import info.nightscout.androidaps.plugins.Wear.WearPlugin; public class NotificationStore { private static Logger log = LoggerFactory.getLogger(NotificationStore.class); public List store = new ArrayList(); - + public long snoozedUntil = 0L; public NotificationStore() { } @@ -86,4 +87,18 @@ public class NotificationStore { } } } + + public void snoozeTo(long timeToSnooze){ + log.debug("Snoozing alarm until: "+timeToSnooze); + SP.putLong("snoozedTo", timeToSnooze); + } + + public void unSnooze(){ + if(Notification.isAlarmForStaleData()){ + Notification notification = new Notification(Notification.NSALARM, MainApp.sResources.getString(R.string.nsalarm_staledata), Notification.URGENT); + SP.putLong("snoozedTo", System.currentTimeMillis()); + add(notification); + log.debug("Snoozed to current time and added back notification!"); + } + } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index 2738491634..ff6218786e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -126,7 +126,9 @@ import info.nightscout.utils.Profiler; import info.nightscout.utils.Round; import info.nightscout.utils.SP; import info.nightscout.utils.ToastUtils; - +//Added By Rumen for staledata alarm +import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; public class OverviewFragment extends Fragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { private static Logger log = LoggerFactory.getLogger(OverviewFragment.class); @@ -502,8 +504,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, sHandler.post(new Runnable() { @Override public void run() { - MainApp.getConfigBuilder().cancelTempBasal(true); - PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 30); + PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 30, true); if (!result.success) { ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); } @@ -517,8 +518,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, sHandler.post(new Runnable() { @Override public void run() { - MainApp.getConfigBuilder().cancelTempBasal(true); - PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 60); + PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 60, true); if (!result.success) { ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); } @@ -532,8 +532,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, sHandler.post(new Runnable() { @Override public void run() { - MainApp.getConfigBuilder().cancelTempBasal(true); - PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 2 * 60); + PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 2 * 60, true); if (!result.success) { ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); } @@ -547,8 +546,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, sHandler.post(new Runnable() { @Override public void run() { - MainApp.getConfigBuilder().cancelTempBasal(true); - PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 3 * 60); + PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 3 * 60, true); if (!result.success) { ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); } @@ -1748,6 +1746,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, public void onBindViewHolder(NotificationsViewHolder holder, int position) { Notification notification = notificationsList.get(position); holder.dismiss.setTag(notification); + if(notification.text == MainApp.sResources.getString(R.string.nsalarm_staledata)) + holder.dismiss.setText("snooze"); holder.text.setText(notification.text); holder.time.setText(DateUtil.timeString(notification.date)); if (notification.level == Notification.URGENT) @@ -1796,6 +1796,14 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, if (notification.nsAlarm != null) { BroadcastAckAlarm.handleClearAlarm(notification.nsAlarm, MainApp.instance().getApplicationContext(), 60 * 60 * 1000L); } + // Adding current time to snooze if we got staleData + log.debug("Notification text is: "+notification.text); + if(notification.text.equals(MainApp.sResources.getString(R.string.nsalarm_staledata))){ + NotificationStore nstore = getPlugin().notificationStore; + long msToSnooze = SP.getInt("nsalarm_staledatavalue",15)*60*1000L; + log.debug("snooze nsalarm_staledatavalue in minutes is "+SP.getInt("nsalarm_staledatavalue",15)+"\n in ms is: "+msToSnooze+" currentTimeMillis is: "+System.currentTimeMillis()); + nstore.snoozeTo(System.currentTimeMillis()+(SP.getInt("nsalarm_staledatavalue",15)*60*1000L)); + } break; } } @@ -1810,6 +1818,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, public void run() { NotificationStore nstore = getPlugin().notificationStore; nstore.removeExpired(); + nstore.unSnooze(); if (nstore.store.size() > 0) { RecyclerViewAdapter adapter = new RecyclerViewAdapter(nstore.store); notificationsView.setAdapter(adapter); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java index aaae495c58..2e01ee662d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java @@ -334,7 +334,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, DanaRInterface, C // This is called from APS @Override - public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean force) { // Recheck pump status if older than 30 min if (pump.lastConnection.getTime() + 30 * 60 * 1000L < System.currentTimeMillis()) { doConnect("setTempBasalAbsolute old data"); @@ -400,16 +400,20 @@ public class DanaRPlugin implements PluginBase, PumpInterface, DanaRInterface, C if (Config.logPumpActions) log.debug("setTempBasalAbsolute: currently running: " + running.toString()); if (running.percentRate == percentRate) { - result.success = true; - result.percent = percentRate; - result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory(); - result.enacted = false; - result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); - result.isPercent = true; - result.isTempCancel = false; - if (Config.logPumpActions) - log.debug("setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)"); - return result; + if (force) { + cancelTempBasal(true); + } else { + result.success = true; + result.percent = percentRate; + result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory(); + result.enacted = false; + result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); + result.isPercent = true; + result.isTempCancel = false; + if (Config.logPumpActions) + log.debug("setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)"); + return result; + } } } // Convert duration from minutes to hours @@ -572,7 +576,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, DanaRInterface, C } @Override - public PumpEnactResult cancelTempBasal(boolean userRequested) { + public PumpEnactResult cancelTempBasal(boolean force) { if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) return cancelRealTempBasal(); if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java index e3b6bf3598..84552946ae 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java @@ -338,7 +338,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, DanaRInterf // This is called from APS @Override - public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean force) { // Recheck pump status if older than 30 min if (pump.lastConnection.getTime() + 30 * 60 * 1000L < System.currentTimeMillis()) { doConnect("setTempBasalAbsolute old data"); @@ -398,16 +398,20 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, DanaRInterf if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) { // Correct basal already set ? if (MainApp.getConfigBuilder().getRealTempBasalFromHistory(System.currentTimeMillis()).percentRate == percentRate) { - result.success = true; - result.percent = percentRate; - result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory(); - result.enacted = false; - result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); - result.isPercent = true; - result.isTempCancel = false; - if (Config.logPumpActions) - log.debug("setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)"); - return result; + if (force) { + cancelTempBasal(true); + } else { + result.success = true; + result.percent = percentRate; + result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory(); + result.enacted = false; + result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); + result.isPercent = true; + result.isTempCancel = false; + if (Config.logPumpActions) + log.debug("setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)"); + return result; + } } } // Convert duration from minutes to hours @@ -570,7 +574,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, DanaRInterf } @Override - public PumpEnactResult cancelTempBasal(boolean userRequested) { + public PumpEnactResult cancelTempBasal(boolean force) { if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) return cancelRealTempBasal(); if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java index 8c2b2d327b..0697a69af7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java @@ -323,7 +323,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface, // This is called from APS @Override - public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean force) { // Recheck pump status if older than 30 min if (pump.lastConnection.getTime() + 30 * 60 * 1000L < System.currentTimeMillis()) { doConnect("setTempBasalAbsolute old data"); @@ -365,17 +365,20 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface, if (MainApp.getConfigBuilder().isTempBasalInProgress()) { // Correct basal already set ? if (MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()).percentRate == percentRate) { - result.success = true; - result.percent = percentRate; - result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory(); - result.enacted = false; - result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); - result.isPercent = true; - result.isTempCancel = false; - if (Config.logPumpActions) - log.debug("setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)"); - return result; - } } + if (!force) { + result.success = true; + result.percent = percentRate; + result.absolute = MainApp.getConfigBuilder().getTempBasalAbsoluteRateHistory(); + result.enacted = false; + result.duration = ((Double) MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()).intValue(); + result.isPercent = true; + result.isTempCancel = false; + if (Config.logPumpActions) + log.debug("setTempBasalAbsolute: Correct temp basal already set (doLowTemp || doHighTemp)"); + return result; + } + } + } // Convert duration from minutes to hours if (Config.logPumpActions) log.debug("setTempBasalAbsolute: Setting temp basal " + percentRate + "% for " + durationInMinutes + " mins (doLowTemp || doHighTemp)"); @@ -510,7 +513,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface, } @Override - public PumpEnactResult cancelTempBasal(boolean userRequested) { + public PumpEnactResult cancelTempBasal(boolean force) { PumpEnactResult result = new PumpEnactResult(); if (pump.isTempBasalInProgress) { sExecutionService.tempBasalStop(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java index ddd05a2e0b..f9f4b6fa2d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java @@ -166,7 +166,7 @@ public class MDIPlugin implements PluginBase, PumpInterface { } @Override - public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean force) { PumpEnactResult result = new PumpEnactResult(); result.success = false; result.comment = MainApp.instance().getString(R.string.pumperror); @@ -196,7 +196,7 @@ public class MDIPlugin implements PluginBase, PumpInterface { } @Override - public PumpEnactResult cancelTempBasal(boolean userRequested) { + public PumpEnactResult cancelTempBasal(boolean force) { PumpEnactResult result = new PumpEnactResult(); result.success = false; result.comment = MainApp.instance().getString(R.string.pumperror); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java index 7337859c47..c04ec9b12f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java @@ -258,7 +258,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface { } @Override - public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean force) { TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder(); TemporaryBasal tempBasal = new TemporaryBasal(); tempBasal.date = System.currentTimeMillis(); @@ -337,7 +337,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface { } @Override - public PumpEnactResult cancelTempBasal(boolean userRequested) { + public PumpEnactResult cancelTempBasal(boolean force) { TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder(); PumpEnactResult result = new PumpEnactResult(); result.success = true; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java index 8e5e3bde46..1cf17881af 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java @@ -487,7 +487,7 @@ public class SmsCommunicatorPlugin implements PluginBase { PumpInterface pumpInterface = MainApp.getConfigBuilder(); if (pumpInterface != null) { danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class); - PumpEnactResult result = pumpInterface.setTempBasalAbsolute(tempBasalWaitingForConfirmation.tempBasal, 30); + PumpEnactResult result = pumpInterface.setTempBasalAbsolute(tempBasalWaitingForConfirmation.tempBasal, 30, false); if (result.success) { reply = String.format(MainApp.sResources.getString(R.string.smscommunicator_tempbasalset), result.absolute, result.duration); if (danaRPlugin != null) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java index 6e8b092442..2153fba0df 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java @@ -183,8 +183,13 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface { Iob tIOB = t.iobCalc(time, dia); total.iob += tIOB.iobContrib; total.activity += tIOB.activityContrib; - Iob bIOB = t.iobCalc(time, dia / SP.getDouble("openapsama_bolussnooze_dia_divisor", 2.0)); - total.bolussnooze += bIOB.iobContrib; + if (!t.isSMB) { + Iob bIOB = t.iobCalc(time, dia / SP.getDouble("openapsama_bolussnooze_dia_divisor", 2.0)); + total.bolussnooze += bIOB.iobContrib; + } else { + total.basaliob += t.insulin; + total.microBolusIOB += tIOB.iobContrib; + } } if (!MainApp.getConfigBuilder().isFakingTempsByExtendedBoluses()) diff --git a/app/src/main/res/layout/overview_fragment.xml b/app/src/main/res/layout/overview_fragment.xml index 6432f0a998..9468ce5bf2 100644 --- a/app/src/main/res/layout/overview_fragment.xml +++ b/app/src/main/res/layout/overview_fragment.xml @@ -459,4 +459,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ec8cf8088a..99275d8cb8 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -81,7 +81,7 @@ Rate Grund Sicherheit: - SEND + SENDE Aktivität: Kohlehydrate: Insulin: @@ -108,7 +108,7 @@ Korr Kohlehydrat Menge Insulin Menge - Treatments + Behandlungen Max erlaubter Bolus [U] Max erlaubte Kohlehydrate [g] Tratments Sicherheit @@ -124,27 +124,27 @@ Neue Empfehlung verfügbar Ergebnis Anfrage - Run now + Ausführen Keine Pumpe verfügbar Kein Profil verfügbar Keine BZ Daten verfügbar Mahlzeiten Daten - Last run - Last enacted + Letzte Ausführung + Zuletzt abgegeben Plugin ist deaktiviert - Current temp + Aktuelle temp Gate: Objective: Zielsetzungen KEIN PROFIL GESETZT - NSClient nicht installiert. Record lost! + NSClient ist nicht installiert. Eintrag verloren! Verwende absolute statt prozentuelle Basalwerte beim Upload zu NightScout Bisher noch kein Profil von NS geladen - No change requested + Keine Anpassung benötigt NO APS SELECTED OR PROVIDED RESULT Test Alarm Avg. delta - Bolus constraint applied + Bolus Einschränkung angewendet Ankündigung BZ Check Kohlehydrat Korrektur @@ -169,11 +169,11 @@ Carbs constraint applied Reset Datenbanken Minimale Dauer - Erneure treatments von NS + Erneure Behandlungen von NS Exit Fehlend - Enabled - Eingabe neues treatment + aktiviert + Eingabe neuer Behandlung: Einstellungen exportieren nach Datei nicht gefunden Einstellungen exportiert @@ -181,8 +181,8 @@ Einstellungen importiert Einstellungen exportieren Einstellungen importieren - Deutsch - Max U/hr die man für eine Temp Basal setzen kann + German + Dieser Wert wird max basal in OpenAPS genannt Maximale Menge von nicht bolus IOB die OpenAPs abgeben kann Bulgarian Nightscout @@ -229,12 +229,12 @@ Profil zur Pumpe synchronisieren auf Pumpenergebnis warten Kein Bluetoothadapter gefunden - Remote Bolus nicht erlaubt + Remote Bolus ist nicht erlaubt Um Bolus %.2fU bitte mit %s antworten Korean Limit erreicht Falsches Pumpen-Passwort! - Warte auf Pumpe. Click to refresh. + Warte auf Pumpe. Klicke zum aktualisieren. Korr Abgabe %.2fU %.2fU Bolus erfolgreich abgegeben @@ -253,7 +253,7 @@ Unterbrechungen Pumpen-Passwort Essensbolus - Kein Profil gewählt + Kein Profil ausgewählt Stop Gestoppt STOP GEDRÜCKT @@ -275,7 +275,7 @@ Andere Verstopfung Abgegeben - %.2fU werden abgegeben werden + Es werden %.2fU abgegeben Vorfüllen / Füllen Hochladen Spanish @@ -293,7 +293,7 @@ Einheiten: Falscher Pumpentreiber ausgewählt Befüllen - EasyUI mode in Pumpe deaktivieren + EasyUI Modus in der Pumpe deaktivieren Basal-Stunde Knopf 1 Knopf 2 @@ -301,20 +301,20 @@ Config Builder vor %d min "AKT" - "WEAR" + WEAR VP - "TREAT" - "TT" - "TB" - "SMS" - "SP" - "PROF" - "HOME" - "OBJ" - "OAPS" - "LOOP" - "LP" - "DANA" + TREAT + TT + TB + SMS + SP + PROF + HOME + OBJ + OAPS + LOOP + LP + DANA "CONF" "CPP" "CP" @@ -339,7 +339,7 @@ Kumulative TDD Datum Exponentiell Gewichtete TDD - Veraltete Daten \"Reload\" + Veraltete Daten, bitte klicke auf \"Reload\" xds xDrip Statuszeile (Uhr) xDrip Status (Uhr) @@ -358,7 +358,7 @@ Resorptions-Einstellungen Aktivität Erwachsener - Erweiter + Erweiterte Einstelungen AndroidAPS BAS Basal-Schritt @@ -368,11 +368,11 @@ Bolus-Schritt Werde %.2fE abgeben AKTIVITÄT & FEEDBACK - Katheter-Liegedauer + Katheteralter CAGE CARBS & BOLUS CGM & OPENAPS - + Insulinalter Dauer [min] pausiert Patientenalter @@ -383,7 +383,7 @@ Tempbasal Abgabe-Fehler TempZiel Zeit in Stunden um die das profil zylindrisch verschoben wird. - + 15Min Trend COB Nicht-unterstütze Nightscout-Version Uploader @@ -391,7 +391,204 @@ EXT Firmware Virtuelle Pumpe Einstellungen - Status zu NS hochladen + Status zu Nightscout hochladen Superbolus - + Pausiere Loop für 10h + Insgesamt %d Einträge. Aktueller Wert: + IAGE + Batteriealter + PUMP + Pumpen Batterie Wechsel + SAGE + Insulin + Es sind nicht alle Profile geladen! + Aktivierung wird benötigt um Werte an die Pumpe zu senden! + Werte nicht gespeichert! + Aktiviere Extended Bolus in der Pumpe + DanaR Stats + # Tage + Basal + Bolus + Gewichtung + Zeige Extended Bolus als % an + DanaR Korean + DanaRv2 + Abgeben + DEV + Gerät + DIA: + Deaktiviere Loop + Trenne + Trenne Pumpe für 10h + Trenne Pumpe für 1h + Trenne Pumpe für 2h + Trenne Pumpe für 30Min + Trenne Pumpe für 3h + Ignoriere Profilwechsel + Alle Profilwechsel werden ignorierd und nur das aktive Profil wird verwendet + Nicht erneut anzeigen + Bald essen + Bearbeite Basis-Basal: + Greek + aktiviere Loop + Aktiviere SuperBolus im Wizard + Führe aus + ExtendedBolus + Fast Acting Insulin + Novorapid, Novolog, Humalog + Fast Acting Insulin Prolonged + Hole Pumpenstatus + Stunden + Initialisierung... + Ungültiges oder defektes Profil!!! + IOB + Lokales Profil + Sperrbildschirm + Loop Menü + Superbolus (%d m) + Loop pausiert + pausiert (%d m) + Abbrechen + OK + mg/dl + mmol/l + Über + Logs anzeigen + nicht erfolgreich - Bitte Telefon prüfen + Nicht verfügbar + NSCLIENT hat keine Schreibrechte. Falscher API-Key? + Alarm Optionen + Aktiviere Broadcast für andere Apps (z.B. xDrip). + Aktiviere lokalen Broadcast. + Logge App-Start in NS + Kein Upload zu NS + Alle an NS gesendete Daten verworfen. AAPS ist verbunden, aber keine Änderungen in NS ist fertig + Hoch + Niedrig + Gesetzt zu %f + Sehr hoch + Sehr niedrig + Autoscroll + Gerätenamen eingeben + Gerätename + NS API-Key eingeben (min 12 Zeichen) + NightScout API-Key + NightScout API-Key + URL: + Nightscout URL eingeben + Nightscout URL + Verifiziere, dass der BZ und Pumpen Insulin Daten in Nightscout erfolgreich hoch geladen wurden + Konfiguriere Anzeige und das Monitoring und analysiere Basal und die Faktoren + Lasse den OpenLoop Modus für ein paar Tage laufen und setzte manuell temp Basal-Raten + Starte ein OpenLoop + VERALTETE DATEN + Laufende Benachrichtigungen + Öffne Einstellungen auf der Uhr + OpenAPS + OAPS + OpenAPS AMA + Skript Debug + Wert %s ist außerhalb des festen Limits. + Kalibrierung + Kalibrierung + Button Text: + Extended Bolus abbrechen + Basal Wert [U/h] + Profil + Setzten vom Basal Profil fehlgeschlagen + Basal Profil in der Pumpe erfolgreich aktualisiert + Profilwechsel + Pumpe + Pumpe nicht initialisiert! + Pumpe ist nicht initialisiert, Profil nicht gesetzt! + Pumpe stoppen + Pumpe pausiert + Pumpe pausiert. Klicken zum aktualisieren des Status + Queue: + QuickWizard + Aktualisiere Einträge von Nightscout + Lösche Eintrag: + Alle Daten erneut senden + Möchtest du die Datenbank wirklich zurücksetzten? + Restart + Beende Applikation um neue Einstellungen zu laden. + Fortsetzten + Russian + Kalibrierung %.1f an xDrip senden? + Passwort für die Einstellungen + Setzte temp Basal + Kurze Tab-Überschriften + Zeige Warteschlange + BZ + Basal: + Bolus: + Delta: + IOB: + Letzter BZ: + Status: + Stoppe Extended Bolus + Stoppe temp Basal + Pausiere Loop für 1h + Pausiere Loop für 2h + Pausiere Loop für 3h + Schwedish + Aktualisere Basal Raten + Übersicht Benachrichtigungen + Sensoralter + Wechsle Modus von U/d zu U/h in der Pumpe + Insgesamt %d Einträge erfolgreich hochgeladen + Dauer der Insulinwirkung + Bearbeite Basis-IC: + Bearbeite Basis-ISF: + IC Angabe fehlt im Profil. Verwende default Wert. + INS + ISF fehlt im Profil. Verwende default Wert. + Sperr + %s benötigt Batterie-Optimierungs-Whitelisting um korrekt arbeiten zu können + Veraltete Daten + Veraltete Daten seit [Min] + Es wird verwendet für das enteredBy Feld + Autosens Daten + Max U/h die an Temp Basal gesetzt werden kann + Maximum Basal IOB, was OpenAPS abgeben darf [U] + Prozentialer Faktor um den das Basis Profil multipiziert wird. + Bitte Rechte gewähren + Hoch und niedrig Werte für die Übersicht- und die Smartwatch-Anzeige + Zielbereich für die Grafikanzeige + Bei aktivierter Autosense-Funktion, bitte stell sicher, das du alle gegessenen Kohlenhydrate eingibts. Ansonsten können die Kohlenhydrate-Abweichung als falsche Resistens/Empfindlichkeit identifziert werden!!! + Sensitivität AAPS + Sensitivität Oref0 + Durschnittliche Sensitivität + Einstellung Extended Bolus + vor %dMin + "Um das temp Basal zu stoppen, antworte mit dem Code %s" + Bolus %.2fU erfolgreich abgegeben + xDrip hat die Kalbrierung nicht erhalten + Um die Kalibrierung %.2f zu senden, antworte mit dem Code %s + Kalibrierung gesendet. Das empfangen von Kalbrierungen muss in xDrip aktiviert sein. + Falsche/Ungültige SMS Telefonnummer + Loop wurde deaktiviert + Lopp wurde aktiviert + Loop ist deaktiviert + Loop ist aktiviert + Loop wurde fortgesetzt + Loop pausiert + Es fehlt das SMS-Recht + Basal Einstellungen per Remote ist nicht erlaubt + Kalibrierung per Remote ist nicht erlaubt + Externe Befehle sind nicht erlaubt + Erlaube externe Befehle per SMS + Um den Loop zu pausieren für %d Minuten, antworte mit dem Code %s + Temp Basal abgebrochen + Abbrechen des temp Basal ist fehlgeschlagen + Temp Basal starten ist fehlgeschlagen + Temp Basal %.2fU/h für %d min wurde erfolgreich gestartet + Unbekannter Befehl oder falsche Antwort + Falsche Dauer + Einstellungen freischalten + %.2f limitiert auf %.2f + S Bolus + Model: %02X Protokoll: %02X Code: %02X + Empfindlichkeitserkennung + COB diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml new file mode 100644 index 0000000000..5b00248db8 --- /dev/null +++ b/app/src/main/res/values-sv/strings.xml @@ -0,0 +1,584 @@ + + + Avbryt + Glimp + MM640g + Absolut + Åtgärd + ACT + Aktivitet + Vuxen + Avancerade inställningar + Starta om telefonen eller AndroidAPS from systeminställningar + Använd alltid kort medel delta istället för enkel delta + Användbart när ofiltrerade källor som xDrip ger brusvärden + AndroidAPS startar + Snart daglig max av insulin + APS Mode + Medel delta + Basal + Basal E/tim + Basal steg + Basal saknas i profil. Använder grundbasal + BR + Basal understiger min.nivå. Ingen profil satt + Basalprofil + Pump Batteri Urladdat + Bolus + Bolus Steg + Bolus spärr aktiverad + Bolus %.2fU korrekt tillförd + Ger %.2fU + Kommer att ge %.2fU + Knapp 1 + Knapp 2 + Knapp 3 + Kalibrering skickad till xDrip + Avbryt Temp Basal + Kolhydrater + Kohydrat spärr aktiverad + Careportal + Meddelande + BG Kontroll + Kanyl ålder + Kolhydrat korrektion + CGM Sensor Insättning + CGM Sensor Start + Combo Bolus + Korrektion Bolus + Träning + Insulin Ålder + Insulin Reservoir Byte + Måltids Bolus + Absolut + Kolhydrater + KH tid + Duration + Infört av + Tid för händelse + Händelse typ + Glukos sort + Insulin + Mätare + Notering + Annat + Procent + Profil + Sensor + Delad + Notering + OpenAPS Offline + Pump Batteri Ålder + Profil Byte + Pump Kanyl Byte + Fråga + CP + Bolus för Mellis + Temp Basal Slut + Temp Basal Start + Temp Mål BG + Temp Mål BG Slut + Ändra inmatning + Barn + Cirkadisk Profil Procent + CPP + Ta bort kö + Rensa inmatningar + Closed Loop + COB + Kommentar + Konfigurationsverktyg + APS + BG Källa + Begränsningar + Generell + Insulin + Loop + Nightscout version: + Profil + Pump + KONF + Temp Basaler + Åtgärd + Bekräftelse + Sammankopplad + Sammankopplar + Sammankoppling till pump förlorad + Begränsning aktiverad + Begränsning Överträdelse + Kopierad till Clipboard + Kopiera till Clipboard + Korr + CZ + Alarm + basal tim + Bluetooth Status + DanaR Bluetooth Pump + kolhydrat + Enheter/Dag + Avaktivera EasyUI mode in pump + Aktivera förlängd bolus i pump + Fel + Glukos + Historia + Larm + Basal Timmar + Bolusar + Kolhydrater + Sammankopplar för %d s + Daglig insulinmängd + Fel + Glukos + Påfyllnad + Stoppa + Ladda om + Fel på inlagd data + Pump IOB + Sista bolus + Lösenord Pump + DanaR pump inställningar + Påfyllnad + Kumulativ TDD + Datum + Exponentiellt viktad TDD + Gammal Data Vg tryck \"Ladda om\" + Ratio + Använd förlängd bolus med >200% + Värde ej korrekt angivet + Se profil + Se förlängd bolus som % + DanaR Korea + DanaR profil inställningar + DIA (h) + Insulinets verkningstid (DIA) + DanaR + DANA + dagar + Deutsch + Ge nu + Delta + DEV + Vald enhet ej funnen + DIA + Loop Frånkopplad + Frånkoppla pump i 1 h + Stäng av loop + Frånkopplad + Frånkopplar + Frånkoppla pump i 10 h + Frånkoppla pump i 2 h + Frånkoppla pump i 30 min + Frånkoppla pump i 3 h + AVBÖJ + Ignorera profilbyten + Alla profilbyten ignoreras och aktiv profil används alltid + Visa inte detta igen + Duration + Äta snart + Ändra Base-Basal: + Engelska + Startad + Starta loop + Aktivera superbolus i kalkylatorn + Aktivera superbolus funktionen i kalkylatorn. Aktivera inte innan du förstått hur den fungerar. DEN KAN ORSAKA ÖVERDOSERING AV INSULIN OM INSIKT SAKNAS OM FUNKTIONEN + Aktiverad + Licensavtal för Slutanvändare + JAG FÖRSTÅR OCH GODKÄNNER + Ange ny behandling + Denna kolumn får ej vara tom + Endast siffror får användas + Endast siffror är tillåtna inom %1$s - %2$s + Ej giltigt telefonnummer + Spanska + Utför + Exportera inställningar till + Inställningar exporterade + FörlängdBolus + Lyckades ej uppdatera basalprofil + Snabbverkande Insulin + Novorapid, Novolog, Humalog, Apidra + Data ej funnen + Fyll/Förfyll standard insulin mängd + Vg försäkra dig om att mängd motsvarar det som är specificerat för just ditt infusionsset + Hämtar pump status + Glukos + Finger + Sensor + HÖG markering + timmar + h sedan + Importera inställningar från + Startar... + Ogiltig profil !!! + IOB + Italienska + Koreanska + Språk + Lokal Profil + LP + Loop + APS + Efter avklarade begränsningar + Inställning i pump + LOOP + LOOP STOPPAD PGA BEGRÄNSNINGAR + Loop meny + Superbolus (%d m + Loop avstängd + LÅG markering + Svagt Batteri + Manual + Avbryt + Måltid + Fattas + Om + Backup + Exit + Exportera inställningar + Importera inställningar + Inställningar + Uppdatera behandlingar från NS + Återställ Databaser + Visa log + Testa alarm + Nightscout + INGEN APS VALD + Ingen Bluetooth adapter funnen + Ingen ändring behövs + Ingen profil laddad ännu från NS + Ingen profil vald + INGEN PROFIL VALD + misslyckat - vg kontrollera telefonen + Ej tillgängligt + NSCLIENT har inga skrivrättigheter. Fel API secret? + Alarm inställningar + Medge lokal sändning till andra appar (ex xDrip) + Aktivera lokal Broadcasts + Markera app start till NS + Ingen uppladdning till NS + Ingen data sänds till NS. AAPS kommunicerar med NS men inga ändringar görs i NS + Använd alltid absoluta värden i basal + Endast uppladdning till NS (avaktiverad sync) + Endast uppladdning till NS. Fungerar ej med SGV om inte lokal källa som xDrip används. Inte effektiv med Profiler om NS-Profiler används + Hög + Låg + Gammal data + NSClient + Ange enhetens namn + Enhetens namn + Ange NS API sectet (min 12 tecken) + NS API secret + NSClient är inte installerad. Data förlorad! + Nightscout URL + Enter Nightscout URL + URL: + NSClient + NSCI + NS API secret + Aktiv profil + Basal + DIA + IC + ISF + Målvärde + Enheter + OAPS + Mål/Syfte + Kontrollera att BG syns i NS, och att pump insulin data laddas upp + Ställa in utseende och övervakning, för att sedan kunna analysera basaler och kvoter + Du har nått din tillåtna gräns + xds + xDrip Status (klocka) + xDrip Statusline (klocka) + xDrip+ inte installerat + xDrip + Fel lösenord för pump + Fel pump program vald + Fel lösenord + Visa BGI + Visa BGI i statusfält + WEAR + Wear inställningar + Visa detaljerad IOB + Visa IOB med bolus och basal på klocka + Wear + Väntar på resultat + Väntar på pump. Klicka för att uppdatera + Väntar på pump + Virtuell + Synlig + Ladda upp till NS + Temp basal + SQL Error + VPUMP + Virtuell pump inställningar + OK + Reservoir + Sista kontakt + Programversion + Förlängd bolus + Batteri + Grund basal hastighet + Virtuell Pump + Uppladdning + Uppdaterar basal hastigheter + Upp + Version av NS som inte stöds + Version av NSClient som inte stöds + Lås upp inställningar + Enheter: + Säkerhet vid behandling + Max tillåtna KH (g) + Max tillåten + E + TOTAL + Korr + COB + KH + Bolus IOB + 15min trend + BG + Basal IOB + TREAT + Insulin + KH + Total IOB: + Total aktiv IOB: + IOB: + Insulin: + KH: + Aktivitet: + Behandlingar + Bolus ej tillförd + TT + TempMål + TB + Dur: + Kvot: + Ins: + Total IOB: + IOB: + Tempbasal ej tillförd + Tempbasal + Tonåring + Mål saknas i profil. Använder grundinställning + Mål gränser: + Uppdatera profil till pump + Stäng av loop i 3 h + Stäng av loop i 2 h + Stäng av loop i 1 h + Stäng av loop i 10 h + Superbolus + Lyckad + Stoppar temp basal + Stoppar förlängd bolus + Status: + Fel duration: + Okänt kommando eller fel svar + Temp basal %.2fU/h for %d min startad + Fel vid Temp basal start + Gick ej att avbryta temp basal + Temp basal avbruten + För att avbryta loop i %d minuter svara med kod %s + SMS + Tillåt fjärrkommandon via SMS + Fjärrkommandon tillåts ej + Kalibrering från andra källor godkänns ej + Fjärrbolus är inte tillåtet + Fjärrkommandon för att ändra basaler tillåts ej + Ej godkänd för SMS + Loop avstängd + Loop åter startad + Loop är aktiverad + Loop är avstängd + Loop är aktiverat + Loop är avstängd + Icke giltigt telefonnummer för SMS + Kalibrering skickad. xDrip måste tillåta att ta emot kalibrering i inställningarna + För att skicka kalibrering %.2f svar med kod %s + xDrip tar inte emot kalibreringar + För att ge bolus %.2fU svar med kod %s + Bolus ej given + Bolus %.2fU tillförd + För att stoppa temp basal svara med kod %s + För att starta basal %.2fU/h svara med kod %s + +XXXXXXXXXX;+YYYYYYYYYY + Tillåtna telefonnummer + SMS Tjänst + Senaste BG: + Enkel profil + Visa kö + Lösenord för inställningar + Ställ in förlängd bolus + inställningar importerade + Ställ in ny förlängd bolus: + Acceptera ny temp basal: + SKICKA TILL PUMP + Skicka kalibrering %.1f till xDrip? + SKICKA + Spara + Säkerhet + Återuppta + Resultat + Gå ur applikationen för att starta inställning + Omstart + Vill du verkligen återställa databasen? + Återsänd all Data + Ta bort sparad data: + Ladda om profil + Uppdatera händelser från NS + Orsak + RAT + Hastighet + Kalkylator inställningar + Kalkylator + Kö: + Pump stoppad. Klicka för ladda om status + Pump stoppad + Pump avstängd + Pumpfel + Pump upptagen + Pump inte igångsatt, ingen profil vald + Pump inte startad + Pump + NSPROFIL + NS Profil + ProfilByte + Basal profil i pump uppdaterad + Ny basal profil misslyckades + Profil + Prime/Fyll + Gränsvärden för Visualisering + Högt och lågt värde för graf i översikten och i smartwatch + Vg ge tillåtelse + Procent + Procentfaktor med vilken basal profilen kommer att bli multiplicerad + Pausad + Vg ange personens ålder för inställningar av gränser + Personens ålder + TempBasal + Hemma + Ta bort + Editera + % (100% = current) + Stoppa Förlängd Bolus + Förlängd Bolus + Lägg till + Giltig: + KH: + Knapp text: + Kalibrering + Kalibrering + Kalkylator + STOPP NEDTRYCKT + Stoppad + Stopp + Kommer tillföra %.2fU + Tillförd + Bolus + Översikt + Andra + Ny behandlingsrekommendation tillgänglig + Open Loop + Värde %s är utanför gränserna + %.2f begränsad till %.2f + Kör nu + Fråga + Profil + Ingen pump tillgänglig + Ingen profil tillänglig + Ingen glukos data tillänglig + Måltids data + Maximal basal IOB som OpenAPS kan ge [E] + Detta värde kallas Max IOB i OpenAPS. Det är ställt till noll från start. Efter flera dagar till veckor, beroende på hur du känner, kan du välja att justera denna. + Max E/h som Temp Basal kan ställas in på + Detta värde kallas max basal inom OpenAPS + Senaste körning + Senast startad + IOB data + Ange värden + Status Glukos + Plug in är avaktiverad + Nuvarande temp + Autosens data + OpenAPS MA + Använd AMA autosens funktioner + Inställt värde: 3.0 Detta är grundinställning för KH.absorption per 5 min. 3 mg/dl/5 min. Detta styr hur snabbt COB minskar, dvs hur snabbt programmet kalkylerar att KH tagits upp, och påverkar BG framöver när BG faller mer än väntat, eller inte stiger som väntat" + Inställt värde: 3 Detta är en grundsten i OpenAPS säkerhetsaspekt. Detta begränsar din basal till att vara 3x din största basalhastighet. Du behöver ofta inte ändra detta värde, Läs på och förstå skilnaden på 3x nuvarande och 3x daglig max som säkerhetsinställningar. + Viktigt! Normalt behöver du inte ändra dessa värden. Vg KLICKA HÄR och LÄS texten och försäkra dig om att du FÖRSTÅTT innan du ändrar dessa värden. + Inställt värde: 4 Detta är andra delen i grunden för säkerhet i OpenAPS, dvs kring 3x och 4 x daglig och nuvarnde basaler. Detta värde innebär att din nuvarande basal, oberoende av din max basalhastighet, kan aldrig bli högre än 4x nuvarande basal. Detta för att undvika att man farliga inställningar. Om man når taket i denna inställning så kanske ändringar i andra inställningar behövs. De flesta behöver inte ändra denna inställning. + Inställt värde: 2 Bolus snooze är aktivt efter att du givit en måltidsbolus, detta för att inte loop ska lågtempa när du just ätit. I detta exempel och grundvärde är 2; innebär att DIA på 3 tim kommer bolus snooze kommer att fasas ut under 1,5 tim (3DIA/2). + Antal timmar för beräkning av känslighet (KH absorptionstid är exkluderad) + Intervall för autosens (h) + Inställt värde: 0.7 Detta är den andra delen av autosens säkerhetsaspekt, den sätter en gräns på hur lågt autosens kan justera basaler, och hur högt den kan justera ISF och BG mål + Inställt värde: 1.2 Detta är inställt värde för hur mycket autosens kan multiplicera uppåt (snart även autotune) dvs max 20%, med 1.2 kan alltså autosens öka dina basaler med max 20%, denna gräns gäller alltså hur högt autosens kan justera dina basaler men även hur lågt den kan justera ISF och hur lågt den kan sätta BG mål. + Inställt värde: sant Detta för att tillåta autosens justera BG målvärden, tillsammans med ISF och basaler + OpenAPS AMA + OAPS + OpenAPS + Öppna inställningar på Wear + Pågående rapportering + GAMMAL DATA + OK + Ocklusion + M/S + Pump status tillgänglig i NS + Mål/syfte + Minimal duration + Manuell aktivering + Spärr: + Godkänn + Starta + BG är tillängligt i NS + Aktiverar extra funktioner som kan användas dagitd, såsom avancerad måltids assist + Justerar basaler och ration om det behövs, aktivera sedan auto-sens + 1 veckas framgångsrik dagtids looping där alla måltider lagts in + Finjustering av closed loop, gradvis ökande IOB och minskande önskat BG målvärde + Kör några dagar, och åtminstone en natt utan larm för lågt BG, innan du sänker BG målvärde + Börja använda closed loop med aktiverad funktion att stänga av vid lågt BG + Aktivera closed loop med max IOB=0 i några dagar till dess systemet inte stänger av pga lågt BG för många gånger + Förstå din open loop, och hur den föreslår temp basaler + Utifrån vad du nu lärt dig, besluta vilken max basal du vil ha, ställ in det både i inställningar i APS och i den pump. + Starta med open loop + Starta Open loop och använd det några dagar, försök att ge många föreslagna temp basaler + Tid i timmar när alla KH väntas vara absorberade + Måltids max absorptions tid (h) + Absorptions inställningar + Bulgariska + PUMP + Batteribyte Pump + Sensor ålder + SAGE + Måste vara aktiverad för att kunna skicka värden till pumpen + Värden sparas inte + Möjligen felvärde om man använder bolus för att priming/fyllning! + Ändra Base-IC: + Ändra Base-ISF: + Grekiska + MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + ISF fattas i profilen. Använder värde från grundinställning. + Lås skärm + Lås + mmol/l + %dmin sedan + mg/dl + OK + MDI + NSClient + Autoscroll + http://openaps.readthedocs.io/en/latest/docs/walkthrough/phase-3/beyond-low-glucose-suspend.html + Basal typ + SENS + Genom att slå på Autosens funktionen, kom ihåg att skriva in alla KH. Annars kommer programmet göra fel i beräkningar av känslighet (ISF)!! + Sensitivity AAPS + Sensitivity Oref0 + Sensitivity WeightedAverage + Ställa in temp basal + SP + BG: + Basal: + Bolus: + Delta: + IOB: + %dmin sedan + \ No newline at end of file