2

赤外線学習リモコンKURO-RSのWebコントロールパネル作った

赤外線学習リモコンをWebブラウザから使えるようにした。SinatraとMongoDBで、RubyでBuffalo/玄人志向の赤外線学習リモコンを操作するで作ったkuro-rs-serverを操作する。


shokai/kuro-rs-control-panel – GitHub


これでアプリから様々な機器を操作できる。家に帰る前に暖房つけたりとかNFCでテレビ動かしたりとか。


機能はこれだけ。全部GUIとJSON APIがある。

  1. 赤外線を読む
  2. 赤外線データに名前をつけて保存する
  3. 名前を指定して赤外線を発射させる
  4. データ内容を指定して赤外線を発射させる


■画面
保存した赤外線データの一覧と、新規データの保存ボタンがある
KURO-RS Control Panel


赤外線データのpermalink。 /ir/(名前) にある。
学習ボタンを押してすぐKURO-RSに赤外線を当てると
KURO-RS Control Panel


読み取られる。保存したりその場で試し撃ちしたりできる。
KURO-RS Control Panel
画面下にAPIのヘルプがあって、
curl -d 'name=tv/ch2' http://localhost:8787/kuro-rs.json
のようにHTTP-POSTで名前を指定して赤外線発射、などの方法が書いてある。



■使ってみよう
Sinatraの他にMongoDBと、KURO-RSが必要。
このコントロールパネルはkuro-rs-serverと通信するので、サーバーとは別プロセスでkuro-rs-serverも起動して使う。

git clone git://github.com/shokai/kuro-rs-control-panel.git
cd kuro-rs-control-panel
bundle install
cp sample.config.yaml config.yaml
config.yamlを編集する。kuro-rs-serverのアドレスぐらいしか編集する必要ない。


kuro-rs-serverを起動する
kuro-rs-server /dev/tty.usbserial-00012a34b5 --port 8786


コントロールパネルも起動する
ruby development.rb
もしくはpassenger使うとよい。

2

RubyでBuffalo/玄人志向の赤外線学習リモコンを操作する

11月22-23日にSFC ORFというSFCの研究室の発表会があって、そこでデモするブツに使う部品としてBuffaloの赤外線学習リモコンのRubyラッパーを書きました。これで家に帰る前に暖房つけたりできてうれしいですね。

玄人志向のKURO-RSとBuffaloのPC-OP-RSを操作できます。

MacとLinuxと、試してないけどたぶんWindowsでも動く気がする。コードはgithubに置いてる

学習リモコン/KURO-RS/(1)使ってみる – 脳みそ沸騰中!のPerlのコードを参考にしました。

■PC-OP-RSを買う
気がついたらKURO-RSがどこにも売ってないんだけど、PC-OP-RSがKURO-RSと同じハードウェアで箱と付属ソフトが違うだけなのでどちらでも動かせます。

BUFFALO PCastTV2対応 PC用学習リモコンキット PC-OP-RS1
バッファロー (2006-09-10)
売り上げランキング: 4538



■インストール
gem install kuro-rs


そしてKURO-RSをMacやLinuxに刺す。
Windowsの人はドライバを入れてBuffaloアプリが動くことを確かめてからUSBポートに刺す。
KURO-RSはUSBポートに接続するとシリアルデバイスとして認識されます。MacやLinuxなら/dev/tty.usb****という名前になる。WindowsならドライバをインストールしていればCOM1とかCOM2とか名前がつく。


■赤外線リモコンを学習する
kuro-rsというコマンドがgemと一緒にインストールされています。

terminalで実行する
% kuro-rs /dev/tty.usbserial-0012a3b4
そして15秒以内に赤外線をKURO-RSの本体に当てると、termialに16進数で赤外線データが出力されます。


学習した赤外線を発射しましょう
% kuro-rs /dev/tty.usbserial-0012a3b4 ffffffff0300f0e0018083...
のように第二引数に16進数でデータを与えます。

これでテレビのチャンネルが切り替わるはず。


■自分のプログラムから使う
こんな感じでIOっぽく使えます。くわしくはexamplesディレクトリを見るといい。
require 'rubygems'
require 'kuro-rs'

# open KURO-RS
kr = KuroRs.open('/dev/tty.usbserial-0012a3b4')

# read
puts kr.read
## => hex dump (ffffffff0300f0e0018083...)

# write
kr.write 'ffffffff0300f0e0018083'

# close
kr.close

# block
KuroRs.open('/dev/tty.usbserial-0012a3b4'){|k|
k.verbose = true
puts k.read
## => hex dump (ffffffff0300f0e0018083...)
}


■Webアプリから使う
シリアルポートは複数プロセスで共有できないし、また複数スレッドから同時に書き込んだりもできないのでRailsやSinatraアプリにkuro-rs gemをそのまま組み込むのはオススメできません。

そういう時はkuro-rs-serverを使いましょう。


こうすると8080番portでhttpサーバーが起動します
% kuro-rs-server /dev/tty.usbserial-0012a3b4 --port 8080


curlから赤外線読み書きしてみる
# read
% curl 'http://localhost:8080'
# => hex dump (ffffffff0300f0e0018083...)


# write
% curl -d 'ffffffff0300f0e0018083...' 'http://localhost:8080'
readもwriteも正常に行われるとstatus 200が返ります。失敗すると200以外。

kuro-rs-serverを内部APIとしてRailsやSinatraから、あるいはAjaxから使うのが良いと思います。