どうも、CHASUKEです。
前回の記事で、Alexaスキル『Node-RED』で家電操作する方法をアップしたところ、
「Google HomeでNature Remoの連続実行したい。」というリクエストをいただきました。(※他にリクエストがありましたら、問合せからメールください)
https://chasuke.com/wp/alexanoderemo/
IFTTTのようなラズパイ不要のサーバーレス、ノープログラミングで実現する方法を考えてみました。IFTTTでは、基本的にトリガーに対してアクションが1つだけしか設定できませんし、「IFTTT Platform」を利用しても同一アクションが指定できず、詰みます。
→[参考] Google Home から IFTTT でマルチアクションを実現する方法
最終的に、IFTTTと比べて自由度が高い『Integromat』を経由することでNature Remoから赤外線を連続して飛ばすことに成功しました。
それでは、いってみましょう!!
Integromatとは?
IFTTTやZapierと同じく、WEBサービス同士をつなぐことができる自動化サービスです。海外のサービスなので、あまり周りで利用している人はいません..
フリープランが用意されており、無料で1000モジュール/月が利用できます。1シナリオではなく、シナリオ内で利用されるモジュール数が加算されます。1000もあれば十分です。この辺りは、後でわかると思います。
▼こちらの動画(約1分)でイメージが伝わると思います。
サーバーレスかつプログラミングレスで自由なAPIを作ったり、1つのトリガーに対して、複数のアクションをつなぐことができます。
今回は、試しに、Google HomeからNature Remoを使って、テレビのチャンネルを「1〜12」と3秒ごとに切り替えて総なめにするシナリオを作ってみました。
▼作った仕組みはこんな感じ
Nature Remoでは、信号を連続で飛ばすようなマクロ機能は用意されていません。また、1つのHTTPリクエストで複数の信号を飛ばすような便利なAPIも用意されていません。
連続実行を実現したい人は、参考にしてみてください。
Integromatでシナリオを作成する
Integromatでは、かなり自由度が高くて面白いことがたくさんできます。
今回はHTTPリクエストで呼出してから、Remoに一定間隔で連続してAPIアクセスする方法を説明していきます^^
Integromatアカウントを作成
アカウント登録してFreeプランで利用します。
▼サイトにアクセスして「Sign up」を選択。
名前やEmailを入力するとすぐに使えるようになります。
新規シナリオの作成
▼これがダッシュボード画面
さて、右上「Create a new scenario」からシナリオ作成します。
▼ここは何も入力せずに、右上「Continue」を選択
Webhooksモジュールを作成
▼これが、シナリオを作成する画面です。
中央の「?」にIFTTTでいうチャンネル(※integromatではモジュールと呼ぶ)を設定します。隣の時計マークはシナリオのスケジュールを定義するものですが、今回はWebhook起動するため、「immediately」でOKです。
▼モジュール一覧から「Webhooks」を選択します。シナリオの入口ですね。
それにしても、たくさんのモジュールが選択できますな。
▼Webhookモジュールの「Custom webhook」を選択します。
▼すると、こんな画面になります。
矢印の「Add」から、このシナリオのみで利用されるWebhookを作成します。
▼適当な名前をつけて「Save」します。
▼保存すると、URLが青く表示されています。
このWebhookを利用するためには、表示されているURLにアクセスしてリンク付けが必要になります。
▼適当なWebブラウザに入力してアクセスすればOKです。
Acceptedと表示されます。
▼画面に戻ると、「Successfuly determined」に変わってます。
これでOKです。シナリオを呼び出すときのURLになるのでコピーしておきましょう!!
HTTPモジュールを設定する
Nature Remoに命令を出すためのHTTPモジュールを作成して、APIを設定していきます。
▼今はこんな感じになっています。
モジュール横の「+」から新しいモジュールを追加できます。
▼HTTPモジュールを選択する。
▼「Make a request」を選びます。
▼中身のURLに、赤外線信号ID(赤枠)を含んだAPIを設定します。
URL | https://api.nature.global/1/signals/[赤外線信号ID]/send |
---|---|
Method | POST |
Body type | Application/x-www-form-urlencoded |
赤外線信号IDは、Remoアプリ内で登録した信号に割り振られているIDです。
IDの取得方法は過去記事のアプライアンスの取得を参考にしてください。
https://chasuke.com/wp/noderemo/#Appliances
▼例えば、取得したJSONファイルのidが赤外線信号IDになります。
"model": null,
"nickname": "ロボット掃除機",
"image": "ico_robot",
"type": "IR",
"settings": null,
"aircon": null,
"signals": [
{
"id": "aaaaaaaa-bbbb-cccccccc-aaaabbbbddddeeee",
"name": "電源オン",
"image": "ico_io"
},
{
"id": "aaaaaaaa-bbbb-cccccccc-aaaabbbbddddeeee",
"name": "ホームに戻る",
"image": "ico_return"
}
]
「URL」,「Method」,「Body type」を設定したら、「Advanced setting」にチェックしてHTTPヘッダーを設定していきます。
▼設定するヘッダー情報は1つ。
Authorizationに「Bearer [アクセストークン]」を指定して追加します。
これで、HTTPモジュールの設定は完了です。
▼こんな感じのシナリオが作成されました。
下部のアイコンから保存して、SCHEDULINGを「ON」とします。
この状態で、先ほどコピーしておいたWebhookをWebブラウザにて実行してみましょう。
Nature Remoから赤外線が飛べば成功です!!
モジュールの複製
赤外線送信を連続して実行するために、HTTPモジュールをたくさん作成する必要がありました。ただ中身は、ほとんど同じで赤外線信号IDが変わるくらいなので、モジュールの複製が超役立ちました。
▼HTTPモジュールを右クリックして「Clone」を選ぶ
複製してモジュールを繋いだら、中身のURLにある赤外線信号IDを目的のものに変更しましょう。
連続モジュールの実行間隔を指定する
今回のようにTVチャンネルを総なめにするような、シナリオだとモジュール間で実行間隔を取らないとテレビがつく前に次のチャンネル信号が飛んでしまいます。
▼モジュール間のペンチマークからモジュールを追加して、「Tools」を選択。
この「Tools」にある「Sleep」を作成します。
▼1秒から値を入力できます。
これを繰り返して完成したシナリオがこちら。
全部で14モジュールなので、1回シナリオ実行すると、フリープラン1000個分の14個が消費されます!!
IFTTTでGoogle Homeと紐づける
最後の仕上げとして、Google Homeから呼び出せるようにします。
Integromatには「Google Assistant」モジュールは用意されていないので、IFTTTでGoogle Homeと紐づけます。
▼IFTTTのWebhooksチャンネルにIntegromat呼出用のURLを設定します。
これで、利用できるようになりました!!!!
「OK、Google!! 全部のチャンネルをチェックして」
実行イメージをYoutubeにアップしたかったのですが、テレビ映すの微妙だったのでやめました..
IFTTTの使い方を詳しく知りたい人は、こちらを参考に。
https://chasuke.com/wp/smarthome-ifttt/
最後に
ここまで辿り着いた方、お付き合いありがとうございました。
目標にしていた、ラズパイ不要のサーバーレス、ノープログラミングでNature Remoの連続実行(マルチアクション)が無事に実現できました。
今回利用した自動化サービス『Integromat』は、Help英語でしたが翻訳しながら触っているとすぐに慣れました。めっちゃ使えるサービスだと感じます。
スマートホームと相性が良いので、これからも頻繁に使うと思います^^
それでは。