[PYTHON] Erstellen Sie eine API für das Switchbot-Thermo-Hygrometer mit Node-RED

TL;DR

Einführung

Es hat nichts mit Arbeit zu tun.

Ich beschloss, wieder Temperatur und Luftfeuchtigkeit für meinen Home-Hack aufzuzeichnen. Früher habe ich BME280 an Rapberry Pi angebracht, um Temperatur und Luftfeuchtigkeit zu messen. Immerhin sah es schlecht aus, wenn es von mir selbst hergestellt wurde, und es gab ein Problem, dass es aufgrund der Stromversorgung von Raspberry Pi nicht an der Stelle installiert werden konnte, an der ich es installieren wollte.

Daher suchte ich nach einem "billigen", "gut aussehenden" und "batteriebetriebenen" Thermo-Hygrometer, das mit Bluetooth, Wifi usw. kommunizieren kann, und fand und kaufte das SwitchBot-Thermo-Hygrometer.

https://www.switchbot.jp/meter

Mit dem SwitchBot-Thermo-Hygrometer können Sie ganz einfach die Temperatur und Luftfeuchtigkeit Ihres Hauses überprüfen. Es ist ein praktisches intelligentes Thermo-Hygrometer, mit dem Sie Alarme und den Verlauf mit der App überprüfen können. (Zitat: https://www.switchbot.jp/meter)

Wie Sie auf der Seite der Kopffamilie sehen können, sieht es aus wie ein Flüssigkristall-Thermo-Hygrometer. Trotz des Preises von etwa 2000 Yen ist es mit Bluetooth kompatibel und Sie können Temperatur- und Feuchtigkeitsinformationen mit iOS- und Android-Apps visualisieren.

Aber ... ** mir fehlte völlig in meiner Forschung **, Ich habe geschrieben, dass es mit Cloud-Diensten funktioniert, aber es bedeutet, dass Sie Hub separat erwerben müssen ... Es scheint, dass es keine API zum Erfassen von Temperatur- und Feuchtigkeitsinformationen gibt, auch wenn diese verknüpft sind. Deshalb habe ich beschlossen, selbst eine API zu erstellen.

Erfassung von Temperatur- und Feuchtigkeitsinformationen

Es ist notwendig, Temperatur- und Feuchtigkeitsinformationen sowohl für Kaninchen als auch für Ecken zu erhalten. Dieses Mal habe ich einen Raspberry Pi verwendet, der in keinem Haus verwendet wurde.

Nutzungsumgebung

Überprüfen Sie, ob Sie das Bluetooth-Gerät auf dem Raspberry Pi sehen können.

Holen Sie sich eine Liste der Geräte mit Python und Bluepy.


import bluepy

scanner = bluepy.btle.Scanner(0)
devices = scanner.scan(5)

for device in devices:
  print('address : %s' % device.addr)

Ausführungsergebnis

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

Als ich diesmal über die iOS-App von SwitchBot nachgesehen habe, ist e1: bb: xx: 2a: fb: e0 die MAC-Adresse des Switchbot-Thermo-Hygrometers. Da die MAC-Adresse auch im Erfassungsergebnis mit RaspberryPi vorhanden ist, wurde festgestellt, dass das Gerät auch mit RaspberryPi erkannt werden kann.

Erfassung von Temperatur- und Feuchtigkeitsdaten

Extrahieren Sie Temperatur- und Feuchtigkeitsdaten aus BLE von SwitchBot. Ich war von der Paketanalyse begeistert, aber einige Leute haben bereits die BLE-Paketanalyse und -ausgabe implementiert, sodass ich sie als Referenz verwendet habe. Lesen Sie die SwitchBot-Thermo-Hygrometer-Messungen direkt aus BLE-Werbepaketen

Dieses Mal wurden die folgenden Änderungen vorgenommen, um die API für das SwitchBot-Thermo-Hygrometer zu erstellen.

Ausführungsergebnis

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

API-Teil erstellen

Verwenden Sie Node-RED, um den API-Teil zu erstellen. Node-RED ist ein Tool, das den Fluss der Dateneingabe / -ausgabe und -verarbeitung über die GUI ausdrücken und programmieren kann.

Node-RED ist ein flussbasiertes Programmiertool, das ursprünglich vom IBM Emerging Technology Services-Team entwickelt wurde und jetzt Teil der JS Foundation ist.

Beim Erstellen des API-Teils kann es mit Flask usw. implementiert werden, wird jedoch von Node-RED realisiert.

Node-RED-Flow-Erstellung

Die diesmal verwendeten Knoten sind wie folgt.

http in http://ip/sensors/macaddressをGETする方法 POST {"mac": "mac address"} mit json an http: // ip / sensor /

Ersteres funktioniert, aber da die MAC-Adresse einen Doppelpunkt enthält, muss der RFC genau bestätigt werden. Andere sind wie folgt

--function: Speichern Sie das von http empfangene Objekt in msg.payload. --exec: Ausführen eines lokalen Python-Skripts --http Antwort: Gibt json des Ergebnisses der Skriptausführung an den Client zurück --debug: Wenn ein Fehler auftritt

Verwenden Sie die erstellte API

Versuchen Sie, die mit Node-RED von Ihrem Client-Computer erstellte API zu erreichen.

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

Anscheinend hat es sicher funktioniert.

abschließend

Dieses Mal habe ich Node-RED verwendet, um eine API für das Switchbot-Thermo-Hygrometer zu erstellen. Für diejenigen ohne WebAPI können Sie WebAPI problemlos verwenden, indem Sie ein Tool wie Node-RED einfügen. Da Sie jedoch direkt auf das Skript zugreifen, müssen Sie auf die Sicherheit achten.

Recommended Posts

Erstellen Sie eine API für das Switchbot-Thermo-Hygrometer mit Node-RED
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Transkription von Bildern mit der Vision API von GCP
Nehmen Sie allgemeine Einstellungen mit der Unterzeichnung von matplotlib vor
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen
Bilden Sie Lambda-Schichten mit Lambda
Extrudieren Sie mit der Fusion360-API
Erstellen Sie Folien mit iPython
Ablauf des Extrahierens von Text in PDF mit der Cloud Vision API
Die erste API, die mit dem Python Djnago REST-Framework erstellt wurde
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Erstellen Sie mit Falcon einen Light-Speed-Web-API-Server
Spracherkennung von WAV-Dateien mit der Google Cloud Speech API Beta