i-リモコンを外部から操作して遊ぼう。
この前買った、i-リモコンなんだが、
ついに i-リモコンをPC制御する手法が公開された!
IRM-01Lコマンド仕様書
これで冷房の温度を変更するのにいちいち i-phone を探す手間が省ける。やったね☆。
ただ、この i-リモコンをPC制御仕様書なんだけど、開発者向けなので結構不親切。
一応、PCから手軽に操作できるところまでできたので、私のやった方法を紹介したいと思う。
とりあえず telnet するまで。
i-リモコンのIPアドレスを調べる。
これは、i-phone の i-remocon アプリの、「本体機器選択」画面からできる。
私の場合、 192.168.10.2 という IP アドレスだった。
リモコンコマンド送信
*isコマンド; + 送信したいコマンド番号でリモコンのコマンドを送信できる。
telnet 192.168.10.2 51013 *is;1
しかーし、コマンド番号って何番なのよ?って話。
i-リモコンの画面からだと、どのボタンがどのコマンド番号なのか確認する方法がない。
追記
iRemocon側で対応が行われたようで、現在は UXデザイナーから、ボタンに対応するリモコン番号を取得することができます。
このリモコン番号を *is;リモコン番号 として、送信することで、ボタンを押した時の信号を送ることができます。
以下、古いコンテンツ
仕方ないので、i-remoconのサイトで遊んでみよう。
fiddler2先生でdumpする。
i-remoconのサイトには、UXデザイナーという画面を設計するソフトウェアがある。
こいつで画面を保存した瞬間に、i-remoconサーバに対して、ボタン情報が gzip で圧縮されて送信される。
送信内容はこんな感じ
POST http://i-remocon.com/uidesigner/layout/save HTTP/1.1 Host: i-remocon.com Connection: keep-alive Referer: http://i-remocon.com/media/uidesigner/uidesigner.swf?1314174121 Content-Length: 334642 Origin: http://i-remocon.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1 content-type: multipart/form-data; boundary=---------------------------7d76d1b56035e Accept: */* Accept-Encoding: gzip,deflate,sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3 -----------------------------7d76d1b56035e Content-Disposition: form-data; name="e5a071d5a3fc9497154188ca3f51326518e4"; filename="e5a071d5a3fc9497154188ca3f51326518e4.zip" Content-Type: application/zip PK modified.txt3204ヤ50ラ54W00エ22キ26 PK iRemocon.xml 以下略
この 送信している gzipデータをキャプチャして、解凍してあげれば、 iRemocon.xml というファイルをゲッツできる。
やり方はいろいろあると思う。
fiddler2 を使う、横取り丸を使う、wireshark を使う、firebugs を使う・・・
やり方は、なんでもいいので、 保存ボタンを押した瞬間に送信される、 POST http://i-remocon.com/uidesigner/layout/save のコンテンツをゲットして、ファイルに保存する。
中身はバイナリ形式なので、テキストコピペなんかしちゃだめだ。
そんで、拡張子を .gz とかに変更して、解凍ソフトで解凍してみよう。
無事、 iRemocon.xml をゲッツできるはずだ。
iRemocon.xmlを見て遊ぶ。
iRemocon.xml をエディタで開くと、いろいろ面白い情報が記載されていることがわかる。
<page> <backgroundColorHexRGBA>ffffffFF</backgroundColorHexRGBA> <image>/media/uidesigner/customer/fc0747041d642d9e200000000000000000000000000000000000000000000000/背景画像/ギャルリモコン/横/b1c58a4ba799251d26325b4bbffffa39.png</image> <button> <tag>10000</tag> <buttonType>UIButtonTypeRoundedRect</buttonType> <x>45</x> <y>70</y> <width>227</width> <height>99</height> <title>通常モード</title> <font>nil</font> <fontSize>14</fontSize> <lineBreakMode>UILineBreakModeTailTruncation</lineBreakMode> <titleColorHexRGBA>000000FF</titleColorHexRGBA> <titleShadowColorHexRGBA>nil</titleShadowColorHexRGBA> <reversesTitleShadowWhenHighlighted>NO</reversesTitleShadowWhenHighlighted> <showsTouchWhenHighlighted>YES</showsTouchWhenHighlighted> <image/> <backgroundImage>nil</backgroundImage> <adjustsImageWhenHighlighted>YES</adjustsImageWhenHighlighted> <contentHorizontalAlignment>UIControlContentHorizontalAlignmentCenter</contentHorizontalAlignment> <contentVerticalAlignment>UIControlContentVerticalAlignmentCenter</contentVerticalAlignment> <backgroundColorHexRGBA>00000000</backgroundColorHexRGBA> <opaque>YES</opaque> <alpha>1</alpha> <macro> <sendOrder>1</sendOrder> <mSec>0</mSec> <sendTagNo>4</sendTagNo> </macro> <macro> <sendOrder>2</sendOrder> <mSec>0</mSec> <sendTagNo>10</sendTagNo> </macro> <macro> <sendOrder>3</sendOrder> <mSec>0</mSec> <sendTagNo>9</sendTagNo> </macro> <macro> <sendOrder>4</sendOrder> <mSec>0</mSec> <sendTagNo>11</sendTagNo> </macro> <macro> <sendOrder>5</sendOrder> <mSec>2000</mSec> <sendTagNo>11</sendTagNo> </macro> </button> <button> <tag>4</tag> <buttonType>UIButtonTypeCustom</buttonType> <x>43</x> <y>66</y> <width>76</width> <height>73</height> <title>光</title> <font>nil</font> <fontSize>14</fontSize> <lineBreakMode>UILineBreakModeTailTruncation</lineBreakMode> <titleColorHexRGBA>000000FF</titleColorHexRGBA> <titleShadowColorHexRGBA>nil</titleShadowColorHexRGBA> <reversesTitleShadowWhenHighlighted>NO</reversesTitleShadowWhenHighlighted> <showsTouchWhenHighlighted>YES</showsTouchWhenHighlighted> <image>/media/uidesigner/customer/fc0747041d642d9e200000000000000000000000000000000000000000000000/ボタン画像/ギャルリモコン/button_1_0_18.png</image> <backgroundImage>nil</backgroundImage> <adjustsImageWhenHighlighted>YES</adjustsImageWhenHighlighted> <contentHorizontalAlignment>UIControlContentHorizontalAlignmentCenter</contentHorizontalAlignment> <contentVerticalAlignment>UIControlContentVerticalAlignmentCenter</contentVerticalAlignment> <backgroundColorHexRGBA>00000000</backgroundColorHexRGBA> <opaque>YES</opaque> <alpha>1</alpha> </button> <button> <tag>5</tag> <buttonType>UIButtonTypeCustom</buttonType> <x>191</x> <y>65</y> <width>80</width> <height>76</height> <title>光</title> <font>nil</font> <fontSize>14</fontSize> <lineBreakMode>UILineBreakModeTailTruncation</lineBreakMode> <titleColorHexRGBA>000000FF</titleColorHexRGBA> <titleShadowColorHexRGBA>nil</titleShadowColorHexRGBA> <reversesTitleShadowWhenHighlighted>NO</reversesTitleShadowWhenHighlighted> <showsTouchWhenHighlighted>YES</showsTouchWhenHighlighted> <image>/media/uidesigner/customer/fc0747041d642d9e200000000000000000000000000000000000000000000000/ボタン画像/ギャルリモコン/button_1_0_19.png</image> <backgroundImage>nil</backgroundImage> <adjustsImageWhenHighlighted>YES</adjustsImageWhenHighlighted> <contentHorizontalAlignment>UIControlContentHorizontalAlignmentCenter</contentHorizontalAlignment> <contentVerticalAlignment>UIControlContentVerticalAlignmentCenter</contentVerticalAlignment> <backgroundColorHexRGBA>00000000</backgroundColorHexRGBA> <opaque>YES</opaque> <alpha>1</alpha> </button>
この button というところの
この値が、 *is;5 などで送信しなければいけない番号なのだ。
ためしに、送信してみよう。
そのボタンを押したときと同じ効果を得られたはずだ。
telnet 192.168.10.2 51013 *is;5
やったー☆。
これで、パソコンから任意の登録されたコマンドを照射できるようになったぞ。
あとは、これをマウスクリックなどで実行できるように、バッチにしてみよう!!
teratermマクロでショートカットにしてみる。
取り急ぎ、アイコンをクリックすると、 そのボタンが押された時と同じ効果を得られるといったことをやってみたいと思う。
teraterm macroを書くと、こんな感じだ。
#windows の telnet クライアントさんはアレなので、 teraterm macro でやる。
電気を消す.ttl
connect '192.168.10.2:51013 /F="C:\\Program Files (x86)\\teraterm\\i-remocon.ini" /nossh /T=1 ' pause 1 sendln '*is;5' pause 1 disconnect 0
/F="C:\\Program Files (x86)\\teraterm\\i-remocon.ini" で、 ini ファイルを書いているのは、 改行コードを \r\n (CR+LF)にしたかったためだ。
ふつーだと unix とかの設定に合わせているため、改行コードを \n で送信しまう。 teraterm マクロ中に \r\n で送信と記述しても、 ini ファイルの設定の方が強いらしくうまくいかない。teraterm のクソ仕様なので我慢しよう。
しかたないので、 teraterm の改行コードを \r\n に変更した ini ファイルを作っておき、スクリプトの中でそれを呼び出すようにしている。