Merge branch 'dev' into insightfix

This commit is contained in:
Milos Kozak 2018-08-24 10:40:31 +02:00
commit d330764d9f
34 changed files with 1074 additions and 900 deletions

View file

@ -97,14 +97,17 @@ public class CareportalEvent implements DataPointWithLabelInterface, Interval {
public String age() { public String age() {
Map<TimeUnit, Long> diff = computeDiff(date, System.currentTimeMillis()); Map<TimeUnit, Long> diff = computeDiff(date, System.currentTimeMillis());
if (OverviewFragment.shorttextmode) if (OverviewFragment.shorttextmode)
return diff.get(TimeUnit.DAYS) +"d" + diff.get(TimeUnit.HOURS) + "h"; return diff.get(TimeUnit.DAYS) + "d" + diff.get(TimeUnit.HOURS) + "h";
else else
return diff.get(TimeUnit.DAYS) + " " + MainApp.gs(R.string.days) + " " + diff.get(TimeUnit.HOURS) + " " + MainApp.gs(R.string.hours); return diff.get(TimeUnit.DAYS) + " " + MainApp.gs(R.string.days) + " " + diff.get(TimeUnit.HOURS) + " " + MainApp.gs(R.string.hours);
} }
public boolean isOlderThan(double hours) { return getHoursFromStart() > hours; } public boolean isOlderThan(double hours) {
return getHoursFromStart() > hours;
}
public String log() { @Override
public String toString() {
return "CareportalEvent{" + return "CareportalEvent{" +
"date= " + date + "date= " + date +
", date= " + DateUtil.dateAndTimeString(date) + ", date= " + DateUtil.dateAndTimeString(date) +
@ -136,11 +139,12 @@ public class CareportalEvent implements DataPointWithLabelInterface, Interval {
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
CareportalEvent event = list.get(i); CareportalEvent event = list.get(i);
if (event.date <= time && event.date > (time - T.mins(5).msecs())) { if (event.date <= time && event.date > (time - T.mins(5).msecs())) {
//log.debug("Found event for time: " + DateUtil.dateAndTimeString(time) + " " + event.toString()); if (L.isEnabled(L.DATABASE))
log.debug("Found event for time: " + DateUtil.dateAndTimeFullString(time) + " " + event.toString());
return true; return true;
} }
} }
//log.debug("WWWWWW No found event for time: " + DateUtil.dateAndTimeString(time)); //log.debug("No found event for time: " + DateUtil.dateAndTimeString(time));
return false; return false;
} }

View file

@ -1365,7 +1365,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
if (list.size() == 1) { if (list.size() == 1) {
CareportalEvent record = list.get(0); CareportalEvent record = list.get(0);
if (L.isEnabled(L.DATABASE)) if (L.isEnabled(L.DATABASE))
log.debug("Removing CareportalEvent record from database: " + record.log()); log.debug("Removing CareportalEvent record from database: " + record.toString());
delete(record); delete(record);
} else { } else {
if (L.isEnabled(L.DATABASE)) if (L.isEnabled(L.DATABASE))

View file

@ -45,4 +45,39 @@ public class PumpDescription {
public boolean supportsTDDs = false; public boolean supportsTDDs = false;
public boolean needsManualTDDLoad = true; public boolean needsManualTDDLoad = true;
public void resetSettings()
{
isBolusCapable = true;
bolusStep = 0.1d;
isExtendedBolusCapable = true;
extendedBolusStep = 0.1d;
extendedBolusDurationStep = 30;
extendedBolusMaxDuration = 12 * 60;
isTempBasalCapable = true;
tempBasalStyle = PERCENT;
maxTempPercent = 200;
tempPercentStep = 10;
maxTempAbsolute = 10;
tempAbsoluteStep = 0.05d;
tempDurationStep = 60;
tempMaxDuration = 12 * 60;
tempDurationStep15mAllowed = false;
tempDurationStep30mAllowed = false;
isSetBasalProfileCapable = true;
basalStep = 0.01d;
basalMinimumRate = 0.04d;
is30minBasalRatesCapable = false;
isRefillingCapable = false;
storesCarbInfo = true;
supportsTDDs = false;
needsManualTDDLoad = true;
}
} }

View file

@ -74,7 +74,7 @@ public class ErrorDialog extends DialogFragment implements View.OnClickListener
@Override @Override
public void dismiss() { public void dismiss() {
super.dismiss(); super.dismissAllowingStateLoss();
if (helperActivity != null) { if (helperActivity != null) {
helperActivity.finish(); helperActivity.finish();
} }

View file

@ -61,6 +61,8 @@ import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.Bolus;
import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistory; import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistory;
import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistoryRequest; import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistoryRequest;
import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.Tdd; import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.Tdd;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpCommon.utils.PumpUtil;
import info.nightscout.androidaps.plugins.Treatments.Treatment; import info.nightscout.androidaps.plugins.Treatments.Treatment;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
@ -85,42 +87,6 @@ public class ComboPlugin extends PluginBase implements PumpInterface, Constraint
private final static PumpDescription pumpDescription = new PumpDescription(); private final static PumpDescription pumpDescription = new PumpDescription();
static {
// these properties can't be changed on the pump, some via desktop configuration software
pumpDescription.isBolusCapable = true;
pumpDescription.bolusStep = 0.1d;
pumpDescription.isExtendedBolusCapable = false;
pumpDescription.extendedBolusStep = 0.1d;
pumpDescription.extendedBolusDurationStep = 15;
pumpDescription.extendedBolusMaxDuration = 12 * 60;
pumpDescription.isTempBasalCapable = true;
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
pumpDescription.maxTempPercent = 500;
pumpDescription.tempPercentStep = 10;
pumpDescription.tempDurationStep = 15;
pumpDescription.tempDurationStep15mAllowed = true;
pumpDescription.tempDurationStep30mAllowed = true;
pumpDescription.tempMaxDuration = 24 * 60;
pumpDescription.isSetBasalProfileCapable = true;
pumpDescription.basalStep = 0.01d;
pumpDescription.basalMinimumRate = 0.05d;
pumpDescription.isRefillingCapable = true;
pumpDescription.storesCarbInfo = false;
pumpDescription.is30minBasalRatesCapable = false;
pumpDescription.supportsTDDs = true;
pumpDescription.needsManualTDDLoad = true;
}
@NonNull @NonNull
private final RuffyCommands ruffyScripter; private final RuffyCommands ruffyScripter;
@ -173,6 +139,7 @@ public class ComboPlugin extends PluginBase implements PumpInterface, Constraint
.description(R.string.description_pump_combo) .description(R.string.description_pump_combo)
); );
ruffyScripter = new RuffyScripter(MainApp.instance().getApplicationContext()); ruffyScripter = new RuffyScripter(MainApp.instance().getApplicationContext());
PumpUtil.setPumpDescription(pumpDescription, PumpType.getByDescription("Accu-Chek Combo"));
} }
public ComboPump getPump() { public ComboPump getPump() {

View file

@ -0,0 +1,49 @@
package info.nightscout.androidaps.plugins.PumpCommon.data;
/**
* Created by andy on 02/05/2018.
*/
public class DoseSettings {
private float step;
private int durationStep;
private int maxDuration;
private float minDose;
private Float maxDose;
public DoseSettings(float step, int durationStep, int maxDuration, float minDose, Float maxDose)
{
this.step = step;
this.durationStep = durationStep;
this.maxDuration = maxDuration;
this.minDose = minDose;
this.maxDose = maxDose;
}
public DoseSettings(float step, int durationStep, int maxDuration, float minDose)
{
this(step, durationStep, maxDuration, minDose, null);
}
public float getStep() {
return step;
}
public int getDurationStep() {
return durationStep;
}
public int getMaxDuration() {
return maxDuration;
}
public float getMinDose() {
return minDose;
}
public Float getMaxDose() {
return maxDose;
}
}

View file

@ -0,0 +1,90 @@
package info.nightscout.androidaps.plugins.PumpCommon.defs;
/**
* Created by andy on 02/05/2018.
*/
public enum DoseStepSize
{
ComboBasal( //
new DoseStepSizeEntry(0f, 1f, 0.01f), //
new DoseStepSizeEntry(1f, 10f, 0.05f), //
new DoseStepSizeEntry(10f, Float.MAX_VALUE, 0.1f)), //
InsightBolus(
new DoseStepSizeEntry(0f, 2f, 0.05f), //
new DoseStepSizeEntry(2f, 5f, 0.1f), //
new DoseStepSizeEntry(5f, 10f, 0.2f), //
new DoseStepSizeEntry(10f, Float.MAX_VALUE, 0.5f)),
MedtronicVeoBasal( //
new DoseStepSizeEntry(0f, 1f, 0.025f), //
new DoseStepSizeEntry(1f, 10f, 0.05f), //
new DoseStepSizeEntry(10f, Float.MAX_VALUE, 0.1f)), //
;
DoseStepSizeEntry[] entries;
DoseStepSize(DoseStepSizeEntry...entries)
{
this.entries = entries;
}
public float getStepSizeForAmount(float amount)
{
for (DoseStepSizeEntry entry : entries) {
if (entry.from <= amount && entry.to > amount)
return entry.value;
}
// should never come to this
return entries[entries.length-1].value;
}
public String getDescription() {
StringBuilder sb = new StringBuilder();
for (DoseStepSizeEntry entry : entries) {
sb.append(entry.value);
sb.append(" {");
sb.append(entry.from);
sb.append("-");
if (entry.to == Float.MAX_VALUE)
{
sb.append("~}");
}
else
{
sb.append(entry.to);
sb.append("}, ");
}
}
return sb.toString();
}
static class DoseStepSizeEntry
{
float from;
float to;
float value;
// to = this value is not included, but would actually mean <, so for rates between 0.025-0.975 u/h, we would have [from=0, to=10]
DoseStepSizeEntry(float from, float to, float value)
{
this.from = from;
this.to = to;
this.value = value;
}
}
}

View file

@ -0,0 +1,72 @@
package info.nightscout.androidaps.plugins.PumpCommon.defs;
/**
* Created by andy on 03/05/2018.
*/
public enum PumpCapability {
Bolus, // isBolusCapable
ExtendedBolus, // isExtendedBolusCapable
TempBasal, // isTempBasalCapable
BasalProfileSet, // isSetBasalProfileCapable
Refill, // isRefillingCapable
StoreCarbInfo, // storesCarbInfo
TDD, // supportsTDDs
ManualTDDLoad, // needsManualTDDLoad
BasalRate30min, // is30minBasalRatesCapable
// grouped by pump
VirtualPumpCapabilities(Bolus, ExtendedBolus, TempBasal, BasalProfileSet, Refill), //
ComboCapabilities(Bolus, TempBasal, BasalProfileSet, Refill, TDD, ManualTDDLoad), //
DanaCapabilities(Bolus, ExtendedBolus, TempBasal, BasalProfileSet, Refill, TDD, ManualTDDLoad), //
DanaWithHistoryCapabilities(Bolus, ExtendedBolus, TempBasal, BasalProfileSet, Refill, StoreCarbInfo, TDD, ManualTDDLoad), //
InsightCapabilities(Bolus, ExtendedBolus, TempBasal, BasalProfileSet, Refill,TDD,BasalRate30min), //
// BasalRates (separately grouped)
BasalRate_Duration15minAllowed, //
BasalRate_Duration30minAllowed, //
BasalRate_Duration15and30minAllowed(BasalRate_Duration15minAllowed, BasalRate_Duration30minAllowed), //
BasalRate_Duration15and30minNotAllowed, //
;
PumpCapability[] children;
PumpCapability()
{
}
PumpCapability(PumpCapability...children)
{
this.children = children;
}
public boolean hasCapability(PumpCapability capability)
{
// we can only check presense of simple capabilities
if (capability.children != null)
return false;
if (this == capability)
return true;
if (this.children!=null)
{
for (PumpCapability child : children) {
if (child == capability)
return true;
}
return false;
}
else
return false;
}
}

View file

@ -0,0 +1,10 @@
package info.nightscout.androidaps.plugins.PumpCommon.defs;
/**
* Created by andy on 02/05/2018.
*/
public enum PumpTempBasalType {
Percent, //
Absolute,
}

View file

@ -0,0 +1,329 @@
package info.nightscout.androidaps.plugins.PumpCommon.defs;
import java.util.HashMap;
import java.util.Map;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.PumpCommon.data.DoseSettings;
/**
* Created by andy on 02/05/2018.
*
* Most of this defintions is intended for VirtualPump only, but they can be used by other plugins.
*/
public enum PumpType {
GenericAAPS("Generic AAPS", 0.1f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Percent, //
new DoseSettings(10,30, 24*60, 0f, 500f), PumpCapability.BasalRate_Duration15and30minAllowed, //
0.01f, 0.01f, null, PumpCapability.VirtualPumpCapabilities), //
// Cellnovo
Cellnovo1("Cellnovo", 0.05f, null, //
new DoseSettings(0.05f, 30, 24*60, 1f, null),
PumpTempBasalType.Percent,
new DoseSettings(5,30, 24*60, 0f, 200f), PumpCapability.BasalRate_Duration30minAllowed, //
0.05f, 0.05f, null, PumpCapability.VirtualPumpCapabilities), //
// Accu-Chek
AccuChekCombo("Accu-Chek Combo", 0.1f, null, //
new DoseSettings(0.1f, 15, 12*60, 0.1f), //
PumpTempBasalType.Percent,
new DoseSettings(10, 15, 12*60,0f, 500f), PumpCapability.BasalRate_Duration15and30minAllowed, //
0.01f, 0.1f, DoseStepSize.ComboBasal, PumpCapability.ComboCapabilities), //
AccuChekSpirit("Accu-Chek Spirit", 0.1f, null, //
new DoseSettings(0.1f, 15, 12*60, 0.1f), //
PumpTempBasalType.Percent,
new DoseSettings(10, 15, 12*60,0f, 500f), PumpCapability.BasalRate_Duration15and30minAllowed, //
0.01f, 0.1f, null, PumpCapability.VirtualPumpCapabilities), //
AccuChekInsight("Accu-Chek Insight", 0.05f, DoseStepSize.InsightBolus, //
new DoseSettings(0.05f, 15, 24*60, 0.05f), //
PumpTempBasalType.Percent,
new DoseSettings(10, 15, 12*60,0f, 250f), PumpCapability.BasalRate_Duration15and30minAllowed, //
0.02f, 0.1f, null, PumpCapability.InsightCapabilities), //
// Animas
AnimasVibe("Animas Vibe", 0.05f, null, // AnimasBolus?
new DoseSettings(0.05f, 30, 12*60, 0.05f), //
PumpTempBasalType.Percent, //
new DoseSettings(10, 30, 24*60, 0f, 200f), PumpCapability.BasalRate_Duration30minAllowed, //
0.025f, 5f, 0f, null, PumpCapability.VirtualPumpCapabilities), //
AnimasPing("Animas Ping", AnimasVibe),
// Dana
DanaR("DanaR", 0.05f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Percent, //
new DoseSettings(10f, 60, 24*60, 0f, 200f), PumpCapability.BasalRate_Duration15and30minNotAllowed, //
0.04f, 0.01f, null, PumpCapability.DanaCapabilities),
DanaRKorean("DanaR Korean", 0.05f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Percent, //
new DoseSettings(10f, 60, 24*60, 0f, 200f), PumpCapability.BasalRate_Duration15and30minNotAllowed, //
0.1f, 0.01f, null, PumpCapability.DanaCapabilities),
DanaRS("DanaRS", 0.05f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Percent, //
new DoseSettings(10f, 60, 24*60, 0f, 200f), PumpCapability.BasalRate_Duration15and30minAllowed, //
0.04f, 0.01f, null, PumpCapability.DanaWithHistoryCapabilities),
DanaRv2("DanaRv2", DanaRS),
// Insulet
Insulet_Omnipod("Insulet Omnipod", 0.05f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Absolute, //
new DoseSettings(0.05f, 30, 12*60, 0f, 5.0f), PumpCapability.BasalRate_Duration30minAllowed, // cannot exceed max basal rate 30u/hr
0.05f, 0.05f, null, PumpCapability.VirtualPumpCapabilities),
// Medtronic
Medtronic_512_712("Medtronic 512/712", 0.05f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Absolute, //
new DoseSettings(0.05f, 30, 24*60, 0f, 35f), PumpCapability.BasalRate_Duration30minAllowed, //
0.05f, 0.05f, null, PumpCapability.VirtualPumpCapabilities), // TODO
Medtronic_515_715("Medtronic 515/715", Medtronic_512_712),
Medtronic_522_722("Medtronic 522/722", Medtronic_512_712),
Medtronic_523_723_Revel("Medtronic 523/723 (Revel)", 0.05f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Absolute, //
new DoseSettings(0.05f, 30, 24*60, 0f, 35f), PumpCapability.BasalRate_Duration30minAllowed, //
0.025f, 0.025f, DoseStepSize.MedtronicVeoBasal, PumpCapability.VirtualPumpCapabilities), //
Medtronic_554_754_Veo("Medtronic 554/754 (Veo)", Medtronic_523_723_Revel), // TODO
Medtronic_640G("Medtronic 640G", 0.025f, null, //
new DoseSettings(0.05f, 30, 8*60, 0.05f), //
PumpTempBasalType.Absolute, //
new DoseSettings(0.05f, 30, 24*60, 0f, 35f), PumpCapability.BasalRate_Duration30minAllowed, //
0.025f, 0.025f, DoseStepSize.MedtronicVeoBasal, PumpCapability.VirtualPumpCapabilities), //
// Tandem
TandemTSlim("Tandem t:slim", 0.01f, null, //
new DoseSettings(0.01f,15, 8*60, 0.4f),
PumpTempBasalType.Percent,
new DoseSettings(1,15, 8*60, 0f, 250f), PumpCapability.BasalRate_Duration15and30minAllowed, //
0.1f, 0.001f, null, PumpCapability.VirtualPumpCapabilities),
TandemTFlex("Tandem t:flex", TandemTSlim), //
TandemTSlimG4("Tandem t:slim G4", TandemTSlim), //
TandemTSlimX2("Tandem t:slim X2", TandemTSlim), //
;
private String description;
private float bolusSize;
private DoseStepSize specialBolusSize;
private DoseSettings extendedBolusSettings;
private PumpTempBasalType pumpTempBasalType;
private DoseSettings tbrSettings;
private PumpCapability specialBasalDurations;
private float baseBasalMinValue; //
private Float baseBasalMaxValue;
private float baseBasalStep; //
private DoseStepSize baseBasalSpecialSteps; //
private PumpCapability pumpCapability;
private PumpType parent;
private static Map<String,PumpType> mapByDescription;
static
{
mapByDescription = new HashMap<>();
for (PumpType pumpType : values()) {
mapByDescription.put(pumpType.getDescription(), pumpType);
}
}
PumpType(String description, PumpType parent)
{
this.description = description;
this.parent = parent;
}
PumpType(String description, PumpType parent, PumpCapability pumpCapability)
{
this.description = description;
this.parent = parent;
this.pumpCapability = pumpCapability;
}
PumpType(String description, float bolusSize, DoseStepSize specialBolusSize, //
DoseSettings extendedBolusSettings, //
PumpTempBasalType pumpTempBasalType, DoseSettings tbrSettings, PumpCapability specialBasalDurations, //
float baseBasalMinValue, float baseBasalStep, DoseStepSize baseBasalSpecialSteps, PumpCapability pumpCapability)
{
this(description, bolusSize, specialBolusSize, extendedBolusSettings, pumpTempBasalType, tbrSettings, specialBasalDurations, baseBasalMinValue, null, baseBasalStep, baseBasalSpecialSteps, pumpCapability);
}
PumpType(String description, float bolusSize, DoseStepSize specialBolusSize, //
DoseSettings extendedBolusSettings, //
PumpTempBasalType pumpTempBasalType, DoseSettings tbrSettings, PumpCapability specialBasalDurations, //
float baseBasalMinValue, Float baseBasalMaxValue, float baseBasalStep, DoseStepSize baseBasalSpecialSteps, PumpCapability pumpCapability)
{
this.description = description;
this.bolusSize = bolusSize;
this.specialBolusSize = specialBolusSize;
this.extendedBolusSettings = extendedBolusSettings;
this.pumpTempBasalType = pumpTempBasalType;
this.tbrSettings = tbrSettings;
this.specialBasalDurations = specialBasalDurations;
this.baseBasalMinValue = baseBasalMinValue;
this.baseBasalMaxValue = baseBasalMaxValue;
this.baseBasalStep = baseBasalStep;
this.baseBasalSpecialSteps = baseBasalSpecialSteps;
this.pumpCapability = pumpCapability;
}
public String getDescription() {
return description;
}
public PumpCapability getPumpCapability() {
if (isParentSet())
return this.pumpCapability == null ? parent.pumpCapability : pumpCapability;
else
return this.pumpCapability;
}
public float getBolusSize() {
return isParentSet() ? parent.bolusSize : bolusSize;
}
public DoseStepSize getSpecialBolusSize() {
return isParentSet() ? parent.specialBolusSize : specialBolusSize;
}
public DoseSettings getExtendedBolusSettings() {
return isParentSet() ? parent.extendedBolusSettings : extendedBolusSettings;
}
public PumpTempBasalType getPumpTempBasalType() {
return isParentSet() ? parent.pumpTempBasalType : pumpTempBasalType;
}
public DoseSettings getTbrSettings() {
return isParentSet() ? parent.tbrSettings : tbrSettings;
}
public float getBaseBasalMinValue() {
return isParentSet() ? parent.baseBasalMinValue : baseBasalMinValue;
}
public Float getBaseBasalMaxValue() {
return isParentSet() ? parent.baseBasalMaxValue : baseBasalMaxValue;
}
public float getBaseBasalStep() {
return isParentSet() ? parent.baseBasalStep : baseBasalStep;
}
public DoseStepSize getBaseBasalSpecialSteps() {
return isParentSet() ? parent.baseBasalSpecialSteps : baseBasalSpecialSteps;
}
public PumpType getParent() {
return parent;
}
private boolean isParentSet()
{
return this.parent!=null;
}
public static PumpType getByDescription(String desc)
{
if (mapByDescription.containsKey(desc))
{
return mapByDescription.get(desc);
}
else
{
return PumpType.GenericAAPS;
}
}
public String getFullDescription(String i18nTemplate, boolean hasExtendedBasals) {
String unit = getPumpTempBasalType()==PumpTempBasalType.Percent ? "%" : "";
DoseSettings eb = getExtendedBolusSettings();
DoseSettings tbr = getTbrSettings();
String extendedNote = hasExtendedBasals ? MainApp.gs(R.string.virtualpump_pump_def_extended_note) : "";
return String.format(i18nTemplate, //
getStep("" + getBolusSize(), getSpecialBolusSize()), //
eb.getStep(), eb.getDurationStep(), eb.getMaxDuration()/60, //
getStep(getBaseBasalRange(), getBaseBasalSpecialSteps()), //
tbr.getMinDose() + unit + "-" + tbr.getMaxDose() + unit, tbr.getStep() + unit,
tbr.getDurationStep(), tbr.getMaxDuration()/60, extendedNote);
}
private String getBaseBasalRange()
{
Float maxValue = getBaseBasalMaxValue();
return maxValue==null ? "" + getBaseBasalMinValue() : getBaseBasalMinValue() + "-" + maxValue;
}
private String getStep(String step, DoseStepSize stepSize)
{
if (stepSize!=null)
return step + " [" + stepSize.getDescription() + "] *";
else
return "" + step;
}
public boolean hasExtendedBasals() {
return ((getBaseBasalSpecialSteps() !=null) || (getSpecialBolusSize() != null));
}
public PumpCapability getSpecialBasalDurations() {
if (isParentSet())
{
return parent.getSpecialBasalDurations();
}
else
{
return specialBasalDurations == null ? //
PumpCapability.BasalRate_Duration15and30minNotAllowed : specialBasalDurations;
}
}
}

View file

@ -0,0 +1,66 @@
package info.nightscout.androidaps.plugins.PumpCommon.utils;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpCapability;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpTempBasalType;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
/**
* Created by andy on 02/05/2018.
*/
public class PumpUtil {
public static void setPumpDescription(PumpDescription pumpDescription, PumpType pumpType)
{
// reset
pumpDescription.resetSettings();
PumpCapability pumpCapability = pumpType.getPumpCapability();
pumpDescription.isBolusCapable = pumpCapability.hasCapability(PumpCapability.Bolus);
pumpDescription.bolusStep = pumpType.getBolusSize();
pumpDescription.isExtendedBolusCapable = pumpCapability.hasCapability(PumpCapability.ExtendedBolus);
pumpDescription.extendedBolusStep = pumpType.getExtendedBolusSettings().getStep();
pumpDescription.extendedBolusDurationStep = pumpType.getExtendedBolusSettings().getDurationStep();
pumpDescription.extendedBolusMaxDuration = pumpType.getExtendedBolusSettings().getMaxDuration();
pumpDescription.isTempBasalCapable = pumpCapability.hasCapability(PumpCapability.TempBasal);
if (pumpType.getPumpTempBasalType()==PumpTempBasalType.Percent)
{
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
pumpDescription.maxTempPercent = pumpType.getTbrSettings().getMaxDose().intValue();
pumpDescription.tempPercentStep = (int)pumpType.getTbrSettings().getStep();
}
else
{
pumpDescription.tempBasalStyle = PumpDescription.ABSOLUTE;
pumpDescription.maxTempAbsolute = pumpType.getTbrSettings().getMaxDose();
pumpDescription.tempAbsoluteStep = pumpType.getTbrSettings().getStep();
}
pumpDescription.tempDurationStep = pumpType.getTbrSettings().getDurationStep();
pumpDescription.tempMaxDuration = pumpType.getTbrSettings().getMaxDuration();
pumpDescription.tempDurationStep15mAllowed = pumpType.getSpecialBasalDurations().hasCapability(PumpCapability.BasalRate_Duration15minAllowed);
pumpDescription.tempDurationStep30mAllowed = pumpType.getSpecialBasalDurations().hasCapability(PumpCapability.BasalRate_Duration30minAllowed);
pumpDescription.isSetBasalProfileCapable = pumpCapability.hasCapability(PumpCapability.BasalProfileSet);
pumpDescription.basalStep = pumpType.getBaseBasalStep();
pumpDescription.basalMinimumRate = pumpType.getBaseBasalMinValue();
pumpDescription.isRefillingCapable = pumpCapability.hasCapability(PumpCapability.Refill);
pumpDescription.storesCarbInfo = pumpCapability.hasCapability(PumpCapability.StoreCarbInfo);
pumpDescription.supportsTDDs = pumpCapability.hasCapability(PumpCapability.TDD);
pumpDescription.needsManualTDDLoad = pumpCapability.hasCapability(PumpCapability.ManualTDDLoad);
pumpDescription.is30minBasalRatesCapable = pumpCapability.hasCapability(PumpCapability.BasalRate30min);
}
}

View file

@ -273,9 +273,9 @@ public class DanaRFragment extends SubscriberFragment {
queueView.setText(status); queueView.setText(status);
} }
} }
//hide user options button if not an RS pump //hide user options button if not an RS pump or old firmware
boolean isKorean = DanaRKoreanPlugin.getPlugin().isEnabled(PluginType.PUMP); boolean isKorean = DanaRKoreanPlugin.getPlugin().isEnabled(PluginType.PUMP);
if (isKorean) { if (isKorean || firmwareView.getText() == "OLD") {
danar_user_options.setVisibility(View.GONE); danar_user_options.setVisibility(View.GONE);
} }
} }

View file

@ -21,9 +21,10 @@ import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.interfaces.Constraint; import info.nightscout.androidaps.interfaces.Constraint;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpCommon.utils.PumpUtil;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusStartWithSpeed; import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusStartWithSpeed;
import info.nightscout.androidaps.plugins.PumpDanaR.services.DanaRExecutionService; import info.nightscout.androidaps.plugins.PumpDanaR.services.DanaRExecutionService;
import info.nightscout.androidaps.plugins.Treatments.Treatment; import info.nightscout.androidaps.plugins.Treatments.Treatment;
@ -47,35 +48,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
public DanaRPlugin() { public DanaRPlugin() {
super(); super();
useExtendedBoluses = SP.getBoolean(R.string.key_danar_useextended, false); useExtendedBoluses = SP.getBoolean(R.string.key_danar_useextended, false);
PumpUtil.setPumpDescription(pumpDescription, PumpType.getByDescription("DanaR"));
pumpDescription.isBolusCapable = true;
pumpDescription.bolusStep = 0.05d;
pumpDescription.isExtendedBolusCapable = true;
pumpDescription.extendedBolusStep = 0.05d;
pumpDescription.extendedBolusDurationStep = 30;
pumpDescription.extendedBolusMaxDuration = 8 * 60;
pumpDescription.isTempBasalCapable = true;
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
pumpDescription.maxTempPercent = 200;
pumpDescription.tempPercentStep = 10;
pumpDescription.tempDurationStep = 60;
pumpDescription.tempMaxDuration = 24 * 60;
pumpDescription.isSetBasalProfileCapable = true;
pumpDescription.basalStep = 0.01d;
pumpDescription.basalMinimumRate = 0.04d;
pumpDescription.isRefillingCapable = true;
pumpDescription.storesCarbInfo = false;
pumpDescription.supportsTDDs = true;
pumpDescription.needsManualTDDLoad = true;
} }
@Override @Override

View file

@ -21,9 +21,10 @@ import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.interfaces.Constraint; import info.nightscout.androidaps.interfaces.Constraint;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpCommon.utils.PumpUtil;
import info.nightscout.androidaps.plugins.PumpDanaR.AbstractDanaRPlugin; import info.nightscout.androidaps.plugins.PumpDanaR.AbstractDanaRPlugin;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusStart; import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusStart;
@ -50,35 +51,7 @@ public class DanaRKoreanPlugin extends AbstractDanaRPlugin {
pluginDescription.description(R.string.description_pump_dana_r_korean); pluginDescription.description(R.string.description_pump_dana_r_korean);
useExtendedBoluses = SP.getBoolean(R.string.key_danar_useextended, false); useExtendedBoluses = SP.getBoolean(R.string.key_danar_useextended, false);
PumpUtil.setPumpDescription(pumpDescription, PumpType.getByDescription("DanaR Korean"));
pumpDescription.isBolusCapable = true;
pumpDescription.bolusStep = 0.1d;
pumpDescription.isExtendedBolusCapable = true;
pumpDescription.extendedBolusStep = 0.05d;
pumpDescription.extendedBolusDurationStep = 30;
pumpDescription.extendedBolusMaxDuration = 8 * 60;
pumpDescription.isTempBasalCapable = true;
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
pumpDescription.maxTempPercent = 200;
pumpDescription.tempPercentStep = 10;
pumpDescription.tempDurationStep = 60;
pumpDescription.tempMaxDuration = 24 * 60;
pumpDescription.isSetBasalProfileCapable = true;
pumpDescription.basalStep = 0.01d;
pumpDescription.basalMinimumRate = 0.1d;
pumpDescription.isRefillingCapable = true;
pumpDescription.storesCarbInfo = false;
pumpDescription.supportsTDDs = true;
pumpDescription.needsManualTDDLoad = true;
} }
@Override @Override

View file

@ -43,6 +43,8 @@ import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotificati
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.notifications.Notification;
import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpCommon.utils.PumpUtil;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRFragment; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRFragment;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
@ -88,36 +90,7 @@ public class DanaRSPlugin extends PluginBase implements PumpInterface, DanaRInte
.description(R.string.description_pump_dana_rs) .description(R.string.description_pump_dana_rs)
); );
pumpDescription.isBolusCapable = true; PumpUtil.setPumpDescription(pumpDescription, PumpType.getByDescription("DanaRS"));
pumpDescription.bolusStep = 0.05d;
pumpDescription.isExtendedBolusCapable = true;
pumpDescription.extendedBolusStep = 0.05d;
pumpDescription.extendedBolusDurationStep = 30;
pumpDescription.extendedBolusMaxDuration = 8 * 60;
pumpDescription.isTempBasalCapable = true;
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
pumpDescription.maxTempPercent = 200;
pumpDescription.tempPercentStep = 10;
pumpDescription.tempDurationStep = 60;
pumpDescription.tempDurationStep15mAllowed = true;
pumpDescription.tempDurationStep30mAllowed = true;
pumpDescription.tempMaxDuration = 24 * 60;
pumpDescription.isSetBasalProfileCapable = true;
pumpDescription.basalStep = 0.01d;
pumpDescription.basalMinimumRate = 0.04d;
pumpDescription.isRefillingCapable = true;
pumpDescription.storesCarbInfo = true;
pumpDescription.supportsTDDs = true;
pumpDescription.needsManualTDDLoad = true;
} }
@Override @Override

View file

@ -18,10 +18,11 @@ import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.interfaces.Constraint; import info.nightscout.androidaps.interfaces.Constraint;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
import info.nightscout.androidaps.plugins.ConfigBuilder.DetailedBolusInfoStorage; import info.nightscout.androidaps.plugins.ConfigBuilder.DetailedBolusInfoStorage;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpCommon.utils.PumpUtil;
import info.nightscout.androidaps.plugins.PumpDanaR.AbstractDanaRPlugin; import info.nightscout.androidaps.plugins.PumpDanaR.AbstractDanaRPlugin;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusStartWithSpeed; import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusStartWithSpeed;
@ -50,37 +51,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin {
pluginDescription.description(R.string.description_pump_dana_r_v2); pluginDescription.description(R.string.description_pump_dana_r_v2);
useExtendedBoluses = false; useExtendedBoluses = false;
PumpUtil.setPumpDescription(pumpDescription, PumpType.getByDescription("DanaRv2"));
pumpDescription.isBolusCapable = true;
pumpDescription.bolusStep = 0.05d;
pumpDescription.isExtendedBolusCapable = true;
pumpDescription.extendedBolusStep = 0.05d;
pumpDescription.extendedBolusDurationStep = 30;
pumpDescription.extendedBolusMaxDuration = 8 * 60;
pumpDescription.isTempBasalCapable = true;
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
pumpDescription.maxTempPercent = 200;
pumpDescription.tempPercentStep = 10;
pumpDescription.tempDurationStep = 60;
pumpDescription.tempDurationStep15mAllowed = true;
pumpDescription.tempDurationStep30mAllowed = true;
pumpDescription.tempMaxDuration = 24 * 60;
pumpDescription.isSetBasalProfileCapable = true;
pumpDescription.basalStep = 0.01d;
pumpDescription.basalMinimumRate = 0.04d;
pumpDescription.isRefillingCapable = true;
pumpDescription.storesCarbInfo = true;
pumpDescription.supportsTDDs = true;
pumpDescription.needsManualTDDLoad = true;
} }
@Override @Override

View file

@ -11,7 +11,6 @@ import org.slf4j.LoggerFactory;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.BuildConfig;
@ -34,10 +33,13 @@ import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
import info.nightscout.androidaps.plugins.ConfigBuilder.ProfileFunctions; import info.nightscout.androidaps.plugins.ConfigBuilder.ProfileFunctions;
import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress;
import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.notifications.Notification;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpCommon.utils.PumpUtil;
import info.nightscout.androidaps.plugins.PumpInsight.connector.CancelBolusSilentlyTaskRunner; import info.nightscout.androidaps.plugins.PumpInsight.connector.CancelBolusSilentlyTaskRunner;
import info.nightscout.androidaps.plugins.PumpInsight.connector.CancelTBRSilentlyTaskRunner; import info.nightscout.androidaps.plugins.PumpInsight.connector.CancelTBRSilentlyTaskRunner;
import info.nightscout.androidaps.plugins.PumpInsight.connector.Connector; import info.nightscout.androidaps.plugins.PumpInsight.connector.Connector;
@ -53,7 +55,6 @@ import info.nightscout.androidaps.plugins.PumpInsight.utils.StatusItem;
import info.nightscout.androidaps.plugins.Treatments.Treatment; import info.nightscout.androidaps.plugins.Treatments.Treatment;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
import sugar.free.sightparser.applayer.descriptors.ActiveBolus; import sugar.free.sightparser.applayer.descriptors.ActiveBolus;
import sugar.free.sightparser.applayer.descriptors.ActiveBolusType; import sugar.free.sightparser.applayer.descriptors.ActiveBolusType;
@ -121,38 +122,7 @@ public class InsightPlugin extends PluginBase implements PumpInterface, Constrai
.description(R.string.description_pump_insight) .description(R.string.description_pump_insight)
); );
log("InsightPlugin instantiated"); log("InsightPlugin instantiated");
pumpDescription.isBolusCapable = true; PumpUtil.setPumpDescription(pumpDescription, PumpType.getByDescription("Accu-Chek Insight"));
pumpDescription.bolusStep = 0.01d; // specification says 0.05U up to 2U then 0.1U @ 2-5U 0.2U @ 10-20U 0.5U 10-20U (are these just UI restrictions? Yes, they are!)
pumpDescription.isExtendedBolusCapable = true;
pumpDescription.extendedBolusStep = 0.01d; // specification probably same as above
pumpDescription.extendedBolusDurationStep = 15; // 15 minutes up to 24 hours
pumpDescription.extendedBolusMaxDuration = 24 * 60;
pumpDescription.isTempBasalCapable = true;
//pumpDescription.tempBasalStyle = PumpDescription.PERCENT | PumpDescription.ABSOLUTE;
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
pumpDescription.maxTempPercent = 250; // 0-250%
pumpDescription.tempPercentStep = 10;
pumpDescription.tempDurationStep = 15; // 15 minutes up to 24 hours
pumpDescription.tempDurationStep15mAllowed = true;
pumpDescription.tempDurationStep30mAllowed = true;
pumpDescription.tempMaxDuration = 24 * 60;
pumpDescription.isSetBasalProfileCapable = true;
pumpDescription.is30minBasalRatesCapable = true;
pumpDescription.basalStep = 0.01d;
pumpDescription.basalMinimumRate = 0.02d;
pumpDescription.basalMaximumRate = 25d;
pumpDescription.isRefillingCapable = true;
pumpDescription.storesCarbInfo = false;
pumpDescription.supportsTDDs = true;
pumpDescription.needsManualTDDLoad = false;
} }
@ -212,7 +182,7 @@ public class InsightPlugin extends PluginBase implements PumpInterface, Constrai
@Override @Override
public void switchAllowed(ConfigBuilderFragment.PluginViewHolder.PluginSwitcher pluginSwitcher, FragmentActivity context) { public void switchAllowed(ConfigBuilderFragment.PluginViewHolder.PluginSwitcher pluginSwitcher, FragmentActivity context) {
boolean allowHardwarePump = SP.getBoolean("allow_hardware_pump", false); boolean allowHardwarePump = SP.getBoolean("allow_hardware_pump", false);
if (allowHardwarePump || context == null){ if (allowHardwarePump || context == null) {
pluginSwitcher.invoke(); pluginSwitcher.invoke();
} else { } else {
AlertDialog.Builder builder = new AlertDialog.Builder(context); AlertDialog.Builder builder = new AlertDialog.Builder(context);
@ -529,16 +499,16 @@ public class InsightPlugin extends PluginBase implements PumpInterface, Constrai
log("Calculated requested rate: " + absoluteRate + " base rate: " + getBaseBasalRate() + " percentage: " + percent + "%"); log("Calculated requested rate: " + absoluteRate + " base rate: " + getBaseBasalRate() + " percentage: " + percent + "%");
try { try {
if (percent > 250) { if (percent > 250) {
log ("Calculated rate is above 250%, switching to emulation using extended boluses"); log("Calculated rate is above 250%, switching to emulation using extended boluses");
cancelTempBasal(true); cancelTempBasal(true);
if (!setExtendedBolus((absoluteRate - getBaseBasalRate()) / 60D * ((double) durationInMinutes), durationInMinutes).success) { if (!setExtendedBolus((absoluteRate - getBaseBasalRate()) / 60D * ((double) durationInMinutes), durationInMinutes).success) {
//Fallback to TBR if setting an extended bolus didn't work //Fallback to TBR if setting an extended bolus didn't work
log ("Setting an extended bolus didn't work, falling back to normal TBR"); log("Setting an extended bolus didn't work, falling back to normal TBR");
return setTempBasalPercent((int) percent, durationInMinutes, profile, true); return setTempBasalPercent((int) percent, durationInMinutes, profile, true);
} }
return new PumpEnactResult().success(true).enacted(true).absolute(absoluteRate).duration(durationInMinutes); return new PumpEnactResult().success(true).enacted(true).absolute(absoluteRate).duration(durationInMinutes);
} else { } else {
log ("Calculated rate is below or equal to 250%, using normal TBRs"); log("Calculated rate is below or equal to 250%, using normal TBRs");
cancelExtendedBolus(); cancelExtendedBolus();
return setTempBasalPercent((int) percent, durationInMinutes, profile, true); return setTempBasalPercent((int) percent, durationInMinutes, profile, true);
} }
@ -567,7 +537,8 @@ public class InsightPlugin extends PluginBase implements PumpInterface, Constrai
.source(Source.USER); .source(Source.USER);
TreatmentsPlugin.getPlugin().addToHistoryTempBasal(tempBasal); TreatmentsPlugin.getPlugin().addToHistoryTempBasal(tempBasal);
updateGui(); updateGui();
if (L.isEnabled(L.PUMPCOMM)) log.debug("Set temp basal " + percent + "% for " + durationInMinutes + "m"); if (L.isEnabled(L.PUMPCOMM))
log.debug("Set temp basal " + percent + "% for " + durationInMinutes + "m");
connector.requestHistorySync(5000); connector.requestHistorySync(5000);
connector.tryToGetPumpStatusAgain(); connector.tryToGetPumpStatusAgain();
return new PumpEnactResult().success(true).enacted(true).percent(percent); return new PumpEnactResult().success(true).enacted(true).percent(percent);

View file

@ -15,10 +15,12 @@ import com.squareup.otto.Subscribe;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.ExtendedBolus; import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.plugins.Common.SubscriberFragment; import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpVirtual.events.EventVirtualPumpUpdateGui; import info.nightscout.androidaps.plugins.PumpVirtual.events.EventVirtualPumpUpdateGui;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.utils.FabricPrivacy; import info.nightscout.utils.FabricPrivacy;
@ -31,6 +33,9 @@ public class VirtualPumpFragment extends SubscriberFragment {
TextView extendedBolusView; TextView extendedBolusView;
TextView batteryView; TextView batteryView;
TextView reservoirView; TextView reservoirView;
TextView pumpTypeView;
TextView pumpSettingsView;
private static Handler sLoopHandler = new Handler(); private static Handler sLoopHandler = new Handler();
private static Runnable sRefreshLoop = null; private static Runnable sRefreshLoop = null;
@ -60,6 +65,8 @@ public class VirtualPumpFragment extends SubscriberFragment {
extendedBolusView = (TextView) view.findViewById(R.id.virtualpump_extendedbolus); extendedBolusView = (TextView) view.findViewById(R.id.virtualpump_extendedbolus);
batteryView = (TextView) view.findViewById(R.id.virtualpump_battery); batteryView = (TextView) view.findViewById(R.id.virtualpump_battery);
reservoirView = (TextView) view.findViewById(R.id.virtualpump_reservoir); reservoirView = (TextView) view.findViewById(R.id.virtualpump_reservoir);
pumpTypeView = (TextView) view.findViewById(R.id.virtualpump_type);
pumpSettingsView = (TextView) view.findViewById(R.id.virtualpump_type_def);
return view; return view;
} catch (Exception e) { } catch (Exception e) {
@ -97,6 +104,18 @@ public class VirtualPumpFragment extends SubscriberFragment {
} }
batteryView.setText(virtualPump.batteryPercent + "%"); batteryView.setText(virtualPump.batteryPercent + "%");
reservoirView.setText(virtualPump.reservoirInUnits + "U"); reservoirView.setText(virtualPump.reservoirInUnits + "U");
virtualPump.refreshConfiguration();
PumpType pumpType = virtualPump.getPumpType();
pumpTypeView.setText(pumpType.getDescription());
String template = MainApp.gs(R.string.virtualpump_pump_def);
pumpSettingsView.setText(pumpType.getFullDescription(template, pumpType.hasExtendedBasals()));
} }
}); });
} }

View file

@ -2,6 +2,8 @@ package info.nightscout.androidaps.plugins.PumpVirtual;
import android.os.SystemClock; import android.os.SystemClock;
import com.squareup.otto.Subscribe;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -17,6 +19,7 @@ import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.ExtendedBolus; import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.Source; import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription; import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
@ -28,6 +31,8 @@ import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress;
import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.notifications.Notification;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.androidaps.plugins.PumpCommon.utils.PumpUtil;
import info.nightscout.androidaps.plugins.PumpVirtual.events.EventVirtualPumpUpdateGui; import info.nightscout.androidaps.plugins.PumpVirtual.events.EventVirtualPumpUpdateGui;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
@ -57,6 +62,9 @@ public class VirtualPumpPlugin extends PluginBase implements PumpInterface {
private PumpDescription pumpDescription = new PumpDescription(); private PumpDescription pumpDescription = new PumpDescription();
PumpType pumpType = null;
private static void loadFakingStatus() { private static void loadFakingStatus() {
fromNSAreCommingFakedExtendedBoluses = SP.getBoolean(R.string.key_fromNSAreCommingFakedExtendedBoluses, false); fromNSAreCommingFakedExtendedBoluses = SP.getBoolean(R.string.key_fromNSAreCommingFakedExtendedBoluses, false);
} }
@ -110,6 +118,24 @@ public class VirtualPumpPlugin extends PluginBase implements PumpInterface {
pumpDescription.is30minBasalRatesCapable = true; pumpDescription.is30minBasalRatesCapable = true;
} }
@Override
protected void onStart() {
super.onStart();
MainApp.bus().register(this);
refreshConfiguration();
}
@Override
protected void onStop() {
MainApp.bus().unregister(this);
}
@Subscribe
public void onStatusEvent(final EventPreferenceChange s) {
if (s.isChanged(R.string.key_virtualpump_type))
refreshConfiguration();
}
@Override @Override
public boolean isFakingTempsByExtendedBoluses() { public boolean isFakingTempsByExtendedBoluses() {
return (Config.NSCLIENT) && fromNSAreCommingFakedExtendedBoluses; return (Config.NSCLIENT) && fromNSAreCommingFakedExtendedBoluses;
@ -414,4 +440,29 @@ public class VirtualPumpPlugin extends PluginBase implements PumpInterface {
return "Virtual Pump"; return "Virtual Pump";
} }
public PumpType getPumpType() {
return pumpType;
}
public void refreshConfiguration() {
String pumptype = SP.getString(R.string.key_virtualpump_type, "Generic AAPS");
PumpType pumpTypeNew = PumpType.getByDescription(pumptype);
if (L.isEnabled(L.PUMP))
log.debug("Pump in configuration: {}, PumpType object: {}", pumptype, pumpTypeNew);
if (pumpType == pumpTypeNew)
return;
if (L.isEnabled(L.PUMP))
log.debug("New pump configuration found ({}), changing from previous ({})", pumpTypeNew, pumpType);
PumpUtil.setPumpDescription(pumpDescription, pumpTypeNew);
this.pumpType = pumpTypeNew;
}
} }

View file

@ -244,17 +244,8 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
Treatment treatment = Treatment.createFromJson(json); Treatment treatment = Treatment.createFromJson(json);
if (treatment != null) if (treatment != null)
createOrUpdate(treatment); createOrUpdate(treatment);
} catch (JSONException e) { else
log.error("Unhandled exception", e); log.error("Date is null: " + treatment.toString());
}
}
public void createFoodFromJsonIfNotExists(JSONArray array) {
try {
for (int n = 0; n < array.length(); n++) {
JSONObject json = array.getJSONObject(n);
createTreatmentFromJsonIfNotExists(json);
}
} catch (JSONException e) { } catch (JSONException e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);
} }
@ -340,6 +331,8 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
scheduleTreatmentChange(treatment); scheduleTreatmentChange(treatment);
return new UpdateReturn(true, true); return new UpdateReturn(true, true);
} }
if (L.isEnabled(L.DATATREATMENTS))
log.debug("Equal record by date from: " + Source.getString(treatment.source) + " " + old.toString());
return new UpdateReturn(true, false); return new UpdateReturn(true, false);
} }
// find by NS _id // find by NS _id
@ -361,6 +354,9 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
scheduleTreatmentChange(treatment); scheduleTreatmentChange(treatment);
return new UpdateReturn(true, true); return new UpdateReturn(true, true);
} }
if (L.isEnabled(L.DATATREATMENTS))
log.debug("Equal record by _id from: " + Source.getString(treatment.source) + " " + old.toString());
return new UpdateReturn(true, false);
} }
} }
getDao().create(treatment); getDao().create(treatment);

View file

@ -202,7 +202,7 @@ public class DataService extends IntentService {
MainApp.getDbHelper().deleteProfileSwitchById(_id); MainApp.getDbHelper().deleteProfileSwitchById(_id);
} }
private void handleTreatmentFromNS(JSONObject json, Intent intent) throws JSONException { private void handleTreatmentFromNS(JSONObject json, Intent intent) {
// new DB model // new DB model
int mode = Intents.ACTION_NEW_TREATMENT.equals(intent.getAction()) ? EventNsTreatment.ADD : EventNsTreatment.UPDATE; int mode = Intents.ACTION_NEW_TREATMENT.equals(intent.getAction()) ? EventNsTreatment.ADD : EventNsTreatment.UPDATE;
double insulin = JsonHelper.safeGetDouble(json, "insulin"); double insulin = JsonHelper.safeGetDouble(json, "insulin");
@ -254,7 +254,7 @@ public class DataService extends IntentService {
CareportalEvent careportalEvent = new CareportalEvent(nsMbg); CareportalEvent careportalEvent = new CareportalEvent(nsMbg);
MainApp.getDbHelper().createOrUpdate(careportalEvent); MainApp.getDbHelper().createOrUpdate(careportalEvent);
if (L.isEnabled(L.DATASERVICE)) if (L.isEnabled(L.DATASERVICE))
log.debug("Adding/Updating new MBG: " + careportalEvent.log()); log.debug("Adding/Updating new MBG: " + careportalEvent.toString());
} }
} }

View file

@ -46,13 +46,13 @@ public class DecimalFormatter {
} }
public static String toPumpSupportedBolus(double value) { public static String toPumpSupportedBolus(double value) {
return ConfigBuilderPlugin.getActivePump().getPumpDescription().bolusStep <= 0.05 return ConfigBuilderPlugin.getActivePump().getPumpDescription().bolusStep <= 0.051
? to2Decimal(value) ? to2Decimal(value)
: to1Decimal(value); : to1Decimal(value);
} }
public static DecimalFormat pumpSupportedBolusFormat() { public static DecimalFormat pumpSupportedBolusFormat() {
return ConfigBuilderPlugin.getActivePump().getPumpDescription().bolusStep <= 0.05 return ConfigBuilderPlugin.getActivePump().getPumpDescription().bolusStep <= 0.051
? new DecimalFormat("0.00") ? new DecimalFormat("0.00")
: new DecimalFormat("0.0"); : new DecimalFormat("0.0");
} }

View file

@ -189,6 +189,7 @@
</LinearLayout> </LinearLayout>
<!-- Reservoir -->
<View <View
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="2dip" android:layout_height="2dip"
@ -232,6 +233,99 @@
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
<!-- Pump Type -->
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="5dp"
android:background="@color/listdelimiter" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:paddingRight="5dp"
android:text="@string/virtualpump_type"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:paddingEnd="2dp"
android:paddingStart="2dp"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/virtualpump_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
android:paddingLeft="5dp"
android:textSize="14sp" />
</LinearLayout>
<!-- Pump Type -->
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="5dp"
android:background="@color/listdelimiter" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:paddingRight="5dp"
android:text="@string/virtualpump_definition"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:paddingEnd="2dp"
android:paddingStart="2dp"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/virtualpump_type_def"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
android:paddingLeft="5dp"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View file

@ -712,6 +712,8 @@
<string name="dexcomg5_xdripupload_title">Изпращай данни за КЗ към xDrip+</string> <string name="dexcomg5_xdripupload_title">Изпращай данни за КЗ към xDrip+</string>
<string name="dexcomg5_xdripupload_summary">В xDrip+ изберете 640g/Eversense за източник на данни</string> <string name="dexcomg5_xdripupload_summary">В xDrip+ изберете 640g/Eversense за източник на данни</string>
<string name="nsclientbg">КЗ от NS</string> <string name="nsclientbg">КЗ от NS</string>
<string name="minimalbasalvaluereplaced">Базалната стойност е заместена от минимално поддържаната стойност %s</string>
<string name="maximumbasalvaluereplaced">Базалната стойност е заместена от максимално поддържаната стойност %s</string>
<string name="overview_editquickwizard_usebg">Калкулиране на КЗ</string> <string name="overview_editquickwizard_usebg">Калкулиране на КЗ</string>
<string name="overview_editquickwizard_usebolusiob">Калкулиране на Болус IOB</string> <string name="overview_editquickwizard_usebolusiob">Калкулиране на Болус IOB</string>
<string name="overview_editquickwizard_usebasaliob">Калкулиране на базален IOB</string> <string name="overview_editquickwizard_usebasaliob">Калкулиране на базален IOB</string>
@ -765,6 +767,7 @@
<string name="combo_error_no_connection_no_bolus_delivered">Помпата е недостъпна. Не беше доставен болус.</string> <string name="combo_error_no_connection_no_bolus_delivered">Помпата е недостъпна. Не беше доставен болус.</string>
<string name="combo_error_no_bolus_delivered">Болусът беше неуспешен. За да сте сигурни, моля, проверете помпата, за да избегнете повторение на вече доставен болус. За да се избегнат бъгове болусите не се повтарят автоматично.</string> <string name="combo_error_no_bolus_delivered">Болусът беше неуспешен. За да сте сигурни, моля, проверете помпата, за да избегнете повторение на вече доставен болус. За да се избегнат бъгове болусите не се повтарят автоматично.</string>
<string name="combo_error_partial_bolus_delivered">Само %1$.2f U от искания болус от %2$.2f U е доставен поради грешка. Моля, проверете помпата, за да потвърдите това и да предприемете съответните действия.</string> <string name="combo_error_partial_bolus_delivered">Само %1$.2f U от искания болус от %2$.2f U е доставен поради грешка. Моля, проверете помпата, за да потвърдите това и да предприемете съответните действия.</string>
<string name="combo_error_bolus_verification_failed">Свързването с помпата и стартирането на болус се провали. Моля, проверете ръчно в историята на помпата доставен ли е болусът. Ако болусът е доставен, ще бъде добавен автоматично при следващото свързване с помпата.</string>
<string name="combo_reservoir_level_insufficient_for_bolus">Няма достатъчно инсулин в резервоара</string> <string name="combo_reservoir_level_insufficient_for_bolus">Няма достатъчно инсулин в резервоара</string>
<string name="extendedbolusdeliveryerror">Грешка при доставяне на удължен болус</string> <string name="extendedbolusdeliveryerror">Грешка при доставяне на удължен болус</string>
<string name="insightpump_shortname">Insight</string> <string name="insightpump_shortname">Insight</string>
@ -1023,6 +1026,7 @@
<string name="send_all_logs">Изпратщане на логове чрез ел. поща</string> <string name="send_all_logs">Изпратщане на логове чрез ел. поща</string>
<string name="delete_logs">Изтрий логове</string> <string name="delete_logs">Изтрий логове</string>
<string name="error_adding_treatment_message">Събитие (инсулин: %1$.2f, въглехидрати: %2$d, в: %3$s) не може да бъде добавено към събития. Моля уверете се, че е правилно и го добавете ръчно.</string> <string name="error_adding_treatment_message">Събитие (инсулин: %1$.2f, въглехидрати: %2$d, в: %3$s) не може да бъде добавено към събития. Моля уверете се, че е правилно и го добавете ръчно.</string>
<string name="generated_ecarbs_note">eCarbs: %1$d г (за %2$d ч), след: %3$d м</string>
<string name="openaps_noasdata">Няма налични данни за авточувствителност</string> <string name="openaps_noasdata">Няма налични данни за авточувствителност</string>
<string name="nav_logsettings">Настройки на логовете</string> <string name="nav_logsettings">Настройки на логовете</string>
<string name="resettodefaults">Възстанови настройките по подразбиране</string> <string name="resettodefaults">Възстанови настройките по подразбиране</string>
@ -1031,6 +1035,7 @@
</string> </string>
<string name="versionavailable">Има налично обновяване до версия %1$s </string> <string name="versionavailable">Има налично обновяване до версия %1$s </string>
<string name="time_offset">времево отместване</string> <string name="time_offset">времево отместване</string>
<string name="setupwizard_preferred_aps_mode">Предпочитаният режим на APS</string>
<plurals name="objective_days"> <plurals name="objective_days">
<item quantity="one">%1$d дeн</item> <item quantity="one">%1$d дeн</item>
<item quantity="other">%1$d дни</item> <item quantity="other">%1$d дни</item>

View file

@ -948,6 +948,10 @@
<string name="openapsama_max_daily_safety_multiplier">Max násobitel denního nejvyššího bazálu</string> <string name="openapsama_max_daily_safety_multiplier">Max násobitel denního nejvyššího bazálu</string>
<string name="openapsama_current_basal_safety_multiplier">Max násobitel současného bazálu</string> <string name="openapsama_current_basal_safety_multiplier">Max násobitel současného bazálu</string>
<string name="value_unavailable_short">---</string> <string name="value_unavailable_short">---</string>
<string name="virtualpump_type">Typ virtuální pumpy</string>
<string name="virtualpump_definition">Definice pumpy</string>
<string name="virtualpump_pump_def">Bolus: Krok =%1$s\nProdl. bolus: [Krok=%2$s, Délka=%3$smin-%4$sh]\nBazál: Krok=%5$s\nDoč. bazál: %6$s (%7$s), Délka=%8$smin-%9$sh\n%10$s</string>
<string name="virtualpump_pump_def_extended_note">* Rozdílné hodnoty podle rozsahu nejsou podporovány.</string>
<string name="ns_autobackfill_title">Doplňování glykémií z NS</string> <string name="ns_autobackfill_title">Doplňování glykémií z NS</string>
<string name="wear_wizard_settings">Nastavení wizardu</string> <string name="wear_wizard_settings">Nastavení wizardu</string>
<string name="wear_wizard_settings_summary">Kalkulace použité ve výsledku wizardu:</string> <string name="wear_wizard_settings_summary">Kalkulace použité ve výsledku wizardu:</string>
@ -1034,6 +1038,10 @@
<string name="as">SENS</string> <string name="as">SENS</string>
<string name="versionavailable">Verze %1$s je k dispozici</string> <string name="versionavailable">Verze %1$s je k dispozici</string>
<string name="time_offset">Časový posun</string> <string name="time_offset">Časový posun</string>
<string name="setupwizard_preferred_aps_mode">Preferovaný režim APS</string>
<string name="treatments_wizard_total_label">Výsledek</string>
<string name="calculation_short">Kalk</string>
<string name="handshaking">Navazování spojení</string>
<plurals name="objective_days"> <plurals name="objective_days">
<item quantity="one">%1$d den</item> <item quantity="one">%1$d den</item>
<item quantity="few">%1$d dnů</item> <item quantity="few">%1$d dnů</item>

View file

@ -66,13 +66,13 @@
<string name="treatments_iob_label_string">IOB:</string> <string name="treatments_iob_label_string">IOB:</string>
<string name="sms_iob">IOB:</string> <string name="sms_iob">IOB:</string>
<string name="treatments_activity_string">Aktivität:</string> <string name="treatments_activity_string">Aktivität:</string>
<string name="treatments_iobtotal_label_string">Gesamt-IOB:</string> <string name="treatments_iobtotal_label_string">Gesamt IOB:</string>
<string name="treatments_iobactivitytotal_label_string">Gesamt-Insulin-Aktivität:</string> <string name="treatments_iobactivitytotal_label_string">Ges. IOB Aktivität:</string>
<string name="tempbasals_realduration_label_string">Dauer:</string> <string name="tempbasals_realduration_label_string">Dauer:</string>
<string name="tempbasals_netratio_label_string">Verhältnis:</string> <string name="tempbasals_netratio_label_string">Verhältnis:</string>
<string name="tempbasals_netinsulin_label_string">Ins:</string> <string name="tempbasals_netinsulin_label_string">Ins:</string>
<string name="tempbasals_iob_label_string">IOB:</string> <string name="tempbasals_iob_label_string">IOB:</string>
<string name="tempbasals_iobtotal_label_string">Gesamt-IOB:</string> <string name="tempbasals_iobtotal_label_string">Gesamt IOB:</string>
<string name="treatments_newtreatment_insulinamount_label">Insulin-Menge</string> <string name="treatments_newtreatment_insulinamount_label">Insulin-Menge</string>
<string name="treatments_newtreatment_carbsamount_label">Kohlenhydrat-Menge</string> <string name="treatments_newtreatment_carbsamount_label">Kohlenhydrat-Menge</string>
<string name="treatments_wizard_bg_label">BZ</string> <string name="treatments_wizard_bg_label">BZ</string>
@ -606,7 +606,7 @@ maxIOB = durchschnittlicher Essensbolus + 3 x maximale Basalrate</string>
<string name="careportal_insulinage_label_short">IAGE</string> <string name="careportal_insulinage_label_short">IAGE</string>
<string name="careportal_canulaage_label_short">CAGE</string> <string name="careportal_canulaage_label_short">CAGE</string>
<string name="careportal_pbage_label_short">BAT</string> <string name="careportal_pbage_label_short">BAT</string>
<string name="openaps_short">OAPS</string> <string name="openaps_short">OASP</string>
<string name="uploader_short">UPLD</string> <string name="uploader_short">UPLD</string>
<string name="basal_short">BAS</string> <string name="basal_short">BAS</string>
<string name="virtualpump_extendedbolus_label_short">EXT</string> <string name="virtualpump_extendedbolus_label_short">EXT</string>

View file

@ -1,675 +1,3 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <!--Generated by crowdin.com-->
<string name="treatmentssafety_title">관리 안전설정</string> <resources></resources>
<string name="treatmentssafety_maxbolus_title">최대 허용 식사주입인슐린 [U]</string>
<string name="treatmentssafety_maxcarbs_title">최대 허용 탄수화물 [g]</string>
<string name="nav_preferences">설정</string>
<string name="nav_refreshtreatments">NS에서 관리 새로고침</string>
<string name="nav_resetdb">데이터베이스 초기화</string>
<string name="reset_db_confirm">데이터 베이스를 정말 초기화하시겠습니까?</string>
<string name="nav_exit">종료</string>
<string name="danar_useextended_title">>200% 주입위한 확장식사주입</string>
<string name="danar_bt_name_title">다나R 블루투스</string>
<string name="ns_sync_use_absolute_title">기초주입량 절대값 사용하기</string>
<string name="alert_dialog_storage_permission_text">폰을 재부팅하고나 AndroidAPS를 재시작하세요 \n그렇지 않으면 로그가 기록이되지 않습니다.(알고리즘이 제대로 작동하는지 확인하기 위해 로그가 필요합니다.)!</string>
<string name="objectives_button_start">시작</string>
<string name="objectives_button_verify">확인</string>
<string name="nsprofileview_units_label">단위</string>
<string name="nsprofileview_dia_label">인슐린활동시간(DIA):</string>
<string name="nsprofileview_ic_label">인슐린 대 탄수화물 비율(IC):</string>
<string name="nsprofileview_isf_label">인슐린 민감도(ISF):</string>
<string name="nsprofileview_basal_label">기초주입:</string>
<string name="nsprofileview_target_label">목표:</string>
<string name="noprofileset">NO PROFILE SET</string>
<string name="treatments_insulin_label_string">인슐린:</string>
<string name="treatments_carbs_label_string">탄수화물:</string>
<string name="treatments_iob_label_string">IOB:</string>
<string name="sms_iob">IOB:</string>
<string name="treatments_activity_string">활동:</string>
<string name="treatments_iobtotal_label_string">IOB 총량:</string>
<string name="treatments_iobactivitytotal_label_string">활동 IOB 총량:</string>
<string name="tempbasals_realduration_label_string">기간:</string>
<string name="tempbasals_netratio_label_string">비율:</string>
<string name="tempbasals_netinsulin_label_string">인슐린:</string>
<string name="tempbasals_iob_label_string">IOB:</string>
<string name="tempbasals_iobtotal_label_string">IOB 총량:</string>
<string name="treatments_newtreatment_insulinamount_label">인슐린 양</string>
<string name="treatments_newtreatment_carbsamount_label">탄수화물 양</string>
<string name="treatments_wizard_bg_label">혈당</string>
<string name="treatments_wizard_carbs_label">탄수화물</string>
<string name="treatments_wizard_correction_label">교정</string>
<string name="insulin_unit_shortname">U</string>
<string name="treatments_wizard_bolusiob_label">식사주입 IOB</string>
<string name="openapsma_run">지금 실행</string>
<string name="vitualpump_label">가상 펌프</string>
<string name="pump_basebasalrate_label">기본 기초주입량</string>
<string name="pump_tempbasal_label">임시기초주입</string>
<string name="virtualpump_extendedbolus_label">확장식사주입</string>
<string name="pump_battery_label">배터리</string>
<string name="pump_reservoir_label">인슐린 잔량</string>
<string name="virtualpump_resultok">OK</string>
<string name="openapsma_lastrun_label">최근 실행</string>
<string name="openapsma_inputparameters_label">입력 변수</string>
<string name="openapsma_glucosestatus_label">혈당 상태</string>
<string name="openapsma_currenttemp_label">현재 임시기초</string>
<string name="openapsma_iobdata_label">IOB 데이터</string>
<string name="openapsma_profile_label">프로파일</string>
<string name="openapsma_mealdata_label">식사 데이터</string>
<string name="result">결과</string>
<string name="openapsma_noglucosedata">혈당 데이터 없음</string>
<string name="nochangerequested">변경사항 없음</string>
<string name="openapsma_request_label">요청</string>
<string name="rate">주입량</string>
<string name="duration">기간</string>
<string name="reason">근거</string>
<string name="glucose">혈당</string>
<string name="delta">Delta</string>
<string name="sms_delta">Delta:</string>
<string name="configbuilder">구성 관리자</string>
<string name="objectives">목표</string>
<string name="openapsma">OpenAPS MA</string>
<string name="overview">개요</string>
<string name="nsprofile">NS 프로파일</string>
<string name="simpleprofile">Simple 프로파일</string>
<string name="tempbasal">임시기초</string>
<string name="treatments">관리</string>
<string name="virtualpump">가상펌프</string>
<string name="careportal">케어포털</string>
<string name="configbuilder_pump">펌프</string>
<string name="configbuilder_treatments">관리</string>
<string name="configbuilder_profile">프로파일</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_general">일반</string>
<string name="days"></string>
<string name="constraints">제한</string>
<string name="loop">Loop</string>
<string name="configbuilder_loop">Loop</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">제약 적용 후</string>
<string name="openapsma_lastenact_label">최근 주입</string>
<string name="ok">OK</string>
<string name="cancel">취소</string>
<string name="noapsselected">NO APS SELECTED OR PROVIDED RESULT</string>
<string name="safety">Safety</string>
<string name="openapsma_disabled">플러그인이 사용불가능 합니다</string>
<string name="constraints_violation">제한 위반</string>
<string name="treatmentdeliveryerror">식사주입 전송 에러</string>
<string name="tempbasaldeliveryerror">임시기초주입 전송 에러</string>
<string name="overview_newtempbasal_basalpercent">기초주입 값 [%]</string>
<string name="overview_newtempbasal_percent_label">% (100% = 현재)</string>
<string name="setbasalquestion">새 임시기초주입 적용:</string>
<string name="overview_treatment_label">식사주입</string>
<string name="overview_calculator_label">계산기</string>
<string name="constraintapllied">제한!</string>
<string name="confirmation">확인</string>
<string name="entertreatmentquestion">새 Treatment 입력:</string>
<string name="bolus">식사주입</string>
<string name="sms_bolus">Bolus:</string>
<string name="basal">기초주입</string>
<string name="sms_basal">Basal:</string>
<string name="carbs">탄수화물</string>
<string name="changeyourinput">입력값 변경!</string>
<string name="setextendedbolusquestion">새 확장식사주입 설정:</string>
<string name="configbuilder_bgsource">혈당 소스</string>
<string name="xdrip">xDrip</string>
<string name="apsmode_title">APS 모드</string>
<string name="closedloop">Closed Loop</string>
<string name="openloop">Open Loop</string>
<string name="disabledloop">Loop 중지됨</string>
<string name="disableloop">Loop 중지하기</string>
<string name="enableloop">Loop 실행하기</string>
<string name="openloop_newsuggestion">새로운 제안이 있습니다</string>
<string name="unsupportedclientver">지원하지 않는 NSClient 버전입니다</string>
<string name="unsupportednsversion">지원하지 않는 Nightscout 버전입니다</string>
<string name="nsclientnotinstalled">NSClient 가 설치되지 않았습니다. 기록이 삭제됩니다!</string>
<string name="objectives_bgavailableinns">NS에서 혈당데이터가 확인 가능합니다.</string>
<string name="objectives_pumpstatusavailableinns">NS에서 펌프상태가 확인 가능합니다.</string>
<string name="objectives_manualenacts">수동 주입</string>
<string name="loopdisabled">제한으로 인해 LOOP가 사용불가합니다.</string>
<string name="cs_lang">Czech</string>
<string name="en_lang">English</string>
<string name="treatments_wizard_basaliob_label">기초주입 IOB</string>
<string name="bolusconstraintapplied">식사주입 제한이 적용되었습니다</string>
<string name="carbsconstraintapplied">탄수화물 제한이 적용되었습니다</string>
<string name="careportal_bgcheck">혈당 체크</string>
<string name="careportal_announcement">알림</string>
<string name="careportal_note">노트</string>
<string name="careportal_question">의문</string>
<string name="careportal_exercise">운동</string>
<string name="careportal_pumpsitechange">펌프 위치 변경</string>
<string name="careportal_cgmsensorinsert">CGM 센서 삽입</string>
<string name="careportal_cgmsensorstart">CGM 센서 시작</string>
<string name="careportal_insulincartridgechange">인슐린 카트리지 교체</string>
<string name="careportal_profileswitch">프로파일 변경</string>
<string name="careportal_snackbolus">간식 주입</string>
<string name="careportal_mealbolus">식사 주입</string>
<string name="careportal_correctionbolus">교정 주입</string>
<string name="careportal_combobolus">콤보 주입</string>
<string name="careportal_tempbasalstart">임시 기초 시작</string>
<string name="careportal_tempbasalend">임시 기초 종료</string>
<string name="careportal_carbscorrection">탄수화물 교정</string>
<string name="careportal_openapsoffline">OpenAPS 오프라인</string>
<string name="careportal_newnstreatment_eventtype">이벤트 종류</string>
<string name="careportal_newnstreatment_other">기타</string>
<string name="careportal_newnstreatment_meter">측정기</string>
<string name="careportal_newnstreatment_sensor">센서</string>
<string name="careportal_newnstreatment_carbs_label">탄수화물</string>
<string name="careportal_newnstreatment_insulin_label">인슐린</string>
<string name="careportal_newnstreatment_carbtime_label">탄수화물 시간</string>
<string name="careportal_newnstreatment_split_label">분할</string>
<string name="careportal_newnstreatment_duration_label">기간</string>
<string name="careportal_newnstreatment_percent_label">퍼센트</string>
<string name="careportal_newnstreatment_absolute_label">절대값</string>
<string name="careportal_newnstreatment_notes_label">노트</string>
<string name="careportal_newnstreatment_eventtime_label">이벤트 시간</string>
<string name="careportal_newnstreatment_profile_label">프로파일</string>
<string name="careportal_newnstreatment_enteredby_title">Entered By</string>
<string name="careportal_newnstreatment_glucosetype">혈당 종류</string>
<string name="noprofile">아직 NS에서 프로파일을 로드하지 못했습니다.</string>
<string name="overview_tempbasal_button">임시기초주입</string>
<string name="overview_extendedbolus_button">확장식사주입</string>
<string name="configbuilder_nightscoutversion_label">Nightscout 버전:</string>
<string name="missing">Missing</string>
<string name="exported">설정이 저장되었습니다</string>
<string name="export_to">다음 위치에 설정을 저장하시겠습니까</string>
<string name="import_from">다음 위치에서 설정을 불러오시겠습니까</string>
<string name="setting_imported">설정을 불러왔습니다</string>
<string name="filenotfound">파일을 찾을 수 없습니다</string>
<string name="nav_export">설정 저장하기</string>
<string name="nav_import">설정 불러오기</string>
<string name="nl_lang">Dutch</string>
<string name="de_lang">German</string>
<string name="es_lang">Spanish</string>
<string name="el_lang">Greek</string>
<string name="it_lang">Italian</string>
<string name="ru_lang">Russian</string>
<string name="sv_lang">Swedish</string>
<string name="openapsma_maxbasal_title">임시기초주입 최대량 [U/hr]</string>
<string name="openapsma_maxbasal_summary">이 값은 OpenAPS에서 Max Basal(임시기초주입 최대량)로 설정되는 값입니다</string>
<string name="openapsma_maxiob_title">OpenAPS가 주입할수 있는 최대 기초주입 IOB [U]</string>
<string name="openapsma_maxiob_summary">이 값은 OpenAPS에서 Max IOB라고 부르는 값입니다\n기본값은 0으로 설정되어 있습니다. 몇일 혹은 몇주 정도 사용 후 적절한 값으로 변경할 수 있습니다.</string>
<string name="bg_lang">Bulgarian</string>
<string name="dismiss">닫기</string>
<string name="language">언어</string>
<string name="danarpump">다나R</string>
<string name="connecting">연결중</string>
<string name="connected">연결됨</string>
<string name="disconnected">연결 끊김</string>
<string name="danar_pump_settings">다나R 펌프 설정</string>
<string name="end_user_license_agreement">최종 사용자 라이선스 동의서</string>
<string name="end_user_license_agreement_text">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.</string>
<string name="end_user_license_agreement_i_understand">모두 이해하였고 동의합니다.</string>
<string name="save">저장</string>
<string name="nobtadapter">블루투스 어댑터를 찾지 못했습니다</string>
<string name="devicenotfound">선택된 기기를 찾지 못했습니다</string>
<string name="connectionerror">펌프 연결 에러</string>
<string name="danar_iob_label">펌프 IOB</string>
<string name="danar_dailyunits">일 인슐린 총량</string>
<string name="pump_lastbolus_label">최근 식사주입:</string>
<string name="danar_invalidinput">사용할수 없는 입력 데이터</string>
<string name="danar_valuenotsetproperly">값이 제대로 설정되지 않았습니다</string>
<string name="reloadprofile">Reload profile</string>
<string name="danar_viewprofile">프로파일 보기</string>
<string name="enacted">Enacted</string>
<string name="comment">Comment</string>
<string name="success">Success</string>
<string name="percent">퍼센트</string>
<string name="absolute">Absolute</string>
<string name="canceltemp">임시기초주입 취소하기</string>
<string name="smscommunicator">SMS 전송</string>
<string name="waitingforpumpresult">결과 기다리는 중</string>
<string name="smscommunicator_allowednumbers">허가된 전화번호</string>
<string name="smscommunicator_allowednumbers_summary">+XXXXXXXXXX;+YYYYYYYYYY</string>
<string name="smscommunicator_bolusreplywithcode">식사주입 %1$.2fU 을 실행하려면 %2$s 를 입력하고 답장하세요</string>
<string name="smscommunicator_calibrationreplywithcode">보정값 %1$.2f을 전송하려면 %2$s 를 입력하고 답장하세요</string>
<string name="smscommunicator_bolusfailed">Bolus failed</string>
<string name="bolusdelivered" formatted="false">Bolus %.2fU delivered successfully</string>
<string name="bolusrequested" formatted="false">%.2fU 주입 예정입니다.</string>
<string name="smscommunicator_bolusdelivered" formatted="false">Bolus %.2fU delivered successfully</string>
<string name="bolusdelivering" formatted="false">%.2fU 주입중</string>
<string name="smscommunicator_remotecommandsallowed">SMS 원격 명령 사용하기</string>
<string name="smscommunicator_remotebolusnotallowed">원격 식사주입 허용되지 않음</string>
<string name="glucosetype_finger">Finger</string>
<string name="glucosetype_sensor">Sensor</string>
<string name="manual">Manual</string>
<string name="careportal_temporarytarget">임시목표</string>
<string name="careportal_temporarytargetcancel">임시목표 취소</string>
<string name="danarprofile">DanaR 프로파일 설정</string>
<string name="danarprofile_dia">인슐린활동시간(DIA) [h]</string>
<string name="danarprofile_dia_summary">Duration of Insulin Activity</string>
<string name="failedupdatebasalprofile">기초주입 프로파일 갱신 실패</string>
<string name="danar_historyreload">새로고침</string>
<string name="uploading">업로드중</string>
<string name="danar_ebolus">E bolus</string>
<string name="danar_dsbolus">DS bolus</string>
<string name="danar_debolus">DE bolus</string>
<string name="danar_error">에러</string>
<string name="danar_refill">교체</string>
<string name="danar_basalhour">basal hour</string>
<string name="danar_glucose">혈당</string>
<string name="danar_carbohydrate">탄수화물</string>
<string name="danar_alarm">알람</string>
<string name="danar_totaluploaded">총 %1$d 기록들이 업로드되었습니다.</string>
<string name="danar_sbolus">S bolus</string>
<string name="danar_history_alarm">알람</string>
<string name="danar_history_basalhours">기초주입 시간</string>
<string name="danar_history_bolus">식사주입</string>
<string name="danar_history_carbohydrates">탄수화물</string>
<string name="danar_history_dailyinsulin">일일 인슐린</string>
<string name="danar_history_errors">에러</string>
<string name="danar_history_glucose">혈당</string>
<string name="danar_history_refill">교체</string>
<string name="danar_history_syspend">중지</string>
<string name="danar_history_connectingfor">%1$d 초 동안 연결중</string>
<string name="danar_password_title">펌프 비밀번호</string>
<string name="wrongpumppassword">펌프 비밀번호가 잘못되었습니다!</string>
<string name="pumpbusy">펌프가 바쁩니다</string>
<string name="overview_bolusprogress_delivered">주입됨</string>
<string name="overview_bolusprogress_stoped">정지됨</string>
<string name="occlusion">막힘</string>
<string name="overview_bolusprogress_stop">정지</string>
<string name="overview_bolusprogress_stoppressed">정지 누름</string>
<string name="waitingforpump">펌프를 기다리는 중</string>
<string name="overview_bolusprogress_goingtodeliver" formatted="false">%.2fU을 주입합니다</string>
<string name="objectives_0_objective">표시설정과 모니터링설정을 완료하고, 기초주입과 비율을 분석한다.</string>
<string name="objectives_0_gate">나이트스카우트에서 혈당 데이터가 잘 들어오는지, 펌프데이터가 업로드 되는지 확인한다.</string>
<string name="objectives_1_objective">Open Loop를 시작한다.</string>
<string name="objectives_1_gate">Open Loop 모드에서 몇일간 사용하여보고, 임시기초주입을 여러번 수동으로 실행하여본다. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs)</string>
<string name="objectives_2_objective">임시기초주입 추천기능을 포함해서, Open Loop에 대해 이해한다.</string>
<string name="objectives_2_gate">이 경험을 토대로, 최대 기초주입량을 결정하고 이를 펌프와 설정에 입력한다.</string>
<string name="objectives_3_objective">Closed Loop를 시작하고 저혈당인슐린 중지 기능을 사용해본다.</string>
<string name="objectives_3_gate">최대 IOB = 0 인 상태로 Closed Loop를 몇일동안 실행시켜 본다. 저혈당 인슐린일시중지가 많이 발생하지 않도록 한다.</string>
<string name="objectives_4_objective">Closed Loop를 조정하여 최대 IOB를 0 이상으로 올려서 서서히 혈당 목표치를 낮춘다.</string>
<string name="objectives_4_gate">혈당을 낮추기 전에 몇일간 사용해보되 최소한 하루는 저혈당 혈당 알람이 발생하지 않도록 해본다.</string>
<string name="objectives_5_objective">필요하면 기초주입과 비율을 조절하고, auto-sens를 활성화한다.</string>
<string name="objectives_5_gate">평소의 탄수화물을 입력하면서 1주일동안 낮시간대에 loop를 성공적으로 사용해본다.</string>
<string name="objectives_6_objective">AMA(Advanced Meal Assist)같은 낮시간대를 위한 추가적인 기능들을 실행하여 본다.</string>
<string name="objectives_7_objective">낮시간대에 SMB(Super Micro Bolus)같은 추가기능을 활성화해 사용해본다.</string>
<string name="youareonallowedlimit">허용된 제한값에 도달하였습니다</string>
<string name="noprofileselected">프로파일이 선택되지 않았습니다</string>
<string name="smscommunicator_loophasbeendisabled">Loop가 중지되었습니다.</string>
<string name="smscommunicator_loophasbeenenabled">Loop가 실행되었습니다.</string>
<string name="smscommunicator_loopisdisabled">Loop가 중지중입니다.</string>
<string name="smscommunicator_loopisenabled">Loop가 실행중입니다.</string>
<string name="valuelimitedto">%1$.2f, %2$.2f으로 제한됨</string>
<string name="valueoutofrange" formatted="false">%s값이 하드리밋(Hard Limit)를 벗어났습니다</string>
<string name="smscommunicator_remotebasalnotallowed">원격 기초주입설정이 허가되지 않았습니다</string>
<string name="smscommunicator_remotecommandnotallowed">원격 명령이 허가되지 않았습니다</string>
<string name="smscommunicator_basalreplywithcode">기초주입 %1$.2fU/h 을 실행하려면 %2$s 를 입력하고 답장하세요</string>
<string name="smscommunicator_suspendreplywithcode">%1$d분동안 Loop 일시중지하려면 %2$s 를 입력하고 답장하세요</string>
<string name="smscommunicator_tempbasalset">Temp basal %1$.2fU/h for %2$d min started successfully</string>
<string name="smscommunicator_tempbasalfailed">Temp basal start failed</string>
<string name="smscommunicator_basalstopreplywithcode" formatted="false">임시기초주입을 중지하려면 %s 를 입력하고 답장하세요</string>
<string name="smscommunicator_tempbasalcanceled">Temp basal canceled</string>
<string name="smscommunicator_tempbasalcancelfailed">Canceling temp basal failed</string>
<string name="smscommunicator_unknowncommand">알려지지 않은 명령이거나 잘못된 답장입니다.</string>
<string name="quickwizard">빠른마법사</string>
<string name="quickwizardsettings">빠른마법사 설정</string>
<string name="overview_editquickwizard_buttontext">버튼명:</string>
<string name="overview_editquickwizard_carbs">탄수화물:</string>
<string name="overview_editquickwizard_valid">유효기간:</string>
<string name="overview_editquickwizardlistactivity_add">추가</string>
<string name="overview_quickwizard_item_edit_button">수정</string>
<string name="overview_quickwizard_item_remove_button">삭제</string>
<string name="mealbolus">Meal</string>
<string name="correctionbous">Corr</string>
<string name="ko_lang">한국어</string>
<string name="actions">실행</string>
<string name="androidaps_start">AndroidAPS 시작</string>
<string name="ns_upload_only">NS에 업로드만 하기(동기화 불능)</string>
<string name="ns_upload_only_summary">NS에 업로드만 하기. 로컬소스(xDrip)가 선택되지 않으면 SGV에는 효력이 없습니다. NS프로파일이 사용중이라면 프로파일에는 효력이 없습니다.</string>
<string name="pumpNotInitialized">펌프가 초기화 되지 않았습니다!</string>
<string name="pumpNotInitializedProfileNotSet">펌프가 초기화와 프로파일 설정이 되지 않았습니다!</string>
<string name="primefill">교체/채움</string>
<string name="fillwarning">양이 인퓨전세트의 사양과 일치하는지 확인하세요!</string>
<string name="othersettings_title">기타</string>
<string name="fillbolus_title">교체/채움 기본 인슐린양</string>
<string name="button1">버튼1</string>
<string name="button2">버튼2</string>
<string name="button3">버튼3</string>
<string name="units">Units:</string>
<string name="mgdl">mg/dl</string>
<string name="mmol">mmol/l</string>
<string name="dia">DIA:</string>
<string name="target_range">목표 범위:</string>
<string name="prefs_range_title">차트 표시 범위</string>
<string name="prefs_range_summary">개요/스마트워치 차트 표시용 고/저혈당 선</string>
<string name="low_mark">저혈당 선</string>
<string name="high_mark">고혈당 선</string>
<string name="wear">웨어</string>
<string name="resend_all_data">모든 데이터 다시 보내기</string>
<string name="open_settings_on_wear">웨어에서 설정 열기</string>
<string name="pumperror">펌프 에러</string>
<string name="lowbattery">배터리 부족</string>
<string name="pumpshutdown">펌프 중지</string>
<string name="batterydischarged">펌프배터리 방전</string>
<string name="danarkoreanpump">다나R 한글</string>
<string name="basal_rate">기초주입량:</string>
<string name="profile_set_failed">기초주입 프로파일 설정이 실패하였습니다</string>
<string name="profile_set_ok">기초주입 프로파일이 펌프에 업데이트 되었습니다</string>
<string name="danar_disableeasymode">펌프에서 EasyUI모드를 해제하세요</string>
<string name="danar_enableextendedbolus">펌프에서 확장식사기능을 활성화 하세요</string>
<string name="danar_switchtouhmode">펌프에서 U/d에서 U/h로 모드를 변경하세요</string>
<string name="basalvaluebelowminimum">기초주입값이 최소값 이하입니다. 프로파일이 설정되지 않습니다!</string>
<string name="sms_actualbg">BG:</string>
<string name="sms_lastbg">Last BG:</string>
<string name="mdi">MDI</string>
<string name="MM640g">MM640g</string>
<string name="ongoingnotificaction">연속 알림</string>
<string name="old_data">OLD DATA</string>
<string name="minago" formatted="false">%d분전</string>
<string name="sms_minago" formatted="false">%dmin ago</string>
<string name="localprofile">Local Profile</string>
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Short avg. delta</string>
<string name="long_avgdelta">Long avg. delta</string>
<string name="array_of_elements">Array of %1$d elements.\nActual value:</string>
<string name="openapsma_autosensdata_label">Autosens 정보</string>
<string name="openapsma_scriptdebugdata_label">Script debug</string>
<string name="openapsama_useautosens">AMA autosens 기능 사용하기</string>
<string name="refresheventsfromnightscout">NS에서 이벤트 새로고침</string>
<string name="eatingsoon">Eating Soon</string>
<string name="activity">Activity</string>
<string name="removerecord">기록 삭제:</string>
<string name="danar_stats">DanaR 통계</string>
<string name="danar_stats_cumulative_tdd">누적 일총량</string>
<string name="danar_stats_expweight">지수가중 일총량</string>
<string name="danar_stats_basalrate">기초주입</string>
<string name="danar_stats_bolus">식사주입</string>
<string name="danar_stats_tdd">일총량</string>
<string name="danar_stats_date">날짜</string>
<string name="danar_stats_ratio">비율</string>
<string name="danar_stats_amount_days">#일</string>
<string name="danar_stats_weight">가중</string>
<string name="danar_stats_warning_Message">교체/채움을 위해 식사주입을 사용한 경우 부정확할 수 있습니다!!</string>
<string name="danar_stats_olddata_Message">오래된 데이터입니다. "새로고침"을 누르세요.</string>
<string name="danar_stats_tbb">총기초량</string>
<string name="danar_stats_tbb2">총기초량 * 2</string>
<string name="initializing">초기화중 ...</string>
<string name="actions_shortname">ACT</string>
<string name="configbuilder_shortname">CONF</string>
<string name="loop_shortname">LOOP</string>
<string name="simpleprofile_shortname">SP</string>
<string name="oaps_shortname">OAPS</string>
<string name="localprofile_shortname">LP</string>
<string name="danarpump_shortname">DANA</string>
<string name="overview_shortname">HOME</string>
<string name="virtualpump_shortname">VPUMP</string>
<string name="profileviewer_shortname">NSPROFILE</string>
<string name="treatments_shortname">TREAT</string>
<string name="careportal_shortname">CP</string>
<string name="objectives_shortname">OBJ</string>
<string name="wear_shortname">WEAR</string>
<string name="smscommunicator_shortname">SMS</string>
<string name="short_tabtitles">탭 이름 단축</string>
<string name="always_use_shortavg">단순델타값 대신 단기평균델타값을 항상 사용합니다.</string>
<string name="always_use_shortavg_summary">xDrip의 혈당데이터에 노이즈가 심할경우 유용합니다.</string>
<string name="advancedsettings_title">고급 설정</string>
<string name="danar_model">모델: %1$02X 프로토콜: %2$02X 코드: %3$02X</string>
<string name="profile">프로파일</string>
<string name="openapsama_max_daily_safety_multiplier_summary">기본값: 3\n이 값은 중요한 OpenAPS 안전장치입니다. 이 값의 역할은 펌프에 설정되어 있는 최대기초주입량보다 3배를 초과할 수 없게 제한하는 것입니다. 이 값을 변경할 필요는 없을 것이지만, 안전을 위해 "3x max daily; 4x current"이 의미하는 바를 알고 있어야 합니다.</string>
<string name="openapsama_current_basal_safety_multiplier_summary">기본값: 4\n이 값은 "3x max daily; 4x current"의 나머지 절반에 해당하는 또 다른 중요한 OpenAPS 안전장치입니다. 이 값은 펌프에 설정된 최대기초주입량과 관계없이, 설정된 현재시간의 기초주입량에 이 값을 곱한 양을 초과할 수 없게됩니다. 이는 알고리즘의 작동 방식을 이해하기 전에 과도하게 높은 최대 기본을 설정하여 위험한 상황에 빠지지 않도록 보호하기 위한 것입니다. 다시한번, 기본 값은 4배인 것을 알아두세요; 일반적으로 이것을 조정할 필요는 전혀 없으며, 대신 이 안전장치를 변경해야할것처럼 생각이 된다면, 다른 설정을 변경해야 할 가능성이 더 큽니다.</string>
<string name="openapsama_autosens_max_summary">기본값: 1.2\n이 값은 autosens가 autosens 비율을 얼마나 높게 할 수 있는지에 대한 최대 한계를 20%로 설정하는 승수장치입니다. 이는 autosens가 얼마나 높게 기초주입량을 조절할수 있는지, ISF를 얼마나 낮게 조절할수 있는지, 혈당 목표범위를 얼마나 낮게 설정할수 있는지를 결정합니다.</string>
<string name="openapsama_autosens_min_summary">기본값: 0.7\nautosens 안전 제한의 나머지 부분입니다. 이는 기초주입량을 얼마나 낮게 조절할 수 있는지, ISF와 혈당 목표범위를 얼마나 높게 설정할 수 있는지를 결정합니다.</string>
<string name="openapsama_autosens_adjusttargets_summary">기본값: 활성\n이것은 autosens가 ISF와 기초주입뿐만 아니라, 혈당 목표범위를 조절할 수 있게 합니다.</string>
<string name="openapsama_bolussnooze_dia_divisor_summary">기본값: 2\n식사주입 후 Bolus snooze가 수행되게 되고, 따라서 식사주입 직후엔 loop가 low temp에 대응하지 않게 됩니다. 기본값이 2일때 예제는 다음과 같습니다; DIA가 3시간일 경우 bolus snooz는 점차적으로 1.5시간에 걸쳐 단계적으로 사라지게 됩니다.(3DIA/2).</string>
<string name="openapsama_min_5m_carbimpact_summary">기본값: 3\n이것은 5분당 기본 탄수화물 흡수량에 대한 설정입니다. 예상되는 기본값은 3mg/dl/5min입니다. 이는 혈당이 예상보다 빨리 떨어지거나 오를때, 얼마나 빨리 COB가 감쇠하는지와 혈당예측을 위한 계산시 탄수화물 흡수량이 얼마나 될것으로 예상되는지에 영향을 미치게 됩니다.</string>
<string name="openapsama_link_to_preferncejson_doc_txt">주의!\n보통의 경우 아래의 값을 변경하면 안됩니다. 이 값들을 변경하기 전에 반드시 이곳을 클릭하고 글을 정독해서 확실하게 이해를 하여야 합니다.</string>
<string name="error_only_numeric_digits_allowed">숫자만 입력가능합니다.</string>
<string name="error_only_numeric_digits_range_allowed" formatted="false">이 범위(%1$s - %2$s)안에 해당하는 숫자만 입력가능합니다.</string>
<string name="error_field_must_not_be_empty">필수 입력 항목입니다.</string>
<string name="error_phone_not_valid">폰번호가 유효하지 않습니다</string>
<string name="smscommunicator_invalidphonennumber">SMS폰번호가 유효하지 않습니다</string>
<string name="copy_to_clipboard">클립보드에 복사</string>
<string name="copied_to_clipboard">클립보드에 복사되었습니다</string>
<string name="nav_show_logcat">로그 보기</string>
<string name="overview_calibration">보정</string>
<string name="send_calibration" formatted="false">보정값 %.1f을 xDrip에 전송하시겠습니까?</string>
<string name="xdripnotinstalled">xDrip+가 설치되지 않았습니다</string>
<string name="calibrationsent">보정이 xDrip으로 전송되었습니다</string>
<string name="smscommunicator_remotecalibrationnotallowed">원격보정이 허용되지 않았습니다</string>
<string name="smscommunicator_calibrationsent">보정 전송됨. xDrip에서 수신이 되도록 설정되어 있어야 합니다.</string>
<string name="smscommunicator_calibrationfailed">xDrip에서 보정을 받지 못합니다.</string>
<string name="pumpsuspended">펌프 일시중지됨</string>
<string name="gettingpumpstatus">펌프 상태 가져오는중</string>
<string name="settingtempbasal">임시기초주입 설정중</string>
<string name="stoppingtempbasal">임시기초주입 취소중</string>
<string name="settingextendedbolus">확장식사주입 설정중</string>
<string name="stoppingextendedbolus">확장식사주입 취소중</string>
<string name="updatingbasalrates">기초주입량 업데이트중</string>
<string name="disconnecting">연결끊기중</string>
<string name="executing">실행중</string>
<string name="virtualpump_settings">가상펌프 설정</string>
<string name="virtualpump_uploadstatus_title">NS에 상태 업로드하기</string>
<string name="wrongpassword">잘못된 비밀번호</string>
<string name="settings_password">설정 비밀번호</string>
<string name="unlock_settings">설정 잠금해제</string>
<string name="approachingdailylimit">인슐린 일 허용량에 근접중</string>
<string name="nsclientinternal">내장 NSClient</string>
<string name="nsclientinternal_shortname">NSCI</string>
<string name="nsclientinternal_url">URL:</string>
<string name="nsclientinternal_autoscroll">자동스크롤</string>
<string name="restart">Restart</string>
<string name="nsclientinternal_title">내장 NSClient</string>
<string name="nsclientinternal_url_title">Nightscout URL</string>
<string name="nsclientinternal_url_dialogmessage">Nightscout URL 입력</string>
<string name="nsclientinternal_secret_title">NS API secret</string>
<string name="nsclientinternal_secret_dialogtitle">NS API secret</string>
<string name="nsclientinternal_secret_dialogmessage">NS API secret 입력(최소 12글자)</string>
<string name="deliver_now">Deliver now</string>
<string name="clear_queue">Clear queue</string>
<string name="show_queue">Show queue</string>
<string name="queue">Queue:</string>
<string name="status">Status:</string>
<string name="paused">일시중지</string>
<string name="clearlog">Clear log</string>
<string name="nowritepermission">NSCLIENT이 쓰기 권한이 없습니다. 잘못된 API secret인지 확인해보세요</string>
<string name="wear_settings">웨어 설정</string>
<string name="wear_detailedIOB_title">IOB 자세하게 보여주기</string>
<string name="wear_detailedIOB_summary">워치페이스에 IOB를 식사주입IOB와 기초주입IOB로 나누어서 보여줍니다.</string>
<string name="nosuccess">성공하지 못했습니다. 폰을 확인하세요</string>
<string name="notavailable">알수없음</string>
<string name="patientage">나이</string>
<string name="child">어린이</string>
<string name="teenage">청소년</string>
<string name="adult">성인</string>
<string name="patientage_summary">안전제한을 설정하기 위해 당뇨인의 나이를 선택하세요</string>
<string name="Glimp">Glimp</string>
<string name="loopsuspended">Loop 일시중지</string>
<string name="loopsuspendedfor" formatted="false">일시중지중 (%d분)</string>
<string name="loopsuperbolusfor" formatted="false">수퍼 식사주입 (%d분)</string>
<string name="suspendloopfor1h">1시간동안 Loop 일시중지</string>
<string name="suspendloopfor2h">2시간동안 Loop 일시중지</string>
<string name="suspendloopfor3h">3시간동안 Loop 일시중지</string>
<string name="suspendloopfor10h">10시간동안 Loop 일시중지</string>
<string name="disconnectpumpfor15m">15분동안 펌프 일시중지</string>
<string name="disconnectpumpfor30m">30분동안 펌프 일시중지</string>
<string name="disconnectpumpfor1h">1시간동안 펌프 일시중지</string>
<string name="disconnectpumpfor2h">2시간동안 펌프 일시중지</string>
<string name="disconnectpumpfor3h">3시간동안 펌프 일시중지</string>
<string name="resume">재실행</string>
<string name="smscommunicator_wrongduration">기간이 잘못되었습니다.</string>
<string name="smscommunicator_loopsuspended">Loop가 일시중지 되었습니다.</string>
<string name="smscommunicator_loopresumed">Loop가 재실행 되었습니다.</string>
<string name="treatments_wizard_bgtrend_label">15분 추이</string>
<string name="treatments_wizard_cob_label">COB</string>
<string name="superbolus">수퍼 식사주입</string>
<string name="ns_logappstartedevent">앱시작을 NS에 기록하기</string>
<string name="restartingapp">설정을 적용하기위해 앱을 종료합니다.</string>
<string name="danarv2pump">다나Rv2</string>
<string name="configbuilder_insulin">인슐린</string>
<string name="fastactinginsulin">Fast Acting Insulin</string>
<string name="fastactinginsulincomment">노보래피드, 휴마로그, 에피드라</string>
<string name="ultrafastactinginsulincomment">피아스프(Fiasp)</string>
<string name="insulin_shortname">INS</string>
<string name="enablesuperbolus">마법사에서 수퍼 식사주입 활성화하기</string>
<string name="enablesuperbolus_summary">마법사에서 수퍼 식사주입 기능을 활성화합니다. 어떤 기능인지 확실히 알기전까지 활성화 하지 마세요. 제대로 알지 못하고 사용하면 일슐린이 과다 주입될 수 있습니다!</string>
<string name="iob">IOB</string>
<string name="cob">COB</string>
<string name="virtualpump_firmware_label">펌웨어</string>
<string name="pump_lastconnection_label">최근 연결</string>
<string name="danar_bluetooth_status">블루투스 상태</string>
<string name="nav_about">버전정보</string>
<string name="smscommunicator_missingsmspermission">SMS 권한 누락</string>
<string name="xdripstatus_settings">xDrip 상태(워치)</string>
<string name="xdripstatus">xDrip 상태표시라인(워치)</string>
<string name="xdripstatus_shortname">xds</string>
<string name="wear_showbgi_title">BGI 보기</string>
<string name="wear_showbgi_summary">BGI를 상태라인에 추가하기</string>
<string name="ns_noupload">NS에 업로드하지 않기</string>
<string name="ns_noupload_summary">NS로 보낼 모든 데이터가 버려집니다. AAPS는 NS에 연결되어 있지만 NS에는 변화가 없을것입니다.</string>
<string name="basal_step">기초주입 최소단위</string>
<string name="bolus_step">식사주입 최소단위</string>
<string name="extendedbolus">확장식사</string>
<string name="temptarget">임시목표</string>
<string name="overview_extendedbolus_cancel_button">확장 식사주입 취소</string>
<string name="careportal_sensorage_label">센서 사용기간</string>
<string name="careportal_canulaage_label">캐뉼라 사용기간</string>
<string name="careportal_insulinage_label">인슐린 사용기간</string>
<string name="hours">시간</string>
<string name="overview_newtempbasal_basaltype_label">기초주입 종류</string>
<string name="invalidprofile">프로파일이 잘못되었습니다 !!!</string>
<string name="profileswitch">프로파일변경</string>
<string name="careportal_pbage_label">펌프배터리사용기간</string>
<string name="careportal_pumpbatterychange">펌프 배터리 교체</string>
<string name="ns_alarmoptions">알람 옵션</string>
<string name="nsalarm_urgenthigh">위험 고혈당</string>
<string name="nsalarm_high">고혈당</string>
<string name="nsalarm_low">저혈당</string>
<string name="nsalarm_urgentlow">위험 저혈당</string>
<string name="nsalarm_staledata">누락 데이터</string>
<string name="nsalarm_urgentstaledata">위험 누락 데이터</string>
<string name="nsalarm_staledatavalue_label">누락 데이터 기준값[분]</string>
<string name="nsalarm_urgent_staledatavalue_label">위험 누락 데이터 기준값[분]</string>
<string name="openapsama_autosens_period">autosens 시간 [h]</string>
<string name="openapsama_autosens_period_summary">민감도를 감지하기 위해 계산될 총 시간 (탄수화물 흡수 시간은 제외됩니다.)</string>
<string name="pump">Pump</string>
<string name="openaps">OpenAPS</string>
<string name="uploader">Uploader</string>
<string name="configbuilder_sensitivity">민감도 감지</string>
<string name="sensitivity_shortname">SENS</string>
<string name="sensitivityoref0">민감도 Oref0</string>
<string name="sensitivityaaps">민감도 AAPS</string>
<string name="absorptionsettings_title">흡수 설정</string>
<string name="absorption_maxtime_title">식사 최대 흡수 시간 [h]</string>
<string name="absorption_maxtime_summary">식사로 섭취한 탄수화물이 모두 흡수될기까지 예상되는 시간</string>
<string name="danar_visualizeextendedaspercentage_title">확장식사주입을 %로 표시하기</string>
<string name="careportal_sensorage_label_short">SAGE</string>
<string name="careportal_insulinage_label_short">IAGE</string>
<string name="careportal_canulaage_label_short">CAGE</string>
<string name="careportal_pbage_label_short">PBAGE</string>
<string name="openaps_short">OAPS</string>
<string name="uploader_short">UPLD</string>
<string name="basal_short">BAS</string>
<string name="virtualpump_extendedbolus_label_short">EXT</string>
<string name="sensitivity_warning">Autosense 기능을 켜면 모든 섭취된 탄수화물양을 입력하십시오. 그렇지 않으면 탄수화물 편차(deviations)가 민감도 변화로 잘못 인식될것입니다!!</string>
<string name="sensitivityweightedaverage">민감도 가중평균</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Cancel</string>
<string name="notloadedplugins">Not all profiles loaded!</string>
<string name="valuesnotstored">Values not stored!</string>
<string name="ns_localbroadcasts">(xDrip 같은) 다른 앱으로의 브로드캐스트를 활성화합니다.</string>
<string name="ns_localbroadcasts_title">Local Broadcasts 활성화하기</string>
<string name="careportal_activity_label">활동 &amp; 조절</string>
<string name="careportal_carbsandbolus_label">탄수화물 &amp; 식사주입</string>
<string name="careportal_cgm_label">CGM &amp; OPENAPS</string>
<string name="careportal_pump_label">펌프</string>
<string name="overview_newtempbasal_basalabsolute">Basal value [U/h]</string>
<string name="careportal_newnstreatment_duration_min_label">Duration [min]</string>
<string name="insulin_oref_peak">IOB 커브 피크 시간</string>
<string name="insulin_peak_time">피크 시간[분]</string>
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="dia_too_short">"DIA %1$f는 너무 짧습니다. 대신 %2$f을 사용하세요!"</string>
<string name="activate_profile">프로파일 활성화하기</string>
<string name="date">Date</string>
<string name="invalid">INVALID</string>
<string name="waitingforpairing">펌프연동 대기중</string>
<string name="pairingok">연동완료</string>
<string name="pairingtimedout">연동시간초과</string>
<string name="pairing">연동중</string>
<string name="danars_nodeviceavailable">현재까지 발견된 기기가 없습니다.</string>
<string name="emptyreservoir">빈 주사기</string>
<string name="bloodsugarmeasurementalert">혈당측정알람</string>
<string name="remaininsulinalert">남은 인슐린 양</string>
<string name="danarspump">다나RS</string>
<string name="danarspump_shortname">Dana</string>
<string name="selectedpump">선택된 펌프</string>
<string name="pairpump">새 펌프와 연동</string>
<string name="bolusspeed">식사주입 속도</string>
<string name="danar_setbasalstep001">기초주입 단위를 0.01 U/h로 설정하세요</string>
<string name="serialnumber">시리얼번호</string>
<string name="careportal_newnstreatment_percentage_label">퍼센트</string>
<string name="careportal_newnstreatment_timeshift_label">시간 이동</string>
<string name="default_temptargets">임시목표 기본값</string>
<string name="eatingsoon_duration">eatingsoon 기간</string>
<string name="eatingsoon_target">eatingsoon 목표</string>
<string name="activity_duration">activity 기간</string>
<string name="activity_target">activity 목표</string>
<string name="danar_history_prime">교체</string>
<string name="gettingextendedbolusstatus">확장식사주입 상태 가져오는중</string>
<string name="gettingbolusstatus">식사주입상태 가져오는중</string>
<string name="gettingtempbasalstatus">임시기초주입상태 가져오는중</string>
<string name="gettingpumpsettings">펌프설정 가져오는중</string>
<string name="gettingpumptime">펌프시간 가져오는중</string>
<string name="reuse">재사용</string>
<string name="wearcontrol_title">워치로 작동하기</string>
<string name="wearcontrol_summary">임시목표와 관리입력을 워치로 설정합니다.</string>
<string name="connectiontimedout">연결시간초과</string>
<string name="food">음식</string>
<string name="shortgramm">g</string>
<string name="none"><![CDATA[<none>]]></string>
<string name="shortkilojoul">kJ</string>
<string name="shortenergy">En</string>
<string name="shortprotein">Pr</string>
<string name="shortfat">Fat</string>
<string name="active"><![CDATA[<Active>]]></string>
<string name="waitingforestimatedbolusend" formatted="false">식사주입 종료를 기다리고 있습니다. %d초 남았습니다.</string>
<string name="processinghistory">이벤트 처리중</string>
<string name="startingbolus">식사주입을 시작합니다.</string>
<string name="executingrightnow">명령을 지금 실행합니다.</string>
<string name="pumpdrivercorrected">펌프 드라이버가 수정되었습니다.</string>
<string name="pump_unreachable">펌프에 연결할 수 없습니다.</string>
<string name="missed_bg_readings">혈당 읽기가 누락되었습니다.</string>
<string name="raise_notifications_as_android_notifications">경고와 알림시 시스템 알림 사용하기</string>
<string name="localalertsettings_title">자체 경고 기능</string>
<string name="enable_missed_bg_readings_alert">혈당 데이터 누락시 경고하기</string>
<string name="enable_pump_unreachable_alert">펌프와 연결불가시 경고하기</string>
<string name="pump_unreachable_threshold">펌프 연결불가 기준시간[분]</string>
<string name="urgent_alarm">긴급 알람</string>
<string name="info">정보</string>
<string name="bluetooth">블루투스</string>
<string name="btwatchdog_title">블루투스 감시기능</string>
<string name="btwatchdog_summary">펌프에 연결이 되지 않을때 폰의 블루투스를 1초간 껐다 켭니다. 블루투스 스택이 정지되는 일부폰에 이 기능이 도움이 됩니다.</string>
<string name="DexcomG5">(패치된) DexcomG5 앱</string>
<string name="dexcomg5_nsupload_title">NS에 혈당데이터 업로드하기</string>
<string name="dexcomg5_upload">G5업로드 세팅</string>
<string name="wear_detailed_delta_title">델타(혈당증분값) 자세히 보여주기</string>
<string name="wear_detailed_delta_summary">소수점 한자리 더 추가된 델타 보여주기</string>
<string name="unsupportedfirmware">지원되지 않는 펌프 펌웨어</string>
<string name="dexcomg5_xdripupload_title">혈당 데이터를 xDrip+에 전송하기</string>
<string name="dexcomg5_xdripupload_summary">xDrip+ 데이터 소스에서 640g/Eversense을 선택하세요</string>
<string name="minimalbasalvaluereplaced">지원되는 최소값으로 기초주입량이 대체되었습니다.</string>
<string name="overview_editquickwizard_usebg">혈당 계산</string>
<string name="overview_editquickwizard_usebolusiob">식사주입 IOB 계산</string>
<string name="overview_editquickwizard_usebasaliob">기초주입 IOB 계산</string>
<string name="overview_editquickwizard_usetrend">추세계산</string>
<string name="overview_editquickwizard_usesuperbolus">수퍼 식사주입 계산</string>
<string name="yes"></string>
<string name="no">아니오</string>
<string name="positiveonly">양수만</string>
<string name="negativeonly">음수만</string>
<string name="overview_editquickwizard_usecob">COB 계산</string>
<string name="overview_editquickwizard_usetemptarget">임시목표 계산</string>
<string name="loopenabled">Loop 활성화됨</string>
<string name="apsselected">APS 선택됨</string>
<string name="nsclienthaswritepermission">NSClient가 쓰기권한이 있습니다</string>
<string name="closedmodeenabled">Closed 모드가 활성화됨</string>
<string name="maxiobset">최대 IOB가 바르게 설정됨</string>
<string name="hasbgdata">선택한 소스에서 혈당이 들어옵니다.</string>
<string name="basalprofilenotaligned" formatted="false">기초주입값이 시간단위로 설정되지 않았습니다: %s</string>
<string name="zerovalueinprofile" formatted="false">유효하지 않은 프로파일: %s</string>
<string name="danar_history">펌프 이력</string>
<string name="extendedbolusdeliveryerror">확장식사주입 에러</string>
</resources>

View file

@ -1036,4 +1036,8 @@ Context | Edit Context</string>
<string name="as">Авточувств</string> <string name="as">Авточувств</string>
<string name="versionavailable">Доступна версия %1$s</string> <string name="versionavailable">Доступна версия %1$s</string>
<string name="time_offset">Смещение по времени</string> <string name="time_offset">Смещение по времени</string>
<string name="setupwizard_preferred_aps_mode">Предпочитаемый режим APS</string>
<string name="treatments_wizard_total_label">Итого</string>
<string name="calculation_short">Кальк</string>
<string name="handshaking">Подтверждение связи</string>
</resources> </resources>

View file

@ -230,7 +230,7 @@
<string name="openapsma_maxiob_title">Maximálny bazálny IOB, ktorý OpenAPS môže podať [U]</string> <string name="openapsma_maxiob_title">Maximálny bazálny IOB, ktorý OpenAPS môže podať [U]</string>
<string name="openapsma_maxiob_summary">Táto hodnota je nazývaná v kontexte OpenAPS ako max IOB, je to maximálne množstvo inzulínu v [U], ktoré APS môže naraz podať. <string name="openapsma_maxiob_summary">Táto hodnota je nazývaná v kontexte OpenAPS ako max IOB, je to maximálne množstvo inzulínu v [U], ktoré APS môže naraz podať.
</string> </string>
<string name="dismiss">ZAMIETNUŤ</string> <string name="dismiss">POTVRDIŤ</string>
<string name="danarpump">DanaR</string> <string name="danarpump">DanaR</string>
<string name="connecting">Pripájanie</string> <string name="connecting">Pripájanie</string>
<string name="connected">Pripojené</string> <string name="connected">Pripojené</string>
@ -713,6 +713,8 @@
<string name="dexcomg5_xdripupload_title">Odosielať glykémie do xDrip+</string> <string name="dexcomg5_xdripupload_title">Odosielať glykémie do xDrip+</string>
<string name="dexcomg5_xdripupload_summary">V xDrip+ vyberte zdroj dát 640g/Eversense</string> <string name="dexcomg5_xdripupload_summary">V xDrip+ vyberte zdroj dát 640g/Eversense</string>
<string name="nsclientbg">Glykémie z NS</string> <string name="nsclientbg">Glykémie z NS</string>
<string name="minimalbasalvaluereplaced">Hodnota bazálu nahradená minimálnou možnou</string>
<string name="maximumbasalvaluereplaced">Hodnota bazálu nahradená maximálnou možnou: %s</string>
<string name="overview_editquickwizard_usebg">Výpočet glykémie</string> <string name="overview_editquickwizard_usebg">Výpočet glykémie</string>
<string name="overview_editquickwizard_usebolusiob">Výpočet bolusového IOB</string> <string name="overview_editquickwizard_usebolusiob">Výpočet bolusového IOB</string>
<string name="overview_editquickwizard_usebasaliob">Výpočet bazálneho IOB</string> <string name="overview_editquickwizard_usebasaliob">Výpočet bazálneho IOB</string>
@ -766,6 +768,7 @@
<string name="combo_error_no_connection_no_bolus_delivered">Pumpa nedostupná. Bolus nebol podaný</string> <string name="combo_error_no_connection_no_bolus_delivered">Pumpa nedostupná. Bolus nebol podaný</string>
<string name="combo_error_no_bolus_delivered">Podávanie inzulínu zlyhalo. Zdá sa, že nebol podaný žiadny bolus. Aby ste si boli istí, skontrolujte pumpu a prípadne pošlite bolus znovu. Aby sa zabránilo nechcenému dvojitému bolusu, podanie bolusu nie je automaticky opakované.</string> <string name="combo_error_no_bolus_delivered">Podávanie inzulínu zlyhalo. Zdá sa, že nebol podaný žiadny bolus. Aby ste si boli istí, skontrolujte pumpu a prípadne pošlite bolus znovu. Aby sa zabránilo nechcenému dvojitému bolusu, podanie bolusu nie je automaticky opakované.</string>
<string name="combo_error_partial_bolus_delivered">Iba %1$.2f U z bolusu %2$.2f bolo podaného z dôvodu chyby. Skontrolujte podaný bolus na pumpe a urobte potrebné opatrenia.</string> <string name="combo_error_partial_bolus_delivered">Iba %1$.2f U z bolusu %2$.2f bolo podaného z dôvodu chyby. Skontrolujte podaný bolus na pumpe a urobte potrebné opatrenia.</string>
<string name="combo_error_bolus_verification_failed">Podanie bolusu a kontrola histórie pumpy zlyhala. Skontrolujte pumpu. Pokiaľ bolus prebehol, načíta se pri najbližšom pripojení automaticky.</string>
<string name="combo_reservoir_level_insufficient_for_bolus">Nedostatok inzulínu v zásobníku pre takýto bolus</string> <string name="combo_reservoir_level_insufficient_for_bolus">Nedostatok inzulínu v zásobníku pre takýto bolus</string>
<string name="extendedbolusdeliveryerror">Chyba pri podávaní predĺženého bolusu</string> <string name="extendedbolusdeliveryerror">Chyba pri podávaní predĺženého bolusu</string>
<string name="insightpump_shortname">Insight</string> <string name="insightpump_shortname">Insight</string>
@ -1024,6 +1027,7 @@
<string name="send_all_logs">Zasielať logy E-mailom</string> <string name="send_all_logs">Zasielať logy E-mailom</string>
<string name="delete_logs">Vymazať logy</string> <string name="delete_logs">Vymazať logy</string>
<string name="error_adding_treatment_message">Ošetrenie (inzulín: %1$.2f, sacharidy: %2$d, čas: %3$s) nie je možné pridať. Skontrolujte a podľa potreby manuálne pridajte záznam.</string> <string name="error_adding_treatment_message">Ošetrenie (inzulín: %1$.2f, sacharidy: %2$d, čas: %3$s) nie je možné pridať. Skontrolujte a podľa potreby manuálne pridajte záznam.</string>
<string name="generated_ecarbs_note">eCarbs: %1$d g (%2$d h), Oneskorenie: %3$d m</string>
<string name="openaps_noasdata">Nedostupné dáta o glykémiách</string> <string name="openaps_noasdata">Nedostupné dáta o glykémiách</string>
<string name="nav_logsettings">Nastavenie logovania</string> <string name="nav_logsettings">Nastavenie logovania</string>
<string name="resettodefaults">Obnoviť predvolené</string> <string name="resettodefaults">Obnoviť predvolené</string>
@ -1031,4 +1035,26 @@
<string name="as">AS</string> <string name="as">AS</string>
<string name="versionavailable">Verzia %1$s je k dispozícii</string> <string name="versionavailable">Verzia %1$s je k dispozícii</string>
<string name="time_offset">Časový posun</string> <string name="time_offset">Časový posun</string>
<string name="setupwizard_preferred_aps_mode">Preferovaný režim APS</string>
<string name="treatments_wizard_total_label">Spolu</string>
<string name="calculation_short">Kalk</string>
<string name="handshaking">Overovanie</string>
<plurals name="objective_days">
<item quantity="one">%1$d deň</item>
<item quantity="few">%1$d dní</item>
<item quantity="many">%1$d dní</item>
<item quantity="other">%1$d dní</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d hodina</item>
<item quantity="few">%1$d hodín</item>
<item quantity="many">%1$d hodín</item>
<item quantity="other">%1$d hodín</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d minúta</item>
<item quantity="few">%1$d minút</item>
<item quantity="many">%1$d minút</item>
<item quantity="other">%1$d minút</item>
</plurals>
</resources> </resources>

View file

@ -111,4 +111,30 @@
<item>@string/no</item> <item>@string/no</item>
<item>@string/yes</item> <item>@string/yes</item>
</string-array> </string-array>
<string-array name="virtualPumpTypes">
<item>Generic AAPS</item>
<item>Accu-Chek Spirit</item>
<item>Accu-Chek Combo</item>
<item>Accu-Chek Insight</item>
<item>Animas Ping</item>
<item>Animas Vibe</item>
<item>Cellnovo</item>
<item>DanaR</item>
<item>DanaR Korean</item>
<item>DanaRS</item>
<item>DanaRv2</item>
<item>Insulet Omnipod</item>
<item>Medtronic 512/712</item>
<item>Medtronic 515/715</item>
<item>Medtronic 522/722</item>
<item>Medtronic 523/723 (Revel)</item>
<item>Medtronic 554/754 (Veo)</item>
<item>Medtronic 640G</item>
<item>Tandem t:slim</item>
<item>Tandem t:flex</item>
<item>Tandem t:slim G4</item>
<item>Tandem t:slim X2</item>
</string-array>
</resources> </resources>

View file

@ -1083,6 +1083,11 @@
<string name="openapsama_max_daily_safety_multiplier">Max daily safety multiplier</string> <string name="openapsama_max_daily_safety_multiplier">Max daily safety multiplier</string>
<string name="openapsama_current_basal_safety_multiplier">Current basal safety multiplier</string> <string name="openapsama_current_basal_safety_multiplier">Current basal safety multiplier</string>
<string name="value_unavailable_short">n/a</string> <string name="value_unavailable_short">n/a</string>
<string translatable="false" name="key_virtualpump_type">virtualpump_type</string>
<string name="virtualpump_type">Virtual Pump Type</string>
<string name="virtualpump_definition">Pump Definition</string>
<string name="virtualpump_pump_def">Bolus: Step=%1$s\nExtended Bolus: [Step=%2$s, Duration=%3$smin-%4$sh]\nBasal: Step=%5$s\nTBR: %6$s (by %7$s), Duration=%8$smin-%9$sh\n%10$s</string>
<string name="virtualpump_pump_def_extended_note">* Ranged basal/bolus values are not supported by Virtual Pump.</string>
<string name="ns_autobackfill_title">Autobackfill BG</string> <string name="ns_autobackfill_title">Autobackfill BG</string>
<string name="ga_lang" translatable="false">Irish</string> <string name="ga_lang" translatable="false">Irish</string>
<string name="wear_wizard_settings">Wizard Settings</string> <string name="wear_wizard_settings">Wizard Settings</string>

View file

@ -8,6 +8,14 @@
android:defaultValue="false" android:defaultValue="false"
android:key="virtualpump_uploadstatus" android:key="virtualpump_uploadstatus"
android:title="@string/virtualpump_uploadstatus_title" /> android:title="@string/virtualpump_uploadstatus_title" />
<ListPreference
android:defaultValue="1"
android:entries="@array/virtualPumpTypes"
android:entryValues="@array/virtualPumpTypes"
android:key="@string/key_virtualpump_type"
android:title="@string/virtualpump_type" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View file

@ -0,0 +1,45 @@
package info.nightscout.androidaps.plugins.PumpCommon.utils;
import org.junit.Assert;
import org.junit.Test;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpCapability;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpTempBasalType;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import static org.junit.Assert.*;
/**
* Created by andy on 5/13/18.
*/
public class PumpUtilUTest {
@Test
public void setPumpDescription() throws Exception {
PumpDescription pumpDescription = new PumpDescription();
PumpUtil.setPumpDescription(pumpDescription, PumpType.AccuChekCombo);
Assert.assertEquals(pumpDescription.bolusStep, PumpType.AccuChekCombo.getBolusSize(), 0.1d);
Assert.assertEquals(pumpDescription.basalMinimumRate, PumpType.AccuChekCombo.getBaseBasalStep(), 0.1d);
Assert.assertEquals(pumpDescription.basalStep, PumpType.AccuChekCombo.getBaseBasalStep(), 0.1d);
Assert.assertEquals(pumpDescription.extendedBolusDurationStep, PumpType.AccuChekCombo.getExtendedBolusSettings().getDurationStep(), 0.1d);
Assert.assertEquals(pumpDescription.extendedBolusMaxDuration, PumpType.AccuChekCombo.getExtendedBolusSettings().getMaxDuration(), 0.1d);
Assert.assertEquals(pumpDescription.extendedBolusStep, PumpType.AccuChekCombo.getExtendedBolusSettings().getStep(), 0.1d);
Assert.assertEquals(pumpDescription.isExtendedBolusCapable, PumpType.AccuChekCombo.getPumpCapability().hasCapability(PumpCapability.ExtendedBolus));
Assert.assertEquals(pumpDescription.isBolusCapable, PumpType.AccuChekCombo.getPumpCapability().hasCapability(PumpCapability.Bolus));
Assert.assertEquals(pumpDescription.isRefillingCapable, PumpType.AccuChekCombo.getPumpCapability().hasCapability(PumpCapability.Refill));
Assert.assertEquals(pumpDescription.isSetBasalProfileCapable, PumpType.AccuChekCombo.getPumpCapability().hasCapability(PumpCapability.BasalProfileSet));
Assert.assertEquals(pumpDescription.isTempBasalCapable, PumpType.AccuChekCombo.getPumpCapability().hasCapability(PumpCapability.TempBasal));
Assert.assertEquals(pumpDescription.maxTempPercent, PumpType.AccuChekCombo.getTbrSettings().getMaxDose(), 0.1d);
Assert.assertEquals(pumpDescription.tempPercentStep, PumpType.AccuChekCombo.getTbrSettings().getStep(), 0.1d);
Assert.assertEquals(pumpDescription.tempBasalStyle, PumpType.AccuChekCombo.getPumpTempBasalType()== PumpTempBasalType.Percent ? PumpDescription.PERCENT : PumpDescription.ABSOLUTE);
Assert.assertEquals(pumpDescription.tempDurationStep, PumpType.AccuChekCombo.getTbrSettings().getDurationStep());
Assert.assertEquals(pumpDescription.tempDurationStep15mAllowed, PumpType.AccuChekCombo.getSpecialBasalDurations().hasCapability(PumpCapability.BasalRate_Duration15minAllowed));
Assert.assertEquals(pumpDescription.tempDurationStep30mAllowed, PumpType.AccuChekCombo.getSpecialBasalDurations().hasCapability(PumpCapability.BasalRate_Duration30minAllowed));
}
}

View file

@ -0,0 +1,76 @@
package info.nightscout.androidaps.plugins.PumpVirtual;
import android.content.Context;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import info.AAPSMocker;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.PumpCommon.defs.PumpType;
import info.nightscout.utils.SP;
import info.nightscout.utils.ToastUtils;
import static org.powermock.api.mockito.PowerMockito.when;
/**
* Created by andy on 5/13/18.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({MainApp.class, ConfigBuilderPlugin.class, ToastUtils.class, Context.class, SP.class})
public class VirtualPumpPluginUTest {
VirtualPumpPlugin virtualPumpPlugin;
@Before
public void prepareMocks() throws Exception {
AAPSMocker.mockMainApp();
AAPSMocker.mockConfigBuilder();
AAPSMocker.mockBus();
AAPSMocker.mockStrings();
AAPSMocker.mockCommandQueue();
AAPSMocker.mockSP();
virtualPumpPlugin = VirtualPumpPlugin.getPlugin();
}
@Test
public void getPumpType() {
}
@Test
public void refreshConfiguration() {
when(SP.getString(R.string.key_virtualpump_type, "Generic AAPS")).thenReturn("Accu-Chek Combo");
virtualPumpPlugin.refreshConfiguration();
Assert.assertEquals(PumpType.AccuChekCombo, virtualPumpPlugin.getPumpType());
}
@Test
public void refreshConfigurationTwice() {
when(SP.getString(R.string.key_virtualpump_type, "Generic AAPS")).thenReturn("Accu-Chek Combo");
virtualPumpPlugin.refreshConfiguration();
when(SP.getString(R.string.key_virtualpump_type, "Generic AAPS")).thenReturn("Accu-Chek Combo");
virtualPumpPlugin.refreshConfiguration();
Assert.assertEquals(PumpType.AccuChekCombo, virtualPumpPlugin.getPumpType());
}
}