[PYTHON] Créer une API pour le thermo-hygromètre Switchbot avec Node-RED

TL;DR

introduction

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.

Acquisition des informations de température et d'humidité

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.

Environnement d'utilisation

Vérifiez si vous pouvez voir le périphérique Bluetooth sur le Raspberry Pi.

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.

Acquisition des données de température et d'humidité

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"
}

Création de la partie API

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.

Création de flux 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

Utilisez l'API créée

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

en conclusion

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

Créer une API pour le thermo-hygromètre Switchbot avec Node-RED
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Transcription d'images avec l'API Vision de GCP
Définissez les paramètres communs avec le sous-graphique de matplotlib
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
Créer des couches Lambda avec Lambda
Extruder avec l'API Fusion360
Créer des diapositives avec iPython
Flux d'extraction de texte au format PDF avec l'API Cloud Vision
La première API à créer avec le framework Python Djnago REST
Touchons l'API de Netatmo Weather Station avec Python. #Python #Netatmo
Créez un serveur API Web ultra-rapide avec Falcon
Reconnaissance vocale des fichiers wav avec Google Cloud Speech API Beta