またもや久しぶりのブログとなってしまいました。
今回は、タイトルの通りなんですが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の取得
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を作成します。
[CLIENT_KEY]&deviceid=[DEVICE_ID]&message=[INFRARED_INFO]https://api.getirkit.com/1/messages?clientkey=
必要ならここでcurlで作動することを確認しても良いかもしれません。
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を下図の様に設定します。
少しだけコツというか注意点がありまして。
thisの方で空調としていますが、これをエアコンとするとスマートホームの方の設定が噛んでしまい、「サーモスタットの設定が、できていません。」と怒られてしまいます。
これでエアコンの操作が声で出来る様になりました。
OFFの方も同様の手順で登録すれば、外出先でもON/OFFが出来る様になるので、
・あと30分で帰るからエアコンつけとこ
・あっ、エアコン消し忘れた!家に帰らずに消したい。。。
みたいなことが出来る様になります。
誰かのお役に立てば。
コメント