IRKit + Google Home + IFTTT でスマートじゃない家電を操作する

Google Homeがうちにやってきたので、やっぱ音声アシスタントといえば家電を操作したいよね。といってもうちの家電はスマートでもなんでもなく7年前の霧ヶ峰なので、以前から使っているIRKitをそのまま使ってやってみたのでその時のメモです。

IRKitはいわゆる学習リモコンで赤外線情報を学習してWiFiを通じて家電を操作できるもので、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しているという素敵なものです。
 
 

 

1.IRKitのIPアドレスを取得

IRKit公式ではBonjourで取得する方法が紹介されていましたが、私はルータの設定画面で確認しました。

f:id:annykyon:20180308161458p:plain

こんなかんじで私の環境では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

回避方法はあとで調べようってことで、ひとまずエアコンに「ぽかぽかさん」とかニックネームつけるかなーとつぶやいていたら、横から
「エアーコントローラーオンにして」 にしたら?
というアドバイスが…
エアコンはエアーコントローラーの略じゃないでしょ…と思いつつ、つっこむのが面倒だったのでそのまま設定します。

f:id:annykyon:20180309003730p:plain

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.MethodPOSTに設定
3.Content Typetext/plain
4.Creat action で登録
5.Finish ボタンで終了

f:id:annykyon:20180309133744p:plain
 

7.Google Homeで実際に確認

エアーコントローラーオンにして と問いかけるとピッとエアコンの電源が入り、 エアーコントローラーokです と返してくれました。
あと、エアコンはエアーコントローラーの略ではありません。

 

参考記事

IRKit - Open Source WiFi Connected Infrared Remote Controller

https://kotodama.today/?p=855