ぽつんぽつんと書くブログ

飽きっぽいので、我慢せずに飽きることを許容しながら、ぽつんぽつんと生まれてくるブログ

今更ながらIRKitを買った

すでに枯れた商品なのかもしれないが、IRKitを買ってみた。 残念なことにAndroid用のアプリはあまり作りこまれておらず、登録ボタン数に厳しい制限があり、タイマー機能などもないためそのままでは活用は難しい。 そこで、Taskerからも使えるように奮闘してみた。途中JavaScriptを使っているが、ほぼ初めて書いたものなのでその辺は割り引いて読んでほしい(あちこちからのコピペなので、随所に痕跡があるかと思いますがご容赦を)。

まず、ほかでも使いまわせるようリモコンデータ部を分離した。本当はjsonとしてネット上に置くのがいいのかもしれないが、ここでは単なるjsファイルとしてローカルに置くことにした。

/sdcard/Download/Javascript/IRKitCommand.js *1

var text =`{
    "照明勉強": {"format":"raw","freq":38,"data":[123,345,678]},
    "照明普段":{"format":"raw","freq":38,"data":[333,444,555 666]},
    "照明シアター": {"format":"raw","freq":38,"data":[98 76,54 32,2]}
}` 

setLocal("irjson" ,text);

このパターンで好きなだけ繰り返し追加できる。最後だけ「,」はなしになるので注意。なお、リモコンコードはダミー。 コードの取得はhttp://d.hatena.ne.jp/tsukaban/20150828/p1を参考にした。 このコードをTaskerから呼び出すとローカル変数(配列)"irjson"にリモコンデータが格納される。

続いてリモコン発信のコードはこちら。ローカル変数"irjson"の中にリモコンコードが格納された状態で呼び出す必要がある。

/sdcard/Download/Javascript/IRKitSendIR.js

var IRs;
var text;

text = local("irjson");
IRs = JSON.parse(text);

var deviceid = "xxxxxxxxxxx";
var clientkey = "xxxxxxxxxxx";
var msg = IRs[sendir];

function send(message){
  var xhr = new XMLHttpRequest();
  xhr.open("post", "https://api.getirkit.com/1/messages", false);
  var form = new FormData();
  form.append("deviceid", deviceid);
  form.append("clientkey", clientkey);
  form.append("message", JSON.stringify(message));
  xhr.send(form);
}
 
function main(){
  send(msg);
}
 
try{
  main();
}
catch(e){
  flash(e.message);
}

こちらもidやkeyの取得はhttp://d.hatena.ne.jp/tsukaban/20150828/p1を参考にした。

なお、参考までに自分の場合、INHOMEというグローバル変数で、自宅にいるかどうかの状態管理をしているので、以下のような分岐をしている。コード中の「192.168.1.xxx」の部分は、自身のIRkitのIPアドレスを指定する。 /sdcard/Download/Javascript/IRKitSendIR.js (自分用)

var IRs;
var text;

text = local("irjson");
IRs = JSON.parse(text);

var deviceid = "xxxxxxxxxxx";
var clientkey = "xxxxxxxxxxx";
var msg = IRs[sendir];

function send(message){
  var xhr = new XMLHttpRequest();
  if(global("INHOME") == 1){
    xhr.open('post','http://192.168.1.xxx/messages',false);
    xhr.send(JSON.stringify(message));
  }else{
    xhr.open("post", "https://api.getirkit.com/1/messages", false);
    var form = new FormData();
    form.append("deviceid", deviceid);
    form.append("clientkey", clientkey);
    form.append("message", JSON.stringify(message));
    xhr.send(form);
  }
}
 
function main(){
  send(msg);
}
 
try{
  main();
}
catch(e){
  flash(e.message);
}

この2つのスクリプトをTaskerから呼び出して使う。

具体的にはこんな感じ。

リモコン送信 (165)
    Run Both Together
    A1: Vibrate [ Time:50 ] 
    A2: Variable Set [ Name:%sendir To:%par1 Recurse Variables:Off Do Maths:Off Append:Off ] 
    A3: JavaScript [ Path:Download/Javascript/IRKitCommand.js Libraries: Auto Exit:On Timeout (Seconds):45 ] 
    A4: JavaScript [ Path:Download/Javascript/IRKitSendIR.js Libraries: Auto Exit:On Timeout (Seconds):45 ] 
    A5: Flash [ Text:%sendir を送信しました。 Long:Off ] 
    A6: [X] Notify [ Title:%sendir を送信しました。 Text: Icon:hd_aaa_ext_home Number:0 Permanent:Off Priority:3 ] 

このリモコン送信というタスクに引数をひとつつけて呼び出すとリモコンが送信される。

昼の電気 (175)
    A1: Perform Task [ Name:リモコン送信 Priority:%priority Parameter 1 (%par1):ペンダントON Parameter 2 (%par2): Return Value Variable: Stop:Off ] 
    A2: Perform Task [ Name:リモコン送信 Priority:%priority Parameter 1 (%par1):照明勉強 Parameter 2 (%par2): Return Value Variable: Stop:Off ] 

これで、パナソニック製の照明にある「勉強」というモードになる。

複数の送信コマンドを並べてバッチ処理も可能だし、条件分岐もできる。

*1:このようなおかしなパスなのは、Syncという同期ソフトでPCとフォルダ共有しているため。リモコンコードの追加削除はPC側でやった方が楽なので。