i-リモコンを外部から操作して遊ぼう。


この前買った、i-リモコンなんだが、
ついに i-リモコンをPC制御する手法が公開された!
IRM-01Lコマンド仕様書


これで冷房の温度を変更するのにいちいち i-phone を探す手間が省ける。やったね☆。


ただ、この i-リモコンをPC制御仕様書なんだけど、開発者向けなので結構不親切。
一応、PCから手軽に操作できるところまでできたので、私のやった方法を紹介したいと思う。

とりあえず telnet するまで。

i-リモコンのIPアドレスを調べる。
これは、i-phone の i-remocon アプリの、「本体機器選択」画面からできる。
私の場合、 192.168.10.2 という IP アドレスだった。



さて、IPアドレスがわかったので、説明書に書いてある。 port 番号 51013 へ telnet してみる。

windows visat以降のクソ仕様回避

windows vista 以降は telnet が封印されているので、封印解除してあげて。


Telnet :よく寄せられる質問


Telnet クライアントのインストール - Microsoft TechNet

telnetして、確認コマンドを打ってみる。

コマンドラインから、

telnet 192.168.10.2 51013

*au


すると、結果は、OKと帰ってくるはずだ。

ok

teraterm pro などで遊んでいる人は、改行コードに注意。
ディフォルトは CR になっていると思うので、ここを CR + LF にしないと駄目だ。

リモコンコマンド送信

*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 というところの 5 などのところ。ここに注目。
この値が、 *is;5 などで送信しなければいけない番号なのだ。


ためしに、送信してみよう。
そのボタンを押したときと同じ効果を得られたはずだ。

telnet 192.168.10.2 51013

*is;5

やったー☆。
これで、パソコンから任意の登録されたコマンドを照射できるようになったぞ。

あとは、これをマウスクリックなどで実行できるように、バッチにしてみよう!!

teratermマクロでショートカットにしてみる。

取り急ぎ、アイコンをクリックすると、 そのボタンが押された時と同じ効果を得られるといったことをやってみたいと思う。
teraterm macroを書くと、こんな感じだ。
#windowstelnet クライアントさんはアレなので、 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 ファイルを作っておき、スクリプトの中でそれを呼び出すようにしている。

実行して遊ぶ。

このマクロを実行すると、 i-リモコンに接続し、 *is;5 コマンドが発行され、そのコマンド番号に登録されていた赤外線が照射される。
うちの場合、照明をオフにするように設定しているので電気が消える。


ここまでできたら、microsoft 音声認識と組み合わせて音声で家電を制御したり、Kinect で身振り手振りで家電を制御したり、まぁ、なんでもできてしまうのだ。

かっくいい中二病ばりばりな魔法コマンドを作って、家電を制御して遊ぼう。
こうして、また一歩、理想未来に近づけた。


i-remoconのコマンドマニュアルを公開してくれた、発売元に感謝。