桐生の一人暮らし寒すぎて凍りそうな話 (後編)
===
:::info
この記事は[群馬大学電子計算機研究会 IGGG Advent Calendar 2017](https://adventar.org/calendars/2300) 24日目の記事です
:::
このアドベントカレンダーも最終日となりました.寄稿されたみなさま,お疲れ様でした.また,ご覧になってくださった方々,ありがとうございました.
---
この記事は[前回](https://hackmd.io/s/HJMdoOcGG)の続きです.
[TOC]
---
## スマートホームなら"声"でしょ
声で操作するスマートスピーカーが2017年下半期のIoTデバイスのトレンドになりました.
LINEからClovaシリーズ,AmazonからAmazon Echoシリーズが発売され,GoogleからもGoogle Homeシリーズが登場しました.
## Google Homeでスマートホーム?
2017年12月上旬にインターネットメディアを賑わせたGoogle Homeのセールは記憶に新しいと思います.
多くの家電量販店やECサイトでGoogle Homeが30%〜半額近くまで値下がり,Google Home Miniに至っては半額の3,000円前後で購入できるというセールが開催されました.[^1]
[^1]: https://akiba-pc.watch.impress.co.jp/docs/wakiba/find/1094438.html
これの背景には,同時期にAmazon Echoが発売されたものの,招待制であることや,招待メールがごく一部の人にしか届いていなかったための施策というものが考えられます.
実際,私もAmazon Echoの招待リクエストを送ったもののメールが届いておらず,Google Home Miniの購入を決めました.
### Google Homeと既存自作スマートホームの連携
Google Homeはウェイクワード「OK, Google」および「ねぇ,Google」を起点としてGoogle Assitantを呼び出し操作を行います.
これらに自作のアクションを組み込む方法としてIFTTTを利用する方法とActions on Googleを利用する方法が大きく分けるとあります.
#### IFTTT
IFTTTは,前編でも紹介したツールです.これらは,トリガーを起点として様々なアプリケーションを呼び出すことができます.もちろんGoogle Assistantも対応しています.
IFTTTを使う場合,対応するワードを自分で決めることができます.例えば,`ツイッターで$と投稿`というワードにしておけば,Twitterに`$`内のワードを投稿するということが出来ます.
#### Actions on Google
Actions on Googleでは,Google Assitant対応アプリを作成することができます.これは,`(アプリ名)につないで`と呼び出し,そこからアプリ内部で処理することになります.
### やってみようIFTTT
今回はIFTTTを用いました.IFTTT自体もSlackへ投稿する機能を備えていますがこれはIncoming Webhookを利用したものと思われます.つまり,これだとEventをキャッチするタイプのBotは会話を取得することができず,操作を実行できません.
ここで,IFTTTではGoogle AssistantをトリガーとしてWebhookを起動します.直接Slack APIを叩くことで,自分のアカウントが投稿しているように見せかけることができます.
```
URL: https://slack.com/api/chat.postMessage
Method: POST
Content type: application/x-www-form-urlencoded
Body: token=トークン&channel=チャンネル名&as_user=true&text={{TextField}}
```
IFTTTのGoogle Assistantでは`{{TextField}}`に発話内容が含まれるので,これをテキストにします.
トリガーワードはワイルドカードを先頭に持ってくることが出来ないため,`$消して`のようにすることはできません.よって,`操作 $`のように指定し,実際には`操作 エアコン消して`のように発話するというフローになります.
```
+----------------+ +-----+
|Google Assistant| ---> |IFTTT|
+----------------+ +-----+
| Slack API
v
+----------+ Location Trigger +-----+ Event +---+ +------+
| myThings | -----------------> |Slack| ----> |Bot| -> |irmcli|
+----------+ +-----+ +---+ +------+
```
これで,終わりです.完全なスマートホーム生活を送りましょう!となればよかったですよね.
### Google Homeとスマートホーム
Google Homeは標準でスマートホーム機能を備えており,対応アプリとの連携で,`エアコン消して`などのワードに対応 + ステートの管理できるのです.
しかし,これをIFTTTのワードで`エアコン$`として組み込んだところでは対応できません.これは,スマートホーム機能の方が優先されてしまうためです.
これを解決するためにはActions on Googleを使ってスマートホーム対応アプリを作る必要があります.他の方の[Qiita](https://qiita.com/td2sk/items/77f89d64d2cdf52ee9bc)に詳細の記事が出ていますので,そちらを参照ください.
## Amazon Echoがやってきた
Actions on Googleやってみようかなと思っていたところにAmazon Echoの招待メールがやってきました.悩んだ末にポチってしまいました.
Amazon AlexaもIFTTTに対応しており,同様の手順で可能です.しかしAmazon Alexaも同様の事象が発生しました.
### Amazon Alexaのスキルとスマートホームスキル
AlexaもGoogle Homeと同様にスマートホーム機能を持っており,スマートホームスキルというものが存在します.これはIFTTTよりも優先されて実行されます.つまり,スマートホームスキルを開発しないと「アレクサ,電気消して」みたいなことができません.
開発をやってみたをやろうとしていたところ,割と重大なアクシデントが発生したので,この話は又今度にします.
みなさま,よいクリスマスを!