Aufgrund der Koronakrankheit messe ich jeden Tag meine Körpertemperatur. Ich habe versucht, das Thermometer zu hacken, weil es schwierig war, die Körpertemperatur einzeln aufzuschreiben, und GW war nur Freizeit.
: o: Folgendes steht geschrieben: o:
: x: Ich habe folgendes nicht geschrieben: x:
――In erster Linie, was ist BLE, was ist GATT usw.
** Benachrichtigen Sie LINE, wenn die Körpertemperatur gemessen wird. ** ** **
** Thermometer-> BLE-> Raspeye-> WebAPI-> LINE-> Smartphone und senden Sie den Messwert. ** ** **
** Benachrichtigungen werden auch dann gesendet, wenn Thermometer und Smartphone physisch getrennt sind. Ich denke, es wäre möglich, die Körpertemperatur einer Person an einem anderen Ort oder einer Oma zu Hause aus der Ferne zu erfassen. ** ** **
Das Thermometer ist das [integrierte Bluetooth-Thermometer A & D UT-201BLE](https://www.amazon.co.jp/AD-Bluetooth%E5%86%85%E8%94%B5-%E4%BD%93%E6%B8 % A9% E8% A8% 88-UT-201BLE / dp / B00ZQMNV94) wird verwendet. Dieses Thermometer implementiert BLEs ** GATT (Generic Attribute Profile) **, eine globale Standardschnittstellenspezifikation. Die Benutzeroberfläche ist an den folgenden Standorten für die Öffentlichkeit zugänglich.
Die Arbeitsweise ist wie folgt.
In diesem Fall ist der Host Rasppie.
Koppeln Sie das Thermometer und die Raspeltorte.
① Setzen Sie zuerst Blueman ein.
$ sudo apt-get install blueman
$ reboot
(2) Wenn Sie neu starten, erhöht sich die Anzahl der Symbole. Koppeln Sie also von hier aus.
③ Koppeln Sie mit dem Assistenten unter "Einrichten eines neuen Geräts".
④ Wenn das Pairing erfolgreich ist, wird oben links am Gerät eine schlüsselähnliche Markierung angezeigt. Das ist in Ordnung.
** Dies war schließlich ein Rätsel, aber das Pairing schlägt fehl. Nach so vielen Malen konnte ich mich endlich paaren. Vielleicht ist es nur meine Umgebung. Bitte beachten Sie, dass irgendwo in der nachfolgenden Arbeit ein seltsamer Fehler auftritt, wenn Sie nicht koppeln und die Schlüsselmarkierung nicht wie in ④ gezeigt angebracht ist. ** ** **
Ich werde es bestätigen, da es kein Programm auf einmal ist, aber es kann leicht als Studie durchgeführt werden.
hcitool
Lassen Sie uns zunächst das vom Thermometer gesendete Hinweispaket scannen. Es gibt ** hcitool **, mit dem Werbepakete nach BLE-Geräten durchsucht werden können.
Führen Sie den folgenden Befehl aus.
$ sudo hcitool lescan
Der Befehl scannt in der Nähe befindliche BLE-Geräte, die Werbung machen. Wenn Sie das Thermometer in diesem Zustand in den Pairing-Modus versetzen, können Sie das Hinweispaket überprüfen. Die BLE-Adresse meines Thermometers lautete "18: 93: D7: 76: C9: B8".
$ sudo hcitool lescan
LE Scan ...
5A:60:E6:D4:EF:94 (unknown)
5F:C1:20:2B:BE:60 (unknown)
5F:C1:20:2B:BE:60 AQtGSk1xNFF0YQ
18:93:D7:76:C9:B8 A&D_UT201BLE_76C9B8 ← Dies!
gatttool
Versuchen Sie als nächstes, mit ** gatttool ** eine Verbindung zum Thermometer herzustellen. gatttool ist ein Tool, um mit BLE-Geräten mit GATT zu kommunizieren. Führen Sie dies aus, indem Sie die BLE-Adresse mit -b angeben.
$ gatttool -b xx:xx:xx:xx:xx:xx -I
Bei Ausführung mit -I wartet es im interaktiven Modus auf die Befehlseingabe.
Verbinden Sie sich mit dem Befehl connect
.
Messen Sie sofort die Körpertemperatur und versetzen Sie das Thermometer in den Übertragungsmodus.
Wenn es an ein Thermometer angeschlossen wird, wird es ** Verbindung erfolgreich **.
Übrigens wird der Übertragungsmodus des Thermometers in etwa 1 Minute zwangsweise beendet. Wenn er abläuft, messen Sie die Körpertemperatur erneut und wechseln Sie in den Übertragungsmodus. Das ist nüchtern und nervig, aber es kann nicht geholfen werden, weil es eine Gerätespezifikation ist ...
$ gatttool -b 18:93:D7:76:C9:B8 -I
[18:93:D7:76:C9:B8][LE]> connect
Attempting to connect to 18:93:D7:76:C9:B8
Connection successful
Verwenden Sie nach dem Anschließen den Befehl primary
, um die UUID des Dienstes anzuzeigen, über den das Thermometer verfügt.
[18:93:D7:76:C9:B8][LE]> primary
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0017 uuid: 00001809-0000-1000-8000-00805f9b34fb
attr handle: 0x0018, end grp handle: 0x0028 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0029, end grp handle: 0x002b uuid: 0000180f-0000-1000-8000-00805f9b34fb
attr handle: 0x002c, end grp handle: 0xffff uuid: 233bf000-5a34-1b6d-975c-000d5690abe4
Informationen zu diesen UUIDs finden Sie auf der GATT-Website.
handle | UUID | Name |
---|---|---|
0x0001 - 0x000b | 00001800-0000-1000-8000-00805f9b34fb | Generic Access |
0x000c - 0x000f | 00001801-0000-1000-8000-00805f9b34fb | Generic Attribute |
0x0010 - 0x0017 | 00001809-0000-1000-8000-00805f9b34fb | Health Thermometer |
0x0018 - 0x0028 | 0000180a-0000-1000-8000-00805f9b34fb | Device Information |
0x0029 - 0x002b | 0000180f-0000-1000-8000-00805f9b34fb | Battery Service |
0x002c - 0xffff | 233bf000-5a34-1b6d-975c-000d5690abe4 | Unbekannt |
Wichtig ist der ** 1809 ** ** Gesundheitsthermometer-Service **.
Verwenden Sie den Befehl "char-desc", um die Eigenschaften des Health Thermometer-Dienstes anzuzeigen.
Geben Sie für "char-desc" das Handle (Werte für das Kleidungshandle und das Grp-Handle) des Health Thermometer-Dienstes an.
Außerdem wird die UUID in einer Reihe ausgegeben.
[18:93:D7:76:C9:B8][LE]> char-desc 0x0010 0x0017
handle: 0x0010, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0011, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0012, uuid: 00002a1c-0000-1000-8000-00805f9b34fb
handle: 0x0013, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0014, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0015, uuid: 00002a1d-0000-1000-8000-00805f9b34fb
handle: 0x0016, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0017, uuid: 00002a08-0000-1000-8000-00805f9b34fb
Überprüfen Sie die GATT-Site.
handle | UUID | Name |
---|---|---|
0x0010 | 00002800-0000-1000-8000-00805f9b34fb | Primary Service |
0x0011 | 00002803-0000-1000-8000-00805f9b34fb | Characteristic Declaration |
0x0012 | 00002a1c-0000-1000-8000-00805f9b34fb | Temperature Measurement |
0x0013 | 00002902-0000-1000-8000-00805f9b34fb | Descriptor |
0x0014 | 00002803-0000-1000-8000-00805f9b34fb | Characteristic Declaration |
0x0015 | 00002a1d-0000-1000-8000-00805f9b34fb | Temperature Type |
0x0016 | 00002803-0000-1000-8000-00805f9b34fb | Characteristic Declaration |
0x0017 | 00002a08-0000-1000-8000-00805f9b34fb | Date Time |
Die folgenden zwei sind hier wichtig.
Kurz gesagt: ** Wenn Sie Descriptor auf "Send starten" setzen, sendet die Temperaturmessung Daten **.
Machen wir das.
Versuchen Sie zunächst, die Deskriptoreinstellungen zu lesen. Der Befehl char-read-hnd
liest den charakteristischen Wert. Geben Sie im Argument den Handle-Wert von Descriptor an.
[18:93:D7:76:C9:B8][LE]> char-read-hnd 0x0013
Characteristic value/descriptor: 00 00
Der Wert ist ** 00 00 **. Dies bedeutet, dass Anzeigen ausgeschaltet ist.
Der Wert von Descriptor ist
ist was es bedeutet. Die Temperaturmessung ist Angeben, was durch die GATT-Spezifikationen bestimmt wird, sodass Sie sie auf ** 0200 ** einstellen können.
Um den Einstellwert zu schreiben, drücken Sie char-write-req
. Geben Sie den Handle-Wert von Descriptor und den Einstellungswert ** 0200 ** als Argumente an.
[18:93:D7:76:C9:B8][LE]> char-write-req 0x0013 0200
Characteristic value was written successfully
Indication handle = 0x0012 value: 06 73 01 00 ff e4 07 05 02 0a 28 13 02
Wenn alles gut geht, startet Indicate und die Daten fließen von handle = 0x0012.
handle = 0x0012 bedeutet ** 2a1c - Temperaturmessung **.
Die Geschichte von gatttool ist lang geworden, deshalb werde ich sie zusammenfassen.
#Starten Sie gatttool
$ gatttool -b xx:xx:xx:xx:xx:xx -I
#Mit Gerät verbinden
> connect
#Dienst-UUID-Liste abrufen
> primary
#Holen Sie sich eine Merkmalsliste
> char-ab Startgriff Endgriff
#Lesen Sie den Kennwert
> char-read-hnd handle
#Schreiben Sie den charakteristischen Wert
> char-write-req handle data
Nach dem Messen der Körpertemperatur können Sie den gemessenen Wert mit dem folgenden Befehl erhalten.
$ gatttool -b 18:93:D7:76:C9:B8 -I
> connect
> char-write-req 0x0013 0200
Das Thermometer gab mir diese Art von Daten, aber was genau ist das?
06 73 01 00 ff e4 07 05 02 0a 28 13 02
Das Format der Daten wird hier geschrieben.
Es ist wirklich schwer zu verstehen, also werde ich es umschreiben.
Temperature Measurement
byte | name | |
---|---|---|
1 | Flags | Flags, die die Struktur der Daten angeben bit 0 - Temperature Units Flag: 0 =C1 Ja C2 Nein, 1 =C1 Keine C2 Ja bit 1 - Time Stamp Flag : 0 =C3 keine, 1 =Mit C3 bit 2 - Temperature Type Flag : 0 =C4 keine, 1 =Mit C4 bit 3-7 :ungebraucht |
4 | C1 | Temperature Measurement Value (Celsius) -Messwert in Grad Celsius IEEE 11073 32-Bit-Float-Format |
4 | C2 | Temperature Measurement Value (Fahrenheit) -Messwert Herr Hua IEEE 11073 32-Bit-Float-Format |
7 | C3 | Datum und Uhrzeit der Zeitstempelmessung - yyyy 2byte ushort - mm 1byte - dd 1byte - hh 1byte - mm 1byte - ss 1byte |
1 | C4 | Temperaturtyp Temperaturtyp Referenz |
Versuchen Sie, die empfangenen Daten zu analysieren.
byte | data | Perspektivisches Ergebnis |
---|---|---|
Flags | 06 | 0000-0110 bit 0 = 0 :C1 Ja C2 Nein bit 1 = 1 :Mit C3 bit 2 = 1 :Mit C4 |
C1 | 73 01 00 ff | 36.1 |
C3 | e4 07 05 02 0a 28 13 | 2020/5/2 10:40:19 |
C4 | 02 | Body (general) |
C1 besteht aus 4 Datenbytes und hat das 32-Bit-Float-Format ** IEEE 11073 **. Eine ausführliche Erläuterung dieses Formats finden Sie auf der folgenden Website.
Ergebnis
Es stellte sich heraus, dass es die Daten waren. Die Körpertemperatur sowie das gemessene Datum und die gemessene Uhrzeit werden ordnungsgemäß erfasst. wohlfühlen.
Diesmal ist es bis hierher, weil es scharf ist.
Fahren Sie mit # 2 fort, um LINE über die Körpertemperatur vom BLE-Thermometer mit Raspeltorte zu informieren.
Recommended Posts