背景
暑くなってきたので、部屋の温度や湿度を定期的に計測したいなと思い始めた。
ラズパイやESP32にセンサーつけて使ってもいいんだけど、子供が触りそうで怖い。
NatureRemo使ってて、せっかくそこで温度を測定してるんやから、それでいいんじゃないか。
最近使ってないGCPのVMインスタンスがあるので、そこからAPI叩いたらいいんじゃないか。
やったこと
- NatureRemoのAPIをたたいて、温度をゲット
- ThingSpeakのAPIをたたいて、温度をアップロード
使った環境
- GCPのVMインスタンス。無償のやつ。
- python3
- Nature Remo
- ThingSpeak
コード
Nature RemoのAPIは昔叩いたことあったので、昔のコードを流用した。
xxx, yyy, zzz, aaaはNature RemoとThingSpeakのサイト見てそれっぽい値を入力。
thingspeakはライブラリを発見したので、それを使ってみた。
import requests
import json
import thingspeak
import time
headers = {
'accept': 'application/json',
'Authorization': 'Bearer xxx',
}
ch = thingspeak.Channel(id=yyy, api_key='zzz', write_key='aaa', fmt='json', timeout=None)
while True:
response = requests.get('https://api.nature.global/1/devices', headers=headers)
data = response.json()
temp = data[0]['newest_events']['te']['val']
print(temp)
humi = data[0]['newest_events']['hu']['val']
print(humi)
res = ch.update({1: temp, 2: humi})
print(res)
time.sleep(30)
nohupつけて実行すれば、ログアウトしてもずっと動く。
nohup python Remo2TS.py &
結果
最後に
そこそこ有用そうな仕組みを簡単に作れる。すばらしい。
そのうち外気温もどっかから持ってきて、比較できるようにしたい。
参考にしたとこ
Nature Remo
ThingSpeak
thingspeak/examples at master · mchwalisz/thingspeak · GitHub
Python binding for ThingSpeak API — thingspeak 0.4.1 documentation