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

[元ブログ - 【GoogleHome】Google Home + IFTTT + IRKitでエアコンを操作する](http://blog.dalt.me/1343)

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

今回は、タイトルの通りなんですが[Google Home](https://store.google.com/product/google_home) + [IFTTT](https://ifttt.com/) + [IRKit](http://getirkit.com)でエアコンを操作してみたいと思います。

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

大まかな流れ的には以下の様になります。
※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の取得
2. で得た[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の取得
3. で得た[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を下図の様に設定します。
<a href="http://blog.dalt.me/wp-content/uploads/2017/12/google_home_ifttt_this.png"><img src="http://blog.dalt.me/wp-content/uploads/2017/12/google_home_ifttt_this.png" alt="google_home_ifttt_this" width="1125" height="2436" class="alignleft size-medium wp-image-1283" float="left"/></a><br clear="both">

thatにはWebhooksとして下図の様に設定します。
<a href="http://blog.dalt.me/wp-content/uploads/2017/12/google_home_ifttt_that.png"><img src="http://blog.dalt.me/wp-content/uploads/2017/12/google_home_ifttt_that.png" alt="google_home_ifttt_this" width="1125" height="2436" class="alignleft size-medium wp-image-1283" float="left"/></a><br clear="both">

少しだけコツというか注意点がありまして。
thisの方で空調としていますが、これをエアコンとするとスマートホームの方の設定が噛んでしまい、「サーモスタットの設定が、できていません。」と怒られてしまいます。

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

OFFの方も同様の手順で登録すれば、外出先でもON/OFFが出来る様になるので、
・あと30分で帰るからエアコンつけとこ
・あっ、エアコン消し忘れた！家に帰らずに消したい。。。
みたいなことが出来る様になります。


誰かのお役に立てば。