TL;DR
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.
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.
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.
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"
}
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.
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
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.
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