Merge pull request #855 from TebbeUbben/automatic-careportal-events

Automatic careportal events
This commit is contained in:
Milos Kozak 2018-04-09 00:35:23 +02:00 committed by GitHub
commit 0f0d68e46a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 180 additions and 12 deletions

View file

@ -346,7 +346,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
try {
getDaoBgReadings().update(bgReading);
} catch (SQLException e) {
e.printStackTrace();
log.error("Unhandled exception", e);
}
}
@ -1201,6 +1201,15 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
scheduleCareportalEventChange();
}
public CareportalEvent getCareportalEventFromTimestamp(long timestamp) {
try {
return getDaoCareportalEvents().queryForId(timestamp);
} catch (SQLException e) {
log.error("Unhandled exception", e);
}
return null;
}
@Nullable
public CareportalEvent getLastCareportalEvent(String event) {
try {

View file

@ -1,22 +1,25 @@
package info.nightscout.androidaps.plugins.PumpInsight.history;
import android.content.Intent;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.db.TDD;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP;
import org.json.JSONException;
import org.json.JSONObject;
import sugar.free.sightparser.handling.HistoryBroadcast;
import java.util.Date;
import android.database.DatabaseUtils;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.db.DatabaseHelper;
import info.nightscout.androidaps.db.TDD;
import sugar.free.sightparser.handling.HistoryBroadcast;
import static info.nightscout.androidaps.plugins.PumpInsight.history.PumpIdCache.updatePumpSerialNumber;
/**
* Created by jamorham on 27/01/2018.
*
* <p>
* Parse inbound logbook intents
*
*/
class HistoryIntentAdapter {
@ -121,4 +124,80 @@ class HistoryIntentAdapter {
TDD tdd = new TDD(date.getTime(), bolus, basal, bolus + basal);
MainApp.getDbHelper().createOrUpdateTDD(tdd);
}
void processCannulaFilledIntent(Intent intent) {
Date date = getDateExtra(intent, HistoryBroadcast.EXTRA_EVENT_TIME);
uploadCareportalEvent(date, CareportalEvent.SITECHANGE);
}
void processCartridgeInsertedIntent(Intent intent) {
Date date = getDateExtra(intent, HistoryBroadcast.EXTRA_EVENT_TIME);
uploadCareportalEvent(date, CareportalEvent.INSULINCHANGE);
}
void processBatteryInsertedIntent(Intent intent) {
Date date = getDateExtra(intent, HistoryBroadcast.EXTRA_EVENT_TIME);
uploadCareportalEvent(date, CareportalEvent.PUMPBATTERYCHANGE);
}
private void uploadCareportalEvent(Date date, String event) {
if (SP.getBoolean("insight_automatic_careportal_events", false)) {
if (MainApp.getDbHelper().getCareportalEventFromTimestamp(date.getTime()) != null) return;
try {
JSONObject data = new JSONObject();
String enteredBy = SP.getString("careportal_enteredby", "");
if (!enteredBy.equals("")) data.put("enteredBy", enteredBy);
data.put("created_at", DateUtil.toISOString(date));
data.put("eventType", event);
NSUpload.uploadCareportalEntryToNS(data);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
void processOccurenceOfAlertIntent(Intent intent) {
if (SP.getBoolean("insight_automatic_careportal_events", false)) {
Date date = getDateExtra(intent, HistoryBroadcast.EXTRA_EVENT_TIME);
String alertType = intent.getStringExtra(HistoryBroadcast.EXTRA_ALERT_TYPE);
if (MainApp.getDbHelper().getCareportalEventFromTimestamp(date.getTime()) != null) return;
try {
JSONObject data = new JSONObject();
String enteredBy = SP.getString("careportal_enteredby", "");
if (!enteredBy.equals("")) data.put("enteredBy", enteredBy);
data.put("created_at", DateUtil.toISOString(date));
data.put("eventType", CareportalEvent.NOTE);
data.put("notes", MainApp.instance().getString(getAlertText(alertType)));
NSUpload.uploadCareportalEntryToNS(data);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
private int getAlertText(String type) {
if (type.equals("Error6MechanicalError")) return R.string.alert_e6;
if (type.equals("Error7ElectronicError")) return R.string.alert_e7;
if (type.equals("Error10RewindError")) return R.string.alert_e10;
if (type.equals("Error13LanguageError")) return R.string.alert_e13;
if (type.equals("Maintenance20CartridgeNotInserted")) return R.string.alert_m20;
if (type.equals("Maintenance21CartridgeEmpty")) return R.string.alert_m21;
if (type.equals("Maintenance22BatteryEmpty")) return R.string.alert_m22;
if (type.equals("Maintenance23AutomaticOff")) return R.string.alert_m23;
if (type.equals("Maintenance24Occlusion")) return R.string.alert_m24;
if (type.equals("Maintenance25LoantimeOver")) return R.string.alert_m25;
if (type.equals("Maintenance26CartridgeChangeNotCompleted")) return R.string.alert_m26;
if (type.equals("Maintenance27DataDownloadFailed")) return R.string.alert_m27;
if (type.equals("Maintenance28PauseModeTimeout")) return R.string.alert_m28;
if (type.equals("Maintenance29BatteryTypeNotSet")) return R.string.alert_m29;
if (type.equals("Maintenance30CartridgeTypeNotSet")) return R.string.alert_m30;
if (type.equals("Warning31CartridgeLow")) return R.string.alert_w31;
if (type.equals("Warning32BatteryLow")) return R.string.alert_w32;
if (type.equals("Warning33InvalidDateTime")) return R.string.alert_w33;
if (type.equals("Warning34EndOfWarranty")) return R.string.alert_w34;
if (type.equals("Warning36TBRCancelled")) return R.string.alert_w36;
if (type.equals("Warning38BolusCancelled")) return R.string.alert_w38;
if (type.equals("Warning39LoantimeWarning")) return R.string.alert_w39;
return 0;
}
}

View file

@ -43,6 +43,10 @@ public class HistoryReceiver {
filter.addAction(ACTION_SYNC_STARTED);
filter.addAction(ACTION_STILL_SYNCING);
filter.addAction(ACTION_SYNC_FINISHED);
filter.addAction(ACTION_CANNULA_FILLED);
filter.addAction(ACTION_CARTRIDGE_INSERTED);
filter.addAction(ACTION_BATTERY_INSERTED);
filter.addAction(ACTION_OCCURENCE_OF_ALERT);
MainApp.instance().registerReceiver(historyReceiver, filter);
}
@ -74,7 +78,6 @@ public class HistoryReceiver {
}
switch (action) {
case ACTION_SYNC_STARTED:
status = SYNCING;
break;
@ -93,6 +96,18 @@ public class HistoryReceiver {
case ACTION_DAILY_TOTAL:
intentAdapter.processDailyTotalIntent(intent);
break;
case ACTION_CANNULA_FILLED:
intentAdapter.processCannulaFilledIntent(intent);
break;
case ACTION_CARTRIDGE_INSERTED:
intentAdapter.processCartridgeInsertedIntent(intent);
break;
case ACTION_BATTERY_INSERTED:
intentAdapter.processBatteryInsertedIntent(intent);
break;
case ACTION_OCCURENCE_OF_ALERT:
intentAdapter.processOccurenceOfAlertIntent(intent);
break;
}
}
};

View file

@ -406,6 +406,10 @@ public class NSUpload {
}
public static void uploadError(String error) {
uploadError(error, new Date());
}
public static void uploadError(String error, Date date) {
Context context = MainApp.instance().getApplicationContext();
Bundle bundle = new Bundle();
bundle.putString("action", "dbAdd");
@ -413,7 +417,7 @@ public class NSUpload {
JSONObject data = new JSONObject();
try {
data.put("eventType", "Announcement");
data.put("created_at", DateUtil.toISOString(new Date()));
data.put("created_at", DateUtil.toISOString(date));
data.put("enteredBy", SP.getString("careportal_enteredby", MainApp.gs(R.string.app_name)));
data.put("notes", error);
data.put("isAnnouncement", true);

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="alert_w31">Warnung W31: Ampulle fast leer</string>
<string name="alert_w32">Warnung W32: Batterie fast leer</string>
<string name="alert_w33">Warnung W33: Zeit/Datum ungültig</string>
<string name="alert_w34">Warnung W34: Garantie abgelaufen</string>
<string name="alert_w36">Warnung W36: TBR abgebrochen</string>
<string name="alert_w38">Warnung W38: Bolus abgebrochen</string>
<string name="alert_w39">Warnung W39: Leihdauer-Warnung</string>
<string name="alert_m20">Wartung M20: Keine Ampulle eingesetzt</string>
<string name="alert_m21">Wartung M21: Ampulle leer</string>
<string name="alert_m22">Wartung M22: Batterie leer</string>
<string name="alert_m23">Wartung M23: Sicherheitsabschaltung</string>
<string name="alert_m24">Wartung M24: Verstopfung</string>
<string name="alert_m25">Wartung M25: Leihdauer abgelaufen</string>
<string name="alert_m26">Wartung M26: Ampullenwechsel nicht abgeschlossen</string>
<string name="alert_m27">Wartung M27: Datenübertragung fehlgeschlagen</string>
<string name="alert_m28">Wartung M28: Zeitüberschreitung bei Pause</string>
<string name="alert_m29">Wartung M29: Batterietyp nicht eingestellt</string>
<string name="alert_m30">Wartung M30: Ampullentyp nicht eingestellt</string>
<string name="alert_e6">Fehler E6: Mechanikfehler</string>
<string name="alert_e7">Fehler E7: Elektronikfehler</string>
<string name="alert_e10">Fehler E10: Fehler beim Zurückfahren</string>
<string name="alert_e13">Fehler E13: Fehler in der Sprachanzeige</string>
</resources>

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="alert_w31">Warning W31: Cartridge low</string>
<string name="alert_w32">Warning W32: Battery low</string>
<string name="alert_w33">Warning W33: Invalid time/date</string>
<string name="alert_w34">Warning W34: End of warranty</string>
<string name="alert_w36">Warning W36: TBR cancelled</string>
<string name="alert_w38">Warning W38: Bolus canelled</string>
<string name="alert_w39">Warning W39: Loantime warning</string>
<string name="alert_m20">Maintenance M20: Cartridge not inserted</string>
<string name="alert_m21">Maintenance M21: Cartridge empty</string>
<string name="alert_m22">Maintenance M22: Battery empty</string>
<string name="alert_m23">Maintenance M23: Automatic off</string>
<string name="alert_m24">Maintenance M24: Occlusion</string>
<string name="alert_m25">Maintenance M25: Loantime over - end of operation</string>
<string name="alert_m26">Maintenance M26: Cartridge change not completed</string>
<string name="alert_m27">Maintenance M27: Data download failed</string>
<string name="alert_m28">Maintenance M28: Pause mode timeout</string>
<string name="alert_m29">Maintenance M29: Battery type not set</string>
<string name="alert_m30">Maintenance M30: Cartridge type not set</string>
<string name="alert_e6">Error E6: Mechanical error</string>
<string name="alert_e7">Error E7: Electronic error</string>
<string name="alert_e10">Error E10: Rewind error</string>
<string name="alert_e13">Error E13: Language error</string>
</resources>

View file

@ -989,6 +989,8 @@
<string name="iobcobcalculator" translatable="false">IobCobCalculator</string>
<string name="waitingfortimesynchronization">Waiting for time synchronization (%d sec)</string>
<string name="loopdisconnectedfor">Disconnected (%d m)</string>
<string name="automatic_careportal_events">Automatic careportal events</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">Automatically upload insulin, cannula and battery changes and pump alarms to Nightscout</string>
<string name="key_openapssmb_max_iob" translatable="false">openapsmb_max_iob</string>
<string name="openapssmb_maxiob_title">Maximum total IOB OpenAPS can\'t go over [U]</string>
<string name="openapssmb_maxiob_summary">This value is called Max IOB in OpenAPS context\nOpenAPS will not add more insulin if current IOB is greater than this value</string>

View file

@ -19,4 +19,9 @@
android:key="insight_real_tbr_cancel"
android:title="@string/insight_use_real_tbr_cancels"
android:summary="@string/insight_actually_cancel_tbr_summary"/>
</PreferenceScreen >
<SwitchPreference
android:defaultValue="false"
android:key="insight_automatic_careportal_events"
android:title="@string/automatic_careportal_events"
android:summary="@string/automatically_upload_insulin_cannula_and_battery_changes_to_nightscout"/>
</PreferenceScreen>