Posted at

【GoogleHome】Google Home + IFTTT + IRKitでエアコンを操作する

More than 1 year has passed since last update.

元ブログ - 【GoogleHome】Google Home + IFTTT + IRKitでエアコンを操作する

またもや久しぶりのブログとなってしまいました。

今回は、タイトルの通りなんですがGoogle Home + IFTTT + IRKitでエアコンを操作してみたいと思います。

それぞれの説明は上記リンクを辿ってみてください。

大まかな流れ的には以下の様になります。

※Google Homeなどの初期設定は割愛します。


  1. IRKitのdeviceid, clientkeyを取得する

  2. clientkeyを元に赤外線情報の取得

  3. deviceid、赤外線情報からREST APIを作成

  4. IFTTTのthisにGoogle Assistant、thatにWebhooksを指定しREST APIを叩く様にする

では行ってみましょー!


IRKitのdeviceid, clientkeyを取得する

ここでの手順は以下です。

1. instancenameの取得

2. IRKitのIPAddressの取得

3. clienttokenの取得

4. deviceid, clientkeyの取得


1. instancenameの取得


Request

$ dns-sd -B _irkit._tcp



Response

Browsing for _irkit._tcp

DATE: ---Sun 10 Dec 2017---
13:14:45.638 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
13:14:45.937 Add 2 4 local. _irkit._tcp. [INSTANCE_NAME]


2. IRKitのIPAddressの取得


  1. で得た[INSTANCE_NAME]からIPAddressを取得します。


Request

$ dns-sd -G v4 [INSTANCE_NAME].local



Response

DATE: ---Sun 10 Dec 2017---

13:15:37.795 ...STARTING...
Timestamp A/R Flags if Hostname Address TTL
13:15:37.796 Add 2 4 [INSTANCE_NAME].local. [IP_ADDRESS] 10


3. clienttokenの取得


  1. で得た[IP_ADDRESS]からclienttokenを取得します。


Request

$ curl -i "http://[IP_ADDRESS]/keys" -d '' -H "X-Requested-With: curl"



Response

HTTP/1.0 200 OK

Access-Control-Allow-Origin: *
Server: IRKit/2.1.0.0.g13da7b9
Content-Type: text/plain

{"clienttoken":"[CLIENT_TOKEN]"}



4. deviceid, clientkeyの取得


  1. で得た[CLIENT_TOKEN]からdeviceid, clientkeyを取得します。


Request

$ curl -i -d "clienttoken=[CLIENT_TOKEN]" "https://api.getirkit.com/1/keys"



Response

HTTP/1.1 200 OK

Server: openresty
Date: Sun, 10 Dec 2017 04:17:54 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":"[DEVICE_ID]","clientkey":"[CLIENT_KEY]"}



2. clientkeyを元に赤外線情報の取得

まず、4. で取得した[CLIENT_KEY]を元に下記のリクエストを叩きます。


Request

$ curl -i "https://api.getirkit.com/1/messages?clientkey=[CLIENT_KEY]&clear=1"


すると、赤外線の待機状態になります。

ここで、IRKitに対してリモコンで命令を出すと下記の様なレスポンスを返します。


Response

HTTP/1.1 200 OK

Server: openresty
Date: Sun, 10 Dec 2017 04:19:16 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1183
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
ETag: "-599963595"
X-Content-Type-Options: nosniff

{"message":[INFRARED_INFO],"hostname":"[INSTANCE_NAME]","deviceid":"[DEVICE_ID]"}



3. deviceid、赤外線情報からREST APIを作成

前項で取得した[INFRARED_INFO], [DEVICE_ID]からREST APIを作成します。


REST

https://api.getirkit.com/1/messages?clientkey=[CLIENT_KEY]&deviceid=[DEVICE_ID]&message=[INFRARED_INFO]


必要ならここでcurlで作動することを確認しても良いかもしれません。


Request

curl -i 'https://api.getirkit.com/1/messages?clientkey=[CLIENT_KEY]&deviceid=[DEVICE_ID]&message=[INFRARED_INFO]'


ですが、僕の環境では



curl: (3) [globbing] nested brace in column 163



と出てしまい、確認できませんでした。

※この状態でも問題なく成功します。


4. IFTTTのthisにGoogle Assistant、thatにWebhooksを指定しREST APIを叩く様にする

ここからはIFTTTの設定となります。

thisにはGoogle Assistantを下図の様に設定します。

google_home_ifttt_this

thatにはWebhooksとして下図の様に設定します。

google_home_ifttt_this

少しだけコツというか注意点がありまして。

thisの方で空調としていますが、これをエアコンとするとスマートホームの方の設定が噛んでしまい、「サーモスタットの設定が、できていません。」と怒られてしまいます。

これでエアコンの操作が声で出来る様になりました。

OFFの方も同様の手順で登録すれば、外出先でもON/OFFが出来る様になるので、

・あと30分で帰るからエアコンつけとこ

・あっ、エアコン消し忘れた!家に帰らずに消したい。。。

みたいなことが出来る様になります。

誰かのお役に立てば。