[PYTHON] Notifier LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe # 1

introduction

En raison de la maladie corona, je mesure la température de mon corps tous les jours. J'ai essayé de pirater le thermomètre car il était difficile d'écrire la température corporelle une par une et GW était juste du temps libre.

: o: Ce qui suit est écrit: o:

--Comment utiliser gatttool dans Raspeye --BLE avec python avec Raspeye --Service de thermomètre de santé du GATT

: x: Je n'ai pas écrit ce qui suit: x:

――En premier lieu, qu'est-ce que BLE, qu'est-ce que le GATT, etc.

Quelle chose?

** Avertissez LINE lorsque la température corporelle est mesurée. ** **

memo_01.png

** Thermomètre-> BLE-> Raspeye-> WebAPI-> LINE-> Smartphone et envoyer la valeur mesurée. ** **

memo_02.png

** Des notifications seront envoyées même si le thermomètre et le smartphone sont physiquement séparés, donc je pense qu'il serait possible de saisir à distance la température corporelle de quelqu'un dans un autre endroit ou de grand-mère à la maison. ** **

memo_03.png

environnement

--Raspberry Pi 3 Modèle b +](https://www.amazon.co.jp/RS%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3 % 83% 8D% E3% 83% B3% E3% 83% 88 Framboise-Pi-3-B-% E3% 83% 9E% E3% 82% B6% E3% 83% BC% E3% 83% 9C% E3% 83% BC% E3% 83% 89 / dp / B07BFH96M3) --Raspbian OS: Raspbian Buster avec bureau 4.19

Partir de l'état mis en place jusqu'à présent

--Wifi connecté

À propos du thermomètre

Le thermomètre est un [thermomètre intégré Bluetooth 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) est utilisé. Ce thermomètre implémente le ** GATT (Generic attribute profile) ** de BLE, une spécification d'interface standard mondiale. L'interface est ouverte au public sur les sites suivants.

Le mode opératoire est le suivant.

Dans ce cas, l'hôte est Rasppie.

Associez le thermomètre et la tarte aux râpes

Associez le thermomètre et la tarte à la râpe.

① Tout d'abord, insérez blueman.

$ sudo apt-get install blueman
$ reboot

(2) Lorsque vous redémarrez, le nombre d'icônes augmentera, alors couplez à partir d'ici.

192_168_11_13__raspberrypi__-_VNC_Viewer.png

③ Associez-le à l'assistant depuis «Configurer un nouvel appareil».

192_168_11_13__raspberrypi__-_VNC_Viewer-2.png

④ Si le couplage est réussi, une marque en forme de clé s'affiche dans le coin supérieur gauche de l'appareil. C'est acceptable.

192_168_11_13__raspberrypi__-_VNC_Viewer-3.png

** C'était un mystère après tout, mais l'appariement échoue. Après avoir fait tant de fois, j'ai finalement pu m'associer. C'est peut-être juste mon environnement. Veuillez noter que si la marque de clé n'est pas attachée comme indiqué dans ④ après l'appairage, une erreur étrange se produira quelque part dans le travail suivant. ** **

Confirmation de BLE

Je vais le confirmer car ce n'est pas un programme à la fois, mais cela peut être fait facilement comme une étude.

hcitool

Tout d'abord, parcourons le paquet de conseils envoyé par le thermomètre. Il existe ** hcitool **, qui peut être utilisé pour analyser les paquets de publicité pour les périphériques BLE.

Exécutez la commande suivante.

$ sudo hcitool lescan

La commande scanne les appareils BLE à proximité qui font de la publicité. Si vous mettez le thermomètre en mode d'appairage dans cet état, vous pouvez voir le paquet de conseils. L'adresse BLE de mon thermomètre était "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 ← Ça!

gatttool

Ensuite, essayez de vous connecter au thermomètre avec ** gatttool **. gatttool est un outil pour parler aux appareils BLE avec GATT. Exécutez en spécifiant l'adresse BLE avec -b.

$ gatttool -b xx:xx:xx:xx:xx:xx -I

Lorsqu'il est exécuté avec -I, il attend l'entrée de commande en mode interactif. Connectez-vous avec la commande connect. Mesurez immédiatement la température corporelle et mettez le thermomètre en mode transmission. Lorsqu'il est connecté à un thermomètre, il devient ** Connexion réussie **.

À propos, le mode de transmission du thermomètre sera interrompu de force dans environ 1 minute, donc s'il expire, mesurez à nouveau la température corporelle et passez en mode de transmission. C'est sobre et ennuyeux, mais cela ne peut pas être aidé car c'est une spécification d'appareil ...

$ 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

Après la connexion, utilisez la commande primaire pour voir l'UUID du service dont dispose le thermomètre.

[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

Vous pouvez découvrir quels sont ces UUID en consultant le site du GATT.

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 inconnue

Le ** 1809 ** ** Health Thermometer Service ** est important.

Utilisez la commande char-desc pour voir les caractéristiques du service Health Thermometer.

Pour char-desc, spécifiez la poignée (valeurs de poignée de tenue et de poignée de groupe) du service Health Thermometer.

En outre, l'UUID sortira dans une rangée.

[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

Consultez le site du GATT.

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

Les deux suivants sont importants ici.

En bref, si vous réglez ** Descripteur sur "Démarrer l'envoi", la mesure de température enverra des données **.

Faisons le.

Tout d'abord, essayez de lire les paramètres du descripteur. La commande char-read-hnd lit la valeur caractéristique. Spécifiez la valeur Handle de Descriptor dans l'argument.

[18:93:D7:76:C9:B8][LE]> char-read-hnd 0x0013
Characteristic value/descriptor: 00 00 

La valeur est ** 00 00 **. Cela signifie que Indiquer est désactivé.

La valeur de Descriptor est

est ce que cela signifie. La mesure de la température est Indicate, qui est déterminée par les spécifications du GATT, vous pouvez donc la régler sur ** 0200 **.

Pour écrire la valeur du paramètre, appuyez sur char-write-req. Spécifiez la valeur Handle de Descriptor et la valeur de paramètre ** 0200 ** comme arguments.

[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 

Si tout se passe bien, Indicate démarre et les données proviennent de handle = 0x0012.

handle = 0x0012 signifie ** 2a1c - Mesure de température **.

L'histoire de gatttool est devenue longue, je vais donc la résumer.

#Démarrer gatttool
$ gatttool -b xx:xx:xx:xx:xx:xx -I

#Connectez-vous avec l'appareil
> connect

#Obtenir la liste des UUID du service
> primary

#Obtenez une liste de caractéristiques
> char-desc start handle end handle

#Lire la valeur caractéristique
> char-read-hnd handle

#Ecrire la valeur caractéristique
> char-write-req handle data

Après avoir mesuré la température corporelle, vous pouvez obtenir la valeur mesurée avec la commande suivante.

$ gatttool -b 18:93:D7:76:C9:B8 -I
> connect
> char-write-req 0x0013 0200

Format des données de valeur mesurée

Le thermomètre m'a donné ce genre de données, mais qu'est-ce que c'est exactement?

06 73 01 00 ff e4 07 05 02 0a 28 13 02

Le format des données est écrit ici.

Temperature Measurement

C'est vraiment difficile à comprendre, alors je vais le réécrire.

Temperature Measurement

byte name
1 Flags Drapeaux indiquant la structure des données
bit 0 - Temperature Units Flag: 0 =C1 Oui C2 Non, 1 =C1 Aucun C2 Oui
bit 1 - Time Stamp Flag : 0 =C3 aucun, 1 =Avec C3
bit 2 - Temperature Type Flag : 0 =C4 aucun, 1 =Avec C4
bit 3-7 :inutilisé
4 C1 Temperature Measurement Value (Celsius) -Valeur mesurée en degrés Celsius
Format flottant IEEE 11073 32 bits
4 C2 Temperature Measurement Value (Fahrenheit) -Valeur mesurée M. Hua
Format flottant IEEE 11073 32 bits
7 C3 Horodatage Date et heure de mesure
- yyyy 2byte ushort
- mm 1byte
- dd 1byte
- hh 1byte
- mm 1byte
- ss 1byte
1 C4 Type de température Type de température
référence

Essayez d'analyser les données reçues.

byte data Résultat de la perspective
Flags 06 0000-0110
bit 0 = 0 :C1 Oui C2 Non
bit 1 = 1 :Avec C3
bit 2 = 1 :Avec 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 est de 4 octets de données et est au format ** IEEE 11073 32 bits float **. Pour une explication détaillée de ce format, reportez-vous au site suivant.

résultat

--Température du corps = 36,1 ℃

Il s'est avéré que c'était les données. La température corporelle et la date et l'heure mesurées sont correctement prises. se sentir bien.

Merci pour votre soutien

Cette fois, c'est ici parce que c'est net.

Continuer à # 2 pour notifier LINE de la température corporelle du thermomètre BLE avec tarte à la râpe

Recommended Posts

Notifier LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe # 1
Avertir LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe n ° 2
Mesurer la température du processeur de Raspeye avec Python
Informer périodiquement l'état de traitement de Raspberry Pi avec python → Google Spreadsheet → LINE
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Sortie du Raspberry Pi vers la ligne
Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
GPGPU avec Raspberry Pi
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Exploitons GPIO de Raspeye avec Python CGI
Simulez la mesure de température avec Raspberry Pi + Flask + SQLite + Ajax
Créez facilement un TweetBot qui vous informe de la température et de l'humidité avec Raspberry Pi + DHT11.
Jouez pour informer Slack des données environnementales de SensorTag à l'aide d'AWS PaaS via Raspberry Pi3
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
[RaspberryPi] [python] Informer LINE de la température ambiante avec capteur de température + IFTTT
Mesurez et comparez les températures avec Raspberry Pi et générez automatiquement des graphiques
Comment obtenir la température du thermo-hygromètre SwitchBot à l'aide de Raspberry Pi
Fabriquez un thermomètre BLE et obtenez la température avec Pythonista3
Plantes Mutter avec Raspberry Pi
Avec skype, notifiez avec skype de python!
Reconnaissance d'image des déchets avec Edge (Raspberry Pi) à partir de zéro connaissance en utilisant AutoML Vsion et TPU
Accédons à votre tarte à la râpe domestique depuis l'extérieur de votre maison avec VPN (WireGuard)
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Commande de servomoteur avec Raspberry Pi
Configuration du système d'exploitation avec Raspberry Pi Imager
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Notifier LINE des informations sur l'exploitation du train
Essayez de déplacer 3 servos avec Raspeye
Utiliser une webcam avec Raspberry Pi
Utilisez le capteur de température / humidité / pression BME280 de Python avec Raspberry Pi 2
Sortie CSV des données d'impulsion avec Raspberry Pi (vérifier l'entrée analogique avec python)
Essayez de tweeter le flux RSS d'arXiv sur Twitter avec python de Raspeye
[Python + PHP] Créez un moniteur de température / humidité / pression avec Raspberry Pi
Notifier LINE des informations de localisation (Google map) avec GPS Multi-Unit SORACOM Edition
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)