diff --git a/app/src/main/java/info/nightscout/androidaps/Config.java b/app/src/main/java/info/nightscout/androidaps/Config.java index a12e0a9ea0..27ce9faee6 100644 --- a/app/src/main/java/info/nightscout/androidaps/Config.java +++ b/app/src/main/java/info/nightscout/androidaps/Config.java @@ -33,7 +33,7 @@ public class Config { public static final boolean logNSUpload = true; public static final boolean logPumpActions = true; public static final boolean logCongigBuilderActions = true; - public static final boolean logAutosensData = false; + public static final boolean logAutosensData = true; public static final boolean logEvents = false; public static final boolean logProfile = false; diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index 24631b10c8..dbb6ddee8b 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -194,18 +194,8 @@ public class MainApp extends Application { MainApp.getConfigBuilder().initialize(); } - NSUpload.uploadAppStart(); - if (Config.NSCLIENT) - FabricPrivacy.getInstance().logCustom(new CustomEvent("AppStart-NSClient")); - else if (Config.G5UPLOADER) - FabricPrivacy.getInstance().logCustom(new CustomEvent("AppStart-G5Uploader")); - else if (Config.PUMPCONTROL) - FabricPrivacy.getInstance().logCustom(new CustomEvent("AppStart-PumpControl")); - else if (MainApp.getConstraintChecker().isClosedLoopAllowed().value()) - FabricPrivacy.getInstance().logCustom(new CustomEvent("AppStart-ClosedLoop")); - else - FabricPrivacy.getInstance().logCustom(new CustomEvent("AppStart-OpenLoop")); + NSUpload.uploadAppStart(); final PumpInterface pump = ConfigBuilderPlugin.getActivePump(); if (pump != null) { diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java index 25dab4494b..81af28eaa4 100644 --- a/app/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/interfaces/SensitivityInterface.java @@ -1,18 +1,6 @@ package info.nightscout.androidaps.interfaces; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -import info.nightscout.androidaps.Config; -import info.nightscout.androidaps.R; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensResult; -import info.nightscout.utils.Round; -import info.nightscout.utils.SP; -import info.nightscout.utils.SafeParse; /** * Created by mike on 24.06.2017. diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/AutosensResult.java b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/AutosensResult.java index 6602038fb4..fbd5b0a0d1 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/AutosensResult.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/AutosensResult.java @@ -14,7 +14,7 @@ public class AutosensResult { //default values to show when autosens algorithm is not called public double ratio = 1d; public double carbsAbsorbed = 0d; - public String sensResult = "autosens deactivated"; + public String sensResult = "autosens not available"; public String pastSensitivity = ""; public String ratioLimit = ""; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobCalculatorPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobCalculatorPlugin.java index d6fc244eef..a34ae6a308 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobCalculatorPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobCalculatorPlugin.java @@ -39,6 +39,7 @@ import info.nightscout.androidaps.plugins.Sensitivity.SensitivityOref1Plugin; import info.nightscout.androidaps.plugins.Treatments.Treatment; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.utils.DateUtil; +import info.nightscout.utils.T; import static info.nightscout.utils.DateUtil.now; @@ -131,8 +132,8 @@ public class IobCobCalculatorPlugin extends PluginBase { public static long roundUpTime(long time) { if (time % 60000 == 0) return time; - long rouded = (time / 60000 + 1) * 60000; - return rouded; + long rounded = (time / 60000 + 1) * 60000; + return rounded; } void loadBgData(long start) { @@ -293,7 +294,7 @@ public class IobCobCalculatorPlugin extends PluginBase { long now = System.currentTimeMillis(); long oldestDataAvailable = TreatmentsPlugin.getPlugin().oldestDataAvailable(); - long getBGDataFrom = Math.max(oldestDataAvailable, (long) (now - 60 * 60 * 1000L * (24 + MainApp.getConfigBuilder().getProfile().getDia()))); + long getBGDataFrom = Math.max(oldestDataAvailable, (long) (now - T.hours(1).msecs() * (24 + MainApp.getConfigBuilder().getProfile().getDia()))); log.debug("Limiting data to oldest available temps: " + new Date(oldestDataAvailable).toString()); return getBGDataFrom; } @@ -377,18 +378,20 @@ public class IobCobCalculatorPlugin extends PluginBase { public AutosensData getAutosensData(long time) { synchronized (dataLock) { long now = System.currentTimeMillis(); - if (time > now) + if (time > now) { return null; + } Long previous = findPreviousTimeFromBucketedData(time); - if (previous == null) + if (previous == null) { return null; + } time = roundUpTime(previous); AutosensData data = autosensDataTable.get(time); if (data != null) { //log.debug(">>> getAutosensData Cache hit " + data.log(time)); return data; } else { - //log.debug(">>> getAutosensData Cache miss " + new Date(time).toLocaleString()); +// log.debug(">>> getAutosensData Cache miss " + new Date(time).toLocaleString()); return null; } } @@ -453,6 +456,13 @@ public class IobCobCalculatorPlugin extends PluginBase { } } + public String lastDataTime() { + if (autosensDataTable.size() > 0) + return DateUtil.dateAndTimeString(autosensDataTable.valueAt(autosensDataTable.size() - 1).time); + else + return "autosensDataTable empty"; + } + public IobTotal[] calculateIobArrayInDia(Profile profile) { // predict IOB out to DIA plus 30m long time = System.currentTimeMillis(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobOref1Thread.java b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobOref1Thread.java index 725cfab741..a4374541a5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobOref1Thread.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobOref1Thread.java @@ -337,8 +337,11 @@ public class IobCobOref1Thread extends Thread { if (bgTime < now()) autosensDataTable.put(bgTime, autosensData); if (Config.logAutosensData) - log.debug("Running detectSensitivity from: " + DateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + DateUtil.dateAndTimeString(bgTime)); - autosensData.autosensRatio = iobCobCalculatorPlugin.detectSensitivity(oldestTimeWithData, bgTime).ratio; + log.debug("Running detectSensitivity from: " + DateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + DateUtil.dateAndTimeString(bgTime) + " lastDataTime:" + IobCobCalculatorPlugin.getPlugin().lastDataTime()); + AutosensResult sensitivity = iobCobCalculatorPlugin.detectSensitivityWithLock(oldestTimeWithData, bgTime); + if (Config.logAutosensData) + log.debug("Sensitivity result: " + sensitivity.toString()); + autosensData.autosensRatio = sensitivity.ratio; if (Config.logAutosensData) log.debug(autosensData.toString()); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobThread.java b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobThread.java index 2ba476996f..de4a70224c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobThread.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/IobCobCalculator/IobCobThread.java @@ -264,8 +264,8 @@ public class IobCobThread extends Thread { if (bgTime < now()) autosensDataTable.put(bgTime, autosensData); if (Config.logAutosensData) - log.debug("Running detectSensitivity from: " + DateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + DateUtil.dateAndTimeString(bgTime)); - AutosensResult sensitivity = iobCobCalculatorPlugin.detectSensitivity(oldestTimeWithData, bgTime); + log.debug("Running detectSensitivity from: " + DateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + DateUtil.dateAndTimeString(bgTime) + " lastDataTime:" + IobCobCalculatorPlugin.getPlugin().lastDataTime()); + AutosensResult sensitivity = iobCobCalculatorPlugin.detectSensitivityWithLock(oldestTimeWithData, bgTime); if (Config.logAutosensData) log.debug("Sensitivity result: " + sensitivity.toString()); autosensData.autosensRatio = sensitivity.ratio; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java index b6e07bb004..937489bc8f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java @@ -176,6 +176,7 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface { lastAutosensResult = IobCobCalculatorPlugin.getPlugin().detectSensitivityWithLock(IobCobCalculatorPlugin.getPlugin().oldestDataAvailable(), System.currentTimeMillis()); } else { lastAutosensResult = new AutosensResult(); + lastAutosensResult.sensResult = "autosens disabled"; } Profiler.log(log, "detectSensitivityandCarbAbsorption()", startPart); Profiler.log(log, "AMA data gathering", start); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java index f28a6eff8e..3227be526e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java @@ -183,6 +183,7 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface { lastAutosensResult = IobCobCalculatorPlugin.getPlugin().detectSensitivityWithLock(IobCobCalculatorPlugin.getPlugin().oldestDataAvailable(), System.currentTimeMillis()); } else { lastAutosensResult = new AutosensResult(); + lastAutosensResult.sensResult = "autosens disabled"; } Constraint smbAllowed = new Constraint<>(!tempBasalFallback); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 8d63f0a551..f50f8e224e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -21,6 +21,7 @@ import android.widget.RadioButton; import com.google.common.base.Joiner; +import info.nightscout.utils.NSUpload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -162,6 +163,13 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, C notesLayout.setVisibility(SP.getBoolean(R.string.key_show_notes_entry_dialogs, false) ? View.VISIBLE : View.GONE); notesEdit = view.findViewById(R.id.newcarbs_notes); + BgReading bgReading = DatabaseHelper.actualBg(); + if (bgReading != null && bgReading.value < 72) { + startHypoTTCheckbox.setOnCheckedChangeListener(null); + startHypoTTCheckbox.setChecked(true); + startHypoTTCheckbox.setOnClickListener(this); + } + setCancelable(true); getDialog().setCanceledOnTouchOutside(false); return view; @@ -403,6 +411,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, C CarbsGenerator.createCarb(carbsAfterConstraints, time, CareportalEvent.CARBCORRECTION, notes); } else { CarbsGenerator.generateCarbs(carbsAfterConstraints, time, duration, notes); + NSUpload.uploadEvent(CareportalEvent.NOTE, now() - 2000, MainApp.gs(R.string.generated_ecarbs_note, carbsAfterConstraints, duration, timeOffset)); } } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java index e88fc66de0..2889c8266b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java @@ -148,6 +148,11 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener setCancelable(true); getDialog().setCanceledOnTouchOutside(false); + if (savedInstanceState != null) { +// log.debug("savedInstanceState in onCreate is:" + savedInstanceState.toString()); + editInsulin.setValue(savedInstanceState.getDouble("editInsulin")); + editTime.setValue(savedInstanceState.getDouble("editTime")); + } return view; } @@ -156,6 +161,17 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener return value > 0 ? "+" + formatted : formatted; } + @Override + public void onSaveInstanceState(Bundle insulinDialogState) { + insulinDialogState.putBoolean("startEatingSoonTTCheckbox", startEatingSoonTTCheckbox.isChecked()); + insulinDialogState.putBoolean("recordOnlyCheckbox", recordOnlyCheckbox.isChecked()); + insulinDialogState.putDouble("editTime", editTime.getValue()); + insulinDialogState.putDouble("editInsulin", editInsulin.getValue()); + insulinDialogState.putString("notesEdit",notesEdit.getText().toString()); + log.debug("Instance state saved:"+insulinDialogState.toString()); + super.onSaveInstanceState(insulinDialogState); + } + @Override public synchronized void onClick(View view) { switch (view.getId()) { 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 422b2ec5ec..1ebd530526 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 @@ -1200,15 +1200,12 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, } else { basalText = DecimalFormatter.to2Decimal(profile.getBasal()) + "U/h"; } - baseBasalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String fullText = MainApp.gs(R.string.pump_basebasalrate_label) + ": " + DecimalFormatter.to2Decimal(profile.getBasal()) + "U/h\n"; - if (activeTemp != null) { - fullText += MainApp.gs(R.string.pump_tempbasal_label) + ": " + activeTemp.toStringFull(); - } - OKDialog.show(getActivity(), MainApp.gs(R.string.basal), fullText, null); + baseBasalView.setOnClickListener(v -> { + String fullText = MainApp.gs(R.string.pump_basebasalrate_label) + ": " + DecimalFormatter.to2Decimal(profile.getBasal()) + "U/h\n"; + if (activeTemp != null) { + fullText += MainApp.gs(R.string.pump_tempbasal_label) + ": " + activeTemp.toStringFull(); } + OKDialog.show(getActivity(), MainApp.gs(R.string.basal), fullText, null); }); } else { @@ -1237,22 +1234,17 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, if (extendedBolus != null && !pump.isFakingTempsByExtendedBoluses()) { extendedBolusText = DecimalFormatter.to2Decimal(extendedBolus.absoluteRate()) + "U/h"; } - extendedBolusView.setText(extendedBolusText); - extendedBolusView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - OKDialog.show(getActivity(), MainApp.gs(R.string.extendedbolus), extendedBolus.toString(), null); - } - }); - } else { if (extendedBolus != null && !pump.isFakingTempsByExtendedBoluses()) { extendedBolusText = extendedBolus.toString(); } - extendedBolusView.setText(extendedBolusText); + } + extendedBolusView.setText(extendedBolusText); + if (Config.NSCLIENT || Config.G5UPLOADER) { + extendedBolusView.setOnClickListener(v -> OKDialog.show(getActivity(), MainApp.gs(R.string.extendedbolus), extendedBolus.toString(), null)); } if (extendedBolusText.equals("")) - extendedBolusView.setVisibility(shorttextmode ? View.INVISIBLE : View.GONE); + extendedBolusView.setVisibility(Config.NSCLIENT || Config.G5UPLOADER ? View.INVISIBLE : View.GONE); else extendedBolusView.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java index 71b4842b8e..8c91e2896b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java @@ -42,6 +42,8 @@ public class Notification { public static final int APPROACHING_DAILY_LIMIT = 11; public static final int NSCLIENT_NO_WRITE_PERMISSION = 12; public static final int MISSING_SMS_PERMISSION = 13; + public static final int PUMPERROR = 14; + public static final int WRONGSERIALNUMBER = 15; public static final int NSANNOUNCEMENT = 18; public static final int NSALARM = 19; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/activities/DanaRUserOptionsActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/activities/DanaRUserOptionsActivity.java index 571f1a20e1..b4930a2a1a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/activities/DanaRUserOptionsActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/activities/DanaRUserOptionsActivity.java @@ -95,19 +95,25 @@ public class DanaRUserOptionsActivity extends Activity { shutdown.setParams((double) pump.shutdownHour, 0d, 24d, 1d, new DecimalFormat("1"), true); lowReservoir.setParams((double) pump.lowReservoirRate, 10d, 60d, 10d, new DecimalFormat("10"), false); switch (pump.beepAndAlarm) { - case 1: pumpAlarmSound.setChecked(true); + case 0x01: + pumpAlarmSound.setChecked(true); break; - case 2: pumpAlarmVibrate.setChecked(true); + case 0x02: + pumpAlarmVibrate.setChecked(true); break; - case 3: pumpAlarmBoth.setChecked(true); + case 0x11: + pumpAlarmBoth.setChecked(true); break; - case 5: pumpAlarmSound.setChecked(true); + case 0x101: + pumpAlarmSound.setChecked(true); beep.setChecked(true); break; - case 6: pumpAlarmVibrate.setChecked(true); + case 0x110: + pumpAlarmVibrate.setChecked(true); beep.setChecked(true); break; - case 7: pumpAlarmBoth.setChecked(true); + case 0x111: + pumpAlarmBoth.setChecked(true); beep.setChecked(true); break; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java index 037abd8c23..36edf1e94f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java @@ -57,6 +57,7 @@ import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.Round; import info.nightscout.utils.SP; +import info.nightscout.utils.T; /** * Created by mike on 03.09.2017. @@ -411,6 +412,7 @@ public class DanaRSPlugin extends PluginBase implements PumpInterface, DanaRInte double carbs = detailedBolusInfo.carbs; detailedBolusInfo.carbs = 0; int carbTime = detailedBolusInfo.carbTime; + if (carbTime == 0) carbTime--; // better set 1 min back to prevents clash with insulin detailedBolusInfo.carbTime = 0; DetailedBolusInfoStorage.add(detailedBolusInfo); // will be picked up on reading history @@ -419,7 +421,7 @@ public class DanaRSPlugin extends PluginBase implements PumpInterface, DanaRInte t.isSMB = detailedBolusInfo.isSMB; boolean connectionOK = false; if (detailedBolusInfo.insulin > 0 || carbs > 0) - connectionOK = danaRSService.bolus(detailedBolusInfo.insulin, (int) carbs, DateUtil.now() + carbTime * 60 * 1000, t); + connectionOK = danaRSService.bolus(detailedBolusInfo.insulin, (int) carbs, DateUtil.now() + T.mins(carbTime).msecs(), t); PumpEnactResult result = new PumpEnactResult(); result.success = connectionOK && Math.abs(detailedBolusInfo.insulin - t.insulin) < pumpDescription.bolusStep; result.bolusDelivered = t.insulin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/BLEComm.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/BLEComm.java index 5b6afb8089..9df2ebc0a1 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/BLEComm.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/BLEComm.java @@ -25,6 +25,8 @@ import java.util.concurrent.ScheduledFuture; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.events.EventPumpStatusChanged; +import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaRS.DanaRSPlugin; import info.nightscout.androidaps.plugins.PumpDanaRS.activities.PairingHelperActivity; @@ -32,6 +34,7 @@ import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRSMessageHashTable import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRS_Packet; import info.nightscout.androidaps.plugins.PumpDanaRS.events.EventDanaRSPacket; import info.nightscout.androidaps.plugins.PumpDanaRS.events.EventDanaRSPairingSuccess; +import info.nightscout.utils.NSUpload; import info.nightscout.utils.SP; /** @@ -421,14 +424,25 @@ public class BLEComm { SendPairingRequest(); } + } else if (inputBuffer.length == 6 && inputBuffer[2] == 'P' && inputBuffer[3] == 'U' && inputBuffer[4] == 'M' && inputBuffer[5] == 'P') { + log.debug("<<<<< " + "ENCRYPTION__PUMP_CHECK (PUMP)" + " " + DanaRS_Packet.toHexString(inputBuffer)); + mSendQueue.clear(); + MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTED, MainApp.gs(R.string.pumperror))); + NSUpload.uploadError(MainApp.gs(R.string.pumperror)); + Notification n = new Notification(Notification.PUMPERROR, MainApp.gs(R.string.pumperror), Notification.URGENT); + MainApp.bus().post(new EventNewNotification(n)); } else if (inputBuffer.length == 6 && inputBuffer[2] == 'B' && inputBuffer[3] == 'U' && inputBuffer[4] == 'S' && inputBuffer[5] == 'Y') { log.debug("<<<<< " + "ENCRYPTION__PUMP_CHECK (BUSY)" + " " + DanaRS_Packet.toHexString(inputBuffer)); mSendQueue.clear(); MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTED, MainApp.gs(R.string.pumpbusy))); } else { + // ERROR in response, wrong serial number log.debug("<<<<< " + "ENCRYPTION__PUMP_CHECK (ERROR)" + " " + DanaRS_Packet.toHexString(inputBuffer)); mSendQueue.clear(); MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTED, MainApp.gs(R.string.connectionerror))); + SP.remove(MainApp.gs(R.string.key_danars_pairingkey) + DanaRSPlugin.mDeviceName); + Notification n = new Notification(Notification.WRONGSERIALNUMBER, MainApp.gs(R.string.wrongpassword), Notification.URGENT); + MainApp.bus().post(new EventNewNotification(n)); } break; // 2nd packet, pairing key diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java index ff4203fd7b..7fa935d2ca 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java @@ -210,6 +210,8 @@ public class DanaRSService extends Service { return result; } + SystemClock.sleep(1000); + DanaRS_Packet_APS_History_Events msg; if (lastHistoryFetched == 0) { msg = new DanaRS_Packet_APS_History_Events(0); 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 c88d62ecc7..e83f9d9435 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 @@ -33,6 +33,7 @@ import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.utils.DateUtil; import info.nightscout.utils.Round; import info.nightscout.utils.SP; +import info.nightscout.utils.T; /** * Created by mike on 05.08.2016. @@ -195,6 +196,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { double carbs = detailedBolusInfo.carbs; detailedBolusInfo.carbs = 0; int carbTime = detailedBolusInfo.carbTime; + if (carbTime == 0) carbTime--; // better set 1 man back to prevent clash with insulin detailedBolusInfo.carbTime = 0; DetailedBolusInfoStorage.add(detailedBolusInfo); // will be picked up on reading history @@ -203,7 +205,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { t.isSMB = detailedBolusInfo.isSMB; boolean connectionOK = false; if (detailedBolusInfo.insulin > 0 || carbs > 0) - connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) carbs, DateUtil.now() + carbTime * 60 * 1000, t); + connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) carbs, DateUtil.now() + T.mins(carbTime).msecs(), t); PumpEnactResult result = new PumpEnactResult(); result.success = connectionOK && Math.abs(detailedBolusInfo.insulin - t.insulin) < pumpDescription.bolusStep; result.bolusDelivered = t.insulin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityAAPSPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityAAPSPlugin.java index fdf85c064e..4fbde5f9f8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityAAPSPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityAAPSPlugin.java @@ -15,16 +15,13 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.CareportalEvent; -import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginDescription; import info.nightscout.androidaps.interfaces.PluginType; -import info.nightscout.androidaps.interfaces.SensitivityInterface; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensData; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensResult; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; -import info.nightscout.utils.Round; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.SP; -import info.nightscout.utils.SafeParse; /** * Created by mike on 24.06.2017. @@ -70,13 +67,13 @@ public class SensitivityAAPSPlugin extends AbstractSensitivityPlugin { } if (autosensDataTable == null || autosensDataTable.size() < 4) { - log.debug("No autosens data available"); + log.debug("No autosens data available. lastDataTime=" + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } AutosensData current = IobCobCalculatorPlugin.getPlugin().getAutosensData(toTime); // this is running inside lock already if (current == null) { - log.debug("No autosens data available"); + log.debug("No autosens data available. toTime: " + DateUtil.dateAndTimeString(toTime) + " lastDataTime: " + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref0Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref0Plugin.java index cfe5dd28f6..d9c7b97d04 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref0Plugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref0Plugin.java @@ -15,16 +15,12 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.CareportalEvent; -import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginDescription; import info.nightscout.androidaps.interfaces.PluginType; -import info.nightscout.androidaps.interfaces.SensitivityInterface; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensData; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensResult; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; -import info.nightscout.utils.Round; -import info.nightscout.utils.SP; -import info.nightscout.utils.SafeParse; +import info.nightscout.utils.DateUtil; /** * Created by mike on 24.06.2017. @@ -66,13 +62,13 @@ public class SensitivityOref0Plugin extends AbstractSensitivityPlugin { } if (autosensDataTable == null || autosensDataTable.size() < 4) { - log.debug("No autosens data available"); + log.debug("No autosens data available. lastDataTime=" + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } AutosensData current = IobCobCalculatorPlugin.getPlugin().getAutosensData(toTime); // this is running inside lock already if (current == null) { - log.debug("No current autosens data available"); + log.debug("No autosens data available. toTime: " + DateUtil.dateAndTimeString(toTime) + " lastDataTime: " + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref1Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref1Plugin.java index f6d5a4ef2a..42f02b12de 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref1Plugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityOref1Plugin.java @@ -15,16 +15,12 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.CareportalEvent; -import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginDescription; import info.nightscout.androidaps.interfaces.PluginType; -import info.nightscout.androidaps.interfaces.SensitivityInterface; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensData; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensResult; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; -import info.nightscout.utils.Round; -import info.nightscout.utils.SP; -import info.nightscout.utils.SafeParse; +import info.nightscout.utils.DateUtil; /** * Created by mike on 19.06.2018. @@ -53,6 +49,8 @@ public class SensitivityOref1Plugin extends AbstractSensitivityPlugin { @Override public AutosensResult detectSensitivity(long fromTime, long toTime) { + // todo this method is called from the IobCobCalculatorPlugin, which leads to a circular + // dependency, this should be avoided LongSparseArray autosensDataTable = IobCobCalculatorPlugin.getPlugin().getAutosensDataTable(); Profile profile = MainApp.getConfigBuilder().getProfile(); @@ -63,13 +61,14 @@ public class SensitivityOref1Plugin extends AbstractSensitivityPlugin { } if (autosensDataTable == null || autosensDataTable.size() < 4) { - log.debug("No autosens data available"); + log.debug("No autosens data available. lastDataTime=" + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } + // the current AutosensData current = IobCobCalculatorPlugin.getPlugin().getAutosensData(toTime); // this is running inside lock already if (current == null) { - log.debug("No current autosens data available"); + log.debug("No autosens data available. toTime: " + DateUtil.dateAndTimeString(toTime) + " lastDataTime: " + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityWeightedAveragePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityWeightedAveragePlugin.java index ed185e88f9..b4dd5ab250 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityWeightedAveragePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Sensitivity/SensitivityWeightedAveragePlugin.java @@ -13,16 +13,13 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.CareportalEvent; -import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginDescription; import info.nightscout.androidaps.interfaces.PluginType; -import info.nightscout.androidaps.interfaces.SensitivityInterface; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensData; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensResult; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; -import info.nightscout.utils.Round; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.SP; -import info.nightscout.utils.SafeParse; /** * Created by mike on 24.06.2017. @@ -61,15 +58,14 @@ public class SensitivityWeightedAveragePlugin extends AbstractSensitivityPlugin int hoursForDetection = SP.getInt(R.string.key_openapsama_autosens_period, defaultHours); if (autosensDataTable == null || autosensDataTable.size() < 4) { - if (Config.logAutosensData) - log.debug("No autosens data available"); + log.debug("No autosens data available. lastDataTime=" + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } AutosensData current = IobCobCalculatorPlugin.getPlugin().getAutosensData(toTime); // this is running inside lock already if (current == null) { if (Config.logAutosensData) - log.debug("No autosens data available"); + log.debug("No autosens data available. toTime: " + DateUtil.dateAndTimeString(toTime) + " lastDataTime: " + IobCobCalculatorPlugin.getPlugin().lastDataTime()); return new AutosensResult(); } @@ -134,7 +130,12 @@ public class SensitivityWeightedAveragePlugin extends AbstractSensitivityPlugin } if (data.size() == 0) { + if (Config.logAutosensData) + log.debug("Data size: " + data.size() + " fromTime: " + DateUtil.dateAndTimeString(fromTime) + " toTime: " + DateUtil.dateAndTimeString(toTime)); return new AutosensResult(); + } else { + if (Config.logAutosensData) + log.debug("Data size: " + data.size() + " fromTime: " + DateUtil.dateAndTimeString(fromTime) + " toTime: " + DateUtil.dateAndTimeString(toTime)); } double weightedsum = 0; diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index af46321901..d574b08f40 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -1,9 +1,5 @@ package info.nightscout.androidaps.receivers; -/** - * Created by mike on 07.07.2016. - */ - import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -11,6 +7,7 @@ import android.content.Context; import android.content.Intent; import android.os.PowerManager; +import info.nightscout.utils.FabricPrivacy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +22,10 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.queue.commands.Command; import info.nightscout.utils.LocalAlertUtils; + +/** + * Created by mike on 07.07.2016. + */ public class KeepAliveReceiver extends BroadcastReceiver { private static Logger log = LoggerFactory.getLogger(KeepAliveReceiver.class); public static final long STATUS_UPDATE_FREQUENCY = 15 * 60 * 1000L; @@ -45,6 +46,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { LocalAlertUtils.shortenSnoozeInterval(); LocalAlertUtils.checkStaleBGAlert(); checkPump(); + FabricPrivacy.uploadDailyStats(); log.debug("KeepAlive received"); wl.release(); diff --git a/app/src/main/java/info/nightscout/utils/FabricPrivacy.java b/app/src/main/java/info/nightscout/utils/FabricPrivacy.java index bd117ed5c3..ad498fa4f7 100644 --- a/app/src/main/java/info/nightscout/utils/FabricPrivacy.java +++ b/app/src/main/java/info/nightscout/utils/FabricPrivacy.java @@ -3,6 +3,13 @@ package info.nightscout.utils; import com.crashlytics.android.Crashlytics; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.CustomEvent; +import info.nightscout.androidaps.BuildConfig; +import info.nightscout.androidaps.Config; +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.interfaces.PluginBase; + +import java.util.Date; /** * Created by jamorham on 21/02/2018. @@ -80,4 +87,51 @@ public class FabricPrivacy { } } + public static void uploadDailyStats() { + if (!fabricEnabled()) return; + + long lastUploadDay = SP.getLong(MainApp.gs(R.string.key_plugin_stats_report_timestamp), 0L); + + Date date = new Date(); + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + long today = date.getTime() - date.getTime() % 1000; + + if (today > lastUploadDay) { + uploadAppUsageType(); + uploadPluginStats(); + + SP.putLong(MainApp.gs(R.string.key_plugin_stats_report_timestamp), today); + } + } + + private static void uploadPluginStats() { + CustomEvent pluginStats = new CustomEvent("PluginStats"); + pluginStats.putCustomAttribute("version", BuildConfig.VERSION); + for (PluginBase plugin : MainApp.getPluginsList()) { + if (plugin.isEnabled(plugin.getType()) && !plugin.pluginDescription.alwaysEnabled) { + pluginStats.putCustomAttribute(plugin.getClass().getSimpleName(), "enabled"); + } + } + + getInstance().logCustom(pluginStats); + } + + private static void uploadAppUsageType() { + CustomEvent type = new CustomEvent("AppUsageType"); + if (Config.NSCLIENT) + type.putCustomAttribute("type", "NSClient"); + else if (Config.G5UPLOADER) + type.putCustomAttribute("type", "G5Uploader"); + else if (Config.PUMPCONTROL) + type.putCustomAttribute("type", "PumpControl"); + else if (MainApp.getConstraintChecker().isClosedLoopAllowed().value()) + type.putCustomAttribute("type", "ClosedLoop"); + else + type.putCustomAttribute("type", "OpenLoop"); + + getInstance().logCustom(type); + } + } diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 1cdbfd1393..97540d4d3c 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -271,7 +271,7 @@ Очаква помпата Ще достави %.2fЕ Настройка на визуализацията и наблюдението, а също и анализиране на базалните нужди и коефициенти - Работете в Open Loop няколко дни и ръчно прилагайте на много временни базали + Работете в Open Loop няколко дни и ръчно прилагайте на много временни базали. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Стартиране на Open Loop Определяне на макс. лимит на базалния инсулин и настройване в помпата и програмата Разбиране на вашият Open Loop, включително препоръчваните временни базали diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 9d83680f00..4d20892429 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -248,7 +248,7 @@ Podávání %.2fU inzulínu Zkontrolovat, zda jsou glykémie a údaje z pumpy viditelné v Nightscoutu Nastavit vizualizaci a monitoring, analyzovat bazály a koeficienty - Provozovat několik dní otevřenou smyčku a ručně potvrzovat doporučené dočasné bazály + Provozovat několik dní otevřenou smyčku a ručně potvrzovat doporučené dočasné bazály. Nastavovat a používat dočasné cíle (např. pro sport nebo hypo) Začít s otevřenou smyčkou Na základě předchozích zkušeností rozhodnout, jaký je třeba maximální bazál a nastavit ho v pumpě a v aplikaci Porozumět otevřené smyčce a doporučeným dočasným bazálům @@ -947,7 +947,7 @@ Citlivost je počítána stejným způsobem jako v Oref0, ale je možné specifikovat dobu do minulosti. Minimální absorbce sacharidů je počítána dynamicky z maximální doby absorbce definované v nastavení. Citlivost je počítána za 24h a sacharidy, pokud nejsou absorbované, jsou oříznuty po čase definovaném v nastavení. Citlivost je počítána za 8h a sacharidy, pokud nejsou absorbované, jsou oříznuty po čase definovaném v nastavení. Je také zároveň vyhodnocováno UAM (neoznámené jídlo) - Cislivost je počítána jako vážený průměr z odchylek. Novější mají vyšší prioritu. Minimální absorbce sacharidů je počítána dynamicky z maximální doby absorbce definované v nastavení. Tento algoritmus sleduje nejrychlejí změny citlivosti. + Citlivost je počítána jako vážený průměr z odchylek. Novější mají vyšší prioritu. Minimální absorbce sacharidů je počítána dynamicky z maximální doby absorbce definované v nastavení. Tento algoritmus sleduje nejrychlejí změny citlivosti. Příjem glykémií z modifikované Dexcom G5 aplikace Příjem glykémií z Glimpu Příjem glykémií z Uploaderu 640G @@ -998,11 +998,11 @@ Nastavení APS Nastavení senzitivity Plugin senzitivita slouží k detekci změn v senzitivitě a k počítání COB. Více informací zde: - NSClient slouží ke s pojení s Nightscoutem. Nastavení můžete nyní přeskočit, ale nebudete schopni dokončit cíle, dokud nastavení neprovedete. - Pozor: Nové inzulínové profilyvyžadují DIA minimálně 5h. DIA 5-6 hodin odpovídá zhruba nastavení 3h na starších typech profilů nebo v pumpě. + NSClient slouží ke spojení s Nightscoutem. Nastavení můžete nyní přeskočit, ale nebudete schopni dokončit cíle, dokud nastavení neprovedete. + Pozor: Nové inzulínové profily vyžadují DIA minimálně 5h. DIA 5–6 hodin odpovídá zhruba nastavení 3h na starších typech profilů nebo v pumpě. Konfigurace zdroje glykémií - Vyberte zdroj profilů. Pokud jde o dítě, využijte nejspíš NS profil. Pokud Vás nikdo přes NS nesleduje, budete patrně preferovat Místní profil. Uvědomte si, že nastavujete pouze zdroj profilů. Na to aby se opravdu profil začal používat, je třeba provést aktivaci profilu použitím \"Přepnutí profilu\" - Vyberte jeden z algoritmů. Jsou setříděné od nejstaršího po nejnovější. Novější je obvikle lepší a agresivnější, ale vyžaduje přesnější nastavení. Proto pokud se smyčkou začínáte, mely byste nejříve vybrat jen AMA a ne ten posldní. Nezapomeňte si přečíst dokumentaci OpenAPS a provést nastavení, než ho začnete používat. + Vyberte zdroj profilů. Pokud jde o dítě, využijte nejspíše NS profil. Pokud Vás nikdo přes NS nesleduje, budete patrně preferovat Místní profil. Uvědomte si, že nastavujete pouze zdroj profilů. Na to aby se opravdu profil začal používat, je třeba provést aktivaci profilu použitím \"Přepnutí profilu\" + Vyberte jeden z algoritmů. Jsou setříděné od nejstaršího po nejnovější. Novější je obvykle lepší a agresivnější, ale vyžaduje přesnější nastavení. Proto pokud se smyčkou začínáte, mely byste nejříve vybrat jen AMA a ne ten poslední. Nezapomeňte si přečíst dokumentaci k OpenAPS a provést nastavení, než ho začnete používat. Spusťte první cíl Povolení Získat povolení @@ -1037,14 +1037,14 @@ Poctech Získávat glykémie z aplikace Poctech Vysoký dočasný cíl zvýší senzitivitu - = 5.5]]> + = 5.5]]> Nízký dočasný cíl zníží senzitivitu - Chybné nastavení pumpy. Projděte si dokumentaci a presvěčte se, že menu Quick Info se zmenuje QUICK INFO, za použití 360 configuration software + Chybné nastavení pumpy. Projděte si dokumentaci a presvědčete se, že menu Quick Info se zmenuje QUICK INFO, za použití 360 configuration software Volitelný Velký rozdíl v času - "Velký rozdíl v času: 4as v pumpě se liší alespoň o 1,5 h. Prosím upravte čas v pumpě ručně a vymažte historri pumpy, pokud je to třeba, prípadně pozastavte smyčku alespoň na \"DIA\" hodin " + "Velký rozdíl v času: Čas v pumpě se liší minimálně o 1,5 h. Prosím upravte čas v pumpě ručně a vymažte historii pumpy, pokud je to třeba, případně pozastavte smyčku alespoň na \"DIA\" hodin " Vyčistit události \"AndroidAPS restartován\" Nalezeno uložené nastavení - POZOR: Pokud aktivuje a připojíte skutečnou pumpu, AndroidAPS nakopíruje (a bude udržovat) nastavení bazálu z aktivního profilu do pumpy. Nastavení bazálu v pumpě bude přepsáno. Pokud si nejste jistý nebo nechcete přepsat bazály v pumpě, stiskněte Zrušit a opakujte přepnutí na jinou pumpu později. + POZOR: Pokud aktivuje a připojíte skutečnou pumpu, AndroidAPS nakopíruje (a bude udržovat) nastavení bazálu z aktivního profilu do pumpy. Nastavení bazálu v pumpě bude přepsáno. Pokud si nejste jistí nebo nechcete přepsat bazály v pumpě, stiskněte Zrušit a opakujte přepnutí na jinou pumpu později. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d7e21bf808..f3fd2e5986 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -5,7 +5,7 @@ Abbrechen Kohlenhydrate Careportal - Korrektur-Bolus + Korrektur Bolus Messgerät Notiz Profil @@ -27,9 +27,9 @@ OK Basal Bolus - Mahlzeiten-Bolus + Mahlzeiten Bolus Bewegung - Combo-Bolus + Combo Bolus CGM-Sensor Start Absolut Kohlenhydrate @@ -41,11 +41,11 @@ Notiz OpenAPS offline Profilwechsel - Pumpenkatheter-Wechsel + Pumpenkatheter Wechsel Frage - Snack-Bolus - TBR-Ende - TBR-Start + Snack Bolus + TBR Ende + TBR Start Ändere deine Eingabe! Closed Loop APS @@ -99,13 +99,13 @@ Kohlenhydrat-Menge Insulin-Menge Behandlungen - Max erlaubter Bolus [IE] - Max erlaubte Kohlehydrate [g] + Max. erlaubter Bolus [IE] + Max. erlaubte Kohlehydrate [g] Sicherheitseinstellungen Behandlungen Einfaches Profil Setze neuen verlängerten Bolus: Akzeptiere neue TBR: - Benutze verlängerten Bolus für hohe TBR (>200%) + Benutze verlängerten Bolus für hohe TBR (>200%). Pumpen-Status verfügbar in Nightscout % (100% = aktuell) Basal-Wert [%] @@ -124,16 +124,16 @@ Zielsetzungen KEIN PROFIL GESETZT Nightscout-Client ist nicht installiert. Eintrag verloren! - Verwende absolute statt prozentuale Basalwerte beim Upload zu NightScout + Verwende absolute statt prozentuale Basalwerte beim Upload zu NightScout. Bisher noch kein Profil von Nightscout geladen Keine Anpassung benötigt KEIN APS AUSGEWÄHLT ODER KEIN ERGEBNIS VORHANDEN Bolus-Beschränkung angewendet Ankündigung - BZ-Test - Kohlenhydrat-Korrektur + BZ Test + Kohlenhydrat Korrektur CGM-Sensor gesetzt - Insulinreservoir-Wechsel + Insulinreservoir Wechsel Dauer KH-Zeit Eingegeben durch @@ -143,7 +143,7 @@ Generell Behandlungen Beschränkungen angewendet! - Beschränkungen wurden verletzt oder Limit erreicht + Beschränkungen wurden verletzt oder Limit erreicht. Czech LOOP DEAKTIVIERT DURCH BESCHRÄNKUNGEN Beschränkungen angewendet @@ -151,7 +151,7 @@ Manuelle Aktionen Kohlenhydrat-Beschränkung erreicht Datenbanken zurücksetzen - Erneure Behandlungen von NS + Erneure Behandlungen von Nightscout Exit Fehlend Eingabe neuer Behandlung: @@ -163,8 +163,8 @@ Einstellungen exportieren Einstellungen importieren German - Dieser Wert wird \"max basal\" in OpenAPS genannt - Maximale Menge von nicht Bolus-IOB, die OpenAPs abgeben kann + Dieser Wert wird \"max basal\" in OpenAPS genannt. + Maximale Menge von nicht Bolus-IOB, die OpenAPs abgeben kann. Bulgarian +XXXXXXXXXX;+YYYYYYYYYY Absolut @@ -178,7 +178,7 @@ Pumpen-Verbindungsfehler DanaR Blueetooth Gerät Pumpen-IOB - DanaR Pumpen Einstellungen + DanaR Pumpen-Einstellungen DanaR Getrennt Sensor @@ -200,15 +200,15 @@ Ausgewähltes Gerät nicht gefunden VERWERFEN Endbenutzervereinbarung - Ich verstehe und stimme zu + Ich verstehe und stimme zu. DAS PROGRAMM DARF NICHT FÜR MEDIZINISCHE ENTSCHEIDUNGEN BENUTZT WERDEN. ES GIBT IN DIESEM PROJEKT KEINE GEWÄHRLEISTUNG ODER GARANTIERTE UNTERSTÜTZUNG IN IRGENDEINER ART. WENN DU DICH ENTSCHEIDEST ES ZU NUTZEN, HÄNGT DIE QUALITÄT UND LEISTUNGSFÄHIGKEIT DIESES PROJEKTES VON DIR SELBST AB. ES WIRD \"WIE BESEHEN\" ZUR VERFÜGUNG GESTELLT. SOLLTE SICH DAS PROGRAMM ALS FEHLERHAFT ERWEISEN, ÜBERNEHMEN SIE DIE KOSTEN ALLER NOTWENDIGEN KRANKHEITSKOSTEN, SERVICELEISTUNGEN, REPARATUREN ODER KORREKTUREN. Fehler beim Aktualisieren der Basalrate SMS-Kommunikator Erlaubte Telefonnummern Auf Pumpenergebnis warten Kein Bluetooth-Adapter gefunden - Ferngesteuerter Bolus ist nicht erlaubt - Um einen Bolus von %1$.2f IE abzugeben, antworte mit dem Code %2$s + Ferngesteuerter Bolus ist nicht erlaubt. + Um einen Bolus von %1$.2f IE abzugeben, antworte mit dem Code %2$s. Korean Limit erreicht Falsches Pumpen-Passwort! @@ -251,7 +251,7 @@ Andere Verstopfung Abgegeben - Es werden %1$.2f IE abgegeben + %1$.2f IE werden abgegeben. Vorfüllen/Füllen Hochladen Spanish @@ -271,8 +271,8 @@ Button 1 Button 2 Button 3 - Konfigurations-Generator - vor %d Min. + Konfiguration + vor %d min AKT WEAR VP @@ -294,9 +294,9 @@ Bitte verwende nur Ziffern von %1$s - %2$s. Warte auf Pumpe Wear - Verwende immer das kurze durchschnittliche Delta statt des einfachen Deltas - Sinnvoll, wenn die Daten von einer ungefilterten Quelle Signalrauschen haben. - Tagesinsulin-Limit wird erreicht + Verwende immer das kurze durchschnittliche Delta statt des einfachen Deltas. + Das ist sinnvoll, wenn die Daten von einer ungefilterten Quelle Signalrauschen haben. + Tagesinsulin-Limit wird bald erreicht. Kalibrierung an xDrip+ gesendet Kind Warteschlange leeren @@ -307,21 +307,21 @@ Kumulative TDD Datum Exponentiell gewichtete TDD - Veraltete Daten, bitte klicke auf \"Reload\" + Veraltete Daten, bitte klicke auf \"Reload\". xds xDrip+ Statuszeile (Uhr) xDrip+ Status (Uhr) xDrip+ nicht installiert Zeige BGI - Füge BGI zur Statuszeile hinzu + Füge BGI zur Statuszeile hinzu. Wear-Einstellungen Zeige detailliertes IOB - Differenziere IOB in Bolus- und Basal-IOB auf dem Watchface + Differenziere IOB in Bolus- und Basal-IOB auf dem Watchface. Falsches Passwort Italian Glimp MM640g - Zeit in Stunden, in der zu erwarten ist, dass alle Kohlenhydrate resorbiert sein werden + Zeit in Stunden, in der zu erwarten ist, dass alle Kohlenhydrate resorbiert sein werden. Maximale Essens-Resorptionszeit [h] Resorptions-Einstellungen Aktivität @@ -338,7 +338,7 @@ CARBS & BOLUS CGM & OPENAPS Insulinalter - Dauer [Min.] + Dauer [min] Pausiert Patientenalter Bitte wähle das Pateintenalter, um die Sicherheits-Limits festzulegen @@ -360,18 +360,18 @@ IAGE Batteriealter PUMP - Pumpenbatterie-Wechsel + Pumpenbatterie Wechsel SAGE Insulin Es sind nicht alle Profile geladen! Werte nicht gespeichert! - Aktiviere verlängerten Bolus in der Pumpe + Aktiviere verlängerten Bolus in der Pumpe. DanaR Stats # Tage Basal Bolus Gewichtung - Zeige verlängerten Bolus als % an + Zeige verlängerten Bolus als % an. DanaR Korean DanaRv2 Jetzt abgeben @@ -380,8 +380,8 @@ Verbindung wird getrennt Trenne Pumpe für 1 h Trenne Pumpe für 2 h - Trenne Pumpe für 15 Min. - Trenne Pumpe für 30 Min. + Trenne Pumpe für 15 min + Trenne Pumpe für 30 min Trenne Pumpe für 3 h Bald essen Greek @@ -397,24 +397,24 @@ Ungültiges oder defektes Profil! IOB Lokales Profil - Superbolus (%1$d Min.) + Superbolus (%1$d min) Loop pausiert - Pausiert (%1$d Min.) + Pausiert (%1$d min) Abbrechen OK mg/dl mmol/l Über Logs anzeigen - nicht erfolgreich - bitte Telefon prüfen + Nicht erfolgreich - bitte Telefon prüfen Nicht verfügbar Nightscout-Client hat keine Schreibrechte. Falscher API-Key? Alarm-Optionen Aktiviere Broadcasts für andere Apps (z. B. xDrip+). Aktiviere lokale Broadcasts. - Logge App-Start in NS + Logge App-Start in Nightscout. Kein Upload zu Nightscout - Alle an Nightscout gesendeten Daten werden verworfen. AAPS ist verbunden, aber Nightscout-Daten werden nicht geändert + Alle an Nightscout gesendeten Daten werden verworfen. AAPS ist verbunden, aber Nightscout-Daten werden nicht geändert. Hoch Niedrig Sehr hoch @@ -426,9 +426,9 @@ URL: Nightscout-URL eingeben Nightscout-URL - Verifiziere, dass BZ- und Pumpen-Insulin-Daten in Nightscout erfolgreich hoch geladen werden + Verifiziere, dass BZ- und Pumpen-Insulin-Daten in Nightscout erfolgreich hoch geladen werden. Konfiguriere die Anzeige und das Monitoring (Nightscout) und analysiere Basal-Raten und Faktoren - Erprobe den Open Loop Modus für ein paar Tage und setze manuell temporäre Basal-Raten + Erprobe den Open Loop Modus für ein paar Tage und setze manuell temporäre Basal-Raten. Richte temporäre Ziele ein und nutze sie (z.B. für Bewegung, unterstützend zur Hypobehandlung). Starte den Open Loop Modus VERALTETE DATEN Laufende Benachrichtigungen @@ -437,7 +437,7 @@ OAPS OpenAPS AMA Skript Debug - Wert %1$s ist außerhalb des festen Limits + Wert %1$s ist außerhalb des festen Limits. Kalibrierung Button-Text: Verlängerten Bolus abbrechen @@ -485,9 +485,9 @@ Insgesamt %1$d Einträge erfolgreich hochgeladen Dauer der Insulinwirkung INS - %1$s benötigt Batterie-Optimierungs-Whitelisting, um korrekt arbeiten zu können + %1$s benötigt Batterie-Optimierungs-Whitelisting, um korrekt arbeiten zu können. Veraltete Daten - Veraltete Daten seit [Min.] + Veraltete Daten seit [min] Autosens-Daten Max IE/h, die als TBR gesetzt werden können Maximales Basal-IOB, das OpenAPS abgeben darf [IE] @@ -498,29 +498,29 @@ Sensitivität Oref0 Durchschnittliche Sensitivität Verlängerter Bolus wird gesetzt - vor %1$d Min. - Um die TBR abzubrechen, antworte mit dem Code %s + vor %1$d min + Um die TBR abzubrechen, antworte mit dem Code %s. Bolus %.2f IE erfolgreich abgegeben xDrip+ hat die Kalbrierung nicht erhalten - Um die Kalibrierung %1$.2f zu senden, antworte mit dem Code %2$s + Um die Kalibrierung %1$.2f zu senden, antworte mit dem Code %2$s. Kalibrierung gesendet. Das Empfangen von Kalbrierungen muss in xDrip+ aktiviert sein. Falsche/ungültige Telefonnummer - Loop wurde deaktiviert - Lopp wurde aktiviert - Loop ist deaktiviert - Loop ist aktiviert - Loop wurde fortgesetzt - Loop pausiert - SMS-Steuerung nicht erlaubt - Ferngesteuerte Basal-Einstellungen sind nicht erlaubt - Ferngesteuerte Kalibrierung ist nicht erlaubt - Ferngesteuerte Befehle sind nicht erlaubt - Erlaube externe Befehle per SMS - Um das Loopen für %1$d Minuten zu pausieren, antworte mit dem Code %2$s + Loop wurde deaktiviert. + Lopp wurde aktiviert. + Loop ist deaktiviert. + Loop ist aktiviert. + Loop wurde fortgesetzt. + Loop pausiert. + SMS-Steuerung nicht erlaubt. + Ferngesteuerte Basal-Einstellungen sind nicht erlaubt. + Fern-Kalibrierung ist nicht erlaubt. + Ferngesteuerte Befehle sind nicht erlaubt. + Erlaube externe Befehle per SMS. + Um das Loopen für %1$d Minuten zu pausieren, antworte mit dem Code %2$s. TBR abgebrochen - Das Abbrechen der TBR ist fehlgeschlagen - Das Starten der TBR ist fehlgeschlagen - TBR mitl %1$.2f IE/h für %2$d Min. wurde erfolgreich gestartet + Das Abbrechen der TBR ist fehlgeschlagen. + Das Starten der TBR ist fehlgeschlagen. + TBR mitl %1$.2f IE/h für %2$d min wurde erfolgreich gestartet. Unbekannter Befehl oder falsche Antwort Falsche Dauer Einstellungen freischalten @@ -529,9 +529,9 @@ Model: %1$02X Protokoll: %2$02X Code: %3$02X Empfindlichkeitserkennung COB - Verstehen des Open Loops und der TBR-Empfehlungen + Verstehe den Open Loop und die TBR-Empfehlungen Verwende AMA Autosense - Um eine BR mit %1$.2f IE/h zu starten, antworte mit dem Code %2$s + Um eine BR mit %1$.2f IE/h zu starten, antworte mit dem Code %2$s. Fiasp Ultra-Rapid Oref Kurzes durchschnittl. Delta @@ -539,16 +539,16 @@ Vorgabe: erlaubt. Erlaubt Autosense den Ziel-BZ-Bereich in Verbindung mit ISF und Basal anzupassen. Intervall für Autosense [h] Anzahl der vergangenen Stunden, die verwendet werden, um die Sensitivität zu erkennen (Zeit, in der KH resorbiert werden, ist nicht berücksichtigt) - Entscheide anhand von dieser Erfahrung, wie hoch max Basal sein sollte, und übernehme den Wert in die Pumpen- und AAPS-Einstellungen - Erprobe den Closed Loop Modus mit max IOB = 0 für ein paar Tage, ohne zu viele Unterzuckerungen zu haben + Entscheide anhand von dieser Erfahrung, wie hoch max Basal sein sollte, und übernehme den Wert in die Pumpen- und AAPS-Einstellungen. + Erprobe den Closed Loop Modus mit max IOB = 0 für ein paar Tage, ohne zu viele Unterzuckerungen zu haben. Starte den Closed Loop Modus mit Abschaltung bei niedrigen Werten - Verwende es ein paar Tage und zumindest eine Nacht ohne Niedrig-Alarme (UZ), bevor du den BZ-Zielbereich senkst - Fein-Einstellung des Closed-Loops, Erhöhen von max IOB über 0 und langsames Heruntersetzen des Zielbereichs - Eine Woche erfolgreiches Loopen am Tag mit regelmäßiger Kohlenhydrat-Eingabe + Verwende es ein paar Tage und zumindest eine Nacht ohne Niedrig-Alarme (UZ), bevor du den BZ-Zielbereich senkst. + Stelle den Closed Loop fein ein, erhöhe max IOB über 0 und setze den Zielbereich langsam herunter + Loope eine Woche erfolgreich am Tag mit regelmäßiger Kohlenhydrat-Eingabe. Passe, falls notwendig, Basal und Faktoren an und aktiviere dann die Autosense-Funktion - Aktiviere zusätzliche Funktionen, wie z. B. den Mahlzeitenassistent + Aktiviere zusätzliche Funktionen wie z. B. den Mahlzeitenassistenten Stark veraltete Daten - Stark veraltete Daten seit [Min.] + Stark veraltete Daten seit [min] Dutch Peak Time [min] IOB Curve Peak Time @@ -577,7 +577,7 @@ DanaRS Dana Datum - Standard temp. Ziele + Vordefinierte temporäre Ziele Bald essen - Dauer Bald essen - Ziel Reservoir leer @@ -609,7 +609,7 @@ Pumpe ist nicht erreichbar Alarm, wenn keine Glukose-Daten empfangen werden Alarm, wenn die Pumpe nicht erreichbar ist - Pumpe ist nicht erreichbar Grenze [Min.] + Pumpe ist nicht erreichbar Grenze [min] Aktualisieren TZ TBR @@ -618,8 +618,8 @@ Status des Bolus wird ermittelt PAIRING Bolus-Abgabe gestartet - Warte auf Ende der Bolus-Abgabe. %1$d Sek. verbleiben. - Befehl wird zurzeit ausgeführt. + Warte auf Ende der Bolus-Abgabe. %1$d Sek. verbleiben + Befehl wird zurzeit ausgeführt BZ-Werte fehlen Deaktiviert Bluetooth kurzzeitig, falls keine Verbindung zur Pumpe besteht. Dies kann für Smartphones mit Verbindungsproblemen nützlich sein. Essen @@ -634,60 +634,60 @@ Speichere BZ-Werte in Nightscout G5 Upload Einstellungen Zeige detailliertes Delta - Zeige Delta mit Dezimalstelle + Delta wird mit Dezimalstelle angezeigt. Nicht unterstützte Pumpen-Firmware Sende BZ-Werte zu xDrip+ - Wähle in xDrip+ 640g/Eversense als Daten-Quelle + Wähle in xDrip+ 640g/Eversense als Daten-Quelle. Nightscout-Client BZ - Basal-Wert wurde durch den kleinst möglichen Wert ersetzt + Basal-Wert wurde durch den kleinst möglichen Wert ersetzt. APS ausgewählt Loop aktiviert - Nightscout-Client hat Schreibrechte - Maximales IOB richtig gesetzt + Nightscout-Client hat Schreibrechte. + Maximales IOB richtig gesetzt. Closed mode aktiviert - Aktiviere zusätzliche Funktionen wie z. B. den SMB + Aktiviere zusätzliche Funktionen wie z. B. SMB BT Watchdog DexcomG5 App (patched) Aktivität - %1$d%% (%2$d Min. verbleibend) - Keine Verbindung zur Pumpe seit %1$d Min. + %1$d%% (%2$d min verbleibend) + Keine Verbindung zur Pumpe seit %1$d min Status Gestoppt (Benutzer) Gestoppt (Fehler) In Betrieb Bolusabgabe wird vorbereitet TBR wird abgebrochen - TBR wird gesetzt (%1$d%% / %2$d Min.) + TBR wird gesetzt (%1$d%% / %2$d min) Bolus (%1$.1f IE) wird abgegeben - Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu. Andernfalls wird AndroidAPS nicht protokolliert (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert) + Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu. Andernfalls wird AndroidAPS nicht protokolliert (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert). TBR Ein gleich großer Bolus wurde in den letzten zwei Minuten angefordert. Dies ist nicht zulässig, um ungewollte Doppelboli zu verhindern und vor eventuellen Bugs zu schützen. Historie wird gelesen Basalratenprofil wird aktualisiert - Der abgegebene Bolus konnte nicht bestätigt werden. Bitte prüfe auf der Pumpe, ob ein Bolus abgegeben wurde. Sofern ein Bolus abgegeben wurde wird dieser zu den Behandlungen hinzugefügt sobald erneut eine Verbindung zur Pumpe zustande kommt. + Der abgegebene Bolus konnte nicht bestätigt werden. Bitte prüfe auf der Pumpe, ob ein Bolus abgegeben wurde. Sofern ein Bolus abgegeben wurde, wird dieser zu den Behandlungen hinzugefügt, sobald erneut eine Verbindung zur Pumpe zustande kommt. Die Bolusabgabe ist fehlgeschlagen: Es wurde scheinbar kein Bolus abgegeben. Bitte prüfe auf der Pumpe, ob ein Bolus abgegeben wurde. Um doppelte Boli durch Programmfehler zu vermeiden, werden Boli nicht automatisch wiederholt. Wegen eines Fehlers wurden nur %1$.2f IE von den angeforderten %2$.2f IE abgegeben. Bitte prüfe den abgegebenen Bolus auf der Pumpe. Status wird aktualisiert Die Pumpe wird initialisiert Jetzt - Der Alarm \"TBR ABBRUCH\" wurde bestätigt + Der Alarm \"TBR ABBRUCH\" wurde bestätigt. Warnung Leer Niedrig Normal - Diese Aktion wird von der Pumpe nicht unterstützt - Die Batterie in der Pumpe ist fast leer - Das Reservoir in der Pumpe ist fast leer - Die Pumpe zeigt einen Fehler an E%1$d: %2$s - Unsichere Verwendung: In der Pumpe ist nicht das erste Basalratenprofil gewählt. Der Loop wird deaktiviert bis dies korrigiert ist. + Diese Aktion wird von der Pumpe nicht unterstützt. + Die Batterie in der Pumpe ist fast leer. + Das Reservoir in der Pumpe ist fast leer. + Die Pumpe zeigt einen Fehler an E%1$d: %2$s. + Unsichere Verwendung: In der Pumpe ist nicht das erste Basalratenprofil gewählt. Der Loop wird deaktiviert, bis dies korrigiert ist. Unsichere Verwendung: Ein erweiterter oder Multiwave-Bolus ist aktiv. Der Loop wird für die nächsten 6 Stunden kein zusätzliches Insulin abgeben. - Bitte aktualisiere die Uhrzeit der Pumpe + Bitte aktualisiere die Uhrzeit der Pumpe. Nicht mehr genug Insulin im Reservoir für den Bolus Ja Nein - BZ Berechnung - Bolus IOB Berechnung - Basal IOB Berechnung + BZ-Berechnung + Bolus-IOB Berechnung + Basal-IOB Berechnung Trend Berechnung Superbolus Berechnung Nur positive @@ -732,11 +732,11 @@ Warte auf Zeitsynchronisierung (%d Sek.) Warte auf Code-Bestätigung Benutze nur WLAN Verbindung - Benutze Super Micro Bolus anstelle von Temporären Basal für Schnellere Aktion + Benutze Super Micro Bolus anstelle von temporären Basalraten, um eine schnellere Wirkung zu erreichen. Unsichere Benutzung Zeit - Dritte KH Inkrement - Dritte Insulin Inkrement + Dritte KH-Erhöhung + Dritte Insulin-Erhöhung Temp. Basal der Pumpe Unterkategorie Bleibe immer verbunden @@ -744,48 +744,48 @@ Starte Essen TT Starte Aktivität TT Sensitivität - Sendet eine Kalibierung an xDrip+ oder öffnet den G5 Kalibrierungs-Dialog - Zweites Insulin Inkrement - Zweites KH Inkrement + Sendet eine Kalibierung an xDrip+ oder öffnet den G5 Kalibrierungs-Dialog. + Zweite Insulin-Erhöhung + Zweite KH-Erhöhung Sekunde Entwickler-Version. Closed Loop ist nicht verfügbar. Erfasse Katheter-Wechsel - Erfasse Resoirvoir-Wechsel + Erfasse Reservoir-Wechsel benötigt Abweichungen Tag Erlaubte SSIDs (Semikolon getrennt) Erlaube Verbindung bei Roaming - Autosense passt Zielwerte an - Insulin Resistenter Erwachsener + Autosense passt Zielwerte an. + Insulin resistenter Erwachsener Aktiviere UAM Aktiviere SMB - Erkennung von Unangekündigten Mahlzeiten - Hypo Dauer - Hypo Zielwert - BZ verfügbar von gewählter Quelle + Erkennung von unangekündigten Mahlzeiten + Hypo-Dauer + Hypo-Zielwert + BZ verfügbar von gewählter Quelle. Geändert PUMPE GESTOPPT Aktive TBR Statistiken Aktiviere SMB immer Aktiviere SMB nach Mahlzeiten - Aktiviere SMB bei COB - Aktiviere SMB mit Temporären Zielwerten + Aktiviere SMB während COB + Aktiviere SMB während temporären Zielwerten Vorhersagen - Daten Auswahl - SMB in Einstellungen deaktiviert + Daten-Auswahl + SMB in Einstellungen deaktiviert. Mahlzeiten Hartes Limit Lesen des Status fehlgeschlagen Getrennt (%1$d m) - Automatische Careportal Ereignisse - Erstes Insulin Inkrement - Erstes KH Inkrement + Automatische Careportal-Ereignisse + Erste Insulin-Erhöhung + Erste KH-Erhöhung Nur wenn geladen wird Verbindungs-Einstellungen - Zielsetzung %d nicht gestartet - Zielsetzung %d nicht abgeschlossen + Zielsetzung %d nicht gestartet. + Zielsetzung %d nicht abgeschlossen. Bolus nur erfassen - Bolus wird nur erfasst + Bolus wird nur erfasst. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 3dbc1dff28..3ccc0ef424 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -269,7 +269,7 @@ Δημιουργία παρακολούθησης και ανάλυση βασικού ρυθμού και αναλογιών Επιβεβαιώστε ότι η BG φαίνεται στο Nightscout και τα δεδομένα της DanaR φορτώθηκαν Ξεκινήστε σε ανοιχτό κύκλωμα - Τρέξτε σε ανοιχτό κύκλωμα για λίγες ημέρες και χειροκίνητα κάντε πολλούς Προσ.Ρυθμ. + Τρέξτε σε ανοιχτό κύκλωμα για λίγες ημέρες και χειροκίνητα κάντε πολλούς Προσ.Ρυθμ. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Κατανοήστε το ανοιχτό κύκλωμα, περιλαμβάνοντας τις προτάσεις για Προσ.Ρυθμ. Βάση της εμπειρίας σας, αποφασίστε ποιο είναι το μέγιστο βασικής δόσης και αποθηκεύστε το στην αντλία και στις Επιλογές "Ξεκινήστε να κλείσετε το κύκλωμα με Σταμάτημα Χαμηλής Γλυκόζης (Low Glucose Suspend) " diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c3dd7622ef..3a0eb9de6e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -269,7 +269,7 @@ Configuración de visualización y monitoreo, y el análisis de los basales y ratios Comprobar que los datos de BG están disponibles en Nightscout, y que los datos de la bomba de insulina se están subiendo Empezar con bucle abierto - Ejecutar en modo de Loop abierto durante unos días, y aceptar manualmente las basales temporales + Ejecutar en modo de Loop abierto durante unos días, y aceptar manualmente las basales temporales. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Entender el Loop abierto, incluidas las recomendaciones de basales temporales Sobre la base de esa experiencia, decidir valores de máximo basal, y ajustar la bomba y preferencias Iniciar el bucle cerrado con suspensión con baja glucosa diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c9a8347adc..8524b72624 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -267,7 +267,7 @@ Paramétrez la visualisation et la surveillance des données, analysez les débits de base et les ratios Vérifiez que la G est disponible sur Nightscout, et les données d’insuline sur pompe ont été téléchargées Commencez par le système boucle ouverte - Utilisez le système Open Loop pour quelques jours, et activez manuellement plusieurs débits de base tempo + Utilisez le système Open Loop pour quelques jours, et activez manuellement plusieurs débits de base tempo. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Comprendre votre système boucle ouverte, y compris ses recommandations de débit de base tempo "Partant de ce constat, décidez quel est le débit de base maximum à choisir, et entrez le dans la pompe et les préférences " Commencez par utiliser la boucle fermée avec le système Low Glucose Suspend diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c43fe86094..fec70c4992 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -310,7 +310,7 @@ Abbreviare i titoli delle schede Semplice profilo Impostazione di visualizzazione, monitoraggio e analisi basali e rapporti - Eseguire in modalità Open Loop per alcuni giorni e impostare manualmente la basale tempor + Eseguire in modalità Open Loop per alcuni giorni e impostare manualmente la basale tempor. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Script debug Comunicazioni SMS Numero di telefono acettato diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 670e4aae02..d518aadb0d 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -274,7 +274,7 @@ 표시설정과 모니터링설정을 완료하고, 기초주입과 비율을 분석한다. 나이트스카우트에서 혈당 데이터가 잘 들어오는지, 펌프데이터가 업로드 되는지 확인한다. Open Loop를 시작한다. - Open Loop 모드에서 몇일간 사용하여보고, 임시기초주입을 여러번 수동으로 실행하여본다. + Open Loop 모드에서 몇일간 사용하여보고, 임시기초주입을 여러번 수동으로 실행하여본다. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) 임시기초주입 추천기능을 포함해서, Open Loop에 대해 이해한다. 이 경험을 토대로, 최대 기초주입량을 결정하고 이를 펌프와 설정에 입력한다. Closed Loop를 시작하고 저혈당인슐린 중지 기능을 사용해본다. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e826d1a821..9cb91508e7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -393,7 +393,7 @@ Doelen Controleren van beschikbaarheid BG en insuline pomp data op Nightscout Opzetten van visualisatie en monitoring eveneens analyze van basaal en ratio\'s - In Open Loop modus werken voor enkele dagen, manueel tijdelijke basaal instellen + In Open Loop modus werken voor enkele dagen, manueel tijdelijke basaal instellen. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Starten met de Open Loop modus Gebaseerd op deze ervaringen beslissen wat het maximale basaal mag zijn en dit in de pomp instellen De Open Loop begrijpen, inclusief de voorgestelde tijdelijke basalen diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c63f24e2fd..e8ff881837 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -290,7 +290,7 @@ Konfigurowanie wizualizacji i monitorowania, analizowanie dawek bazowych i wartości Sprawdź czy BG (pomiary cukru) są dostępne w Nightscout, i dane pompy insulinowej są ładowane Uruchamiam otwartą pętle (OpenLoop) - Używaj Otwartą pętle (OpenLoop) przez kilka dni, i ręcznie wykonaj wiele dawek bazowych tymczasowych + Używaj Otwartą pętle (OpenLoop) przez kilka dni, i ręcznie wykonaj wiele dawek bazowych tymczasowych. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Zrozumienie działania otwartej pętli, wraz z jej rekomendacjami dawek tymczasowych Na podstawie tych doświadczeń zdecyduj jaka maksymalna baza powinna być ustawiona, i wprowadź ją w pompie i w ustawieniach AAPS Rozpoczęcie zamknięcia pętli z zawieszeniem podawania bazy przy niskim poziomie cukru diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 1ed0ce48aa..554dabc628 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -243,7 +243,7 @@ Se stabilesc vizualizările și monitorizarea și se analizează bazalele și valorile ratelor Verificați că vedeți glicemia în Nightscout și că datele despre insulină date de pompă sunt înregistrate în site Pornire cu buclă deschisă - Rulați modul buclă deschisă pentru câteva zile și faceți manual bazalele temporare sugerate + Rulați modul buclă deschisă pentru câteva zile și faceți manual bazalele temporare sugerate. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Trebuie să se înțeleagă modalitatea de funcționare a buclei deschise, incluzând recomandările de bazală temporară Pe baza acestei experiențe, decideți care va fi bazala maximă și setați această valoare în pompă și în preferințe Se începe etapa de buclă închisă cu Suspendarea Insulinei la Valori Glicemie Mici (Low Glucose Suspend = LGS) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 458be997cb..c1eaf74d33 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -279,7 +279,7 @@ Цели убедитесь что СК и данные помпы передаются в NS настройка визуализации и мониторинга, анализ базала и коэффициентов - работа в режиме незамкнутого цикла и ручной подстройки величины временного базала + работа в режиме незамкнутого цикла и ручной подстройки величины временного базала. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) старт незамкнутого цикла на основе полученного опыта определите макс величину базала и введите ее в помпу и настройки анализ вашего незамкнутого цикла включая рекомендации по врем базалу diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 83804662a6..b97e007b3d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -478,7 +478,7 @@ 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ällningarna i APS och i din pump. Starta med open loop - Starta med open loop och använd det några dagar. Försök att ge många föreslagna temp basaler. + Starta med open loop och använd det några dagar. Försök att ge många föreslagna temp basaler. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Tid i timmar när alla kolhydradet förväntas vara absorberade Max absorptionstid för en måltid [tim] Absorptionsinställningar diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 13eb0f8ba1..08e4d42619 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - + Treatments safety Max allowed bolus [U] Max allowed carbs [g] @@ -340,7 +340,7 @@ Setting up visualization and monitoring, and analyzing basals and ratios Verify that BG is available in Nightscout, and pump insulin data is being uploaded Starting on an open loop - Run in Open Loop mode for a few days, and manually enact lots of temp basals + Run in Open Loop mode for a few days and manually enact lots of temp basals. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs) Understanding your open loop, including its temp basal recommendations Based on that experience, decide what max basal should be, and set it on the pump and preferences Starting to close the loop with Low Glucose Suspend @@ -1166,6 +1166,8 @@ Treatment data incomplete A treatment (insulin: %.2f, carbs: %d, at: %s) could not be added to treatments. Please check and manually add a record as appropriate. + Generated eCarbs with amount: %1$dg, duration: %2$dh, delay: %3$dm + key_plugin_stats_report_timestamp %d day diff --git a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.java b/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.java index 655cc23282..9258f9c308 100644 --- a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.java +++ b/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.java @@ -233,13 +233,14 @@ public class ConstraintsCheckerTest { // No limit by default when(SP.getDouble(R.string.key_openapsma_max_iob, 1.5d)).thenReturn(1.5d); when(SP.getString(R.string.key_age, "")).thenReturn("teenage"); - OpenAPSMAPlugin.getPlugin().setPluginEnabled(PluginType.APS, true); OpenAPSAMAPlugin.getPlugin().setPluginEnabled(PluginType.APS, true); + OpenAPSMAPlugin.getPlugin().setPluginEnabled(PluginType.APS, false); + OpenAPSSMBPlugin.getPlugin().setPluginEnabled(PluginType.APS, false); // Apply all limits Constraint d = constraintChecker.getMaxIOBAllowed(); Assert.assertEquals(1.5d, d.value()); - Assert.assertEquals(3, d.getReasonList().size()); + Assert.assertEquals(d.getReasonList().toString(),2, d.getReasonList().size()); Assert.assertEquals("Safety: Limiting IOB to 1.5 U because of max value in preferences", d.getMostLimitedReasons()); } @@ -250,11 +251,13 @@ public class ConstraintsCheckerTest { when(SP.getDouble(R.string.key_openapssmb_max_iob, 3d)).thenReturn(3d); when(SP.getString(R.string.key_age, "")).thenReturn("teenage"); OpenAPSSMBPlugin.getPlugin().setPluginEnabled(PluginType.APS, true); + OpenAPSAMAPlugin.getPlugin().setPluginEnabled(PluginType.APS, false); + OpenAPSMAPlugin.getPlugin().setPluginEnabled(PluginType.APS, false); // Apply all limits Constraint d = constraintChecker.getMaxIOBAllowed(); Assert.assertEquals(3d, d.value()); - Assert.assertEquals(4, d.getReasonList().size()); + Assert.assertEquals(d.getReasonList().toString(), 2, d.getReasonList().size()); Assert.assertEquals("Safety: Limiting IOB to 3.0 U because of max value in preferences", d.getMostLimitedReasons()); }