IRKitを使用してターミナルから部屋の家電を操作
以前ブログで紹介したIRKit。今回はHTTPを使ってMacのターミナルからアクセスしてみます。
コマンドラインから、任意の赤外線を発射させたりIRKitが認識した赤外線をJSONで取得することも可能になります。
[前回の記事]iPhoneから操作できるWiFi搭載赤外線リモコン「IRKit」を使ってみた。
既にセットアップは済んでいるとし、当方の環境はMac OS X 10.9です。
それでは、公式ドキュメントhttp://getirkit.comを参考にたらたらと書いていきます。
※以降は全て同じWi-Fi環境下で実行
IRKitのIPアドレスを調べる
IRKitへアクセスするには割り当てられたIPアドレスを調べる必要があります。
Bonjourを使ってデバイスを探します。
$より右側をターミナル.appの画面に入力しエンター。
$ dns-sd -B _irkit._tcp
そしてこんな結果が出てきます↓
Browsing for _irkit._tcp
DATE: ---Fri 04 Apr 2014---
22:15:41.265 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
22:16:00.942 Add 2 10 local. _irkit._tcp. IRKit****
「…STARTING…」から何も出てこない!という場合は、この画面のまま一度IRKitの電源を切って再度接続してみてください。(マルチキャストの間隔が長くて?自分はそうしないと出てこない)
デバイスが出てきたらControl + C
でプロセスを中断します。
Instance Nameが分かったのでIPアドレスを調べます。
ここでは「IRKit****」としますが、出てきた値を入れて下さい。
$ dns-sd -G v4 IRKit****.local
結果がこんな感じ
DATE: ---Fri 04 Apr 2014---
23:17:23.451 ...STARTING...
Timestamp A/R Flags if Hostname Address TTL
23:17:38.464 Add 2 10 IRKit****.local. 192.168.2.9 10
同じく「…STARTING…」から進まない場合は、IRKitを再起動。
デバイスが検出されたらControl + C
で終了。
IPアドレスが「192.168.2.9」と判明したので、これでIRKit Device HTTP APIにアクセスできるようになりました!
赤外線信号を取得、発信
赤外線信号を取得
IRKit本体に向けてリモコンを押して認識させておきましょう。
水色のLEDが点滅したら信号を受信した合図です。
そして以下のコマンドを入力
curl -i "http://192.168.2.9/messages"
数字の部分は先ほど取得したIPアドレスを入れます。すると結果が
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.0.0.0.g992a4a5
Content-Type: text/plain
{"format":"raw","freq":38,"data":[1275,3704,1275,3704,...省略]}
formatの部分が、直前に認識した赤外線信号のデータになります。
公式ドキュメントによると、一度データをGETすると端末からデータが削除され、もう一度信号を受信するまでは値が返らない仕様のようです。
ちなみに-i
を抜くとJSONデータだけが返ってきます。
赤外線信号を発信
先ほどGETしたリモコンの赤外線信号を、今度はIRKitから発信してみます。
curl "http://192.168.2.9/messages" -d '{"format":"raw","freq":3704,1275,37...省略]}'
-dの引数にはGETでずらずらと出てきたJSONデータをコピペ。
これでIRKitは先ほど認識した赤外線信号と同じ信号を発射します。
エアコンなりテレビなりが反応して、ひとりでに動き出しました・・・
コマンドラインで家電を動かすのは、なかなか新鮮な感覚(笑)
まとめ
要は、IPアドレスさえ分かっちゃえば後はHTTPでアクセス可能ということ。
かなりシンプルですし、なんにでも応用できそうですね!
適当に「irkit」というコマンドを作って遊んでみたのが以下の動画。
他にもRubyのgemで作った方がおられます。
[参考]赤外線学習リモコンIRKitのrubygemを作った
僕は動かして遊ぶだけなんで、誰か作ってくれないかなぁ〜と他力本願。
暇があったら今度は、IRKit Internet HTTP APIを使ってLAN外から操作してみようと思います。