IRKit + Google Home + IFTTT でスマートじゃない家電を操作する
Google Homeがうちにやってきたので、やっぱ音声アシスタントといえば家電を操作したいよね。といってもうちの家電はスマートでもなんでもなく7年前の霧ヶ峰なので、以前から使っているIRKitをそのまま使ってやってみたのでその時のメモです。
IRKitはいわゆる学習リモコンで赤外線情報を学習してWiFiを通じて家電を操作できるもので、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しているという素敵なものです。
- 1.IRKitのIPアドレスを取得
- 2.赤外線信号を取得
- 3.コマンドで赤外線信号を送ってみる
- 4.clienttoken, clientkey, deviceid を取得する
- 5.APIリクエストの作成
- 6.Google Home→IFFFT経由でIRKitに信号を送る
- 7.Google Homeで実際に確認
- 参考記事
1.IRKitのIPアドレスを取得
IRKit公式ではBonjourで取得する方法が紹介されていましたが、私はルータの設定画面で確認しました。
こんなかんじで私の環境では192.168.11.2でした。
2.赤外線信号を取得
IRKitで受信した最も新しい赤外線信号を返してくれます。
192.168.11.2のところはIRKitのIPアドレスです。
% curl -i "http://192.168.11.2/messages" -H "X-Requested-With: curl" HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/3.0.0.0.g85190b1 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]}
3.コマンドで赤外線信号を送ってみる
{"format":"raw","freq":38,".... } のところはさっき取得した赤外線信号にします。
% curl -i "http://192.168.11.2/messages" -H "X-Requested-With: curl" -d '{"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]}'
ピッっとエアコンがついたらここまで成功☆
4.clienttoken, clientkey, deviceid を取得する
この赤外線信号を外部から送信するために、IRKitのclienttoken, clientkey, deviceid を取得します。
clienttokenを取得
% curl -i "http://192.168.11.2/keys" -d '' -H "X-Requested-With: curl" HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/3.0.0.0.g85190b1 Content-Type: text/plain {"clienttoken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
取得したclienttokenからclientkey, deviceid を取得。
% curl -i -d "clienttoken=XXXXXXXXXXXXXXXXXXXXX" "https://api.getirkit.com/1/keys" HTTP/1.1 200 OK Server: openresty Date: Thu, 08 Mar 2018 14:45:52 GMT Content-Type: application/json; charset=utf-8 Content-Length: 94 Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Headers: X-Requested-With X-Content-Type-Options: nosniff {"deviceid":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","clientkey":"XXXXXXXXXXXXXXXXXXXXXXX"}
5.APIリクエストの作成
clientkeyとdeviceidのところはさっき取得したものにします。
https://api.getirkit.com/1/messages?clientkey=XXXXXXXXXXXXXXXXXXXXXXX&deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&message={"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]}
6.Google Home→IFFFT経由でIRKitに信号を送る
ここから先はIFFFTというサービスを使いました。IFFFTはサービスとサービスを連携させる仕組みを提供しているシステムで、例えば「Instagramにアップした画像をDropboxに保存する」とか「Gメールにスターをつけたら自動的にEverNoteに保存する」とかIF(もし)○○したら△△するというのを組み合わせを好きなようにつくれます。 今回はGoogle Homeに話したらWebhookでIRKitのAPIにリクエストするということになります。
IF(Google Homeにあるフレーズを話したら)を設定する
IFTTTへのログインはすませておき、My Applets > New Applet を選択。
「if + this then that」の + this をクリック。検索に「google」と入力するとGoogle Assistantが出てくるのでこれを選択。そしてSay a simple phraseを選択します。
ここでGoogle Homeにトリガーとなるフレーズを設定するんですが、ちょっと壁が…。「エアコンをつけて」とか「エアコンオンにして」とかにすると、もともとスマート家電用に予約されているようで、Google Homeに「設定ができていない」とかなんとか怒られてしまいました。
(これは後で解決したのでこちらで記事にしてます)
Google Home で予約語「エアコンつけて」を使えるようにする - Silent Lips
回避方法はあとで調べようってことで、ひとまずエアコンに「ぽかぽかさん」とかニックネームつけるかなーとつぶやいていたら、横から
「エアーコントローラーオンにして」 にしたら?
というアドバイスが…
エアコンはエアーコントローラーの略じゃないでしょ…と思いつつ、つっこむのが面倒だったのでそのまま設定します。
What do you want the Assistant to say in response? のところはGoogle Home からのレスポンスなので「エアーコントローラーok」としました。エアコンはエアーコントローラーの略ではありません。
Languageは日本語なのでJapaneseに設定したら create trigger でセット。
that(IRKitのAPIにリクエストを送信)を設定する。
「if then + that」の+ thatをクリックして検索に「webhooks」と入力するとwebhooksがでてくるのでこれを選択。さらにMake a web requestを選択。
1.URLのところにさっき 5.APIリクエストの作成 でつくったURLをいれる。
2.MethodはPOSTに設定
3.Content Typeはtext/plain
4.Creat action で登録
5.Finish ボタンで終了
7.Google Homeで実際に確認
エアーコントローラーオンにして と問いかけるとピッとエアコンの電源が入り、 エアーコントローラーokです と返してくれました。
あと、エアコンはエアーコントローラーの略ではありません。
参考記事
IRKit - Open Source WiFi Connected Infrared Remote Controller