スマートリモコン Nature Remo 3 の湿度センサーから取得した湿度と SwitchBot 温湿度計から取得した湿度で Ambient サービスのグラフを作る Python プログラムを紹介
どうも、かげさんです(^^)/
あなたがこの記事を読んでいるのは何回目でしょうか?
初めての方、いらっしゃい!
複数回目の方、再訪問ありがとです(・∀・)
「スマートリモコン Nature Remo 3 の温度センサーから取得した温度と SwitchBot 温湿度計から取得した温度で Ambient サービスのグラフを作る Python プログラムを紹介」では温度グラフを作るプログラムを紹介しました。
この記事では、スマートリモコン Nature Remo 3 の湿度センサーから取得した湿度と SwitchBot 温湿度計から取得した湿度で Ambient サービスのグラフを作る Python プログラムを紹介します。
プログラムに埋め込んだコメントで解説していきますね。
プログラムの仕様
- スマートリモコン Nature Remo 3 の温度センサーから湿度を取得するのに Nature Remo Cloud API を使います。
- SwitchBot 温湿度計から湿度を取得するのに SwitchBot API を使います。
- SwitchBot 温湿度計は、3 個分の湿度を取得します。
- SwitchBot 加湿器にも内部的には湿度計を持っているらしいので(オートがあるんだから当然持っているはずなんだが) SwitchBot 加湿器の湿度も取得します。(実際には取得できないです。API 仕様では取得できるっぽいんだが…)
- スマートリモコン Nature Remo 3 の温度センサーから取得した湿度と SwitchBot 温湿度計から取得した湿度、SwitchBot 加湿器から取得した湿度でグラフで使うデータを登録します。
- このプログラムを Windows のタスクスケジューラから5分ごとに呼び出し、Ambient サービスでグラフを作ります。
プログラムの前提条件
- Nature Remo Cloud API を使うには、アクセストークンが必要。
Nature Remo のアクセストークンがない場合、「Nature Remo Cloud API を使うのに必要なアクセストークンを取得する」を参考にアクセストークンを取得します。 - SwitchBot API を使うには、アクセストークンが必要。
SwitchBot アクセストークンがない場合、「SwitchBot API を使う前準備」を参考にアクセストークンを取得します。 - SwitchBot 温湿度計や SwitchBot 加湿器の湿度を取得するには、deviceId が必要。
「SwitchBot 関連デバイスのリストを API を使って取得する」を参考に deviceId を取得します。 - IoT データ可視化サービス Ambient については「IoT データ可視化サービス Ambient を使って Nature Remo E lite から取得した電力使用量をグラフ化する(まとめ)」で紹介しています。
プログラムの紹介
import requests
import datetime
import ambient
REMO_API_TOKEN = "Nature Remo Cloud API アクセストークンをここに書く"
SWITCHBOT_API_TOKEN = "SwitchBot のアクセストークンをここに書く"
AMBEIENT_CHANNEL_ID = "Ambient チャネル ID をここに書く"
WRITE_KEY = "Ambient ライトキー ID をここに書く"
############################################################################
# Nature Remo 3の情報から温度情報を取得
############################################################################
def getRemoHumidity(intDeviceIndex):
url = 'https://api.nature.global/1/devices'
headers = { 'Authorization': 'Bearer ' + REMO_API_TOKEN, 'accept':'application/json' }
devices = requests.get( url, headers = headers ).json()
#デバッグ(うまく行かないときは、devicesを出力して確認する)
#print(devices)
remoHumidity = float(devices[intDeviceIndex]['newest_events']['hu']['val'])
print('Remo 3 Humidity Now:' + str(remoHumidity))
return str(remoHumidity)
############################################################################
# SwitchBot デバイスの情報から温度情報を取得
############################################################################
def getSwitchBotHumidity(strDeviceName, strDeviceId):
url = 'https://api.switch-bot.com/v1.0/devices/' + strDeviceId + '/status'
headers = { 'Authorization': 'Bearer ' + SWITCHBOT_API_TOKEN, 'accept':'application/json' }
devices = requests.get( url, headers = headers ).json()
#デバッグ(うまく行かないときは、devicesを出力して確認する)
#print(devices)
#switchBotHumidity = float(devices[0]['body']['humidity'])
switchBotHumidity = float(devices['body']['humidity'])
print(strDeviceName + '(' + strDeviceId + ') Humidity Now:' + str(switchBotHumidity))
return str(switchBotHumidity)
############################################################################
# メイン処理
############################################################################
def main():
print('Start')
############################################################################
# 湿度値取得
############################################################################
# 湿度値取得(Nature Remo 3)
#
# 引数の1:Natrue Remo のデバイスインデックス=1という意味
# かげさんの場合は、Natrue Remo のデバイスを2つ持っていて
# Nature Remo のデバイスリストを Nature Remo Cloud API で取得すると
# 下記のようになる
# Natrue Remo のデバイスインデックス=0:Nature Remo E lite
# Natrue Remo のデバイスインデックス=1:Nature Remo 3
# なのでNature Remo 3の湿度を取得する関数を呼び出すイメージ
#
remo3Humidity = getRemoHumidity(1)
# 湿度値取得(SwitchBot 温湿度計)
#
# かげさんの場合、SwitchBot 温湿度計を3つ持っているので
# その「置き場所」と「deviceId」を引数として SwitchBot 温湿度計の湿度の取得関数を呼び出す
# 「置き場所」はデバッグするときに使います。
#
meter1Humidity = getSwitchBotHumidity('玄関温湿度', '玄関に置いている SwitchBot 温湿度計の deviceID をここに書く')
meter2Humidity = getSwitchBotHumidity('デスクトップ横温度', 'デスクトップ横に置いている SwitchBot 温湿度計の deviceID をここに書く')
meter3Humidity = getSwitchBotHumidity('窓側温湿度', '窓側に置いている SwitchBot 温湿度計の deviceID をここに書く')
# 温度値取得(SwitchBot 加湿器)
#
# 現状は、SwitchBot 加湿器の湿度を【正しく取得できていない】が、
# 一応データ取得方法はSwitchBot 温湿度計と同じパラメータなので呼び出している
#
HumidifierHumidity = getSwitchBotHumidity('加湿器', 'SwitchBot 加湿器の deviceID をここに書く')
############################################################################
# Ambient に送信
############################################################################
am = ambient.Ambient( AMBEIENT_CHANNEL_ID, WRITE_KEY)
createdDateTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S');
#print(createdDateTime)
# dn:n=1~5(データ1~データ5の略がd1~d5。データの数は、必要に応じて8個=d8まで追加可能)
# d1:玄関のSwitchBot温湿度計の温度
# d2:Nature Remo 3 の温度
# d3:デスクトップ横のSwitchBot温湿度計の温度
# d4:SwitchBot加湿器の温度
# d5:窓側のSwitchBot温湿度計の温度
#
r = am.send( {'created': createdDateTime, 'd1': meter1Humidity, 'd2': remo3Humidity, 'd3': meter2Humidity, 'd4': HumidifierHumidity, 'd5': meter3Humidity} )
#デバッグ(うまく行かないときは、rを出力して確認する)
#print(r)
print('End')
############################################################################
# ここからスタート
############################################################################
if __name__=="__main__":
main()
プログラム実行イメージ
明らかにおかしい紫色が SwitchBot 加湿器のグラフです。
だったら、 SwitchBot 加湿器の値を出さなきゃ良いんですが、それだとグラフの例を出すのに1日くらい待たないとイケナイから、そのまま掲載しました。(;^_^A
あとがき
今回は、湿度グラフを作るプログラムの紹介でした。
分からないことがあれば、この記事へのコメントか Twitter で連絡いただければと説明しますので、お気軽にどうぞ。
次回は湿度グラフのプログラムを紹介します。
ここまではOKだ
コメント
このブログの新着コメントをRSSリーダに登録する為のxml