どうも、CHASUKEです。
またまた『Integromat』ネタです。
前回、Google HomeからIFTTT経由でIntegromatを呼び出し、受取値でエアコン暖房をつけるシナリオを作りました。
https://chasuke.com/wp/integromat2/
今回は、さらにパワーアップし、Google Homeに「部屋をいい感じにして!!」と言って、Remo搭載の温度センサーやエアコンのステータスを取得し、良い感じにエアコンが操作するシナリオを考えてみました。
ポイントは、「HTTPモジュール」を使ってRemoからデータを取得し、そのデータを使って処理を分岐(ルーター)させているところです♪
ここまで使えるようになると、アイデア次第でかなり遊べます。スマートホームの強い味方になると思います。ではいってみましょう。
作成したシナリオ
上記シナリオでは、エアコン設定温度と部屋温度をAPIで取得し、そのデータをもとにエアコン操作APIの実行判定をしています。
①「エアコン=ON」かつ「設定温度 - 部屋温度 >= 5」 なら
→(部屋が理想温度に近いため)電源をOFFにする
②「エアコン=OFF」かつ「設定温度 - 部屋温度 >= 10」 なら
→(部屋が理想温度まで遠いため)電源をONにする
▼簡単に説明していきます。
①Webhooksモジュールで呼出。
②Remoから温度センサー値を取得。
③Remoから各アプライアンス情報を取得。
④各アプライアンス情報からエアコンのアプライアンス情報を取得。このアプライアンス情報にエアコンの現在の設定情報が入っています。
⑤得た情報を使って条件分岐し、エアコン操作APIを実行。
エアコン自動制御シナリオの作り方
呼出用Webhooksモジュールの設置
Google Homeに「部屋を良い感じにして」と言えば、Integromatが呼び出されるようにIFTTTレシピを作成します。
Integromatのサインアップや呼出用Webhooksモジュールの作成方法は、こちらを参考してください。
https://chasuke.com/wp/remo_integromat/#Integromat-2
▼今回は不要ですが、IFTTTからIntegromatに飛ばしたリクエストデータを利用することも可能です。
https://chasuke.com/wp/integromat2/
Remoからセンサー情報を取得
APIリファレンスにある「/1/devices」を利用し、温度センサーの値を取得します。
▼WebhooksにHTTPモジュールを繋げて設定します。
▼設定内容
URL | https://api.nature.global/1/devices |
Method | GET |
Headers | accept:application/json |
Authorization:Bearer [アクセストークン] |
上記APIを実行するとJSONデータが返却されます。このデータをJSONモジュールを使ってパース(解析)します。
①JSON string
解析するJSONデータを指定する。上のHTTPモジュールから受け取る「Data」を選択。
②Data structure
JSONのデータ構造を指定します。「Add」からデータ構造を作っていきます。
③Generator
JSON構造を1から作るのは大変だが、ジェネレータ機能でめっちゃ楽できます。
▼「Generator」をクリックして、「Sample data」に実際の返却値であるサンプルデータを入力して「Save」してみましょう。
以下のサンプルデータを利用してもOKです。※id値などはマスクしてます。
{
"name": "Remo",
"id": "baaaaaa-bbbb-cccc-dddd-ffffffffffff",
"created_at": "2017-06-04T11:35:07Z",
"updated_at": "2018-03-07T14:24:20Z",
"firmware_version": "Remo/1.0.39-g41c1188",
"temperature_offset": 0,
"humidity_offset": 0,
"users": [
{
"id": "bbaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"nickname": "CHASUKE",
"superuser": true
}
],
"newest_events": {
"hu": {
"val": 20,
"created_at": "2018-03-07T14:53:16Z"
},
"te": {
"val": 18,
"created_at": "2018-03-07T14:11:51Z"
}
}
}
▼すげー簡単にできた!!!!!
これで、HTTPモジュールの返却値を各モジュールで利用できようになりました^^
ちなみにセンサー情報は、「newest_events」内にありますよ。
Remoの各アプライアンス情報を取得
ここでは、APIリファレンスにある「/1/appliances」を利用します。
センサー情報取得のときと同じで、URLが変わるのみです。
▼設定内容
URL | https://api.nature.global/1/appliances |
Method | GET |
Headers | accept:application/json |
Authorization:Bearer [アクセストークン] |
こちらのAPIの返却値もJSONデータとなり、「テレビ」「照明」「エアコン」などRemoに登録してある家電単位に複数かえされます。
▼こちらもまた、JSONデータをパースしていきます。
ジェネレータに食べさせるサンプルデータは返却されたリスト中にあるエアコン情報です。以下を貼り付ければOKです。(※処理に不要な箇所は削除してます)
{
"id": "baaaaaa-bbbb-cccc-dddd-ffffffffffff",
"device": {},
"model": {},
"nickname": "Toshiba AC 005",
"image": "ico_ac_1",
"type": "AC",
"settings": {
"temp": "26",
"mode": "warm",
"vol": "",
"dir": "",
"button": "power-off",
"updated_at": "2018-02-10T05:04:03Z"
},
"aircon": {},
"signals": []
}
リストから必要なJSONデータを抽出
Remoに登録されている家電分だけリストとなって返却されるので、今回はエアコン情報が必要なため、リストの中から抽出します。
▼モジュール間にあるスパナアイコンから「Set up a filter」を使います。
JSONデータにある「type」が「AC」のものがエアコン情報です。こうすることでリスト内から必要なデータだけを次の処理に流せます。
続いて、フィルターにて抽出したエアコン情報にある設定情報(温度、風量、ステータス)をJSONパースします。
▼JSONモジュール「Create JSON」にてJSONデータを作成します。
作成するJSON構造もジェネレータを使って簡単に作れます。作成したJSON(※settingData)に値をセットしていきます。
▼ジェネレータ用のサンプルデータはこんな感じ。
"settings": {
"temp": "26",
"mode": "warm",
"vol": "1",
"dir": "",
"button": "power-off",
"updated_at": "2018-02-10T05:04:03Z"
}
▼作成したJSONデータをパースします。
データ構造は上で作成した「settingData」を選びます。
これでエアコンの設定情報が後続の処理で使えるようになります^^
ルーターで条件判定を追加
最後の仕上げです。
得た情報を使ってエアコン操作を分岐させるためにルーターを利用しています。こちらもモジュール間のスパナアイコンから追加できます。
今回のシナリオでは、エアコンのオン/オフ操作の2つに分岐させています。
例えば、
「現在のエアコン.ステータス = オン」かつ「設定温度 - 部屋温度 >= 5」の場合、部屋が十分快適になっているのでエアコンを切る
という動きにするために、下記のように条件を指定します。
補足ですが、エアコンの設定情報の「button」が空であれば電源はオンです。そのため、「Does not exist」で電源オフか判定しています。
温度差の判定条件では演算がバッチリ使えています。数値をテキスト型で受け取っている場合は「parseNumber」で数値変換して演算します。
あとは、HTTPモジュールを設定して、好みのエアコン操作APIから実行すればOKです。温度や風量も演算して自由に切り替えることが可能です。
エアコン操作のHTTPモジュールはこちらを参考に。
最後に
結構長いシナリオになりましたが、デバッグが簡単にできます。
実行したシナリオを選択して、[HISTORY]-[Details] で実行時の動きを確認できます。取得したJSON情報や、条件判定時の値など細かく確認できて、とても便利です^^
これまでIntegromatネタで3つの記事を書いてみました。
https://chasuke.com/wp/remo_integromat/
https://chasuke.com/wp/integromat2/
これらを参考にすれば、自動化アイデアを形にできると思います。
ぜひ挑戦してみてください!!