できること

画面付きラズパイ「reTerminal」でつくる室内環境確認デバイス!

第4回:測定したデータからエアコンなどに連携してホームオートメーション!

第1回: reTerminalと各種センサを使った室内環境測定器の制作準備
第2回: 温室度センサと二酸化炭素センサで快適な室内チェック
第3回:天気情報から、熱中症や天気痛情報を表示

 

こんにちは、ヨシケンです!

今回の連載では、ラズパイ(Raspberry Pi) Computeモジュールに液晶画面が一体となった「reTerminal」というデバイスを活用し、昨今のコロナ禍において重要な室内空気環境の見える化と、理想的な環境づくりができるセンサデバイスを制作しています。

今回は、これまで計測して表示した不快情報などから、それに応じてエアコンなどを動かすホームオートメーションに挑戦しようと思います。

[ 室内環境測定デバイス ]

 

今回の記事の流れ

  1. reTerminalから他の機器に接続
  2. 不快指数からエアコンを自動でスイッチオン
  3. 二酸化炭素濃度からカーテンを開ける
  4. 全体をまとめて使って完成!
  5. まとめ

デバイスに必要なもの一覧:

 

名前、説明 デバイス
reTerminal
Seeed社が提供するRaspberry Pi Compute Moduleを使ったデバイス。
二酸化炭素センサGPSを使った位置情報の取得が可能。
温湿度センサ温度、湿度が計測できるデジタルセンサです。
Grove Base HAT for Raspberry Piラズパイの40ピンに差すだけで、Grove端子が簡単に接続できるハット型拡張機。
モバイルバッテリ、外装、ケーブルなど。 必要に合わせて
SwitchBot Hub Miniスイッチボット製品で、リモコンなどを登録し、遠隔から操作できるデバイス。
SwitchBot Curtainスイッチボット製品で、カーテンレールに取り付け、カーテンの開け閉めを遠隔から操作できるデバイス。
SwitchBot Plugスイッチボット製品で、コンセントのオン・オフを遠隔から操作できるデバイス。

1. reTerminalから他の機器に接続

reTerminalのラズパイから、自動で家庭内のものに接続して、遠隔から操作することができます。そんな便利なホームオートメーションの仕組みを備えたものに、SwitchBotがあります。

SwitchBot製品には、電源をコントロールするものや、赤外線リモコンを使えるもの、カーテンの開け閉めなどさまざまな機器に使えるものを揃えることが可能。これをラズパイからAPI経由で接続して、エアコンやカーテンを操作できるようにします。

[SwitchBot Hub Mini]

 

まずSwitchBot Hub Miniというデバイスを用意します。これは、赤外線リモコンなどを登録して、それをアプリやインターネット経由で操作することができるものです。

赤外線以外にも、Hub Miniと電源をコントロールするPlugを接続したり、カーテンを操作することができます。SwitchBotを設定するためには、まずSwitchBotのアプリをスマホにインストールします。

https://apps.apple.com/jp/app/switchbot/id1087374760

 

アプリがインストールできたら、それを開いてラズパイなどからAPI経由で接続できるトークンを取得します。設定画面上の「アプリバージョン」の部分を10回タップすると、下に「開発者向けオプション」というメニューが出てきます。ここから開発者用画面に遷移してください。開発者画面上に表示されている「トークン」をコピーしておきましょう。

 

このトークンと、SwitchBotに用意されたAPIを使って、ラズパイからSwitchBotに接続してみましょう。SwitchBotと同じWi-Fiに接続しているパソコンを用意して、コンソールを立ち上げます。APIを実行するのに、curlというコマンドを使って、直接APIを叩きます。

SwitchBotに接続されたデバイスを表示するAPIは、以下のようになります。下の****の部分に、先ほどのトークンをペーストして、実行してください。

curl --request GET 'https://api.switch-bot.com/v1.0/devices' \
--header 'Authorization: *****' \
--header 'Content-Type: application/json; charset=utf8'

この結果、以下のようなデバイスを確認、表示することができました。

{"statusCode":100,"body":{
  "deviceList":[
	{"deviceid":"XXXX","deviceName":"ハブミニ","deviceType":"Hub Mini", "hubDeviceid":"000000000000"},
	{"deviceid":"YYYY","deviceName":"カーテン","deviceType":"Curtain", "enableCloudService":true,"hubDeviceid":"XXXX","curtainDevicesIds":["YYYY"],"calibrate":true, "group":false,"master":true,"openDirection":"left"}],
  "infraredRemoteList":[
	{"deviceid":"ZZZZ","deviceName":"AirCon","remoteType":"Air Conditioner", "hubDeviceid":"XXXX"}]}, "message":"success"}

この中で最初に、ハブミニと表示されたデバイスを使っていきます。

[SwitchBot Hub Mini]

2. 不快指数から自動でエアコンをオン

第2回で作った室温と湿度から計算した不快指数の数値を利用したいと思います。元々は不快指数が閾値を超えたら室温を下げるようにメッセージを出していたのですが、SwitchBotを使って促すだけでなく自動でエアコンをつけてしまいましょう。

 

不快指数が85以上の危険な状態になったら、自動でエアコンを作動するようにします。まず、SwitchBot Miniの赤外線記憶機能を使って、エアコンを登録します。アプリを立ち上げて、ハブミニを選択。そこで赤外線リモコンの中から「エアコン」を選びます。

 

ハブミニにエアコンのリモコンを近づけて、リモコンの信号を覚えさせます。エアコンのリモコンが登録できると、このような画面になります。まずON、OFFや温度を変えて、スマホからハブミニ経由でエアコンが操作できるか試して見てください。

 

それでは、これをラズパイから実行してみます。先ほどと同様にCurlを使ってコマンドラインから、赤外線リモコンを操作するAPIを実行します。以下は、エアコンの温度を26度でオンにするAPIのパラメータです。ZZZZにHub Miniに設定したエアコンのdeviceidをセットします。

"deviceid":"ZZZZ","deviceName":"AirCon","remoteType":"Air Conditioner"

****は先ほど取得したトークンを入れます。これをSwitchBotと同じWi-Fi上にあるパソコンから実行してみると、ラズパイからエアコンが動いたでしょうか?

curl --request POST "https://api.switch-bot.com/v1.0/devices/ZZZZ/commands" \
--header "Authorization: ****" \
--header "Content-Type: application/json; charset=utf8" \
--data-raw '{
"command": "setAll",
"parameter": "26, 1, 1, on",
"commandType": "command"
}'

これができたら、reTerminaのNODE-Redの画面上から、SwitchBotのリモコンを動かせるようにします。まず、NODE-Redの画面から、Functionを選び、先ほどのAPIを以下のように記述します。

 

headersにトークン情報などを指定します。msg.payloadがbody部分で、先ほどの ”26,1,1,on” などの温度指定のパラメータをセットします。

 

そこから、APIのリクエストをPostする、http requestノードをつなげます。http requestのURLは、SwitchBotが提供するAPIを起動する以下のようなURLです。ZZZZはもちろん起動させたいデバイスのdeviceidを入れます。

https://api.switch-bot.com/v1.0/devices/ZZZZ/commands

 

では左側のトリガーを押して、手動でこのリクエストを起動してみましょう。

リクエストが成功すると、右側のデバッグのところに”message”: “success”と出てきたら正常に実行されています。エアコンもちゃんと動いているでしょうか?

 

NODE-Redからエアコンが動いたら、不快指数と連動させましょう。不快指数が3の時に、エアコンを自動で設定温度を26度で実行するような、Switchノードを作ります。

不快指数計測(DIノード)から上記のSwitchノードを接続し、それが3の場合に先ほどのAPI Requestに繋げます。不快指数を表示しているbuttonを押しても、手動でエアコンが動かせるようにしました。

 

実際、下のような不快指数が高いシチュエーションで、自動でエアコンが動くかどうか試してみてください。

 

3. 二酸化炭素濃度から自動でカーテンを開ける

同様に第2回で使用した二酸化炭素濃度から、換気を促すように機器を動かせるようにしましょう。二酸化炭素濃度は、以下のように1,500ppmを超えて、換気しないと危険になったら、作動するようにします。

 

SwitchBotにはカーテンレールに付けて、自動でカーテンの開け閉めができるSwitchBot Curtainという機器もあります。換気を促すために窓まで開けるのは難しいですが、カーテンが自動で動くことにより、換気するのを動機付けられると思います。

 

SwitchBotのページを見て、上の写真のようにカーテンレールにSwitchBot Curtainを取り付けます。HubMiniと同様にアプリ上にも、カーテンの開け閉めの設定を施しておきます。

 

SwitchBotカーテンのAPIを動かすためのID、コマンドは以下のようになります。SwitchBotのカーテンを全開させるには、APIのYYYYにカーテンのdeviceidを、****にはトークンをセットします。

{"deviceid":"YYYY","deviceName":"カーテン","deviceType":"Curtain",

curl --request POST "https://api.switch-bot.com/v1.0/devices/YYYY/commands" \
--header "Authorization: ****" \
--header "Content-Type: application/json; charset=utf8" \
--data-raw '{
"command": "turnOn",
"parameter": "default",
"commandType": "command"
}'

 

これをNODE-RedのFunctionに設定します。

 

二酸化炭素濃度を測ってそこからカーテンを開けるようなノードはこのようになりました。

 

また、同じような設定で、カーテンに追加してSwitchBotのPlugを使うことで、扇風機を自動でオンさせるようにもできます。セットアップやAPIもこちらのAPIドキュメントを見れば、ほぼ同じように設定できますので、Plugを持っている人はやってみてください。

 

4. 全体を組み合わせて動かしてみよう

それでは、今回のreTerminalデバイスを部屋に設置して、動かしてみましょう。reTerminalを写真立ての中にデコレーションすると、部屋のインテリアのようになっていいかもしれません。

 

横に、温湿度センサや二酸化炭素センサを設置して、reTerminalの画面もぴったり収まってこのような感じになりました。

 

そしてNODE-REDを立ち上げて、ダッシュボード画面を表示します。

 

動いているNODE-Redの最終的なフローはこのようになっています。ちょっと複雑ですが、これまで設定した以下の機能を組み合わせたものになりました。

  • 温湿度センサから不快指数の計測、そしてその結果からクーラーを動かすノード
  • 二酸化炭素センサから換気指数を計測し、そこからカーテンを自動で動かして、換気を促す
  • 天気予報から熱中症指数、気圧の変化から天気痛の注意を促し、表示

 

それでは部屋の中において、計測してみましょう。

写真のように室温が30度以上になって不快指数が高まると、エアコンが動き出します。また、二酸化炭素濃度が1500ppm以上になって、換気注意となるとカーテンが開きます。

上記のフローでは、不快指数が下がったり二酸化炭素濃度が下がると、エアコンがオフになったり、カーテンが自動で閉まるようにできますよ。

 

このようにすべてが連動して動きました。他のSwitchBotプラグを使うことにより、扇風機や加湿器とも連動できると思います。

 

また、reTerminalについている光センサから、窓際において、朝日が上がって外が明るくなってきたら自動的にカーテンを開けたり、夕方に閉じたりといったことも可能です。

 

さまざまなものと連動させてホームオートメーションができますので、色々挑戦してみると面白そうですね。

 

5. まとめ

今回の連載ではRaspberryPi Compute Moduleが入ったreTerminalを活用し、二酸化炭素センサなどを使って室内環境を計測。そして数値から効率的に部屋の換気がおこなえるようなデバイスを制作し、最終回の今回では、計測した値から家の中の機器を動かすホームオートメーションに挑戦しました。室温、湿度が一定数を超えて不快指数が上がると、自動でエアコンをつけて快適になったり、二酸化炭素濃度では、ある一定の濃度を超えると自動でカーテンを開けたりと、換気を促す仕組みまで構築することに成功しました。

 

他にもPlugなどのSwitchBotのデバイスを追加して、自動で家内の家電をON、OFFなどすることもできます。reTerminalにはさまざまなセンサを付けることができますし、他の機器とのAPI接続も可能なので、アイデア次第でいろいろなホームオートメーションにも応用できそうです。他にも多くの機器とつないで、家の中を便利にしていってみると面白そうですね!

 

今回の連載の流れ

第1回: reTerminalと各種センサを使った室内環境測定器の制作準備
第2回: 温室度センサと二酸化炭素センサで快適な室内チェック
第3回:天気情報から、熱中症や天気痛情報を表示
第4回:測定したデータからエアコンなどに連携してホームオートメーション!(今回)

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net

自動水やりマシンを作ろう