- added functionality to map TBRs to Pump History Records (similar to Bolus)
- changed log size to 5 MB (as it was before)
This commit is contained in:
parent
b5da57e20f
commit
cff20f78c8
10 changed files with 283 additions and 241 deletions
|
@ -105,14 +105,14 @@ android {
|
|||
multiDexEnabled true
|
||||
versionCode 1500
|
||||
// dev_version: 2.3.1-dev
|
||||
version "medtronic-0.9.4-SNAPSHOT"
|
||||
version "medtronic-0.9.6-SNAPSHOT"
|
||||
buildConfigField "String", "VERSION", '"' + version + '"'
|
||||
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
|
||||
buildConfigField "String", "HEAD", '"' + generateGitBuild() + '"'
|
||||
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'
|
||||
buildConfigField "String", "DEV_VERSION", '"2.3.1-dev"'
|
||||
buildConfigField "String", "DEV_DATE", '"29.4.2019"'
|
||||
buildConfigField "String", "DEV_CHECKIN", '"ea60b6ceef30ccf32566bf7c6caa4f1f33b42f41"'
|
||||
buildConfigField "String", "DEV_DATE", '"2.5.2019"'
|
||||
buildConfigField "String", "DEV_CHECKIN", '"75d469a9db4bad6c619de8d36006e935c12b6ff1"'
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
// if you change minSdkVersion to less than 11, you need to change executeTask for wear
|
||||
|
||||
|
@ -276,6 +276,8 @@ dependencies {
|
|||
testImplementation "com.google.truth:truth:0.39"
|
||||
testImplementation 'org.robolectric:robolectric:3.8'
|
||||
testImplementation "org.skyscreamer:jsonassert:1.5.0"
|
||||
testImplementation "org.hamcrest:hamcrest-all:1.3"
|
||||
testImplementation "uk.org.lidalia:slf4j-test:1.2.0"
|
||||
|
||||
androidTestImplementation "org.mockito:mockito-core:2.8.47"
|
||||
androidTestImplementation "com.google.dexmaker:dexmaker:${dexmakerVersion}"
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
<timeBasedFileNamingAndTriggeringPolicy
|
||||
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>500KB</maxFileSize>
|
||||
<maxFileSize>5MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!-- keep 30 days' worth of history -->
|
||||
<maxHistory>240</maxHistory>
|
||||
|
|
|
@ -454,6 +454,14 @@ public class MainApp extends Application {
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
public static boolean isEngineeringMode() {
|
||||
if (!Config.APS)
|
||||
return true;
|
||||
return engineeringMode;
|
||||
}
|
||||
|
||||
|
||||
public static boolean isEngineeringModeOrRelease() {
|
||||
if (!Config.APS)
|
||||
return true;
|
||||
|
|
|
@ -876,6 +876,31 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
|||
log.debug("TEMPBASAL: Already exists from: " + Source.getString(tempBasal.source) + " " + tempBasal.toString());
|
||||
return false;
|
||||
}
|
||||
|
||||
// search by date (in case its standard record that has become pump record)
|
||||
QueryBuilder<TemporaryBasal, Long> queryBuilder2 = getDaoTemporaryBasal().queryBuilder();
|
||||
Where where2 = queryBuilder2.where();
|
||||
where2.eq("date", tempBasal.date);
|
||||
PreparedQuery<TemporaryBasal> preparedQuery2 = queryBuilder2.prepare();
|
||||
List<TemporaryBasal> trList2 = getDaoTemporaryBasal().query(preparedQuery2);
|
||||
|
||||
if (trList2.size() > 0) {
|
||||
old = trList2.get(0);
|
||||
|
||||
old.copyFromPump(tempBasal);
|
||||
old.source = Source.PUMP;
|
||||
|
||||
if (L.isEnabled(L.DATABASE))
|
||||
log.debug("TEMPBASAL: Updated record with Pump Data : " + Source.getString(tempBasal.source) + " " + tempBasal.toString());
|
||||
|
||||
getDaoTemporaryBasal().update(old);
|
||||
|
||||
updateEarliestDataChange(tempBasal.date);
|
||||
scheduleTemporaryBasalChange();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
getDaoTemporaryBasal().create(tempBasal);
|
||||
if (L.isEnabled(L.DATABASE))
|
||||
log.debug("TEMPBASAL: New record from: " + Source.getString(tempBasal.source) + " " + tempBasal.toString());
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package info.nightscout.androidaps.db;
|
||||
|
||||
public interface DbObjectBase {
|
||||
|
||||
long getDate();
|
||||
|
||||
long getPumpId();
|
||||
|
||||
}
|
|
@ -27,7 +27,7 @@ import info.nightscout.androidaps.utils.SP;
|
|||
*/
|
||||
|
||||
@DatabaseTable(tableName = DatabaseHelper.DATABASE_TEMPORARYBASALS)
|
||||
public class TemporaryBasal implements Interval {
|
||||
public class TemporaryBasal implements Interval, DbObjectBase {
|
||||
private static Logger log = LoggerFactory.getLogger(L.DATABASE);
|
||||
|
||||
@DatabaseField(id = true)
|
||||
|
@ -156,6 +156,14 @@ public class TemporaryBasal implements Interval {
|
|||
netExtendedRate = t.netExtendedRate;
|
||||
}
|
||||
|
||||
public void copyFromPump(TemporaryBasal t) {
|
||||
durationInMinutes = t.durationInMinutes;
|
||||
isAbsolute = t.isAbsolute;
|
||||
percentRate = t.percentRate;
|
||||
absoluteRate = t.absoluteRate;
|
||||
pumpId = t.pumpId;
|
||||
}
|
||||
|
||||
// -------- Interval interface ---------
|
||||
|
||||
Long cuttedEnd = null;
|
||||
|
@ -416,4 +424,13 @@ public class TemporaryBasal implements Interval {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDate() {
|
||||
return this.date;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getPumpId() {
|
||||
return this.pumpId;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,7 +107,7 @@ public enum PumpHistoryEntryType // implements CodeEnum
|
|||
// V4
|
||||
// Andy58(0x58, "Unknown", 13, 5, 0), // TO DO is this one really there ???
|
||||
|
||||
BolusWizardChange(0x5a, "Bolus Wizard Change", PumpHistoryEntryGroup.Configuration, 2, 5, 117), // V2: 522+[B=143]
|
||||
BolusWizardChange(0x5a, "Bolus Wizard Change", PumpHistoryEntryGroup.Configuration, 2, 5, 117), // V2: 522+[B=143] // V6 124/144
|
||||
BolusWizardBolusEstimate(0x5b, "Bolus Wizard Estimate", PumpHistoryEntryGroup.Configuration, 2, 5, 13), // 15 //
|
||||
UnabsorbedInsulin(0x5c, "Unabsorbed Insulin", PumpHistoryEntryGroup.Statistic, 5, 0, 0), // head[1] -> body
|
||||
// length
|
||||
|
@ -220,7 +220,7 @@ public enum PumpHistoryEntryType // implements CodeEnum
|
|||
EndResultTotals.addSpecialRuleBody(new SpecialRule(MedtronicDeviceType.Medtronic_523andHigher, 3));
|
||||
Bolus.addSpecialRuleHead(new SpecialRule(MedtronicDeviceType.Medtronic_523andHigher, 8));
|
||||
// BolusWizardChange.addSpecialRuleBody(new SpecialRule(MedtronicDeviceType.Medtronic_522andHigher, 143));
|
||||
BolusWizardChange.addSpecialRuleBody(new SpecialRule(MedtronicDeviceType.Medtronic_523andHigher, 143)); // V5:
|
||||
BolusWizardChange.addSpecialRuleBody(new SpecialRule(MedtronicDeviceType.Medtronic_523andHigher, 137)); // V5:
|
||||
// 522
|
||||
// has
|
||||
// old
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
package info.nightscout.androidaps.plugins.pump.medtronic.data;
|
||||
|
||||
import com.google.android.gms.common.util.CollectionUtils;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import org.joda.time.LocalDateTime;
|
||||
import org.joda.time.Minutes;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
|
@ -8,20 +18,14 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.joda.time.LocalDateTime;
|
||||
import org.joda.time.Minutes;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.data.DetailedBolusInfo;
|
||||
import info.nightscout.androidaps.db.DatabaseHelper;
|
||||
import info.nightscout.androidaps.db.DbObjectBase;
|
||||
import info.nightscout.androidaps.db.ExtendedBolus;
|
||||
import info.nightscout.androidaps.db.Source;
|
||||
import info.nightscout.androidaps.db.TDD;
|
||||
import info.nightscout.androidaps.db.TemporaryBasal;
|
||||
import info.nightscout.androidaps.logging.L;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.DetailedBolusInfoStorage;
|
||||
import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil;
|
||||
|
@ -34,6 +38,7 @@ import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.BasalProfile;
|
|||
import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.BolusDTO;
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.ClockDTO;
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.DailyTotalsDTO;
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.TempBasalPair;
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
|
||||
import info.nightscout.androidaps.plugins.treatments.Treatment;
|
||||
|
@ -134,7 +139,6 @@ public class MedtronicHistoryData {
|
|||
}
|
||||
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -221,7 +225,6 @@ public class MedtronicHistoryData {
|
|||
PumpHistoryEntryType.ChangeMaxBolus, //
|
||||
PumpHistoryEntryType.ChangeMaxBasal, //
|
||||
PumpHistoryEntryType.ChangeTempBasalType);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -283,14 +286,14 @@ public class MedtronicHistoryData {
|
|||
this.sort(newAndAll);
|
||||
|
||||
List<PumpHistoryEntry> newAndAll2 = getFilteredItems(newAndAll, //
|
||||
PumpHistoryEntryType.Bolus, //
|
||||
PumpHistoryEntryType.TempBasalCombined, //
|
||||
PumpHistoryEntryType.Prime, //
|
||||
PumpHistoryEntryType.PumpSuspend, //
|
||||
PumpHistoryEntryType.PumpResume, //
|
||||
PumpHistoryEntryType.Rewind, //
|
||||
PumpHistoryEntryType.NoDeliveryAlarm, //
|
||||
PumpHistoryEntryType.BasalProfileStart);
|
||||
PumpHistoryEntryType.Bolus, //
|
||||
PumpHistoryEntryType.TempBasalCombined, //
|
||||
PumpHistoryEntryType.Prime, //
|
||||
PumpHistoryEntryType.PumpSuspend, //
|
||||
PumpHistoryEntryType.PumpResume, //
|
||||
PumpHistoryEntryType.Rewind, //
|
||||
PumpHistoryEntryType.NoDeliveryAlarm, //
|
||||
PumpHistoryEntryType.BasalProfileStart);
|
||||
|
||||
if (!forHistory) {
|
||||
newAndAll2 = filterPumpSuspend(newAndAll2, 10); // just last 10 (of relevant), for history we already
|
||||
|
@ -340,7 +343,7 @@ public class MedtronicHistoryData {
|
|||
LOG.debug("ProcessHistoryData: Bolus [count={}, items={}]", treatments.size(), gsonPretty.toJson(treatments));
|
||||
|
||||
if (treatments.size() > 0) {
|
||||
processBoluses(treatments);
|
||||
processEntries(treatments, ProcessHistoryRecord.Bolus);
|
||||
}
|
||||
|
||||
// TBR
|
||||
|
@ -349,7 +352,7 @@ public class MedtronicHistoryData {
|
|||
LOG.debug("ProcessHistoryData: TBRs [count={}, items={}]", tbrs.size(), gsonPretty.toJson(tbrs));
|
||||
|
||||
if (tbrs.size() > 0) {
|
||||
// processTBRs(tbrs);
|
||||
processEntries(tbrs, ProcessHistoryRecord.TBR);
|
||||
}
|
||||
|
||||
// Suspends (for suspends/resume, fakeTBR)
|
||||
|
@ -408,169 +411,69 @@ public class MedtronicHistoryData {
|
|||
}
|
||||
|
||||
|
||||
// TODO needs to be implemented
|
||||
public void processBoluses(List<PumpHistoryEntry> boluses) {
|
||||
private enum ProcessHistoryRecord {
|
||||
Bolus("Bolus"),
|
||||
TBR("TBR"),
|
||||
Suspend("Suspend");
|
||||
|
||||
int dateDifference = getOldestDateDifference(boluses);
|
||||
private String description;
|
||||
|
||||
List<Treatment> treatmentsFromHistory = TreatmentsPlugin.getPlugin().getTreatmentsFromHistoryXMinutesAgo(
|
||||
dateDifference);
|
||||
ProcessHistoryRecord(String desc) {
|
||||
this.description = desc;
|
||||
}
|
||||
|
||||
LOG.debug("Boluses (before filter): {}, FromDb={}", gsonPretty.toJson(boluses),
|
||||
gsonPretty.toJson(treatmentsFromHistory));
|
||||
public String getDescription() {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
filterOutAlreadyAddedEntries(boluses, treatmentsFromHistory);
|
||||
}
|
||||
|
||||
if (boluses.isEmpty())
|
||||
|
||||
private void processEntries(List<PumpHistoryEntry> entryList, ProcessHistoryRecord processHistoryRecord) {
|
||||
|
||||
int dateDifference = getOldestDateDifference(entryList);
|
||||
|
||||
List<? extends DbObjectBase> entriesFromHistory = getDatabaseEntries(dateDifference, processHistoryRecord);
|
||||
|
||||
LOG.debug(processHistoryRecord.getDescription() + " List (before filter): {}, FromDb={}", gsonPretty.toJson(entryList),
|
||||
gsonPretty.toJson(entriesFromHistory));
|
||||
|
||||
filterOutAlreadyAddedEntries(entryList, entriesFromHistory);
|
||||
|
||||
if (entryList.isEmpty())
|
||||
return;
|
||||
|
||||
LOG.debug("Boluses (after filter): {}, FromDb={}", gsonPretty.toJson(boluses),
|
||||
gsonPretty.toJson(treatmentsFromHistory));
|
||||
LOG.debug(processHistoryRecord.getDescription() + " List (after filter): {}, FromDb={}", gsonPretty.toJson(entryList),
|
||||
gsonPretty.toJson(entriesFromHistory));
|
||||
|
||||
if (treatmentsFromHistory.isEmpty()) {
|
||||
for (PumpHistoryEntry treatment : boluses) {
|
||||
LOG.debug("Add Bolus (no treatments): " + treatment);
|
||||
addBolus(treatment, null);
|
||||
if (isCollectionEmpty(entriesFromHistory)) {
|
||||
for (PumpHistoryEntry treatment : entryList) {
|
||||
LOG.debug("Add " + processHistoryRecord.getDescription() + " (no db entries): " + treatment);
|
||||
addEntry(treatment, null, processHistoryRecord);
|
||||
}
|
||||
} else {
|
||||
for (PumpHistoryEntry treatment : boluses) {
|
||||
tryToGetByLocalTime(treatment.atechDateTime);
|
||||
Treatment treatmentDb = findTreatment(treatment, treatmentsFromHistory, dateDifference);
|
||||
LOG.debug("Add Bolus {} - (treatmentFromDb={}) ", treatment, treatmentDb);
|
||||
for (PumpHistoryEntry treatment : entryList) {
|
||||
DbObjectBase treatmentDb = findDbEntry(treatment, entriesFromHistory);
|
||||
LOG.debug("Add " + processHistoryRecord.getDescription() + " {} - (entryFromDb={}) ", treatment, treatmentDb);
|
||||
|
||||
addBolus(treatment, treatmentDb);
|
||||
addEntry(treatment, treatmentDb, processHistoryRecord);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void filterOutAlreadyAddedEntries(List<PumpHistoryEntry> boluses, List<Treatment> treatmentsFromHistory) {
|
||||
|
||||
List<Treatment> removeTreatmentsFromHistory = new ArrayList<>();
|
||||
|
||||
for (Treatment treatment : treatmentsFromHistory) {
|
||||
|
||||
if (treatment.pumpId != 0) {
|
||||
|
||||
PumpHistoryEntry selectedBolus = null;
|
||||
|
||||
for (PumpHistoryEntry bolus : boluses) {
|
||||
if (bolus.getPumpId() == treatment.pumpId) {
|
||||
selectedBolus = bolus;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedBolus != null) {
|
||||
boluses.remove(selectedBolus);
|
||||
|
||||
removeTreatmentsFromHistory.add(treatment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
treatmentsFromHistory.removeAll(removeTreatmentsFromHistory);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private Treatment findTreatmentOld(PumpHistoryEntry treatment, List<Treatment> treatmentsFromHistory) {
|
||||
private DbObjectBase findDbEntry(PumpHistoryEntry treatment, List<? extends DbObjectBase> entriesFromHistory) {
|
||||
|
||||
long proposedTime = DateTimeUtil.toMillisFromATD(treatment.atechDateTime);
|
||||
|
||||
proposedTime += (this.pumpTime.timeDifference * 1000);
|
||||
|
||||
treatment.phoneDateTime = proposedTime;
|
||||
|
||||
List<Treatment> outList = new ArrayList<>();
|
||||
|
||||
for (Treatment treatment1 : treatmentsFromHistory) {
|
||||
if ((treatment1.date > proposedTime - (5 * 60 * 1000))
|
||||
&& (treatment1.date < proposedTime + (5 * 60 * 1000))) {
|
||||
outList.add(treatment1);
|
||||
}
|
||||
}
|
||||
|
||||
if (outList.size() == 0) {
|
||||
if (entriesFromHistory.size() == 0) {
|
||||
return null;
|
||||
} else if (outList.size() == 1) {
|
||||
return outList.get(0);
|
||||
} else {
|
||||
LOG.error("TODO. Multiple options: {}", outList);
|
||||
|
||||
Map<Treatment, Integer> data = new HashMap<>();
|
||||
|
||||
for (Treatment treatment1 : outList) {
|
||||
int diff = Math.abs((int)(treatment1.date - proposedTime));
|
||||
data.put(treatment1, diff);
|
||||
}
|
||||
|
||||
for (int i = 1; i < 5; i++) {
|
||||
|
||||
List<Treatment> outList2 = new ArrayList<>();
|
||||
|
||||
for (Treatment treatment1 : treatmentsFromHistory) {
|
||||
if ((treatment1.date > proposedTime - (i * 60 * 1000))
|
||||
&& (treatment1.date < proposedTime + (i * 60 * 1000))) {
|
||||
outList2.add(treatment1);
|
||||
}
|
||||
}
|
||||
|
||||
LOG.error("Treatment List: (timeDiff={},count={},list={})", (i * 60 * 1000), outList2.size(),
|
||||
gsonPretty.toJson(outList2));
|
||||
|
||||
if (outList2.size() == 1) {
|
||||
return outList2.get(0);
|
||||
} else if (outList2.size() > 1) {
|
||||
|
||||
for (int j = 1; j < 6; j++) {
|
||||
|
||||
List<Treatment> outList3 = new ArrayList<>();
|
||||
|
||||
int ttt = (i * 60 * 1000) - (10 * j * 1000);
|
||||
|
||||
for (Treatment treatment1 : treatmentsFromHistory) {
|
||||
|
||||
if ((treatment1.date > proposedTime - ttt) && (treatment1.date < proposedTime + ttt)) {
|
||||
outList3.add(treatment1);
|
||||
}
|
||||
}
|
||||
|
||||
LOG.error("Treatment List: (timeDiff={},count={},list={})", ttt, outList3.size(),
|
||||
gsonPretty.toJson(outList3));
|
||||
|
||||
if (outList3.size() == 1) {
|
||||
return outList3.get(0);
|
||||
}
|
||||
} // for
|
||||
|
||||
} // outList2
|
||||
}
|
||||
|
||||
// TODO
|
||||
} // outList
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private Treatment findTreatment(PumpHistoryEntry treatment, List<Treatment> treatmentsFromHistory,
|
||||
int dateDifference) {
|
||||
|
||||
long proposedTime = DateTimeUtil.toMillisFromATD(treatment.atechDateTime);
|
||||
|
||||
proposedTime += (this.pumpTime.timeDifference * 1000);
|
||||
|
||||
// treatment.phoneDateTime = proposedTime;
|
||||
Date proposedTimeDD = new Date(proposedTime);
|
||||
|
||||
if (treatmentsFromHistory.size() == 0) {
|
||||
return null;
|
||||
} else if (treatmentsFromHistory.size() == 1) {
|
||||
Treatment treatment1 = treatmentsFromHistory.get(0);
|
||||
LocalDateTime ldt = new LocalDateTime(treatment1.date);
|
||||
return treatmentsFromHistory.get(0);
|
||||
} else if (entriesFromHistory.size() == 1) {
|
||||
DbObjectBase treatment1 = entriesFromHistory.get(0);
|
||||
LocalDateTime ldt = new LocalDateTime(treatment1.getDate());
|
||||
return entriesFromHistory.get(0);
|
||||
}
|
||||
|
||||
for (int min = 0; min < 5; min++) {
|
||||
|
@ -578,38 +481,96 @@ public class MedtronicHistoryData {
|
|||
|
||||
int diff = (min * 60 * 1000) + (sec * 1000);
|
||||
|
||||
List<Treatment> outList = new ArrayList<>();
|
||||
List<DbObjectBase> outList = new ArrayList<>();
|
||||
|
||||
for (Treatment treatment1 : treatmentsFromHistory) {
|
||||
for (DbObjectBase treatment1 : entriesFromHistory) {
|
||||
|
||||
if ((treatment1.date > proposedTime - diff) && (treatment1.date < proposedTime + diff)) {
|
||||
if ((treatment1.getDate() > proposedTime - diff) && (treatment1.getDate() < proposedTime + diff)) {
|
||||
outList.add(treatment1);
|
||||
}
|
||||
}
|
||||
|
||||
LOG.error("Treatments: (timeDiff=[min={},sec={}],count={},list={})", min, sec, outList.size(),
|
||||
gsonPretty.toJson(outList));
|
||||
LOG.error("Entries: (timeDiff=[min={},sec={}],count={},list={})", min, sec, outList.size(),
|
||||
gsonPretty.toJson(outList));
|
||||
|
||||
if (outList.size() == 1) {
|
||||
return outList.get(0);
|
||||
}
|
||||
|
||||
if (min == 0 && sec == 10 && outList.size() > 1) {
|
||||
LOG.error("Too many treatments (with too small diff): (timeDiff=[min={},sec={}],count={},list={})",
|
||||
min, sec, outList.size(), gsonPretty.toJson(outList));
|
||||
|
||||
LOG.error("Too many entries (with too small diff): (timeDiff=[min={},sec={}],count={},list={})",
|
||||
min, sec, outList.size(), gsonPretty.toJson(outList));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private void addEntry(PumpHistoryEntry treatment, DbObjectBase treatmentDb, ProcessHistoryRecord processHistoryRecord) {
|
||||
|
||||
if (processHistoryRecord==ProcessHistoryRecord.Bolus) {
|
||||
addBolus(treatment, (Treatment)treatmentDb);
|
||||
} else if (processHistoryRecord==ProcessHistoryRecord.TBR) {
|
||||
addTBR(treatment, (TemporaryBasal)treatmentDb);
|
||||
} else {
|
||||
addTBR(treatment, (TemporaryBasal)treatmentDb);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private List<? extends DbObjectBase> getDatabaseEntries(int dateDifference, ProcessHistoryRecord processHistoryRecord) {
|
||||
if (processHistoryRecord==ProcessHistoryRecord.Bolus) {
|
||||
List<Treatment> treatmentsFromHistory = TreatmentsPlugin.getPlugin().getTreatmentsFromHistoryXMinutesAgo(
|
||||
dateDifference);
|
||||
return treatmentsFromHistory;
|
||||
} else {
|
||||
|
||||
GregorianCalendar gc = new GregorianCalendar();
|
||||
gc.add(Calendar.MINUTE, (-1)*dateDifference);
|
||||
|
||||
List<TemporaryBasal> tbrsFromHistory = databaseHelper.getTemporaryBasalsDataFromTime(gc.getTimeInMillis(), true);
|
||||
return tbrsFromHistory;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void filterOutAlreadyAddedEntries(List<PumpHistoryEntry> entryList, List<? extends DbObjectBase> treatmentsFromHistory) {
|
||||
|
||||
if (isCollectionEmpty(treatmentsFromHistory) )
|
||||
return;
|
||||
|
||||
List<DbObjectBase> removeTreatmentsFromHistory = new ArrayList<>();
|
||||
|
||||
for (DbObjectBase treatment : treatmentsFromHistory) {
|
||||
|
||||
if (treatment.getPumpId() != 0) {
|
||||
|
||||
PumpHistoryEntry selectedBolus = null;
|
||||
|
||||
for (PumpHistoryEntry bolus : entryList) {
|
||||
if (bolus.getPumpId() == treatment.getPumpId()) {
|
||||
selectedBolus = bolus;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedBolus != null) {
|
||||
entryList.remove(selectedBolus);
|
||||
|
||||
removeTreatmentsFromHistory.add(treatment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
treatmentsFromHistory.removeAll(removeTreatmentsFromHistory);
|
||||
}
|
||||
|
||||
|
||||
private void addBolus(PumpHistoryEntry bolus, Treatment treatment) {
|
||||
|
||||
BolusDTO bolusDTO = (BolusDTO)bolus.getDecodedData().get("Object");
|
||||
BolusDTO bolusDTO = (BolusDTO) bolus.getDecodedData().get("Object");
|
||||
|
||||
if (treatment == null) {
|
||||
|
||||
|
@ -630,9 +591,9 @@ public class MedtronicHistoryData {
|
|||
|
||||
if (L.isEnabled(L.PUMPCOMM))
|
||||
LOG.debug("addBolus - [date={},pumpId={}, insulin={}, newRecord={}]", detailedBolusInfo.date,
|
||||
detailedBolusInfo.pumpId, detailedBolusInfo.insulin, newRecord);
|
||||
detailedBolusInfo.pumpId, detailedBolusInfo.insulin, newRecord);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case Audio:
|
||||
case Extended: {
|
||||
|
@ -648,12 +609,12 @@ public class MedtronicHistoryData {
|
|||
|
||||
TreatmentsPlugin.getPlugin().addToHistoryExtendedBolus(extendedBolus);
|
||||
|
||||
LOG.debug("addBolus - Extended [date={},pumpId={}, insulin={}, duration={}]", extendedBolus.date,
|
||||
extendedBolus.pumpId, extendedBolus.insulin, extendedBolus.durationInMinutes);
|
||||
|
||||
if (L.isEnabled(L.PUMP)) {
|
||||
LOG.debug("addBolus - Extended [date={},pumpId={}, insulin={}, duration={}]", extendedBolus.date,
|
||||
extendedBolus.pumpId, extendedBolus.insulin, extendedBolus.durationInMinutes);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -673,50 +634,51 @@ public class MedtronicHistoryData {
|
|||
|
||||
bolus.setLinkedObject(detailedBolusInfo);
|
||||
|
||||
if (L.isEnabled(L.PUMPCOMM))
|
||||
if (L.isEnabled(L.PUMP)) {
|
||||
LOG.debug("editBolus - [date={},pumpId={}, insulin={}, newRecord={}]", detailedBolusInfo.date,
|
||||
detailedBolusInfo.pumpId, detailedBolusInfo.insulin, newRecord);
|
||||
// }
|
||||
detailedBolusInfo.pumpId, detailedBolusInfo.insulin, newRecord);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void addTBR(PumpHistoryEntry treatment, TemporaryBasal temporaryBasalDbInput) {
|
||||
|
||||
TempBasalPair tbr = (TempBasalPair)treatment.getDecodedData().get("Object");
|
||||
|
||||
TemporaryBasal temporaryBasalDb = temporaryBasalDbInput;
|
||||
String operation = "editTBR";
|
||||
|
||||
if (temporaryBasalDb==null) {
|
||||
temporaryBasalDb = new TemporaryBasal();
|
||||
temporaryBasalDb.date = tryToGetByLocalTime(treatment.atechDateTime);
|
||||
|
||||
operation = "addTBR";
|
||||
}
|
||||
|
||||
temporaryBasalDb.source = Source.PUMP;
|
||||
temporaryBasalDb.pumpId = treatment.getPumpId();
|
||||
temporaryBasalDb.durationInMinutes = tbr.getDurationMinutes();
|
||||
temporaryBasalDb.absoluteRate = tbr.getInsulinRate();
|
||||
temporaryBasalDb.isAbsolute = !tbr.isPercent();
|
||||
|
||||
treatment.setLinkedObject(temporaryBasalDb);
|
||||
|
||||
databaseHelper.createOrUpdate(temporaryBasalDb);
|
||||
|
||||
LOG.debug(operation + " - [date={},pumpId={}, rate={} {}, duration={}]", //
|
||||
temporaryBasalDb.date, //
|
||||
temporaryBasalDb.pumpId, //
|
||||
temporaryBasalDb.isAbsolute ? String.format("%.2f", temporaryBasalDb.absoluteRate) :
|
||||
String.format("%d", temporaryBasalDb.percentRate), //
|
||||
temporaryBasalDb.isAbsolute ? "U/h" : "%", //
|
||||
temporaryBasalDb.durationInMinutes);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private DetailedBolusInfo createTreatment(long date, double amount, long pumpId, Boolean isSmb, Treatment treatment) {
|
||||
DetailedBolusInfo normalBolus = new DetailedBolusInfo();
|
||||
normalBolus.date = date;
|
||||
|
||||
if (treatment != null) {
|
||||
normalBolus.carbs = treatment.carbs;
|
||||
normalBolus.date = treatment.date;
|
||||
}
|
||||
|
||||
normalBolus.source = Source.PUMP;
|
||||
normalBolus.insulin = amount;
|
||||
normalBolus.pumpId = pumpId;
|
||||
normalBolus.isValid = true;
|
||||
normalBolus.isSMB = isSmb == null ? false : isSmb;
|
||||
|
||||
return normalBolus;
|
||||
}
|
||||
|
||||
|
||||
// TODO needs to be implemented
|
||||
public void processTBRs(List<PumpHistoryEntry> treatments) {
|
||||
|
||||
int dateDifference = getOldestDateDifference(treatments);
|
||||
|
||||
// List<Treatment> treatmentsFromHistory = TreatmentsPlugin.getPlugin().getTreatmentsFromHistoryXMinutesAgo(
|
||||
// dateDifference);
|
||||
|
||||
for (PumpHistoryEntry treatment : treatments) {
|
||||
|
||||
LOG.debug("TOE. Treatment: " + treatment);
|
||||
long inLocalTime = tryToGetByLocalTime(treatment.atechDateTime);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// TODO needs to be implemented
|
||||
|
@ -772,9 +734,9 @@ public class MedtronicHistoryData {
|
|||
// LOG.debug("TOE. New Time Of Entry: " + ldt.toString("HH:mm:ss"));
|
||||
|
||||
LOG.debug("tryToGetByLocalTime: [TimeOfEntry={}, ClockPump={}, LocalTime={}, DifferenceSec={}, "
|
||||
+ "NewTimeOfEntry={}, time={}", atechDateTime, pumpTime.pumpTime.toString("HH:mm:ss"),
|
||||
pumpTime.localDeviceTime.toString("HH:mm:ss"), pumpTime.timeDifference, ldt.toString("HH:mm:ss"), ldt
|
||||
.toDate().getTime());
|
||||
+ "NewTimeOfEntry={}, time={}", atechDateTime, pumpTime.pumpTime.toString("HH:mm:ss"),
|
||||
pumpTime.localDeviceTime.toString("HH:mm:ss"), pumpTime.timeDifference, ldt.toString("HH:mm:ss"), ldt
|
||||
.toDate().getTime());
|
||||
|
||||
return ldt.toDate().getTime();
|
||||
}
|
||||
|
@ -783,25 +745,32 @@ public class MedtronicHistoryData {
|
|||
private int getOldestDateDifference(List<PumpHistoryEntry> treatments) {
|
||||
|
||||
long dt = Long.MAX_VALUE;
|
||||
PumpHistoryEntry currentTreatment = null;
|
||||
|
||||
for (PumpHistoryEntry treatment : treatments) {
|
||||
|
||||
if (treatment.atechDateTime < dt) {
|
||||
dt = treatment.atechDateTime;
|
||||
currentTreatment = treatment;
|
||||
}
|
||||
}
|
||||
|
||||
// LOG.debug("Oldest entry: {}, pumpTimeDifference={}", dt, this.pumpTime.timeDifference);
|
||||
|
||||
LocalDateTime oldestEntryTime = DateTimeUtil.toLocalDateTime(dt);
|
||||
oldestEntryTime = oldestEntryTime.minusMinutes(5);
|
||||
LocalDateTime oldestEntryTime = null;
|
||||
|
||||
if (this.pumpTime.timeDifference < 0) {
|
||||
oldestEntryTime = oldestEntryTime.plusSeconds(this.pumpTime.timeDifference);
|
||||
try {
|
||||
|
||||
oldestEntryTime = DateTimeUtil.toLocalDateTime(dt);
|
||||
oldestEntryTime = oldestEntryTime.minusMinutes(5);
|
||||
|
||||
if (this.pumpTime.timeDifference < 0) {
|
||||
oldestEntryTime = oldestEntryTime.plusSeconds(this.pumpTime.timeDifference);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
LOG.error("Problem decoding date from last record: {}" + currentTreatment);
|
||||
}
|
||||
// } else {
|
||||
// d.minusSeconds(this.pumpTime.timeDifference);
|
||||
// }
|
||||
|
||||
|
||||
LocalDateTime now = new LocalDateTime();
|
||||
|
||||
|
@ -809,7 +778,7 @@ public class MedtronicHistoryData {
|
|||
|
||||
// returns oldest time in history, with calculated time difference between pump and phone, minus 5 minutes
|
||||
LOG.debug("Oldest entry: {}, pumpTimeDifference={}, newDt={}, currentTime={}, differenceMin={}", dt,
|
||||
this.pumpTime.timeDifference, oldestEntryTime, now, minutes.getMinutes());
|
||||
this.pumpTime.timeDifference, oldestEntryTime, now, minutes.getMinutes());
|
||||
|
||||
return minutes.getMinutes();
|
||||
|
||||
|
@ -925,7 +894,7 @@ public class MedtronicHistoryData {
|
|||
|
||||
if (newProfile != null) {
|
||||
LOG.debug("processLastBasalProfileChange. item found, setting new basalProfileLocally: " + newProfile);
|
||||
BasalProfile basalProfile = (BasalProfile)newProfile.getDecodedData().get("Object");
|
||||
BasalProfile basalProfile = (BasalProfile) newProfile.getDecodedData().get("Object");
|
||||
mdtPumpStatus.basalsByHour = basalProfile.getProfilesByHour();
|
||||
}
|
||||
|
||||
|
@ -943,7 +912,7 @@ public class MedtronicHistoryData {
|
|||
public boolean hasPumpTimeChanged() {
|
||||
|
||||
return getStateFromFilteredList(PumpHistoryEntryType.NewTimeSet, //
|
||||
PumpHistoryEntryType.ChangeTime);
|
||||
PumpHistoryEntryType.ChangeTime);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ public class DailyTotalsDTO {
|
|||
case DailyTotals522:
|
||||
decodeDailyTotals522(entry.getBody());
|
||||
break;
|
||||
|
||||
case DailyTotals523:
|
||||
decodeDailyTotals523(entry.getBody());
|
||||
break;
|
||||
|
@ -151,7 +152,7 @@ public class DailyTotalsDTO {
|
|||
// Delivery Stats: BOLUS: Food=0.00, Corr=0.00, Manual=4.20
|
||||
// Delivery Stats: NUM BOLUS: Food/Corr=0,Food+Corr=0, Manual=3
|
||||
|
||||
LOG.debug("515: {}", toString());
|
||||
//LOG.debug("515: {}", toString());
|
||||
}
|
||||
|
||||
|
||||
|
@ -205,7 +206,7 @@ public class DailyTotalsDTO {
|
|||
// Delivery Stats: #Corr_only=0,Food+Corr=0.000, #Food+Corr=0
|
||||
// Delivery Stats: Manual = 0.95, #Manual=5
|
||||
|
||||
LOG.debug("523: {}", toString());
|
||||
//LOG.debug("523: {}", toString());
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ import info.nightscout.androidaps.Constants;
|
|||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.data.Iob;
|
||||
import info.nightscout.androidaps.db.DbObjectBase;
|
||||
import info.nightscout.androidaps.db.Source;
|
||||
import info.nightscout.androidaps.interfaces.InsulinInterface;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
|
@ -27,7 +28,7 @@ import info.nightscout.androidaps.utils.DecimalFormatter;
|
|||
import info.nightscout.androidaps.utils.JsonHelper;
|
||||
|
||||
@DatabaseTable(tableName = Treatment.TABLE_TREATMENTS)
|
||||
public class Treatment implements DataPointWithLabelInterface {
|
||||
public class Treatment implements DataPointWithLabelInterface, DbObjectBase {
|
||||
public static final String TABLE_TREATMENTS = "Treatments";
|
||||
|
||||
@DatabaseField(id = true)
|
||||
|
@ -266,4 +267,14 @@ public class Treatment implements DataPointWithLabelInterface {
|
|||
InsulinInterface insulinInterface = ConfigBuilderPlugin.getPlugin().getActiveInsulin();
|
||||
return insulinInterface.iobCalcForTreatment(this, time, dia);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDate() {
|
||||
return this.date;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getPumpId() {
|
||||
return this.pumpId;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue