Per Python Blutdruckwerte anzeigen und archivieren

Aus LinuxUser 01/2024

Per Python Blutdruckwerte anzeigen und archivieren

© khwaneigq / 123RF.com

Gesunder Druck

Das Blutdruckmessgerät Beurer BM58 bringt keine Software mit, um die erfassten Daten unter Linux auszulesen und aufzubereiten. In Python lässt sich jedoch schnell ein kleines Skript dafür aufsetzen.

Es gibt unzählige Situationen, in denen es Sinn ergibt, einige Vitaldaten mit einer gewissen Regelmäßigkeit zu erheben, unter anderem den Blutdruck. Am Blutdruckmessgerät fehlte es dem Autor nicht, ein BM58 von Beurer gab es schon seit einem guten Jahrzehnt in seinem Haushalt. Allerdings fand es nur sporadisch Verwendung, und wenn, dann wurde es von allen Familienmitgliedern auf eine Weise genutzt, die weder ein eindeutiges Zuordnen gespeicherter Messdaten zu einzelnen Person erlaubte noch das konsistente Aufzeichnen des Verlaufs über längere Zeiten ermöglichte.

Gleich vorneweg: Hier geht es nicht um allfällige Qualitäten oder Eigenschaften des genutzten Blutdruckmessgeräts BM58, schon gar nicht im Hinblick auf dessen medizinische Eignung. Im Mittelpunkt steht einzig und allein das Übertragen der vom Gerät erfassten und im internen Speicher abgelegten Messdaten auf einen PC unter Linux (Abbildung 1).

Abbildung 1: Die gesammelten Daten des BM58 lassen sich per USB an einem Notebook unter Linux auslesen.

Abbildung 1: Die gesammelten Daten des BM58 lassen sich per USB an einem Notebook unter Linux auslesen.

Jede Messung legt einen Datensatz im begrenzten Gerätespeicher ab, der den Messzeitpunkt mit Datum und Uhrzeit sowie den systolischen (oberen) und diastolischen (unteren) Blutdruckwert zusammen mit der Pulsfrequenz enthält. Um nun über einen längeren Zeitraum einen aussagekräftigen Verlauf zu dokumentieren, müssen Sie zwingend regelmäßig den Gerätespeicher in ein Archiv übertragen. Das BM58 besitzt dazu eine USB-Schnittstelle, und es gibt eine passende Software – nur eben nicht für Linux, wie noch viel zu oft.

Andererseits hält der Hersteller Beurer erfreulicherweise keineswegs mit der notwendigen technischen Information hinterm Berg. Das ermöglichte das Aufsetzen des hier vorgestellten Python-Skripts. Es entstand durchaus in der Hoffnung, dass es in der Folge dieses Artikels zur einen oder anderen Hilfestellung kommt, um in Zukunft mehr Geräte zu unterstützen sowie weitere Funktionen und mehr Benutzerfreundlichkeit zu ermöglichen.

Technischer Rahmen

Zunächst lohnt sich ein kurzer Blick auf eine Zusammenfassung wesentlicher und hier relevanter Eigenschaften. Mehr Details zum BM58 finden Sie auf der Webseite des Herstellers [1]. Das Gerät kann Messdaten für bis zu zwei Personen im internen Speicher aufzeichnen. Dazu wählen Sie sowohl beim Messen als auch beim Auslesen der Werte den jeweiligen Benutzer mit U1 beziehungsweise U2 aus. Weitere Informationen zur Bedienung lesen Sie in der Gebrauchsanleitung [2] nach.

Der Speicher steht jedem der beiden Benutzer zur Verfügung und fasst dabei bis zu 60 Einträge. Überschreitet die laufende Messung dieses Limit, geht durch den Speicherüberlauf der jeweils älteste Wert des entsprechenden Benutzers verloren. Für einen lückenlosen Verlauf mit mehr als 60 Messpunkten müssen Sie den Benutzerspeicher also vor dem Überlauf auslesen. Um hier nicht die Übersicht zu verlieren, wäre es zweckmäßig, nach dem Auslesen jeweils den Speicher zu löschen. Zwingend sollte das aus Benutzersicht aber nicht sein, und das zu erstellende Programm sollte Datensätze ignorieren, die es bereits zuvor vom Gerät bezogen hat.

Das Auslesen funktioniert über USB: Verbinden Sie das Blutdruckmessgerät mit dem Computer, taucht es als serielles USB-Device basierend auf dem Controller pl2303 auf. Damit ist zumindest die Grundvoraussetzung für die Datenübertragung erfüllt. Rufen Sie zur Überprüfung vor dem Anstecken des USB-Kabels das Systemprotokoll mit sudo tail -f /var/log/syslog im Terminal auf und vergleichen Sie dessen Ausgabe nach dem Anstecken des Kabels mit den Zeilen aus Listing 1.

Listing 1

Systemprotokoll

[...]
Oct 31 23:55:00 samuin kernel: [173617.638934] usb 1-3: new full-speed USB device number 8 using xhci_hcd
Oct 31 23:55:00 samuin kernel: [173617.788046] usb 1-3: New USB device found, idVendor=067b, idProduct=2303, bcdDevice=Oct 31 11:55:00 samuin kernel: [173617.788063] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Oct 31 23:55:00 samuin kernel: [173617.788070] usb 1-3: Product: USB-Serial Controller
Oct 31 23:55:00 samuin kernel: [173617.788075] usb 1-3: Manufacturer: Prolific Technology Inc.
Oct 31 23:55:00 samuin kernel: [173617.790192] pl2303 1-3:1.0: pl2303 converter detected
Oct 31 23:55:00 samuin kernel: [173617.791930] usb 1-3: pl2303 converter now attached to ttyUSB0
[...]

Welches BM58?

Bei Recherchen im Internet finden sich immer wieder Hinweise, dass es unter der Bezeichnung BM58 zwei verschiedene Varianten in Bezug auf den USB-Anschluss geben soll. Die zweite Variante baut angeblich noch nicht einmal vom Typus her auf einem USB-Serial-Controller auf und wird darum derzeit vom vorgestellten Programm nicht unterstützt.

Funktionsumfang

Bevor es um die Details der Anwendung, des Datenarchivs und der Verlaufsgrafik geht, gilt es erst einmal, die benötigten Funktionen für das Auswertungsprogramm festzulegen. Auf der Wunschliste des Autors stehen:

  • das Auslesen der Blutdruck- und Pulsdaten vom Blutdruckmessgerät,
  • das Einpflegen der gelesenen Daten in eine LibreOffice-Calc-Datei,
  • das Erstellen einer Messdatenreihe mit je einem Tagesmittel über die Blutdruck- und Pulswerte, sowie
  • die grafische Darstellung der Messdatenreihe im PDF-Format.

Im Fall einer bereits vorhandenen Archivdatei gleicht das Programm die vom Blutdruckmessgerät gelesenen Daten mit den vorhandenen ab, ignoriert bereits bekannte Messpunkte und sortiert neue in der korrekten zeitlichen Abfolge ein. Das erlaubt, persönliche Daten sowohl mit unterschiedlichen Benutzerkennungen als auch von verschiedenen Geräten ins Archiv einzubringen. Das Mehrfachauslesen von Geräten in beliebiger Reihenfolge stellt für das Skript also kein Problem dar.

Gibt es noch keine Archivdatei, erstellt die Anwendung sie mit den Messwerten vom Gerät neu. In keinem Fall jedoch kommt es zum Verändern oder gar Löschen der Daten auf dem Blutdruckmessgerät. Das Programm führt Sie Schritt für Schritt durch die Anwendung und gibt Hinweise, was es als Nächstes zu tun gilt – beispielsweise, welchen Knopf Sie drücken müssen.

Neue Daten führen immer zur Neuerstellung eines tagesfein aufgelösten Verlaufs. Dazu mittelt das Programm alle Werte jedes Kalendertags jeweils für den systolischen und den diastolischen Blutdruck sowie für den Puls. Dieser Verlauf der Tagesmittel fließt in grafischer Form in eine PDF-Datei ein.

Blutdruck-Python-Skript

Das Programm und ein paar zusätzliche Informationen zur Anwendung finden sich auf Gitlab [3]. Vor der eigentlichen Installation zeigt ein kurzer Blick auf die Tabelle “Grundlagen”, welche Python-Pakete Sie als Voraussetzung benötigen und gegebenenfalls vorab installieren müssen. Listing 2 zeigt den Installationsprozess. Er verfrachtet das Programm in den Dateiordner für lokale Programme, der bei den gängigen Distributionen bereits im allgemeinen Suchpfad liegt.

Paket

Mindestversion

python

3.10

pandas

1.3.5

pyserial

3.5

openpyxl

3.0.9

python-dateutil

2.8.1

matplotlib

3.5.1

Listing 2

Installation

$ mkdir Zielordner && cd Zielordner
$ git clone https://gitlab.com/dieheins/bpmeter.git
$ sudo cp -a bpmeter/blutdruck.py /usr/local/bin/blutdruck
$ sudo chown root:root /usr/local/bin/blutdruck

Der einfache Aufruf blutdruck verwendet für die Parameter der Optionen die Standardwerte aus der Tabelle “Konfiguration”. Das Skript sucht im aktuellen Arbeitsverzeichnis nach der entsprechenden Archivdatei und verbindet sich mit dem Messgerät. Bei erstmaliger Anwendung beziehungsweise Fehlen der Archivdatei legt das Programm sie wie bereits erwähnt mit den aktuellen Daten vom Messgerät und des errechneten Tagesmittelverlaufs an. Die Ausgabe sieht dann in etwa so aus wie in Abbildung 2.

Option

Parameter

Standardwert

Kommentar

-d | --device

Gerätedatei

/dev/ttyUSB0

serielle USB-Gerätedatei für das angeschlossene Blutdruckmessgerät

-f | --file

Archivdatei

blutdruck.xlsx

Blutdruck-Archivdatei im Microsoft-Excel-Format

-g | --graph

exportiert den Blutdruckverlauf als grafische Darstellung nach Archivdatei.png

-t | --timeout

Timeout

60

maximale Wartezeit in Sekunden im Umgang mit dem Blutdruckmessgerät

Abbildung 2: Gibt es beim Aufruf noch keine Archivdatei, legt das Programm sie automatisch an.

Abbildung 2: Gibt es beim Aufruf noch keine Archivdatei, legt das Programm sie automatisch an.

Umfasst das Archiv bereits Messdaten zumindest mehrerer Tage, ist eine grafische Darstellung des Verlaufs durchaus sinnvoll. Beim nächsten Auslesen des Messgeräts erzeugen Sie sie mittels blutdruck -g zusätzlich zur Aktualisierung der Archivdatei. Der Programmablauf ähnelt dann dem in Abbildung 3.

Abbildung 3: Beim nachfolgenden Start wird ein neuer Datensatz hinzugefügt und der Blutdruckverlauf als Grafik exportiert.

Abbildung 3: Beim nachfolgenden Start wird ein neuer Datensatz hinzugefügt und der Blutdruckverlauf als Grafik exportiert.

Die Daten

Das eigentliche Blutdruckdatenarchiv mit sämtlichen Datensätzen des Messgeräts, einer je Messung und Zeile, befinden sich in der Archivdatei unter Messdaten (Abbildung 4). Wollen Sie Daten manipulieren, weil zum Beispiel zwischendurch eine andere Person eine Messung vorgenommen hat, erledigen Sie das hier. Doch Vorsicht: Solange dieser Datensatz noch auf dem Gerät existiert, landet er beim Auslesen immer wieder im Archiv. Dieses Problem umgehen Sie, indem Sie zuerst das Messgerät auslesen, dann alle Daten vom Gerät löschen und zuletzt den zu berichtigenden Datensatz aus dem Archiv entfernen.

Abbildung 4: Die Datens&auml;tze der einzelnen Messungen landen im Tabellenblatt <span class="ui-element">Messdaten</span> des Archivs.

Abbildung 4: Die Datensätze der einzelnen Messungen landen im Tabellenblatt Messdaten des Archivs.

Das zweite Tabellenblatt Verlauf (Abbildung 5) liefert die Tagesmittel je Kalendertag und dient gleichzeitig als Basis für die grafische Darstellung des Verlaufs der Messdatenreihe. Wirkliche Aussagekraft erhält der Verlauf aber erst über einen längeren Zeitraum, wie sich im Vergleich von Abbildung 6 mit Abbildung 7 gut erkennen lässt. Das liegt nicht zuletzt an der automatischen Skalierung der Zeitachse durch die Plot-Funktion aus der Matplotlib-Bibliothek. Gleichzeitig demonstrieren die beiden Zeitreihen, wie effektiv sich mit Python und seinen Funktionsbibliotheken größere Mengen an Daten verarbeiten und abbilden lassen.

Abbildung 5: Die Datentabelle <span class="ui-element">Verlauf</span> zeigt die Gesamtmittelwerte und Tagesmittelwerte an den einzelnen Kalendertagen.

Abbildung 5: Die Datentabelle Verlauf zeigt die Gesamtmittelwerte und Tagesmittelwerte an den einzelnen Kalendertagen.


Abbildung 6: Der zeitliche Verlauf der Tagesmittelwerte &uuml;ber 12&nbsp;Tage besitzt faktische Aussagekraft.

Abbildung 6: Der zeitliche Verlauf der Tagesmittelwerte über 12 Tage besitzt faktische Aussagekraft.


Abbildung 7: &Uuml;ber einen l&auml;ngeren Zeitraum hinweg dokumentiert, steigt die Aussagekraft der Tagesmittelwerte weiter.

Abbildung 7: Über einen längeren Zeitraum hinweg dokumentiert, steigt die Aussagekraft der Tagesmittelwerte weiter.

Fazit

Der Grundstein ist gelegt, und die implementierte Funktionalität deckt das Mindestmaß dessen ab, was einen sinnvollen Einsatz ermöglicht. Die Vitaldaten lassen sich so über einen längeren Zeitraum aufzeichnen und auf übersichtliche Art darstellen. Mit der anschaulichen Präsentation des Blutdruckverlaufs machen Sie bei Ihrem nächsten Arztbesuch sicherlich Eindruck und erleichtern eine fachlich fundierte Bewertung Ihrer Blutdruckwerte.

Eine allfällige Einschätzung ist ganz bewusst nicht Bestandteil dieses Programms, denn dem Autor fehlt es schlicht an der notwendigen medizinischen Kompetenz. Aber durch das Abspeichern der Daten in eine Tabellenkalkulationsdatei steht einer weitergehenden Analyse oder Bearbeitung mit gängigen Spreadsheet-Programmen nichts im Weg.

Sollten Sie ein anderes Blutdruckmessgerät besitzen und möchten auch unter Linux an Ihre Daten herankommen, inspiriert Sie dieser Artikel vielleicht, selbst aktiv zu werden. Den Quellcode des Skripts finden Sie wie bereits erwähnt auf Github sowie zusätzlich im Download-Bereich zu diesem Artikel. (csi)

Der Autor

Werner Hein beschäftigt sich seit 1994 hobbymäßig mit Linux und seit 1997 professionell mit der Entwicklung des Funkmodems in Mobiltelefonen. Das vorliegende Projekt hält seine Blutdruckwerte im Rahmen und hat seine Python-Programmierkenntnisse wieder etwas in Schwung gebracht.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 01/2024 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

2 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Beep
2 Jahre her

Inspiriert von dem Artikel hab ich mir gleich auch ein Beurer BM gekauft. Allerdings verbindet sich dieses als HID device und besitzt nicht den im Artikel genannten seriellen Chip. Aus der Erweiterung des Codes ist ein eigenes kleines Projekt geworden https://github.com/beep-projects/bpconnect

aZm3d0
2 Jahre her
Reply to  Beep

Beurer bietet die Protokolle für viele Geräte zum Download an:
https://connect.beurer.com/developer/de-de/#/login

Nach oben