TL;DR
Cela n'a rien à voir avec le travail.
J'ai décidé de recommencer à enregistrer la température et l'humidité pour mon hack domestique. Autrefois, j'attachais du BME280 à Rapberry Pi pour mesurer la température et l'humidité. Après tout, cela avait l'air mauvais s'il avait été fabriqué par moi-même, et il y avait un problème en raison du fait qu'il ne pouvait pas être installé à l'endroit où je voulais l'installer en raison de l'alimentation du Raspberry Pi.
Par conséquent, j'ai recherché un thermo-hygromètre "bon marché", "beau" et "alimenté par batterie" pouvant communiquer avec Bluetooth, Wifi, etc., et j'ai trouvé et acheté le thermo-hygromètre SwitchBot.
https://www.switchbot.jp/meter
Le thermo-hygromètre SwitchBot vous permet de vérifier facilement la température et l'humidité de votre maison. C'est un thermo-hygromètre intelligent pratique qui vous permet de vérifier les alarmes et l'historique avec l'application. (Citation: https://www.switchbot.jp/meter)
Comme vous pouvez le voir sur la page de la famille principale, il ressemble à un thermo-hygromètre à cristaux liquides. Malgré le prix d'environ 2000 yens, il est compatible avec Bluetooth et vous pouvez visualiser les informations de température et d'humidité à l'aide des applications iOS et Android.
Mais ... ** je manquais complètement dans mes recherches **, J'ai écrit que cela fonctionne avec les services cloud, mais cela signifie que vous devez acheter Hub séparément ... Il semble qu'il n'y ait pas d'API pour acquérir des informations de température et d'humidité même si elles sont liées, j'ai donc décidé de créer moi-même une API.
Il est nécessaire d'obtenir des informations sur la température et l'humidité pour les lapins et les coins. Cette fois, j'ai utilisé un Raspberry Pi qui n'a été utilisé dans aucune maison.
Obtenez une liste d'appareils utilisant python et bluepy.
import bluepy
scanner = bluepy.btle.Scanner(0)
devices = scanner.scan(5)
for device in devices:
print('address : %s' % device.addr)
Résultat d'exécution
address : 6d:a3:xx:0a:f5:ae
address : e1:bb:xx:2a:fb:e0
address : 2c:26:xx:16:24:38
address : b8:78:xx:3d:3d:e5
address : 5e:93:xx:39:80:39
address : c8:84:xx:53:9a:52
address : 5d:e3:xx:2a:cc:76
address : d3:f2:xx:ac:97:42
address : 52:75:xx:4c:38:b5
address : 72:5f:xx:cd:b0:8d
address : 47:db:xx:64:cd:78
address : c8:84:xx:4f:71:3e
address : 4f:a5:xx:85:3a:97
address : 42:e0:xx:b9:61:5d
address : 5f:53:xx:ed:71:4b
address : 53:c6:xx:62:e5:ce
address : 68:ea:xx:4e:14:1d
address : 6b:22:xx:12:24:d1
address : 60:09:xx:37:11:f3
Lorsque j'ai vérifié cette fois depuis l'application iOS de SwitchBot, e1: bb: xx: 2a: fb: e0 est l'adresse MAC du thermo-hygromètre Switchbot. Étant donné que l'adresse MAC existe également dans le résultat d'acquisition avec RaspberryPi, il a été constaté que l'appareil peut être reconnu même avec RaspberryPi.
Extraire les données de température et d'humidité du BLE de SwitchBot. J'étais enthousiasmé par l'analyse des paquets, mais certaines personnes ont déjà implémenté l'analyse et la sortie des paquets BLE, donc je l'ai utilisée comme référence. Lire les mesures du thermo-hygromètre SwitchBot directement à partir des paquets d'annonces BLE
Cette fois, les modifications suivantes ont été apportées pour créer l'API du thermo-hygromètre SwitchBot.
--Recevoir l'adresse MAC comme argument --Définissez le format de sortie sur json
Résultat d'exécution
# python3 switchbot-meter.py e1:bb:xx:2a:fb:e0
{
"isHumidityLowAlert": "False",
"isTemperatureUnitF": "False",
"isDualStateMode": "False",
"isHumidityHighAlert": "False",
"isTemperatureLowAlert": "False",
"isEncrypted": "False",
"isStatusOff": "False",
"temperature": "26.0",
"isTemperatureHighAlert": "False",
"humidity": "29",
"battery": "100"
}
Utilisez Node-RED pour créer la partie API. Node-RED est un outil qui permet d'exprimer et de programmer le flux d'entrée / sortie et de traitement de données à l'aide de l'interface graphique.
Node-RED est un outil de programmation basé sur les flux, initialement développé par l'équipe IBM Emerging Technology Services et qui fait maintenant partie de la JS Foundation.
Lors de la création de la partie API, elle peut être implémentée en utilisant Flask etc., mais elle est réalisée par Node-RED.
Les nœuds utilisés cette fois sont les suivants.
http in http://ip/sensors/macaddressをGETする方法 Comment POST {"mac": "mac address"} avec json sur http: // ip / capteurs /
Le premier fonctionne également, mais comme l'adresse MAC contient un deux-points:, il est nécessaire de confirmer la RFC avec précision. D'autres sont comme suit
--fonction: stocke l'objet reçu par http dans dans msg.payload. --exec: exécution d'un script python local --http response: Renvoie le json du résultat de l'exécution du script au client --debug: pour lorsqu'une erreur se produit
Essayez de frapper l'API créée avec Node-RED à partir de votre machine cliente.
~ » curl -X POST -H 'Content-Type:application/json' -d '{"mac":"e1:bb:xx:2a:fb:e0"}' http://192.168.11.41:1880/sensors/ onodes@Casper3
{
"isTemperatureLowAlert": "False",
"isHumidityHighAlert": "False",
"isDualStateMode": "False",
"isTemperatureHighAlert": "False",
"isEncrypted": "False",
"battery": "100",
"isTemperatureUnitF": "False",
"humidity": "26",
"isHumidityLowAlert": "False",
"isStatusOff": "False",
"temperature": "29.1"
}
Apparemment, cela a fonctionné en toute sécurité.
Cette fois, j'ai utilisé Node-RED pour créer une API pour le thermo-hygromètre Switchbot. Pour ceux qui n'ont pas WebAPI, vous pouvez facilement avoir WebAPI en insérant un outil tel que Node-RED. Cependant, comme vous appuyez directement sur le script, vous devez faire attention à la sécurité.
Recommended Posts