ぷろじぇくと、みすじら。

Google Homeからプロセス、WebHookやIRKitを呼び出してあれこれする

Created at:

Google Home/AssistantからプロセスやWebHook、IRKitなどを呼び出すサーバーアプリケーション、Beatrice を公開しました。

これを家の中で立ち上げて連携しておくと、プロセスを実行したり、IRKitをキックしたり、WebHookを呼び出したりをGoogle Homeから仮想的なデバイスとして認識できるので、例えば「OK Google、Excelをオン(オフ)にして」でExcelを起動したり終了するといったことができます。

WebHookとプロセス実行さえあれば何とでもなるじゃろ感というやつです。

特徴 & IFTTTを使う場合との違い

[それIFTTTでできるよ]と言われそうですがBeatriceはIFTTTのトリガーと異なり、スマートホームデバイスのサービスとして振舞います。

例えばIFTTTのtriggerでは特定のワードに反応してWebHookを呼び出すといった形のため特定のワードを正確に発音する必要があり、「明かりをすべて消して」とお願いしてもホームデバイスとして認識していないので反応しません。

対してBeatriceはキーワード反応ではなく、操作する対象をスマートホームデバイスのサービス(Hueなどと同じ)のデバイスとして見せかけるため、他のホームデバイスと同列の操作可能がです。例えばプロセスの起動/終了を仮想的なスイッチとして公開できるので、いろいろなことができます。ただしその分設定は面倒です。

動機

最初はGoogle Homeで明かりのオンオフなどを行うのにIFTTT経由のIRKit呼び出しでいいかと思ったのですが、いざ使ってみるとそもそも設定したワードから外れると認識されない、スマートホームのデバイス扱いではないのでまとめてコントロールする命令が効かないといったところがイマイチだなーと感じていました。

そこでHomeKitに対するHomebridgeのようになんでもスマートホームのデバイスに見えるようにブリッジするツールがあればよいのではというところが出発点となっています。

仕組み

一般的にGoogle Homeの連携アプリはDialogflowあたりを使うと思いますが、Beatriceでは先にも書いた通りスマートホームデバイス向けのGoogle on ActionsのSmart home appの仕組みを利用します。

Smart home appの作り方のページにも書いてあるのですが、Smart home appはBeatriceに限らず下記の図のようにサービス登録して、連携するというフローとなります。

要するにサービスはOAuthのサーバーとなって、Googleは音声入力を解釈してコマンドに変換した後OAuthのクライアントとして投げつけてくるという構成ですね(意外とめんどくさい)。

そもそもこれは一般向けではなくHueのようなデバイスを多くのユーザーに対して提供する企業向けの仕組みです。そのため完全個人の固有のものであるBeatriceはテストプロジェクトとして動かすことになり、完全無保証です(!)

ちなみにもしこのようなものを作りたい(作ることになった)という方は
actions-on-google/actionssdk-smart-home-nodejsというサンプルがあるのでこちらを参考にするのがおすすめです。

動作環境 & クイックスタート

外部からアクセスでき、.NET Core 2.0が動けば動きます。つまりWindows、Linux、macOSで動作します。Raspberry Pi 3 + Raspbian Lite (Linux)でも動作可能です。

お試ししたい方はQuickStart(Quickとは言っていない)にそってお試しください。これ以外のドキュメントはREADMEしかないのです…。

なお現状サポートしているFeature(Beatrice用語で機能単位)はIRKit, WebHook, Process, Loggingです。

制限

テストプロジェクトで動かす都合、1アカウントにつきプロジェクトは1つしか有効にできません。
そもそも使い方として想定されていないので使えなくなってもまあそういうものです。

おわりに

現状ではオンオフ以外に対応していませんがステートを公開したり、モード切替、Web UIからの実行テストなどにも対応していきたいところです。

微妙なハックをしてる感のある代物の上、まだ作りかけなところも多くきちんと動かないかもしれませんが、もしお役に立つようであればどうぞご利用ください。