IRKitをUnityから扱いたい気持ちの人が自分以外にいるとは思えませんが、結果としてIRKitを操作することができたので知見を紹介します。
いろいろハマるところがあったのでそれもメモしておきます。
#この記事の前提:
・IRKitのIPアドレスはわかっている。
・UnityアプリとIRKitは同じWifiにつながっている。
・Windowsでの開発のためコマンドプロンプトを使っている
##IPアドレスを知るには:
% dns-sd -B _irkit._tcp
% dns-sd -G v4 irkitd2a4.local
これで知ることができます。詳しくは http://getirkit.com/ に書いてあるとおり。
#テレビの電源を付ける
まずテレビの電源ボタンの赤外線信号はわかっている必要があります。
##電源ボタンの赤外線信号を知る
やり方:
①IRKitにリモコンを向けてテレビの電源ボタンを押す
②IRKitが青点滅したら取得完了
③curl -i "http://10.0.1.2/messages" -H "X-Requested-With: curl"
をコマンドプロンプトで行う。
↓
{"format":"raw","freq":38,"data":[4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,…,1150,1150]}
と言った感じで取得することができます。
これを控えておきます。
##IRKitに向けてUnityからPOSTして信号を送る。
public class IRKitTest : MonoBehaviour{
void Start() {
StartCoroutine(POST());
}
IEnumerator POST() {
var url = Settings.iRKitLocalURL;
var json = "{\"format\":\"raw\",\"freq\":xx,\"data\":[4713,1150,2368...(ここは前章で取得した信号を貼り付けて下さい。人それぞれなので省略)}";
var dat = System.Text.Encoding.UTF8.GetBytes(json);
WWWForm form = new WWWForm();
var headers = form.headers;
headers["Content-Length"] = dat.Length.ToString();
headers["X-Requested-With"] = "irkit-unity";//irkit-unityというヘッダでなくても良いです。hogeでも良い。
WWW www = new WWW(url, dat,headers);
yield return www;
if (www.error == null)
{
Debug.Log(www.text);
}
foreach (var kv in www.responseHeaders)
{
Debug.Log(kv.Key.ToString() + " -> " + kv.Value.ToString());
}
}
コードで見ると簡単ですが、
headers["Content-Length"] = dat.Length.ToString();
headers["X-Requested-With"] = "irkit-unity";
がないと、400 BadRequestとして処理されてしまいます。
公式のお知らせ http://maaash.jp/2015/09/irkit-firmware-update/ では
それ以外のアプリやご自身で作成されたスクリプトで、IRKit Device HTTP API を利用している場合には、以下のように修正を行ってください。
ブラウザ以外から IRKit Device HTTP API を利用する場合、HTTPリクエストには X-Requested-With: curl のようにヘッダをつけてください。
ということが書いてあったのでそれに則りました。
それだけだと400が返ってきてしまうので悩んでいましたが、Content-Lengthが0として送信されていたので、それを解消しようとContent-Lengthを追加したらうまくいきました。
以上です。