4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-09-07

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

以上です。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?