Unityアプリからテレビの電源を付ける(IRKitをUnityから扱う話)

この記事は最終更新日から3年以上が経過しています。

IRKitをUnityから扱いたい気持ちの人が自分以外にいるとは思えませんが、結果としてIRKitを操作することができたので知見を紹介します。
いろいろハマるところがあったのでそれもメモしておきます。

この記事の前提:

・IRKitのIPアドレスはわかっている。
・UnityアプリとIRKitは同じWifiにつながっている。
・Windowsでの開発のためコマンドプロンプトを使っている

IPアドレスを知るには:

(ex).cmd
% 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して信号を送る。

IRKitTest.cs
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を追加したらうまくいきました。

以上です。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント
この記事にコメントはありません。
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした