今年もなんだか目が回るようで色々なことをさせていただいたわけですが、2年前くらいから運用し続けているおうち制御システムは今でも元気です。
今年はあまり手を入れるつもりはなかったのですが、会社の忘年会で音声アシスタントデバイスを持っていないのが自分だけであることが判明したというのもあり、いいタイミングでAmazon Echoの招待も来たのでAlexaさんがおうちシステムを制御できるようにしてみました。
TL;DR
MQTTベースのシステムを手軽に音声対応するにはIFTTTとBeebotteの組み合わせが便利。
しかしながら、IFTTTにどんなフレーズを指定するかはちょっと試行錯誤が必要かも。
おうちシステムの構成
去年の記事の通り、我が家にはMQTTベースのおうち制御システムが稼働しており、スマホや各種センサーによる照明制御やエアコン、TV等の機器制御を行っています。
すでにMESHとつなぐためにIFTTT対応していたので、連携自体はAmazon EchoをIFTTTにつなぐのみ。Amazon Echo統合後のシステム構成としては以下のような感じです。
Amazon Echo Plusはスマートホームハブを内蔵しているので、そこに完全に寄せるという手もないわけではないのですが・・・非対応デバイスもおうちにはあり、元気に稼働してしまっています。今年もおうちシステム全面リプレースの予算はおりませんでしたので、当面の対応として、現在のシステムを活かしながら音声アシスタント対応をすることにします。
IFTTTの設定
IFTTTにはAmazon Alexa Service があるので簡単にAmazon Echoに話しかけることで、IFTTTのAppletを実行することができます。
Alexa Serviceでは、「xxx をトリガー」という形の指示を受け入れてくれるので、今回は、「机照明をトリガー」と話すことで、BeebotteのREST APIを介してMQTT経由でHueとLED照明を点灯できるようにしてみます。
-
Serviceとして [Amazon Alexa]の[Say a specific phrase]を選択する
初回実行時のアカウントひも付けなどはNature RemoのAmazon Echoから日本語で家電を操作を参考にしました。 -
Phraseに、「机照明」と指定し、[Create trigger]を押す
これで、「Alexa, 机照明をトリガー」としゃべるとこのAppletが起動するようになる -
Actionとして、[Webhooks]の[Make a web request]を選択する
-
Beebotte上の制御したいチャンネルとリソース、POSTしたいデータを入力する
詳しくは、 MQTTベースのおうち環境にMESHを追加する#Beebotteのアカウント作成 を参考にしてください -
[Create action]を選択し、必要に応じてApplet名を変更して [Finish] を選択する
これで、「Alexa, 机照明をトリガー」と話しかけると、Echoが「イフトに送信します」と応じてBeebotteのREST APIに指示を投げてくれます。この指示がMQTT経由で各家電に伝わり、制御が実行されることになります。
トリガーとするフレーズの選択
以上のような感じで非常に簡単にAmazon Echoでおうちの家電を制御できるようになりました。
とりあえず1日遊んだ感覚ですが、別のスキルと誤認されるキーワードがいくつかあるようです。
- 「消して」 ... カレンダーの予定削除と誤認するよう。「照明消して トリガー」などというと、「そのような予定はありません」と返す
- 「リビング」「照明」 ... スマートホームハブの「ホームハブが設定されていません」と返す場合がある
きちんと検証したわけではないですが、これらの誤認識をする場合は「トリガー」という言葉が認識されていなかった感じがします。IFTTTによるAlexa連携はお手軽ですが、「トリガー」という部分を必ず認識させなければならない(であろう)という点で、他の専用スキルに比べて認識可能な範囲が狭まっている感じがしています。
Pepperのフレーズ選択でも、他のアプリとかぶらないように色々苦労した記憶があるわけですが、誤認識を減らせるような工夫として、全体のフレーズ設計というのはまだまだあるのかなあという感じでした。