IFTTTでGoogle AssistantとHome Assistantの連携!
ああ、いつまでたっても「汎用赤外線リモコン」に到達しない…
しかしながら、クリスマスまでにツリーを音声コマンドで操作できるように設定したい、のです。この手続きは「汎用赤外線リモコン」でも活用しますし(言い訳)。
- IFTTTでGoogle AssistantとHome Assistantの連携!
- 1. まえがき
- 2. サービス間連携IFTTT
- 3. Home Assistant側での準備
- 4. IFTTTのアプレットを定義する
- 5. おわりに
1. まえがき
Home AssistantのWebページ(やAndroid/iOSアプリ)からクリスマスツリーを点灯・消灯できるようになりました(この記事)。しかし折角Google Home/Home mini/Nest Hubがあるのですから、「OK、ぐーぐる」で点灯できると家人へのインパクトも大!でしょう。まるで魔法のよう!
2. サービス間連携IFTTT
「OK、ぐーぐる」とHome Assistantの間を繋ぐのに、サービス間連携の仕組みIFTTT(IF This Then That)を使うことにします。
連携の流れは、下記のような感じです。
「OK、ぐーぐる …」 ⇒ Google Assistant(のサービス) ⇒ IFTTT ⇒ Home Assistant(のサービス) ⇒ tp-link HS-105 (に繋がっているクリスマスツリー)
つまり
- IF Thisパート: もし私が「OK、ぐーぐる、クリスマスツリーを点けて」と言ったら(とGoogle Assistantが検知したら)
- Then Thatパート:Home Assistantの外部サービスを呼び出して、ip-link HS-105をオンにする。
と言った具合です。
3. Home Assistant側での準備
下記のHome AssistantのIFTTT関連のマニュアルの「Sending events from IFTTT to Home Assistant(IFTTTからのイベントをHome Assistantで受け止める)」の部分を設定する。 www.home-assistant.io
3.1. Configuration.yaml設定・設定確認
Home Assistantを外から呼べるようにするためには、下記条件が必要です。
- httpsでHome Assistantに接続できるようになっていること(下記設定ファイルでssl_ほにゃほにゃが設定されていること)
- DNSでサイト名引けるようになっていること(下記設定ファイルにbase_urlが設定できていること)
まあ、DuckDNSの設定をAdd-onでしていれば、このあたりはクリアしているはず。
(前省略) # Uncomment this if you are using SSL/TLS, running in Docker container, etc. http: base_url: !secret my_url ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem (後省略)
つぎに、外からHome Assistantの機能を呼び出すサービス(webhook)をAutomationを使って設定する (ほぼおまじないと思って設定する)。
(前省略) #**************************************************************** # automation for IFTTT #**************************************************************** automation old: trigger: platform: event event_type: ifttt_webhook_received event_data: action: call_service action: service_template: '{{ trigger.event.data.service }}' data_template: entity_id: '{{ trigger.event.data.entity_id }}' (後省略)
3.2. Webhook IDの取得
外からHomeAssistantのサービスを起動するためのインターフェースというか何というかがWebhook(Webサービスをひっかけるとっかかり、という感じかな)という機構なのですが、それを使えるようにする手順です。まずは左のパネルの「設定」を選んで、右画面の「Integrations」を選び、右下のオレンジの+で新しいIntegrationを追加します。リストから「IFTTT」を選択すると、「Set up the IFTTT Webhook Applet(IFTTTのWebhookアプレットを設定するかい?)」って聞かれるので「送信」を選択。
すると「Success!」という子画面が表示されます。この画面とっても重要です。4.2で設定する内容がここで生成され表示されるのですが、なんとこの画面「一度」しか表示されないのです!!
一旦「完了」を押してしまうと「Integrations」の中の「IFTTT」を押しても下記の様に冷たいメッセージしか表示されません。ということで、先ほどの画面が出たら少なくともURLパートはコピペしてどこかにメモっておきましょう。絶対ですよ。
.../api/webhook/<長い長い文字列>
の長い長い文字列が私のHome AssistantのWebhookのIDなのです。
残念なことに、このIFTTT連携用のWebhook IDは一個しか作ってくれません。つまり忘れちゃったら「作り直すしかない」のです。作り直したら以前作ったIDは無効に!!!ということは…
(この記事を書くために2回ほど作り直して、その都度既に作ってあったIFTTTのほぼすべてのAppletのURLを設定しなおすことに…)
4. IFTTTのアプレットを定義する
まずIFTTT(https://ifttt.com/)のサイトに行き、Google Assistant(Google Home/Home mini/Nest Hub)で使っているGoogleのアカウントでログインします。こうしておくとGoogle Assistant連携がスムーズに行く(と思う)。
画面右上のユーザアイコンの中で「Create」を選択するとIFTTTのアプレット生成画面がスタートします。
4.1. IF Thisパートの設定。
上の画面のどこを押して進めたら良いか、イマイチ分かりづらいデザイン…
「+This」の部分が正解。
100種類以上のIF Thisに使えるサービスがタイルで列挙される(下図左)ので、ちょっと探し辛い。今回はGoogle Assistantを使いたいので、まずはGoogleと入れて絞り込むのが楽です。UI(タイル)で選択しやすいようにしているつもりで、結局テキスト入力が不可避、皮肉ですね。
「もし」の部分=起動条件(トリガーTrigger)を設定します。Google Assistantのサービスのトリガーは4つ。今回は、一番シンプルな「Say a simple phrase(単純な文を言う)」を使います。「単純な」というのは、数字やキーワードなど変数的なものを含まない固定的な(?)文章の事を指します。 下記の様に設定しました。
- What do you want to say?(何て言う?): クリスマスツリーの電気をつけて
- What's another way to say it? (それ、他の言い方では?):クリスマスツリーをつけて
- And another way?(他の言い方、もう一丁):(なし)
- What do you want the Assistant to say in response?(Google Assistantに何て応えさせる?):クリスマスツリーの電気をつけます
- Language: Japanese
ちなみに、気が付く人は気が付いているかもしれませんが、「Google Assistantに何て応えさせる」は後段の成功失敗にかかわらず「応え」てくれます。たとえHome Assistantのサービス呼び出しに失敗しても気にしません。
だって「IF This」パートの設定画面にあるんですよ、したがって、まあ「条件うけたまわり!」ぐらいの感じの応答にするのが良いでしょう。「電気をつけました」ではなく「電気をつけます」とか。
「Create Trigger」すると次のパートに進めます
4.2. Then Thatパートの設定
IFTTTの流儀が見えてきましたか?「+That」を押すと実行パートのサービス設定ができます。
Home Assistantの外部からの呼び出しサービスを利用するのにWebhooksという機構を使いたいのですが、またしても山の様なThen Thatに使えるサービスが列挙されてうんざり…さっさとあきらめて検索窓に「Web」と入れて絞り込みます。
このサービスには「Make a web request」しかありませんのでそれを選択して、「Complete action fields(アクションの設定項目を埋める)」に従って下記の様に埋めていきます。
- URL:
https://xxxxx.duckdns.org/api/webhook/長い長いwebhook_id
(これが3.2で取得したURLです。ちゃんとメモってありますよね) - Method: POST
- Content-Type: application/json
- Body: { "action": "call_service", "service": "switch.turn_on", "entity_id":"switch.christmastree"}
で、「Create action」を押すと、「Review & Finish(確認と終了)」が出ますが確認しようがないのでここは「Finish」で終了!
おお、これでやっと終わりです。
これでGoogle Home/Home mini/Nest Hubに向かって「ねぇ、ぐーぐる、クリスマスツリーをつけて」と言えば、バチンというHS-150のリレー音が響き渡ってクリスマスツリーのライトが点灯します。ふう、結構長かったねぇ、設定。でもこれでWebhookは使い放題なので、次からは楽になるはずです。
5. おわりに
よおし、クリスマスに間に合った…
さてと、次は、本当の本当にほんとうに(?)汎用赤外線リモコンか!?乞うご期待。
【Home Assistant(Hass.io)でホームオートメーション目次】
- RaspberryPiにHome Assistant導入
- Home Assistant初期設定
- 環境センサー(Omron)を接続
- スマートコンセントでクリスマスツリー点灯!
- スマートディスプレイ
- OK、ぐーぐる、クリスマスツリーを点けて(IFTTT連携)《今回》
- 汎用赤外線リモコンを接続《次回》
- UIを改善