この記事について
睡眠をエンジニアリングするための前準備
IRKitを利用して curl経由でエアコンをON/OFFしてみる。
といっても
IRKit - Open Source WiFi Connected Infrared Remote Controller
通りにやればON/OFFは簡単にできるはず。
準備
IRkitの準備
AndroidやIphoneのIRkitのアプリをDLして初期設定しておく。
IRkitのIPを調べる
Bonjourで調べることができる
$ dns-sd -B _irkit._tcp
Browsing for _irkit._tcp
DATE: ---Thu 12 Jan 2017---
21:58:58.624 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
21:58:59.498 Add 2 4 local. _irkit._tcp. iRKit66C9
$ dns-sd -G v4 iRKit66C9.local
DATE: ---Thu 12 Jan 2017---
22:00:39.768 ...STARTING...
Timestamp A/R Flags if Hostname Address TTL
22:00:40.062 Add 2 4 irkit66c9.local. 192.168.0.10 10
ここでiRkit66C9は 一つ前のコマンドで取得したInstance Nameを指定する。
IRkitのIP Addが192.168.0.10ということがわかる
pingでも打って確認してみる
$ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 192.168.0.10: icmp_seq=1 ttl=255 time=51.590 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=255 time=4.337 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=255 time=617.344 ms
64 bytes from 192.168.0.10: icmp_seq=4 ttl=255 time=7.138 ms
赤外線を取得する
GET /messageで取得できる
$curl -i "http://192.168.0.10/messages" -H "X-Requested-With: curl"
APIのENDPOINTは上で取得したIRKitのIP Add
最後にIRKitで受信した信号を取得できる。
$curl -i "http://192.168.0.10/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,1150,1150,1150,3228,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,1150,1150,65535,0,16832,16832,4400,1150,65535,0,65535,0,62212,18031,4400,1150]}
{"format":"raw","freq":38,"data": ~
が赤外線信号になる。
エアコンのON/OFFの信号をメモっておこう。
赤外線を送信する
POST /messagesで送信できる
curl -i "http://192.168.0.10/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,3228,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,1150,1150,65535,0,16832,16832,4400,1150,65535,0,65535,0,62212,18031,4400,1150]}'
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain
注意するのは -dで赤外線情報を送るときに''で囲むこと 忘れがち。
これで赤外線信号を送ってON/OFFできる。
ローカルにサーバを立てて送るのであればこれで済むが、外部ネットワークから送りたいと思う。
そのためにIRKit Internet HTTP APIが用意されている。
IRkit Internet HTTP API
IRKit Internet HTTP APIのエンドポイントは
https://api.getirkit.com
client tokenの取得
POST /keysでリクエストを送ることでclienttokenが取得できる。
clienttokenは漏れないようにしよう
curl -i "http://192.168.0.10/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":""}
deviceidの取得
IRkit Internet HTTP APIに対して
POST /1/keys でリクエストを送ることでdeviceidが取得できる。
その際に上で取得した client tokenが必要
curl -i -d "clienttoken=" "https://api.getirkit.com/1/keys"
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 12 Jan 2017 13:15:18 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":"","clientkey":""}
IRkit Internet HTTP APIではdeviceidとclientkeyを認証キーとして使用する。
IRKit Internet HTTP APIを用いた赤外線情報の送信
POST /1/messagesに対してclientkeyとdeviceidと赤外線情報を与えてPOSTすることで、
Internet HTTP API経由で赤外線情報を送ることができる。(つまりエアコンのON/OFFができる)
$curl -i "https://api.getirkit.com/1/messages" \
-d 'clientkey=' \
-d 'deviceid=' \
-d 'message={"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,3228,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,1150,1150,65535,0,16832,16832,4400,1150,65535,0,65535,0,62212,18031,4400,1150]}'
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 12 Jan 2017 13:21:50 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-Content-Type-Options: nosniff
これでIRKit Internet HTTP API経由で赤外線を送信できる。
クラウドサーバから送ったり、Google Apps Scriptから送ったりとできる。
ここまでで、IRKitの準備を行った。
次の記事ではMESHについて紹介する。