IRKitを使ってJavaScriptから家電を操作。外出先でも!
IRKitについては前回と前々回の記事で「iPhoneアプリから」「コマンドラインから」、2つの手段でIRKitを操作しました。 今回はJavaScriptを使ってWebブラウザベースに操作してみます!
IRKit Internet HTTP APIを使用するためLAN外(インターネット上)からのアクセスが可能になり。
さらにはJavaScriptが動くプラットフォームならAndroidでも、WinタブでもIRKitが操作可能になります。(IRKitが操作可能=リモコン対応の家電が操作可能)
下準備
まずはAPIを使うのに必要なキーを取得します。
JavaScript単体でこの準備ができないのは痒いところですね・・・
clienttokenを取得する
clienttokenを取得します。
前回の記事を参考にIRKitのセッティングとIPアドレスの確認をしておいて下さい。
$ curl -i "http://IPアドレス/keys" -d ''
そして結果が
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.0.0.0.g992a4a5
Content-Type: text/plain
{"clienttoken":"********************************"}
deviceidとclientkeyを取得する
deviceidとclientkeyを取得します。ここからはインターネット上のサーバーからGETするのでLAN外からも可能です。
先ほど入手したclienttokenを入れて
~$ curl -i -d "clienttoken=********************************" "https://api.getirkit.com/1/keys"
結果が
HTTP/1.1 200 OK
Server: ngx_openresty
Date: Sun, 13 Apr 2014 12:16:26 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-Content-Type-Options: nosniff
{"deviceid":"********************************","clientkey":"********************************"}
clientkeyは認証するキー、deviceidはデバイスを特定するためのIDだそうです。
この2つが他人に知れると部屋のテレビとか勝手に操作されちゃうので取り扱いには気を付けて。
まずは試してみよう
超簡易なテストページ作りました。
先ほど取得した2つのキーを入れて「GET」ボタンを押すと、テキストエリアに信号データが表示されます。
「POST」ボタンでテキストエリアに入ってるデータを送信してIRKitから発射。
完全にクライアントサイドで動き、モバイル通信からも操作できる事が確認できます。
Mac,iOS,Androidで試しましたがブラウザによっては動かないかも・・・?
JavaScriptでHTTPリクエスト
IRKit Internet HTTP API
REST APIのパラメータはこんな感じ
https://api.getirkit.com/1/messages?clientkey=[clientkey]&deviceid=[deviceid]&message=[JSON形式のテキスト]
サーバー側で対応されているためXMLHttpRequest Level2の実装されているブラウザならクロスドメインでアクセスできます。(多分)
messageパラメータはIRKitが受信した赤外線データを入れます。ちゃんとJSON. stringifyしてね☆
jQueryでAjax
適当なサンプル置いときます。
楽なのでjQuery使っちゃいましょう。
/* IRKit Internet HTTP API */
var url = "https://api.getirkit.com/1/messages";
var clientKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var deviceId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
としといて
/* HTTP GET */
function ajaxGet() {
$.ajax({
type: "GET",
url: url,
data: {clientkey: clientKey},
cache: false,
dataType: "json",
timeout: 5000 //タイムアウト時間
})
.done(function(json) {
console.log(json.message);//受信後の処理等
})
.fail(function(XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus); //エラー時の処理等
});
}
これで赤外線信号のデータが返ってきます。
IRKitが信号を受信すると自動でサーバー上にデータが送信されて、そこから拾ってくる模様。
次はIRKitに信号を発信させます。
/* HTTP POST */
function ajaxPost(jsonMessage){
$.ajax({
type: "POST",
url: url,
data: {
clientkey: clientKey,
deviceid: deviceId,
message: JSON.stringify(jsonMessage)//GETした赤外線データ
},
cache: false,
timeout: 1000 //タイムアウト時間
})
.done(function(json) {
console.log("信号送信に成功しました");//送信後の処理等
})
.fail(function(XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus);//エラーメッセージ
});
}
先ほど受信した赤外線データなんかを入れてPOSTすると全く同じ信号がIRKitから発射されて家電が反応するという感じ。
JSONは{"format":"raw","freq":38,"data":[1275,3704,・・・]}
みたいな形式。
まとめ
何にどう使おうか
JavaScriptで動くとなったら応用の幅ができます。
最近話題のスマートウォッチ「Pebble」はJavaScript Frameworkでアプリが作れるので、ホームオートメーションのコントローラー役に最適。
他には、iPhoneのホーム画面にブックマークレット化したボタンを設置しても良し、
MyScriptsやMyShortcuts+Viewerでリマインダーに登録したり、ランチャーアプリと連携してゴリゴリに使い倒すことも?
最後に、何か間違ってたいり動かねぇぞクソって場合はコメントか@iyuto_までお願いします。
関連記事
【その1】iPhoneから操作できるWiFi搭載赤外線リモコン「IRKit」を使ってみた。
【その2】IRKitを使用してターミナルから部屋の家電を操作