この記事について
睡眠をエンジニアリングするための前準備
IRKitを利用して curl経由でエアコンをON/OFFしてみる。
IRKit - iPhone,iPadを使って外出先からエアコン等の家電を操作できる学習リモコン
- 出版社/メーカー: maaash.jp
- メディア: ホーム&キッチン
- この商品を含むブログ (2件) を見る
といっても
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のエンドポイントは
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について紹介する。