【Home Assistant(Hass.io)】
IFTTTでGoogle AssistantとHome Assistantの連携!
「Home Assistant(Hass.io)でホームオートメーション 再起動!」シリーズです。
汎用赤外線リモコンをぐーぐる経由で操作できるようにしましょう。
以前スマートコンセント(につながったクリスマスツリー)をぐーぐるから操作できるようにしました。
今回は、UIとかIntegrationとかのバージョンも上がっているので、寝室の電気を点ける、を題材に連携を設定してゆきましょう。
- 【Home Assistant(Hass.io)】 IFTTTでGoogle AssistantとHome Assistantの連携!
- 1. サービス間連携IFTTT
- 2. Home Assistant側での準備
- 3. IFTTTのアプレットを定義する
- 4. おわりに
この記事の前提条件 | |
---|---|
Home Assistant | 0.114.1 |
HassOS | 4.12 |
Server | Raspberry Pi 4(2GB) |
1. サービス間連携IFTTT
「OK、ぐーぐる」とHome Assistantの間を繋ぐのに、サービス間連携の仕組みIFTTT(IF This Then That)を使うことにします。
連携の流れは、下記のような感じです。
「OK、ぐーぐる …」 ⇒ Google Assistant(のサービス) ⇒ IFTTT ⇒ Home Assistant(のサービス) ⇒ 汎用赤外線リモコン(から操作される寝室の電灯)
つまり
- IF Thisパート: もし私が「OK、ぐーぐる、ベッドルームの電気を点けて」と言ったら(とGoogle Assistantが検知したら)
- Then Thatパート:Home Assistantの外部サービスを呼び出して、汎用赤外線リモコンで寝室の電気(Panasonicのシーリングライト)へ赤外線でオンのコマンドを送信する。
と言った具合です。
2. Home Assistant側での準備
下記のHome AssistantのIFTTT関連のマニュアルの「Sending events from IFTTT to Home Assistant(IFTTTからのイベントをHome Assistantで受け止める)」の部分を設定する。 www.home-assistant.io
2.1. Configuration.yaml設定・設定確認
Home Assistantを外から呼べるようにするためには、下記条件が必要です。
- httpsでHome Assistantに接続できるようになっていること(下記設定ファイルでssl_ほにゃほにゃが設定されていること)
- DNSでサイト名引けるようになっていること
- 下記設定ファイルにexternal_urlが設定できていること
まあ、DuckDNSの設定をAdd-onでしていれば、このあたりはクリアしているはず。 不足があればこのタイミングで書き加えておく。
(前省略) homeassistant: (中略) external_url: "https://maky-home.duckdns.org" (中略) http: ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem (後省略)
つぎに、外からHome Assistantの機能を呼び出すサービス(webhook)をAutomationを使って設定する (ほぼおまじないと思って設定する)。 Home Assistantの最近の流れはAutomationもUIで設定する方向に。直接configuratin.yamlを編集するときは、automation old:
としてしなければならない、となっています。
(前省略) #**************************************************************** # automation for IFTTT #**************************************************************** automation old: - alias: The optional automation alias trigger: - event_data: action: call_service event_type: ifttt_webhook_received platform: event condition: [] action: - data_template: entity_id: '{{ trigger.event.data.entity_id }}' service_template: '{{ trigger.event.data.service }}' (後省略)
一度再起動しておく。
2.2. Webhook IDの取得
外からHomeAssistantのサービスを起動するためのインターフェースというか何というかがWebhook(Webサービスをひっかけるとっかかり、という感じかな)という機構なのですが、それを使えるようにする手順です。まずは左側のサイドメニューから「設定」を選んで、右画面の「Integrations」を選び、右下のオレンジの+で新しいIntegrationを追加します(このあたりもアプリのアイコンが追加されて、昔のバージョン(0.95)に比べてわかりやすくなりました)。
リストから「IFTTT」を選択すると、「Set up the IFTTT Webhook Applet(IFTTTのWebhookアプレットを設定するかい?)」って聞かれるので「送信」を選択。
すると「Success!」という子画面が表示されます。この画面とっても重要です。3.2で設定する内容がここで生成され表示されるのですが、なんとこの画面「一度」しか表示されないのです!!
ここで一旦「完了」を押してしまうと、表示されている「Integrations」の中の「IFTTT」パネルのどこにも上記画面で表示された情報はありません。ということで、先ほどの画面が出たら少なくともURLパートはコピペしてどこかにメモっておきましょう。絶対ですよ。
.../api/webhook/<長い長い文字列>
の長い長い文字列が私のHome AssistantのWebhookのIDなのです。
残念なことに、このIFTTT連携用のWebhook IDは一個しか作ってくれません。つまり忘れちゃったら「作り直すしかない」のです。作り直したら以前作ったIDは無効に!!!ということは… 。
IFTTTのアプレットをすべて修正するという苦行を起こさないためにも、くれぐれも気をつけくださいね。
3. IFTTTのアプレットを定義する
まずIFTTT(https://ifttt.com/)のサイトに行き、Google Assistant(Google Home/Home mini/Nest Hub)で使っているGoogleのアカウントでログインします。こうしておくとGoogle Assistant連携がスムーズに行く(と思う)。
画面右上のユーザアイコンの中で「Create」を選択するとIFTTTのアプレット生成画面がスタートします。
3.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」すると次のパートに進めます
3.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
(これが2.2で取得したURLです。ちゃんとメモってありますよね) - Method: POST
- Content-Type: application/json
- Body: { "action": "call_service", "service": "switch.turn_on", "entity_id": "switch.bedroom_light_pana_ch3_rm31" }
で、「Create action」を押すと、「Review & Finish(確認と終了)」が出ますが確認しようがないのでここは「Finish」で終了!
おお、これでやっと終わりです。
これでGoogle Home/Home mini/Nest Hubに向かって「ねぇ、ぐーぐる、ベッドルームの電気をつけて」と言えば、「はい、ベッドルームの電気をつけます」とスマートスピーカーがお答えしつつ、(うまくいけば)シーリングライトがが点灯します。
4. おわりに
さあこれからはWebhookは使い放題なので設定楽なはず。なので、どんどん音声コマンドを設定してゆきましょう。