NEWS
Darstellung einer Pulsoximetriekurve
-
Datenanalyse Holfenry JKS 50 CL:
Per ffe1 werden 68 Byte gesendet, für die Pulswertekurve fortlaufend nicht statisch.
( Byte 41 bis 67 )
Rot und Blau markiert absteigende / aufsteigende Pulskurve
Pakete a
( 20 Byte / 20 Byte/ 20 Byte / 8 Byte )
SPo2 sollte Byte 5 sein, PI evtl. Byte 6 und 7FF-44-01-00-5E-62-4E-04-17-00-00-00-00-00-00-00-00-00-00-00 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-7F-7F 7F-15-0E-15-23-46-62-69-70-70-69-62-5B-54-4D-4D-4D-46-46-3F 38-31-2A-2A-23-23-23-2A-B3 FF-44-01-00-5E-62-4E-04-17-00-00-00-00-00-00-00-00-00-00-00 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-7F-7F 7F-15-0E-15-23-46-62-69-70-70-69-62-5B-54-4D-4D-4D-46-46-3F 38-31-2A-2A-23-23-23-15-9E ---------------------------------------------------------------------------------- FF-44-01-00-5E-62-4E-04-17-00-00-00-00-00-00-00-00-00-00-00 Spo2 ( 5A – 64 hex ) 90 -100 dec Fest 94 Fest PI 0 – 14 hex ( 20 dec ) 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-7F-7F 7F-15-0E-15-23-46-62-69-70-70-69-62-5B-54-4D-4D-4D-46-46-3F 8 Byte / 11 Byte 38-31-2A-2A-23-23-23-2A-B3 8 Byte ---------------------------------------------------------------------------------- Paket 1 I 19:44:26.496 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) FF-44-01-00-5E-62-4E-04-17-00-00-00-00-00-00-00-00-00-00-00 A 19:44:26.496 "(0x) FF-44-01-00-5E-62-4E-04-17-00-00-00-00-00-00-00-00-00-00-00" received I 19:44:26.496 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-7F-7F A 19:44:26.496 "(0x) 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-7F-7F" received I 19:44:26.541 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) 7F-15-0E-15-23-46-62-69-70-70-69-62-5B-54-4D-4D-4D-46-46-3F A 19:44:26.541 "(0x) 7F-15-0E-15-23-46-62-69-70-70-69-62-5B-54-4D-4D-4D-46-46-3F" received I 19:44:26.542 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) 38-31-2A-2A-23-23-23-15-9E A 19:44:26.542 "(0x) 38-31-2A-2A-23-23-23-15-9E" received Paket 2 I 19:44:26.585 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) FF-44-01-00-5E-62-4E-04-17-00-00-00-00-00-00-00-00-00-00-00 A 19:44:26.585 "(0x) FF-44-01-00-5E-62-4E-04-17-00-00-00-00-00-00-00-00-00-00-00" received I 19:44:26.586 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-7F-7F A 19:44:26.586 "(0x) 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-7F-7F" received I 19:44:26.586 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) 7F-15-0E-15-23-46-62-69-70-70-69-62-5B-54-4D-4D-4D-46-46-3F A 19:44:26.586 "(0x) 7F-15-0E-15-23-46-62-69-70-70-69-62-5B-54-4D-4D-4D-46-46-3F" received I 19:44:26.586 Notification received from 0000ffe1-0000-1000-8000-00805f9b34fb, value: (0x) 38-31-2A-2A-23-23-23-2A-B3 A 19:44:26.586 "(0x) 38-31-2A-2A-23-23-23-2A-B3" received
-
@ralla66 Sorry, war ein paar Tage offline. Das sieht doch richtig gut aus! Dann kannst Du auch mehrere Daten gleich nutzen, Puls, SPO2 und Pulskurve
-
@ralla66 Ich habe es mittlerweile hinbekommen. Ich nutze doch den History Adapter und ein kleines JS Script, das im Hintergrund bei aktualisierung des Arrays, kommend vom MQTT Client, das Array Byte für Byte durch gelesen wird und der Inhalt immer auf einem DP Typ Nummer aktualisiert wird. Das Das Script zu schnell läuft habe ich eine Pausen-Variable eingebaut. Die Funktion Settimeout funktioniert in den Script-Adapter. (leider nicht im HTML-Widget, aber egal). So mit dem DP habe ich quasi einen Wert der so in ca. 20ms immer aktualisiert wird. Auf diesen DP schaut das History-Chart. Weil der JS-Adapter das nicht so mag, wenn 1000 mal pro Minute ein DP aktualisiert wird, habe ich den Warnwert einfach im Adapter gefunden und auf 2000 hochgestellt.. hehehe läuft alles stabil. (Pi4). Du kannst mit dem History-Widget auch schön die Kurve stauchen und strecken, so dass es wie im Original aussieht.
Das weiße kleine Ding da oben ist die Echtzeit-Pulskurve und wird schnell gezeichnet. So 2 Wellen pro Sekunde ungefähr. Die beiden großen Charts hab ich mich Echarts gemacht. Die Daten schreibe ich historisch auch auf einem separaten SQL-Server mit dem SQL Adapter. Letztens war der Arzt da und will auch so'n kranken Scheiß -
@ralla66 Bei meiner ESP Lolin32 Library scheint die Konstante schon deklariert zu sein. Steht halt für die Nummer 1. Kannst einfach mit 1 ersetzen. Aber du kannst auch den ganzen Mist mit der LED an und aus-Sache löschen. Ich hab es ja schön kommentiert, wo die LEDs eingeschaltet und ausgeschaltet werden. Ich guck da heute auch nicht mehr drauf. Ansonsten wenn Du sie haben möchtest, probiere es mal mit der 1 oder lass mal ein BeispielCode namens "Blink" auf dem Teil laufen, dann kannst du den Code rauskopieren, wenn das dort funktioniert.
-
-
@ralla66 läuft Deiner jetzt auch ? Ich hätte noch gerne den weißen Hintergrund geändert. Aber leider geht das wohl nicht. Hintergrund beim History-Chart ist eine andere Fläche drumherrum.
-
@alexaxel sagte in Darstellung einer Pulsoximetriekurve:
Hintergrund beim History-Chart
was ist das?
Hintergrund geht immer
-
Arduino Code behersche ich nicht.
Eigentlich benötigen wir für die Pulskurve nur Byte 41 bis 67.
Led ausklammern klappt ja, meckert aber bei sChar und iWert.
Daran haperts halt.
Sonst soweit ok. Mqtt klappt, Datenpunkte werden angelegt. -
@ralla66 Du ich hab da noch einen Mix aus 2 Versionen im Code, ist mir gar nicht aufgefallen.
Du kannst diesen ganzen Teil auch löschen, weil ich darüber schon das ganze Array auf einmal via mqtt gesendet habe.
String sTemp; int iWert; for (int i = 0; i < length; i++) { //dbSerialPrint((char)message[i]); iWert = int(data[i],DEC); sTemp += sChar + ","; } mqttClient.print(sTemp);
-
Ein sehr geiles Thema! Gefällt mir, scheinen noch mehr Menschen so verrückt zu sein wie ich....
-
@dragon du kennst noch nicht mein IOBrokerprojekt, das RC Cars-Rennen im Garten misst, über Alexa moderiert und mit Spotify und den coolen Gauge-Meter eine tolle Spielgrafik darstellt. Monitor steht quasi im Garten auf der mobilen Rennstrecke. Ein paar ESPs messen, die IR Codes der eingebaute ESP im Auto von innen an der Ziellinie senden. Der Empfänger ESP schickt die Messdaten via MQTt an den Broker. Mit den lustigen Alexa Emotion-Tags moderiert sie richtig emotional. "Mark, Du lahme Ente. Das geht noch besser, du bist auf dem letzten Platz und hast nur eine Durchschnittsgeschwindogkeit von bla bla. "
Beim Start, Ende und während des Rennens werden coole Sounds und Rennmusik abgespielt. Ace of spades kommt da richtig gut. Hehehe -
@alexaxel
Du machst mich seeeehr neugierig. Ich glaube du solltest das mal vorstellen.... -
ok, zur Darstellung benötige ich ja nur ca 48 Punkte / Bytes pro min für die Pulskurve in Vis.
Dann alle 1,25 sec 1Byte. Der ESP sollte die Bytes langsamer senden, so der Ansatz.
Array hat ja den Nachteil das ich dieses für die Visu wieder zerlegen muß.
Halt der Ansatz das Problem direkt im ESP zu lösen. -
@dragon ja nächstes Jahr
-
@ralla66 nicht der ESP Broker definiert das Tempo, es ist der BLE Server, also Dein Pulsoximeter. Wenn du auf dem ESP bremst, gehen dir ja Updates/Bytes verloren.
Oder ich hab Dich falsch verstanden. -
könntest du bitte ein Codeschnipsel hier einstellen damit ich in den Datenpunkt Wave
die Bytes 41 - 67 schreiben kann.mqttClient.beginMessage(Topic_Wave);
?
mqttClient.endMessage();Dann hätten wir das sauber.
Danke
-
Hast du irgendwelche Informationen zur Key Berechnung aus der Mac Adresse und x Byte bei BLE,
Link oder andere Informationquellen ?
In unserem BLE BlazePod Projekt stecken wir gerade an der Stelle fest das wir
die Verbindung nicht aufrecht erhalten können da wohl der Key fehlt. -
@ralla66 said in Darstellung einer Pulsoximetriekurve:
BlazePod
Musste erstmal googlen, was ein BlazePod ist
klappt es denn initial und ihr konntet die Bytes identifizieren, die für das Ding bzw. Euch wichtig sind ?
Wenn ja, glaube ich nicht daran, dass die Entwickler die Verbindung im nachhinein kappt, weil ein Key fehlt.Wenn die Werte noch nicht kommen und Ihr wollt herausfinden, was die Original-App und das Teil so austauschen,
lasst es auf einem Android handy im Debug-Modus (muss man am Handy aktivieren) laufen und schließt es mit einem USB-Datenkabel(!) nicht Ladekabel am
PC an. Dort lasst Ihr die Android IDE Entwicklungsumgebung laufen. Man kann da schön sehen, was da so hin und her geht. Ihr könnt auch ein Android virtuel auf dem PC laufen lassen und dort die Andorid App im virtuellen Handy laufen lassen und gleiches sehen.
Wenn Ihr wissst was die App so sendet, damit es die Daten empfängt, die Ihr sucht, wisst Ihr was Ihr per BLE Code auf dem ESP vorab senden müsst, um gleichen Daten zu empfangen. -
BlazePod sind Neumodische Trainingsblinkis mit Pushbutton.
Daten sind alle da und Sichtbar, aufgeschraubt und Kabel angelötet auch.
Speicherauslesen und beschreiben geht -
@ralla66 said in Darstellung einer Pulsoximetriekurve:
Hier mal so ein Schnippsel ungetestet geschrieben:
mqttClient.beginMessage(Topic_DataArray); // Hier den Topic nehmen, den Du vorher auch deklariert hast. Wenn das auch bei Dir oben not DataArray heißt, kann das so bleiben. //eben einen String zusammenbasteln, damit nur ein Datenpunkt verwendet wird. Geht sicherlich auch noch eleganter... String sTemp; int iWert; //Hier die Schleife for (int i = 41; i < 68; i++) { iWert = int(data[i],DEC); // nun an der Position das Byte rausziehen. Dieser Code muss ja in der Subroutine stehen, wo auch eine Variable namens Data mit dem gesammten Array übergeben wird. sTemp += iWert; } mqttClient.print(sTemp); // Daten senden mqttClient.endMessage(); // MQTT Klasse mitteilen, dass nun Ende ist.