HowTo: Daten aus Libre2 auslesen

  • Da es vielleicht nicht nur für lyca von Interesse ist, mache ich hier mal einen Thread auf, in dem ich ein paar Tricks sammle, was man alles mit dem Libre2 und seinen Daten anstellen kann - und was noch nicht. (Evtl. kommt auch noch etwas veraltetes Zeug vom Libre1 dazu.)

    Bitte fasst euch noch etwas in Geduld... ich bereite mal was vor :foehn




    RIchtig los geht es nach den ersten Begeisterungsstürmen bei Nummer 5.

    Einmal editiert, zuletzt von Steve8x8 ()

  • Na, ob ich mit soviel Erwartungshaltung klarkomme? Das soll keine Vorlesung werden,

    nur ein bisschen Zeigen, was momentan mit dem Libre 2 schon geht - und auf das, was noch nicht geht, kann ich später vielleicht auch noch eingehen, vielleicht geht

    davon ja inzwischen auch noch was ;)

    Mit- und selbermachen ist ausdrücklich erwünscht! Sucht euch lieber einen Tisch zum Arbeiten, statt im Sessel zu versinken. Dass bei den Codezeilen Groß- und Kleinschreibung eine Rolle spielt, muss ich nicht erwähnen, hoffe ich. (Falls doch, ist das hiermit passiert.:nummer1: Nutzt copy&paste.)



    Fangen wir einfach mal an.


    (Dass ich die gepatchte LL-App auf einem gerooteten Handy verwende und xDrip hinten dranhängt, spielt für die folgenden Dinge keine Rolle!)



    Voraussetzungen:


    - ein Rechner mit einem "ausreichend unixoiden" Betriebssystem und Java Runtime

    (ideal: Linux; eingeschränkt: MacOS; ungetestet: Windows "Linux Subsystem")

    Bei mir ist es momentan ein MacBook (macOS: El Capitan) mit einer Debian-Buster-VM unter VirtualBox.

    - etwas Erfahrung mit der Arbeitsweise von Linux/Unix, speziell der Kommandozeile ("Shell", i.d.R. bash)

    - ein USB-Kabel zum Anschluss des Smartphones an diesen Rechner

    Ich habe vor ein paar Wochen auf magnetisch umgestellt, das entlastet die Buchse am Handy.

    - Software: adb (Android Platform Tools), abe.jar (Android Backup Extractor),

    abe.sh (abe.sh.txt Wrapper-Script für abe.jar, nach abe.sh umbenennen), sqlite3; optional ruby, curl für NS-Upload

    Das Wrapper-Script habe ich von Tino Kossmann (das ist der mit der Patchanleitung) gemopst und angepasst (der hat es auch von irgendwo).

    Alle wichtigen Dinge sollten irgendwo im $PATH stehen, ausführbar sein, ...

    - Ein paar eher elementare Dinge müssen mit dem Smartphone angestellt werden.

    Anleitungen dafür finden sich zuhauf im Netz, ich empfehle xda-developers.com


    Bitte haltet euch an die 15-Minuten-Regel: Weniger als 15 Minuten selbst nach einer Antwort auf Fragen zu suchen, verschwendet die Zeit des Gefragten - länger zu suchen, die des Fragenden. ;)


    Hintergrundinformationen:


    - LibreLink legt intern zwei (SQlite-)Datenbanken an:

    apollo.db (mit "interaktiven" Daten) und

    sas.db (mit den Sensordaten).

    - Diese Daten stehen in der /data-Partition des Smartphones und sind normalerweise

    nicht erreichbar.

    - Hier und hier findet man aber, wie man ohne Root trotzdem drankommt: über Androids "Backup"-Funktionalität.

    - Voraussetzung dafür ist ein erlaubter Zugriff mit adb.

    Dazu müssen die Entwickleroptionen freigeschaltet werden, und adb muss explizit erlaubt werden. (left as an exercise to the reader)

    - Jetzt kommt das Kabel dran.

    Beim ersten Zugriff vom Rechner aus muss auf dem Smartphone außerdem noch USB-Datenübertragung erlaubt und der Zugriffschlüssel des PCs akzeptiert werden.



    Jetzt geht es wirklich los:


    - Ob das soweit funktioniert, testet man am besten mit

    Code
    adb devices
    adb shell ls

    - Wenn das funktioniert, steht dem eigentlichen Backup nichts mehr im Weg:

    Code
    adb backup -noapk -f librelink.ab com.freestylelibre.app.de


    legt im aktuellen Verzeichnis eine Datei librelink.ab an. Dabei sollte die LL-App geöffnet (im Vordergrund) sein (!!!)

    Auf dem Smartphone erscheint eine Seite, auf der man ein Passwort für das Backup eintragen kann. Das bitte nicht tun, einfach nur auf "Backup" rechts unten klicken.

    Wichtig: Hinterher sollte die App noch aktiv sein - sonst umgehend neu starten!!!



    Und nun?


    - Android Backup-Dateien sind etwas kompliziert aufgebaut.

    Man kann sie theoretisch "zu Fuß" auspacken, der Backup Extractor ist meiner Meinung nach dafür besser geeignet.

    Code
    abe.sh unpack librelink.ab librelink.tar ""
    tar xf librelink.tar

    - Voila! Unter apps/com.freestylelibre.app.de finden wir nun die App-Daten von LL.

    Insbesondere interessieren wir uns für die beiden Datenbankdateien,

    apps/com.freestylelibre.app.de/f/apollo.db und

    apps/com.freestylelibre.app.de/f/sas.db

    und schauen mal rein (jeweils eine Zeile):

    Code
    sqlite3 -column -noheader tmp/apps/com.freestylelibre.app.de/f/sas.db 'select sensorStartTimestampUTC, serialNumber from sensors;'

    liefert die letzten Sensoren mit ihren Startzeitpunkten in Millisekunden seit dem 1. Januar 1970 (bei Unix heißt das "since the epoch"); xDrip leitet diese Information anscheinend noch nicht als "Sensor Change" an Nightscout weiter!

    Code
    sqlite3 -column -noheader tmp/apps/com.freestylelibre.app.de/f/sas.db 'select timestampUTC, glucoseValue from historicReadings;'
    sqlite3 -column -noheader tmp/apps/com.freestylelibre.app.de/f/sas.db 'select timestampUTC, glucoseValue from realTimeReadings;'
    sqlite3 -column -noheader tmp/apps/com.freestylelibre.app.de/f/sas.db 'select timestampUTC, glucoseValue from currentReadings;'

    produzieren z.T. umfangreichen Output mit 15-Minuten-Werten, gescannten Werten und - wohl am interessantesten - den minütlich ausschließlich für die Alarme generierten Sensorwerten. (Das kann man in Dateien umleiten, mit etwas Script umformatieren, ...)

    Letztere sind auch vorhanden, wenn man mal wieder vergessen hat zu scannen - dieselben Werte, die die gepatchte LL-App an xDrip weiterreicht.

    Natürlich gibt es auch hier ab und zu Aussetzer (xDrip würde dann Veränderungen mit einer Nachkommastelle anzeigen, da immer auf ein 5-Minuten-Intervall umgerechnet wird).

    Wer mag, kann z.B. für jeden Wert nachsehen, ob in den 600 Sekunden davor 10 andere Werte angekommen sind, und das grafisch darstellen. (gnuplot habe ich auf dem Mac nicht zum Laufen bekommen. Dafür muss jedesmal die VM ran.) Genaugenommen sollte man ein paar Sekunden länger gucken, da die einzelnen Werte nicht genau 60 Sekunden auseinanderliegen.



    Zeig doch mal...


    Ja doch...


    Das war einer der Auslöser: Einmal 8 Stunden durchgeschlafen und beim Aufwachen nicht ans Scannen gedacht... X( was ist denn nun zwischen 22:00 und 23:30 passiert?


    Don't panic - die Daten sind doch alle da und xDrip hat sie auch bekommen :thumbup:


    und ja, die Minutendaten (gelb) stehen auch in der Datenbank, nur die an den Scan gelieferten (grüne Linie) haben eine Lücke... spannend ist auch, wie stark der Algorithmus (hier um 20:00Z herum) glättet.

    LibreLink zeigt also nur die gescannten Daten (wie schon beim L1). Von den in der L2-Version hinzugefügten Alarm-Daten scheint es nichts zu wissen. Da waren wohl mehrere Köche Programmierer am Werk... =O


    und so sieht die Ausfallrate bei der BT-Verbindung aus - das hatte ich ja schon anderswo diskutiert und den Sensorwechsel mit 1 Stunde ohne Daten sieht man auch gut. Die Antenne des neuen Libre zeigt nach unten, klappt auch beim Fahrradfahren deutlich besser.

    (Die gnuplot-Diagramme arbeiten mit UTC, falls sich jemand über die Zeiten wundert.)



    Was bringt's?


    - mehr Verständnis für die inner workings des ganzen Systems (vielleicht)

    - den Beweis, dass vergessenes Scannen zwar mies für die Compliance hinsichtlich LibreView ist, aber eigentlich nichts verlorengeht - solange die Bluetooth-Verbindung für den Alarm steht (und dass xDrip & Co. doch wertvoll sind)

    - Neugier auf mehr ;) (u.a. werden auch die Fehler in der DB gespeichert)

    - irgendwie werde ich das Gefühl nicht los, dass das mit etwas mehr Zuwendung ein ganz brauchbares Produkt (auch in Richtung rtCGM) werden könnte



    Und sonst so? Was ist mit dem Lesegerät?


    Im Gegensatz zum Libre1-Reader lässt sich das neue Lesegerät noch nicht per Python-Script auslesen (Verschlüsselung!), mir wurde aber glaubhaft versichert, dass daran gearbeitet wird. Bis dahin ist leider nur der Umweg über LibreView und Export praktikabel. Ich verfolge das aber und werde ggf. ergänzen.



    Ich will auch mitspielen...


    Ich werde das demnächst :urlaub auf GitHub hochladen. (Ihr glaubt ja gar nicht, wie hässlich man Shell-programmieren kann.)


    Für heute: Pause. :venti

    Einmal editiert, zuletzt von Steve8x8 () aus folgendem Grund: 2020-01-28: Links nachgetragen

  • ok, ich hab Linux und Windows verstanden :rofl mit Linux kenn ich mich nicht die Bohne aus, nicht mal ansatzweise und mit Codezeilen hab ich mich noch nie beschäftigt, obwohl ich PC-technisch nicht völlig unbedarft bin, fühl ich mich grad schlicht überfordert - ich glaub, das muss ich noch mindestens 4x lesen (und googeln), bevor ich auch nur ansatzweise durchsteige (hey, aber ich hab nen Linux-Kollegen, der soll mir das erklären *jawoll* :D )


    Ich versteh noch nicht mal, wo ich deine Codezeilen eingeben sollte - sorry... aber hast es echt schön gemacht :D

    Blutzucker ist die Autobahn, Gewebszucker ne Nebenstraße!

  • das hilft mir nicht wirklich... sorry, in dieser Hinsicht bin ich völligst unbedarft (ok, google sagt, das wäre die Kommandozeilenebene von Linux? Also dessen "MS-DOS Eingabeaufforderung"?)


    Ich mach das dann am PC? Aber ich brauch's doch auf dem Handy (dachte ich), da ist doch die App? Müsste ich das jedesmal machen, wenn ich ne Scanlücke hab oder reicht einmal und das gilt dann "für immer"?


    Sorry, vermutlich komplett blöde Fragen, aber ich bin ein echtes DOS-Kind (und hab auf meinem Handy nicht mal "/data" gefunden)

    Blutzucker ist die Autobahn, Gewebszucker ne Nebenstraße!

  • ok, ich hab Linux und Windows verstanden :rofl mit Linux kenn ich mich nicht die Bohne aus, nicht mal ansatzweise und mit Codezeilen hab ich mich noch nie beschäftigt, obwohl ich PC-technisch nicht völlig unbedarft bin, fühl ich mich grad schlicht überfordert - ich glaub, das muss ich noch mindestens 4x lesen (und googeln), bevor ich auch nur ansatzweise durchsteige (hey, aber ich hab nen Linux-Kollegen, der soll mir das erklären *jawoll* :D )


    Ich versteh noch nicht mal, wo ich deine Codezeilen eingeben sollte - sorry... aber hast es echt schön gemacht :D

    Same.

    Wobei ich auch nur mit Windows arbeite

    Hab nach ca. Einen Drittel aufgehört zu lesen, da ich nix verstanden habe.

    Aber brauche ich ja momentan sowieso nicht. Vllt irgendwann in Zukunft und dann werde ich es hoffentlich iwie verstehen.

  • Vielen Dank Steve8x8


    Hab ich es richtig verstanden, dass die Minutenwerte nicht nur verarbeitet sondern auch tatsächlich von der LibreView-App gespeichert werden? Reicht die Datenbank auch bis zur Installation zurück? Weiß man ob die Minutendaten auch an Abbott übertragen werden?

  • Danke! Verstehe auch noch nix, werde aber mal versuchen, das nachzuvollziehen. Was ich mich aber frage, es ist doch möglich bei Libre View sich alle Daten herunterzuladen? Die kommen doch dann als .csv Datei in Excel. Und da lassen sich doch sämtliche Analyse und Spielereien machen oder hab ich hier was völlig falsch verstanden? 🤔😳

  • es geht um die Lücken, die bei einem verpassten Scan entstehen - die Daten sind aber grundsätzlich da (in xDrip sieht man sie ja), nur in LL sind sie nicht sichtbar (und ich geh davon aus, in LV auch nicht)

    Blutzucker ist die Autobahn, Gewebszucker ne Nebenstraße!

  • Vielen Dank Steve8x8


    Hab ich es richtig verstanden, dass die Minutenwerte nicht nur verarbeitet sondern auch tatsächlich von der LibreView-App gespeichert werden? Reicht die Datenbank auch bis zur Installation zurück? Weiß man ob die Minutendaten auch an Abbott übertragen werden?

    Gleich drei Fragen...

    1./3. Über LibreView kann ich nichts sagen, mit denen rede ich nicht :P ich vermute aber, dass die Minutenwerte (so drangebastelt, wie das alles aussieht) wirklich nur auf dem Handy "leben". (Das dürfte auch McBerti s Frage beantworten, und Marani, ich nehme sehr stark an, dass die niemand [sonst] zu sehen bekommt - deshalb ja die ganze Übung :D)

    2. Mein DB-Dump (current) hatte heute vormittag 76545 Zeilen, die erste ist vom ersten Sensor, erster Tag, 1 Stunde nach dem Start.


    July95, Marani : Die "Eingabeaufforderung" (heißt "cmd" immer noch so?) ist schon dicht dran - auch bei MS-DOS hing dahinter ein "Kommandointerpreter" (command.com), bei Unixen heißt das Ding traditionell "Shell", wobei die klassische Bourne-Shell aus der Anfangszeit heutzutage größtenteils durch die Bourne Again Shell ersetzt wurde (bash, irgendwo hab ich tatsächlich mal die Übersetzung "Wiedergeburtsmuschel" gelesen).

    :whistling:Hatte ich irgendwem einen Rosengarten versprochen:?:


    G'Nacht :sleeping:

  • Danke für die Zusammenfassung. Da ich das Lesegerät verwenden möchte/muss, ist leider der für mich interessanteste Teil noch ungeklärt:

    Und sonst so? Was ist mit dem Lesegerät?


    Im Gegensatz zum Libre1-Reader lässt sich das neue Lesegerät noch nicht per Python-Script auslesen (Verschlüsselung!), mir wurde aber glaubhaft versichert, dass daran gearbeitet wird. Bis dahin ist leider nur der Umweg über LibreView und Export praktikabel. Ich verfolge das aber und werde ggf. ergänzen.

    Wo genau verfolgst du das? https://github.com/Flameeyes/glucometerutils ist ja ein Projekt das scheinbar auch das Libre2 unterstützten möchte.


    Bis dahin bleibt nur der Weg:

    1) die offizielle Libre-Software auf dem PC zu installieren. Ist leider nur für Windows. (Mit Wine unter Ubuntu hat sie bei mir kein angeschlossenes Libre1-Messgerät erkannt)

    2) Internetverbindung trennen, damit die Software nicht die Daten nach Hause telefoniert

    3) Irgendwo gibt es den Menü-Punkt "Als .csv exportieren"


    Zumindest ging das beim Libre 1.

  • Pelzlöffel genau das ist die Stelle - und bei https://github.com/glucometers…ometer-protocols/issues/8 werden die Probleme diskutiert.


    Die Libre-Soft gibt es für Windows und Mac, aber das Verfahren sollte funktionieren. Ob man damit alle Werte bekommt, die auf dem Reader gespeichert sind, weiß ich nicht (und ich habe den alten für L1 an die Spenderin zurückgeben müssen). Der neue ist noch jungfräulich...

  • Hi,

    zur Info. Die gepatchte LibreApp kann man sich auch mit Windows 10 und der Debian App aus dem AppStore bauen von daher funktioniert vielleicht auch dein beschriebenes Verfahren hier. Ich werde es bei Gelegenheit mal testen.


    McBerti

    Die CSV Datei von LibreView enthält nicht die Minutenwerte. Habe ich gerade überprüft.


    Noch ein Edit :):

    Der xDrip CSV Export enthält auch nicht die Minutenwerte. Es sind Werte alle 5 Minuten.

  • Tiger1982 Wir reden von der Software, die man sich erst nach einer Bestellung bei A. Dort herunterladen kann. Nicht die App, die es "umsonst und draußen" im AppStore gibt.


    Die Minutenwerte werden von xDrip verwendet, aber nicht gespeichert. Irgendetwas kommt aber auch bei Followern an, das habe ich mir aber noch nicht genauer ansehen können, das MiBand (das am folgenden Zweithandy hängt) ist erst seit kurzem in Betrieb.


    Dass als CSV nur ausgegeben wird, was auch an Nightscout weitergeleitet würde, ist plausibel.

  • Für die, die es damals nicht mitbekommen oder als zu geeky weggedrückt haben, hole ich das hier noch einmal raus - damit die Daten, die durch das Scannen gesammelt werden, nicht ganz verloren sind.

    Echtzeit ist freilich was anderes, aber vielleicht hilft es ja einer oder zweien, dann war es nicht umsonst 8)

    (Ich hole momentan nur die Seriennummer aus der Datenbank, weil xDrip die nicht von sich aus an Nightscout weitermeldet.)