2014-10-26

IRKitを使った簡易オレオレリモコンをHTMLとJavaScriptで作る

音声で家のテレビやオーディオを操作したいと妻からの要望があったので作る。100%仕様を満たす物は1日以上かかりそうなので、まずはiPhoneからタップでそれぞれ操作できるようにした。

完成図


学習リモコンの選定

まずは学習リモコンの選定。PlutoIRKitかどちらにしようか悩んだが、LANケーブルを引き回すのが困難なのでIRKitに決定。amazonで7,700JPY也。同時に無線LANを安定化させるために古い機器を引退させて、新たにAtermの無線LANルーターを導入した。

IRKitの設置

設置に必要な物はMicroUSBの電源供給のみ。適当な場所に設置してまずは自宅の家電が操作できるか試す。ここではApp Storeから入手したIRKit シンプルリモコンを使った。IRKitのwifiへの参加もやってくれて便利。
IRKitの赤外線は割と貧弱で、家具の配置や日光の影響を受けてしまう。設置場所は微調整を繰り返した。

HTTP APIのテスト

ここでは家にいる時に操作するユースケースのみを想定して、IRKit Device HTTP APIを使う。IPアドレス直指定で叩くため、ルーターの設定でIRKitのmacアドレスについて固定IPアドレスを割当するようにしておく。
% dns-sd -B _irkit._tcp
Browsing for _irkit._tcp
DATE: ---Sat 25 Oct 2014---
23:14:31.983  ...STARTING...
Timestamp     A/R    Flags  if Domain           Service Type     Instance Name
23:14:32.183  Add        2   4 local.           _irkit._tcp.     iRKitXXXXX

% dns-sd -G v4 irkitXXXXX.local
DATE: ---Sat 25 Oct 2014---
23:15:35.078  ...STARTING...
Timestamp     A/R Flags if Hostname            Address                  TTL
23:15:35.239  Add     2  4 irkitXXXXX.local.   192.168.10.4             10

# IRKItに向けて保存したいリモコンのボタンを押してから
% curl -i "http://192.168.10.4/messages”
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.2.0.g424fa95
Content-Type: text/plain

{"format":"raw","freq":38,"data":[5408,4107,640,4107,640,1738,663,1738,663,1738,663,4107,663,1738,640,1738,640,4107,663,1738,663,4107,710,1679,686,1679,686,1679,686,1679,686,50610,640,4107,640,4107,640,4107,640,1738,640,1738,640,1738,640,4107,663,1738,640,1738,640,4107,686,1738,640,4107,663,1738,640,1738,640,1738,640,1738,640,50610,640,4107,640,4107,640,4107,640,1679,640,1679,640,1679,640,4107,619,1738,640,1738,640,4107,640,1738,640,4107,640,1738,640,1738,640,1738,640,1738,640]}%

# 上で得られたIRデータをPOSTで投げて、リモコンと同じ動作になるかテスト
% curl -i "http://192.168.x.x/messages" -d '{"format":"raw","freq":38,"data":[686,41 ….'

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.2.0.g424fa95
Content-Type: text/plain
このあたりの手順は公式サイトに詳しくのっている。あとはここで得られたIRデータをIRKitに投げる画面を書けば良い。

UIを書く

IRKitのHTTP APIは Access-Control-Allow-Origin: * ヘッダを返してくるので、ブラウザのXMLHttpRequestで叩いてもレスポンスが確認できる。なのでHTMLとJavaScriptだけで完結する。コードはgithubにアップしました。
iPhoneのSafariで「ホームに追加」をしておくとSafariのタブの一つでは無く、個別アプリとして扱われるので便利。

音声認識の実装はどうしようかと悩みつつ今日はここまで。

IRKit - iPhone,iPadを使って外出先からエアコン等の家電を操作できる学習リモコンIRKit - iPhone,iPadを使って外出先からエアコン等の家電を操作できる学習リモコン
maaash.jp
売り上げランキング : 2255
Amazonで詳しく見る by AZlink
このエントリーをはてなブックマークに追加