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.
** Avertissez LINE lorsque la température corporelle est mesurée. ** **
** Thermomètre-> BLE-> Raspeye-> WebAPI-> LINE-> Smartphone et envoyer la valeur mesurée. ** **
** 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. ** **
--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
--Wifi connecté
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 à 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.
③ Associez-le à l'assistant depuis «Configurer un nouvel appareil».
④ 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.
** 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. ** **
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
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.
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.
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