« TdF 2014 第10ステージ | トップページ | うにくろ »

2014年7月16日 (水)

IRKit

「外出先からエアコンを制御したい」

もう何年も前からそう思ってた。でも、一般の学習リモコン系ではエアコンのリモコンは学習できないとか、プログラマブルな感じのは下手したら数万円したりとか、なによりゴツかったり、気になる度に調べてたんだけど理想的なものがなかった。

つい1ヶ月ほど前にも「外出先からエアコンを制御したい」欲がムラムラとこみ上げてきて調べてたら IRKit というものに辿り着いた。
IRKit - Open Source WiFi Connected Infrared Remote Controller

なんか細かい事は良く分からないけど、エアコンをコントロールしてる人がいるらしい。ということで、Amazon から購入。決して安くないけど、これまで調べてきたプロダクトに比べれば半値以下のようなものだ。

で、届いたら本体だけ。後は紙が2枚。Mac Address と SSID が書いたものと、もう1枚はなんだったかな。USBでの給電が必要なのだけど、そのケーブルも付属しないという味気なさ。で、仕方なく上記のページを見に行くんだけど、そもそもの始め方が分からないのよね。


暫定でエアコンに向けるために額に引っかける

答えとしてはスマホでアプリダウンロードして家の中のWiFiに繋げることで全てが始まる。まぁゴリゴリと curl とかで WiFi の情報を書き込む方法もあるけど。
で、これで iPhone を使ってテレビのON/OFF とかエアコンの ON/OFF が出来るようになるんだけど別にそんなことがしたいわけじゃ無い。ちなみに、テレビは同じ信号で ON/OFF 出来るけど、エアコンは ON と OFF で別信号なのね。少なくともうちの機種は。

ということで、今度は外部の GateWay を使ってアクセスするために IRKit のIPアドレスを取得する。
MacBook Pro をWiFi に繋ぎ、

% dns-sd -B _irkit._tcp

を実行すると暫くして Instance Name が帰ってくるので(搭載されてるアクセスポイントの名前と同じ?)、今度はその Instance Name で

% dns-sd -G v4 IRKitXXXX.local

みたいに「Instance Name」.local を探すとIPアドレスが分かる。これで IRKit に搭載されている HTTP サーバを叩ける。後は外部からアクセスするためのIDとKeyを取得。Bonjour 使ってるから Windows の人は知らん。どうにかなるんだろう。

% curl -i "http://10.0.1.2/keys" -d ''

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/1.3.0.182.gaf86b44
Content-Type: text/plain

{"clienttoken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}

% curl -i -d "clienttoken=XXXXXXXXXXXXXXXXXXXXX" "https://api.getirkit.com/1/keys" HTTP/1.1 200 OK
Server: ngx_openresty
Date: Tue, 07 Jan 2014 08:46:06 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
X-Content-Type-Options: nosniff

{"deviceid":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","clientkey":"XXXXXXXXXXXXXXXXXXXXXXX"}

これで準備完了なので、後は door コマンドでインターネットと繋がっていることを確認(略)。

で、こっからが真骨頂でリモコン情報を学習します。

curl -i "https://api.getirkit.com/1/messages?clientkey=XXXXXXXXXXXXXXXX&clear=1"

HTTP/1.1 200 OK
Server: ngx_openresty
Date: Tue, 07 Jan 2014 09:03:59 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 481
Connection: keep-alive ETag: "-19571392"
X-Content-Type-Options: nosniff

これで待機状態になるので、IRKit に向けてリモコンをピッとやると、コンソールにドバババっと JSON が出るので記録。
で、このJSONを使って

curl -i "https://api.getirkit.com/1/messages" \
-d 'clientkey=XXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d 'deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d 'message={"format":"raw","freq":38,"data":[6881,3341,904,815,904,2537,904,815,…]}'

ってやると、リビングで(エアコンはリビング)ピッと鳴ってエアコン起動。やりましたよ。

一応社外のサーバから同じコマンド叩いてみて成功。後は、適当な Web サーバに適当なHTML置けばよろし。JSONだし気軽なのでオイラは jQuery で $.post するようにしましたが。
これで家に近づいたら iPhone で当該HTML開いてボタン押せばエアコンが付きます。逆に切り忘れた!と思っても地下鉄の中からOFF出来るし。ON/OFFがトグルじゃない(信号が違う)ので、不安なときもとりあえずOFF押せば良いよね。
IFTTTと連動とか色々やり方はありそうですが、とりあえず目的が達せられたので満足です。

ま、上に書いたように人を選ぶデバイスですけどね。エアコン以外にも何か出来そうな気がしますが、テレビとHDRぐらいしかないからなぁ。テレビ付けても嬉しくないし。HDRは WiTV で制御できるしなぁ。

ちなみに今年は台風接近で窓を開けられなかった先週木曜しかエアコン使ってませんが。

|

« TdF 2014 第10ステージ | トップページ | うにくろ »

てっく」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232324/56807079

この記事へのトラックバック一覧です: IRKit:

« TdF 2014 第10ステージ | トップページ | うにくろ »