スマートリモコン 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 getRemoTemperature(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)
remoTemperature = float(devices[intDeviceIndex]['newest_events']['te']['val'])
print('Remo 3 Temperature Now:' + str(remoTemperature))
return str(remoTemperature)
############################################################################
# SwitchBot デバイスの情報から温度情報を取得
############################################################################
def getSwitchBotTemperature(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)
#switchBotTemperature = float(devices[0]['body']['temperature'])
switchBotTemperature = float(devices['body']['temperature'])
print(strDeviceName + '(' + strDeviceId + ') Temperature Now:' + str(switchBotTemperature))
return str(switchBotTemperature)
############################################################################
# メイン処理
############################################################################
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の温度を取得する関数を呼び出すイメージ
#
remo3Temperature = getRemoTemperature(1)
# 温度値取得(SwitchBot 温湿度計)
#
# かげさんの場合、SwitchBot 温湿度計を3つ持っているので
# その「置き場所」と「deviceId」を引数として SwitchBot 温湿度計の温度の取得関数を呼び出す
# 「置き場所」はデバッグするときに使います。
#
meter1Temperature = getSwitchBotTemperature('玄関温湿度', '玄関に置いている SwitchBot 温湿度計の deviceID をここに書く')
meter2Temperature = getSwitchBotTemperature('デスクトップ横温度', 'デスクトップ横に置いている SwitchBot 温湿度計の deviceID をここに書く')
meter3Temperature = getSwitchBotTemperature('窓側温湿度', '窓側に置いている SwitchBot 温湿度計の deviceID をここに書く')
# 温度値取得(SwitchBot 加湿器)
#
# 現状は、SwitchBot 加湿器の温度を【正しく取得できていない】が、
# 一応データ取得方法はSwitchBot 温湿度計と同じパラメータなので呼び出している
#
HumidifierTemperature = getSwitchBotTemperature('加湿器', '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': meter1Temperature, 'd2': remo3Temperature, 'd3': meter2Temperature, 'd4': HumidifierTemperature, 'd5': meter3Temperature} )
#デバッグ(うまく行かないときは、rを出力して確認する)
#print(r)
print('End')
############################################################################
# ここからスタート
############################################################################
if __name__=="__main__":
main()
プログラム実行イメージ
明らかにおかしい紫色が SwitchBot 加湿器のグラフです。
変化があるのが何のタイミングなのか未だによく分からない…(´・ω・`)
だったら、 SwitchBot 加湿器の値を出さなきゃ良いんですが、それだとグラフの例を出すのに1日くらい待たないとイケナイから、そのまま掲載しました。(;^_^A
あとがき
今回は、温度グラフを作るプログラムの紹介でした。
分からないことがあれば、この記事へのコメントか Twitter で連絡いただければと説明しますので、お気軽にどうぞ。
次回は湿度グラフのプログラムを紹介します。
ここまではOKだ
赤外線リモコンの代わりに、スマホを使って家電を操作できます。外出先からでも家の家電を操作することができるので、家に帰る前にエアコンをつけたりすることができます。Google Home、Amazon Echo、Apple HomePod などのスマートスピーカーと連携させることで、スマート家電ではない家電も音声で操作できるようになります。※スマートスピーカーがなくてもスマホから家電を操作することは可能です。
赤外線リモコンの代わりに、スマホを使って家電を操作できます。外出先からでも家の家電を操作することができるので、家に帰る前にエアコンをつけたりすることができます。Google Home、Amazon Echo、Apple HomePod などのスマートスピーカーと連携させることで、スマート家電ではない家電も音声で操作できるようになります。※スマートスピーカーがなくてもスマホから家電を操作することは可能です。
より大きく、より頼もしい。3インチのTNパネルを採用し、ディスプレイ表示がより見やすく、どこからでも温湿度が一目でわかります。そして、「乾燥」「快適」「湿潤」の快適レベルで部屋の快適さをよりわかりやすく把握できます。ペットや植物などに合わせた快適レベルのカスタマイズも可能です。
SwitchBot 温湿度計 デジタル スマート家電 高精度 スイス製センサー スマホで温度湿度管理 熱中症対策 アラーム付き グラフ記録 Alexa、Google home、HomePod、IFTTT に対応(ハブ必要)
コメント
このブログの新着コメントをRSSリーダに登録する為のxml