use of com.eveningoutpost.dexdrip.Models.Calibration in project xDrip-plus by jamorham.
the class ListenerService method getCalibrations.
public static DataMap getCalibrations(long startTime) {
Calibration last = Calibration.last();
if (last != null) {
Log.d(TAG, "getCalibrations last.timestamp:" + JoH.dateTimeText(last.timestamp));
}
List<Calibration> graph = Calibration.latestForGraph(60, startTime, Long.MAX_VALUE);
// calibrations = Calibration.latestForGraph(numValues, start - (3 * Constants.DAY_IN_MS), end);
if (!graph.isEmpty()) {
Log.d(TAG, "getCalibrations graph size=" + graph.size());
final ArrayList<DataMap> dataMaps = new ArrayList<>(graph.size());
DataMap entries = null;
// if (last.slope_confidence != 0) entries = dataMapForWatchface(last);
for (Calibration data : graph) {
if (data.slope_confidence != 0) {
if (entries == null) {
entries = dataMapForWatchface(data);
dataMaps.add(dataMapForWatchface(data));
} else
dataMaps.add(dataMapForWatchface(data));
}
}
if (entries != null) {
entries.putDataMapArrayList("entries", dataMaps);
Log.d(TAG, "getCalibrations entries=" + entries);
}
return entries;
} else
return null;
}
use of com.eveningoutpost.dexdrip.Models.Calibration in project xDrip-plus by jamorham.
the class ListenerService method syncCalibrationData.
private synchronized void syncCalibrationData(DataMap dataMap, Context context) {
// KS
Log.d(TAG, "syncCalibrationData");
boolean changed = false;
ArrayList<DataMap> entries = dataMap.getDataMapArrayList("entries");
if (entries != null) {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new DateTypeAdapter()).serializeSpecialFloatingPointValues().create();
Log.d(TAG, "syncCalibrationData add Calibration Table entries count=" + entries.size());
// ensure database has already been initialized
Sensor.InitDb(context);
Sensor sensor = Sensor.currentSensor();
if (sensor != null) {
for (DataMap entry : entries) {
if (entry != null) {
String bgrecord = entry.getString("bgs");
if (bgrecord != null) {
Calibration bgData = gson.fromJson(bgrecord, Calibration.class);
Calibration exists = Calibration.findByUuid(bgData.uuid);
bgData.sensor = sensor;
if (exists != null) {
Log.d(TAG, "syncCalibrationData Calibration exists for uuid=" + bgData.uuid + " bg=" + bgData.bg + " timestamp=" + bgData.timestamp + " timeString=" + JoH.dateTimeText(bgData.timestamp));
if (exists.slope != bgData.slope || exists.slope_confidence != bgData.slope_confidence || exists.timestamp != bgData.timestamp || exists.bg != bgData.bg) {
// slope* indicates if shown on graph
changed = true;
}
exists.adjusted_raw_value = bgData.adjusted_raw_value;
exists.bg = bgData.bg;
exists.check_in = bgData.check_in;
exists.distance_from_estimate = bgData.distance_from_estimate;
exists.estimate_bg_at_time_of_calibration = bgData.estimate_bg_at_time_of_calibration;
exists.estimate_raw_at_time_of_calibration = bgData.estimate_raw_at_time_of_calibration;
exists.first_decay = bgData.first_decay;
exists.first_intercept = bgData.first_intercept;
exists.first_scale = bgData.first_scale;
exists.first_slope = bgData.first_slope;
exists.intercept = bgData.intercept;
exists.possible_bad = bgData.possible_bad;
exists.raw_timestamp = bgData.raw_timestamp;
exists.raw_value = bgData.raw_value;
exists.second_decay = bgData.second_decay;
exists.second_intercept = bgData.second_intercept;
exists.second_scale = bgData.second_scale;
exists.second_slope = bgData.second_slope;
exists.sensor = sensor;
exists.sensor_age_at_time_of_estimation = bgData.sensor_age_at_time_of_estimation;
exists.sensor_confidence = bgData.sensor_confidence;
exists.sensor_uuid = bgData.sensor_uuid;
exists.slope = bgData.slope;
exists.slope_confidence = bgData.slope_confidence;
exists.timestamp = bgData.timestamp;
exists.save();
} else {
changed = true;
bgData.save();
// final boolean adjustPast = mPrefs.getBoolean("rewrite_history", true);
Log.d(TAG, "syncCalibrationData Calibration does not exist for uuid=" + bgData.uuid + " timestamp=" + bgData.timestamp + " timeString=" + JoH.dateTimeText(bgData.timestamp));
// Calibration.adjustRecentBgReadings(adjustPast ? 30 : 2);
}
exists = Calibration.findByUuid(bgData.uuid);
if (exists != null)
Log.d(TAG, "syncCalibrationData Calibration GSON saved BG: " + exists.toS());
else
Log.d(TAG, "syncCalibrationData Calibration GSON NOT saved");
}
}
}
} else {
Log.d(TAG, "syncCalibrationData No Active Sensor!! Request WEARABLE_INITDB_PATH");
sendData(WEARABLE_INITDB_PATH, null);
}
if (changed) {
showTreatments(context, "cals");
}
}
}
use of com.eveningoutpost.dexdrip.Models.Calibration in project xDrip-plus by jamorham.
the class ListenerService method syncBgData.
private synchronized void syncBgData(DataMap dataMap, Context context) {
// KS
Log.d(TAG, "syncBGData");
boolean changed = false;
int battery = dataMap.getInt("battery");
ArrayList<DataMap> entries = dataMap.getDataMapArrayList("entries");
Log.d(TAG, "syncBGData add BgReading Table battery=" + battery);
if (entries != null) {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new DateTypeAdapter()).serializeSpecialFloatingPointValues().create();
Log.d(TAG, "syncBGData add BgReading Table entries count=" + entries.size());
// ensure database has already been initialized
Sensor.InitDb(context);
Sensor sensor = Sensor.currentSensor();
if (sensor != null) {
for (DataMap entry : entries) {
if (entry != null) {
String bgrecord = entry.getString("bgs");
if (bgrecord != null) {
BgReading bgData = gson.fromJson(bgrecord, BgReading.class);
/* // TODO this is a hack to use display glucose but it is incomplete regarding delta
if (bgData.dg_mgdl > 0) {
bgData.calculated_value = bgData.dg_mgdl;
bgData.calculated_value_slope = bgData.dg_slope;
// TODO delta missing???
}
*/
BgReading exists = BgReading.getForTimestampExists(bgData.timestamp);
exists = exists != null ? exists : BgReading.findByUuid(bgData.uuid);
String calibrationUuid = entry.getString("calibrationUuid");
if (exists != null) {
Log.d(TAG, "syncBGData BG already exists for uuid=" + bgData.uuid + " timestamp=" + bgData.timestamp + " timeString=" + JoH.dateTimeText(bgData.timestamp));
Log.d(TAG, "syncBGData exists timeString=" + JoH.dateTimeText(exists.timestamp) + " exists.calibration.uuid=" + exists.calibration.uuid + " exists=" + exists.toS());
exists.filtered_calculated_value = bgData.filtered_calculated_value;
exists.calculated_value = bgData.calculated_value;
exists.hide_slope = bgData.hide_slope;
exists.filtered_data = bgData.filtered_data;
exists.raw_data = bgData.raw_data;
exists.raw_calculated = bgData.raw_calculated;
exists.calculated_value_slope = bgData.calculated_value_slope;
exists.age_adjusted_raw_value = bgData.age_adjusted_raw_value;
exists.calibration_flag = bgData.calibration_flag;
exists.ignoreForStats = bgData.ignoreForStats;
exists.time_since_sensor_started = bgData.time_since_sensor_started;
exists.ra = bgData.ra;
exists.rb = bgData.rb;
exists.rc = bgData.rc;
exists.a = bgData.a;
exists.b = bgData.b;
exists.c = bgData.c;
exists.noise = bgData.noise;
exists.time_since_sensor_started = bgData.time_since_sensor_started;
Calibration calibration = Calibration.byuuid(calibrationUuid);
calibration = calibration != null ? calibration : Calibration.byuuid(exists.calibration_uuid);
if (calibration != null) {
exists.calibration = calibration;
exists.calibration_uuid = calibration.uuid;
exists.sensor = sensor;
exists.sensor_uuid = sensor.uuid;
if (exists.calculated_value != bgData.calculated_value) {
changed = true;
}
exists.save();
} else {
Log.e(TAG, "syncBGData existing BgReading calibrationUuid not found by byuuid; calibrationUuid=" + calibrationUuid + " bgData.calibration_uuid=" + bgData.calibration_uuid + " bgData.uuid=" + bgData.uuid + " timeString=" + JoH.dateTimeText(bgData.timestamp));
}
} else {
Calibration calibration = Calibration.byuuid(calibrationUuid);
calibration = calibration != null ? calibration : Calibration.byuuid(bgData.calibration_uuid);
if (calibration != null) {
Log.d(TAG, "syncBGData add BG; does NOT exist for uuid=" + bgData.uuid + " timestamp=" + bgData.timestamp + " timeString=" + JoH.dateTimeText(bgData.timestamp));
bgData.calibration = calibration;
bgData.calibration_uuid = calibration.uuid;
bgData.sensor = sensor;
bgData.sensor_uuid = sensor.uuid;
changed = true;
bgData.save();
} else {
Log.e(TAG, "syncBGData new BgReading calibrationUuid not found by byuuid; calibrationUuid=" + calibrationUuid + " bgData.calibration_uuid=" + bgData.calibration_uuid + " bgData.uuid=" + bgData.uuid + " timeString=" + JoH.dateTimeText(bgData.timestamp));
}
}
}
}
}
} else {
Log.d(TAG, "syncBGData No Active Sensor!! Request WEARABLE_INITDB_PATH");
sendData(WEARABLE_INITDB_PATH, null);
}
}
if (changed) {
// otherwise, wait for doBackground ACTION_RESEND
Log.d(TAG, "syncBGData BG data has changed, refresh watchface, phone battery=" + battery);
resendData(getApplicationContext(), battery);
CustomComplicationProviderService.refresh();
} else
Log.d(TAG, "syncBGData BG data has NOT changed, do not refresh watchface, phone battery=" + battery);
}
use of com.eveningoutpost.dexdrip.Models.Calibration in project xDrip by NightscoutFoundation.
the class BluetoothGlucoseMeter method evaluateLastRecords.
// decide what to do with newest data
private synchronized void evaluateLastRecords() {
if (lastBloodTest != null) {
GcmActivity.syncBloodTests();
final boolean delay_calibration = true;
final GlucoseReadingRx lastGlucoseRecord = lastBloodTest.glucoseReadingRx;
if ((lastGlucoseRecord != null) && (lastGlucoseRecord.device != null) && (ct != null)) {
final String sequence_id = "last-btm-sequence-" + lastGlucoseRecord.device;
final String timestamp_id = "last-btm-timestamp" + lastGlucoseRecord.device;
// sequence numbers start from 0 so we add 1
if ((lastGlucoseRecord.sequence + 1) > PersistentStore.getLong(sequence_id)) {
PersistentStore.setLong(sequence_id, lastGlucoseRecord.sequence + 1);
// get adjusted timestamp
if (lastBloodTest.timestamp > PersistentStore.getLong(timestamp_id)) {
PersistentStore.setLong(timestamp_id, lastBloodTest.timestamp);
Log.d(TAG, "evaluateLastRecords: appears to be a new record: sequence:" + lastGlucoseRecord.sequence);
if (Pref.getBooleanDefaultFalse("bluetooth_meter_for_calibrations") || Pref.getBooleanDefaultFalse("bluetooth_meter_for_calibrations_auto")) {
final long time_since = JoH.msSince(lastBloodTest.timestamp);
if (time_since >= 0) {
if (time_since < (12 * Constants.HOUR_IN_MS)) {
final Calibration calibration = Calibration.lastValid();
// check must also be younger than most recent calibration
if ((calibration == null) || (lastBloodTest.timestamp > calibration.timestamp)) {
UserError.Log.ueh(TAG, "Prompting for calibration for: " + BgGraphBuilder.unitized_string_with_units_static(lastBloodTest.mgdl) + " from: " + JoH.dateTimeText(lastBloodTest.timestamp));
Home.startHomeWithExtra(getApplicationContext(), Home.HOME_FULL_WAKEUP, "1");
JoH.runOnUiThreadDelayed(new Runnable() {
@Override
public void run() {
Home.staticRefreshBGCharts();
if ((Pref.getBooleanDefaultFalse("bluetooth_meter_for_calibrations_auto") && isSlopeFlatEnough())) {
Log.d(TAG, "Slope flat enough for auto calibration");
if (!delay_calibration) {
Home.startHomeWithExtra(xdrip.getAppContext(), Home.BLUETOOTH_METER_CALIBRATION, BgGraphBuilder.unitized_string_static(lastBloodTest.mgdl), Long.toString(time_since), "auto");
} else {
Log.d(TAG, "Delaying calibration for later");
JoH.static_toast_long("Waiting for 15 minutes more sensor data for calibration");
}
} else {
if (Pref.getBooleanDefaultFalse("bluetooth_meter_for_calibrations")) {
// manual calibration
Home.startHomeWithExtra(xdrip.getAppContext(), Home.BLUETOOTH_METER_CALIBRATION, BgGraphBuilder.unitized_string_static(lastBloodTest.mgdl), Long.toString(time_since), "manual");
} else {
Log.d(TAG, "Not flat enough slope for auto calibration and manual calibration not enabled");
}
}
}
}, 500);
} else {
UserError.Log.e(TAG, "evaluateLastRecords: meter reading is at least as old as last calibration - ignoring");
}
} else {
UserError.Log.e(TAG, "evaluateLastRecords: meter reading is too far in the past: " + JoH.dateTimeText(lastBloodTest.timestamp));
}
} else {
UserError.Log.e(TAG, "evaluateLastRecords: time is in the future - ignoring");
}
}
}
} else {
UserError.Log.d(TAG, "evaluateLastRecords: sequence isn't newer");
}
} else {
UserError.Log.e(TAG, "evaluateLastRecords: Data missing for evaluation");
}
} else {
UserError.Log.e(TAG, "evaluateLastRecords: lastBloodTest is Null!!");
}
}
use of com.eveningoutpost.dexdrip.Models.Calibration in project xDrip by NightscoutFoundation.
the class ListenerService method syncBgData.
private synchronized void syncBgData(DataMap dataMap, Context context) {
// KS
Log.d(TAG, "syncBGData");
boolean changed = false;
int battery = dataMap.getInt("battery");
ArrayList<DataMap> entries = dataMap.getDataMapArrayList("entries");
Log.d(TAG, "syncBGData add BgReading Table battery=" + battery);
if (entries != null) {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new DateTypeAdapter()).serializeSpecialFloatingPointValues().create();
Log.d(TAG, "syncBGData add BgReading Table entries count=" + entries.size());
// ensure database has already been initialized
Sensor.InitDb(context);
Sensor sensor = Sensor.currentSensor();
if (sensor != null) {
for (DataMap entry : entries) {
if (entry != null) {
String bgrecord = entry.getString("bgs");
if (bgrecord != null) {
BgReading bgData = gson.fromJson(bgrecord, BgReading.class);
/* // TODO this is a hack to use display glucose but it is incomplete regarding delta
if (bgData.dg_mgdl > 0) {
bgData.calculated_value = bgData.dg_mgdl;
bgData.calculated_value_slope = bgData.dg_slope;
// TODO delta missing???
}
*/
BgReading exists = BgReading.getForTimestampExists(bgData.timestamp);
exists = exists != null ? exists : BgReading.findByUuid(bgData.uuid);
String calibrationUuid = entry.getString("calibrationUuid");
if (exists != null) {
Log.d(TAG, "syncBGData BG already exists for uuid=" + bgData.uuid + " timestamp=" + bgData.timestamp + " timeString=" + JoH.dateTimeText(bgData.timestamp));
Log.d(TAG, "syncBGData exists timeString=" + JoH.dateTimeText(exists.timestamp) + " exists.calibration.uuid=" + exists.calibration.uuid + " exists=" + exists.toS());
exists.filtered_calculated_value = bgData.filtered_calculated_value;
exists.calculated_value = bgData.calculated_value;
exists.hide_slope = bgData.hide_slope;
exists.filtered_data = bgData.filtered_data;
exists.raw_data = bgData.raw_data;
exists.raw_calculated = bgData.raw_calculated;
exists.calculated_value_slope = bgData.calculated_value_slope;
exists.age_adjusted_raw_value = bgData.age_adjusted_raw_value;
exists.calibration_flag = bgData.calibration_flag;
exists.ignoreForStats = bgData.ignoreForStats;
exists.time_since_sensor_started = bgData.time_since_sensor_started;
exists.ra = bgData.ra;
exists.rb = bgData.rb;
exists.rc = bgData.rc;
exists.a = bgData.a;
exists.b = bgData.b;
exists.c = bgData.c;
exists.noise = bgData.noise;
exists.time_since_sensor_started = bgData.time_since_sensor_started;
Calibration calibration = Calibration.byuuid(calibrationUuid);
calibration = calibration != null ? calibration : Calibration.byuuid(exists.calibration_uuid);
if (calibration != null) {
exists.calibration = calibration;
exists.calibration_uuid = calibration.uuid;
exists.sensor = sensor;
exists.sensor_uuid = sensor.uuid;
if (exists.calculated_value != bgData.calculated_value) {
changed = true;
}
exists.save();
} else {
Log.e(TAG, "syncBGData existing BgReading calibrationUuid not found by byuuid; calibrationUuid=" + calibrationUuid + " bgData.calibration_uuid=" + bgData.calibration_uuid + " bgData.uuid=" + bgData.uuid + " timeString=" + JoH.dateTimeText(bgData.timestamp));
}
} else {
Calibration calibration = Calibration.byuuid(calibrationUuid);
calibration = calibration != null ? calibration : Calibration.byuuid(bgData.calibration_uuid);
if (calibration != null) {
Log.d(TAG, "syncBGData add BG; does NOT exist for uuid=" + bgData.uuid + " timestamp=" + bgData.timestamp + " timeString=" + JoH.dateTimeText(bgData.timestamp));
bgData.calibration = calibration;
bgData.calibration_uuid = calibration.uuid;
bgData.sensor = sensor;
bgData.sensor_uuid = sensor.uuid;
changed = true;
bgData.save();
} else {
Log.e(TAG, "syncBGData new BgReading calibrationUuid not found by byuuid; calibrationUuid=" + calibrationUuid + " bgData.calibration_uuid=" + bgData.calibration_uuid + " bgData.uuid=" + bgData.uuid + " timeString=" + JoH.dateTimeText(bgData.timestamp));
}
}
}
}
}
} else {
Log.d(TAG, "syncBGData No Active Sensor!! Request WEARABLE_INITDB_PATH");
sendData(WEARABLE_INITDB_PATH, null);
}
}
if (changed) {
// otherwise, wait for doBackground ACTION_RESEND
Log.d(TAG, "syncBGData BG data has changed, refresh watchface, phone battery=" + battery);
resendData(getApplicationContext(), battery);
CustomComplicationProviderService.refresh();
} else
Log.d(TAG, "syncBGData BG data has NOT changed, do not refresh watchface, phone battery=" + battery);
}
Aggregations