[PYTHON] Benachrichtigen Sie LINE über die Körpertemperatur vom BLE-Thermometer mit Raspeltorte Nr. 1

Einführung

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.

Welche Sache?

** Benachrichtigen Sie LINE, wenn die Körpertemperatur gemessen wird. ** ** **

memo_01.png

** Thermometer-> BLE-> Raspeye-> WebAPI-> LINE-> Smartphone und senden Sie den Messwert. ** ** **

memo_02.png

** 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. ** ** **

memo_03.png

Umgebung

Beginnen Sie mit dem bisher eingerichteten Zustand

Über das Thermometer

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

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.

192_168_11_13__raspberrypi__-_VNC_Viewer.png

③ Koppeln Sie mit dem Assistenten unter "Einrichten eines neuen Geräts".

192_168_11_13__raspberrypi__-_VNC_Viewer-2.png

④ Wenn das Pairing erfolgreich ist, wird oben links am Gerät eine schlüsselähnliche Markierung angezeigt. Das ist in Ordnung.

192_168_11_13__raspberrypi__-_VNC_Viewer-3.png

** 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. ** ** **

Bestätigung von BLE

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

Format der Messwertdaten

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.

Temperature Measurement

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.

Danke für Ihre Unterstützung

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

Benachrichtigen Sie LINE über die Körpertemperatur vom BLE-Thermometer mit Raspeltorte Nr. 1
Benachrichtigen Sie LINE über die Körpertemperatur vom BLE-Thermometer mit Raspeltorte Nr. 2
Messen Sie die CPU-Temperatur von Raspeye mit Python
Benachrichtigen Sie regelmäßig den Verarbeitungsstatus von Raspberry Pi mit Python → Google Spreadsheet → LINE
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (1)
Ausgabe von Raspberry Pi an Line
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (2) Herstellung eines Übertragungsgeräts
CSV-Ausgabe von Impulsdaten mit Raspberry Pi (CSV-Ausgabe)
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
GPGPU mit Raspberry Pi
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
DigitalSignage mit Raspberry Pi
Lassen Sie uns GPIO von Raspeye mit Python CGI betreiben
Simulieren Sie die Temperaturmessung mit Raspberry Pi + Flask + SQLite + Ajax
Erstellen Sie mit Raspberry Pi + DHT11 ganz einfach einen TweetBot, der Sie über Temperatur und Luftfeuchtigkeit informiert.
Spielen Sie, um Slack mithilfe von AWS PaaS über Raspberry Pi3 über Umgebungsdaten von SensorTag zu informieren
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
[RaspberryPi] [Python] Informieren Sie LINE mit dem Temperatursensor + IFTTT über Raumtemperatur
Messen und vergleichen Sie Temperaturen mit Raspberry Pi und generieren Sie automatisch Diagramme
So erhalten Sie die Temperatur vom SwitchBot-Thermo-Hygrometer mit Himbeer-Pi
Machen Sie ein BLE-Thermometer und ermitteln Sie die Temperatur mit Pythonista3
Mutter pflanzt mit Raspberry Pi
Mit Skype benachrichtigen Sie mit Skype von Python!
Bilderkennung von Müll mit Edge (Raspberry Pi) aus null Wissen mit AutoML Vsion und TPU
Lassen Sie uns mit VPN (WireGuard) von außerhalb Ihres Hauses auf Ihren Home Rasp Pie zugreifen.
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Grafische Darstellung des Stromverbrauchs im Haushalt mit 3GPI und Raspeye
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
Protokollieren Sie die Omron-Umgebungssensorwerte regelmäßig mit Raspberry Pi
[Raspberry Pi] Schrittmotorsteuerung mit Raspberry Pi
Servomotorsteuerung mit Raspberry Pi
Betriebssystem-Setup mit Raspberry Pi Imager
Probieren Sie L Chika mit Himbeerpi
Aufbau eines VPN-Servers mit Raspberry Pie
Benachrichtigen Sie LINE über Informationen zum Zugbetrieb
Versuchen Sie, 3 Servos mit Raspeye zu bewegen
Verwenden einer Webkamera mit Raspberry Pi
Verwenden Sie den Temperatur- / Feuchtigkeits- / Drucksensor BME280 von Python mit Raspberry Pi 2
CSV-Ausgabe von Pulsdaten mit Raspberry Pi (Analogeingang mit Python prüfen)
Versuchen Sie, den RSS-Feed von arXiv mit Python von Raspeye auf Twitter zu twittern
[Python + PHP] Erstellen Sie mit Raspberry Pi einen Temperatur-, Feuchtigkeits- und Druckmonitor
Benachrichtigen Sie LINE über Standortinformationen (Google-Karte) mit der GPS-SORACOM Edition mit mehreren Einheiten
Protokollierung der Omron-Umgebungssensorwerte mit Raspberry Pi (USB-Typ)