Google HomeとIRKitで家電操作をする
目次
Google Homeが日本で最近発売され、衝動買いしてしまったので、IRKitと連携して家電操作をできるようにします。
Google Homeに話しかける言葉はIFTTTのトリガー(Google Assistant)として利用できるので、IFTTTでトリガーを受けてIRKitへ渡していきます。
昔買ったのでよく覚えてないですが、IRKitはすこし高くなった気がします。
IRKitでの設定
IRKitの初期設定から書いていきます。
IPアドレスの判別
MacのTerminalからService DiscoveryでIPアドレスを判別します。
### Instance名の取得 % dns-sd -B _irkit._tcp Browsing for _irkit._tcp DATE: ---Mon 09 Oct 2017--- 17:34:55.026 ...STARTING... Timestamp A/R Flags if Domain Service Type Instance Name 17:34:55.280 Add 2 10 local. _irkit._tcp. iRKitXXXX ^C ### IP Addressの取得 % dns-sd -G v4 iRKitXXXX.local DATE: ---Mon 09 Oct 2017--- 17:35:34.099 ...STARTING... Timestamp A/R Flags if Hostname Address TTL 17:35:34.353 Add 2 10 iRKitXXXX.local. 192.168.xx.xx 10 ^C
Client Tokenの取得
先ほど知ったIPアドレスから、ClientTokenの取得を行います。
% curl -i "http://192.168.xx.xx/keys" -d '' -H "X-Requested-With: curl" HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/2.1.2.0.g424fa95 Content-Type: text/plain {"clienttoken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
DeviceIDとClientKeyの取得
先ほど入手したClientTokenから、外部からのアクセスのためにDeviceIDとClientKeyを取得します。これを知っていると外部から赤外線が送れるようになります。
% curl -i -d "clienttoken=XXXXXXXXXXXXXXXXXXXXX" "https://api.getirkit.com/1/keys" HTTP/1.1 200 OK Server: ngx_openresty Date: Tue, 07 Jan 2014 08:46:06 GMT Content-Type: application/json; charset=utf-8 Content-Length: 94 Connection: keep-alive X-Content-Type-Options: nosniff {"deviceid":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","clientkey":"XXXXXXXXXXXXXXXXXXXXXXX"}
送信したい赤外線信号の取得
IRKitに対して最後に送信した赤外線信号のデータを取得します。送信したい赤外線信号をIRKitに送信したあとで下記のコマンドを打ちます。
(信号はhttp://getirkit.com/にあったものなので何の信号か不明です)
% curl -i "http://192.168.xx.xx/messages" -H "X-Requested-With: curl" HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/2.1.2.0.g424fa95 Content-Type: text/plain {"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}
IFTTTでの設定
IFTTTからAppletを追加していきます。
New AppletボタンよりAppletを追加
Triggerの選択
TriggerとしてGoogle Assistantを選択します。
Triggerの種類を選択
Triggerの種類としては フレーズのみ、フレーズ+数値、フレーズ+何らかの言葉、フレーズ+数値+何らかの言葉、の4通りあるのですが、数値や言葉は赤外線信号送信ではちょっと使用できないので"Say a simple phrase"を選択します。
Phraseを設定
Phraseには3通り設定できるようです。また、Google Assistantの返答もここで設定します。
英語も日本語も選択可能です。
Actionの選択
ActionとしてWebhookを選択します。
Actionの設定
IRKitの設定時に取得したClientkey, DeviceID, 赤外線信号のデータをBodyに設定してWebRequestを作成します。
URL: https://api.getirkit.com/1/messages Method: POST Content Type: application/x-www-form-urlencoded Body: clientkey=XXXXXXXXXXXXXXXXXXXXXXX&deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&message={"format":"raw","freq":38,"data":[xxx,xxx,...]}
作成完了
これでGoogle Homeに話しかけるとIRKitから家電操作を行う設定が完了しました。
GoogleHome&IRKitでの家電操作のTips
少しこの仕組をいじってみてわかった、Tips的な使いかたを紹介します。
一度のWebhookで複数の信号を送る
TVの音量を2段階下げたい場合や、電気を消すために複数回信号を送る必要がある場合は、WebhookのBodyのmessage->data部分に同じ信号を繰り返しで入れることで複数回の赤外線操作が可能です。(一回のWebRequestで送信可能なBodyの長さに限界はあります)
連続でTVを点ける信号と電気を点ける信号を送ることも可能かと思います。
### 例: xxx,yyy,zzzの信号を3回送る message={"format":"raw","freq":38,"data":[xxx,yyy,zzz,xxx,yyy,zzz,xxx,yyy,zzz]}
1つのGoogle Assistant Triggerに対して複数のActionを紐付ける
複数の信号送信は上に書いた方法で対応可能ですが、Requestしたい信号が長すぎたり、HueやWeMoなどの操作を同時に行いたいときは複数のActionを紐付ける必要があります。
1つのTriggerに複数のActionを紐付ける場合は、同じPhraseに反応するGoogle Assistant Triggerを複数作成して、それに異なるActionを紐付けることで実現できます。
ぼくの家ではTVの入力切替を戻すために入力切替ボタンを連打するActionが存在します。。
まとめ
Google HomeからIFTTTを経由して家電操作をする仕組みを設定してみましたが、GoogleHomeがIFTTTに対応しているお陰で、けっこう苦もなく設定することができました。
一点物足りなかったのは、IFTTTのActionからGoogle Homeの機能を呼び出せなかったことですが、これは将来的に対応すれば非常に嬉しいなと思いました。
(例: GoogleHomeで音楽を再生する、今日の予定を教えてくれる、など)
ひとまず、IFTTTを使えばさらに色々なデバイスやサービスと連携できるはずなので、Google Homeの色々な使い方が開拓できそうです。