やーまんぶろぐ

気が向いた時にだけ書くブログ

IRKitで赤外線操作する

2, 3年前から、居間寝室の電気、エアコンのオンオフ、プロジェクターのオンオフあたりは、irkitを使ってスマホから操作してます。



普段はherokuで動かしたり、monacaで作ったアプリから操作したり、iftttと連携したりといろいろ使っていますが、
今回は、curlを使ってインターネットのIRKitサーバを通してIRKitデバイスに赤外線を送るところを書きます。

詳細は、オフィシャルサイトを見ればわかると思います。
IRKit - Open Source WiFi Connected Infrared Remote Controller

不要なデバイスAPIの記載は省いています。

バイスIDとクライアントキーを求める

以下、コピペで実行すると取得できます。
IPアドレス取得 -> クライアントトークン取得 -> デバイスIDとクライアントキーという流れで取得しています。

インターネット経由(Wifiの外から)でHTTPアクセスするにはこの2つが必要になります。

dns-sd -B _irkit._tcp | head -n 5 | awk 'END {print}' | awk '{print $7}' > irkit
dns-sd -G v4 `cat irkit`.local | head -n 4 | awk 'END {print}' | awk '{print $6}' > ip
export IP=`cat ip`
curl -i "http://$IP/keys" -d ' ' | awk 'END {print}' | sed 's/\":\"/=/g' | sed 's/[{|}|\"]//g' > clienttoken
curl -i -d `cat clienttoken` "https://api.getirkit.com/1/keys"
# ここで取得できます
# ↓後片付け
rm irkit
rm ip
rm clienttoken

最新の赤外線信号を取得する

事前にIRKitに向かって赤外線信号を送信しておきます。
送信後、以下のコマンドを実行することで最新の赤外線信号を取得できます。

curl -i "https://api.getirkit.com/1/messages?clientkey=XXXXXXXXXXXXXXXX"

ここで取得した信号は以下のように書き換えて、次で使います。

{"message":{"format":"raw","freq":38,"data":[xxxx,xxxx,xxxx,xxxx]},"hostname":"XXXXXXXXXXXXXX","deviceid":"XXXXXXXXXXXX"}

'message={"format":"raw","freq":38,"data":[xxxx,xxxx,xxxx,xxxx]}'

赤外線信号をIRKitデバイスから送信する

以下のコマンドを実行すると、インターネット経由で赤外線を送信することができます。
信号の情報はデバイスが保持してくれるわけではないので、実行するたびに引数として渡す必要があります。
何かのアプリを作るときは、アプリ側で覚えておく必要があるので注意しましょう。

curl -i "https://api.getirkit.com/1/messages" \
     -d 'clientkey=XXXXXXXXXXXXXXXXXXXXXXXXXX' \
     -d 'deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXX' \
     -d 'message={"format":"raw","freq":38,"data":[xxxx,xxxx,xxxx,xxxx]}'

最後に

今回は基本的なところを書きました。
これを応用して各アプリを作成しています。

いろいろ試したけど、IFTTTと連携させるのが一番使い勝手がいいですね。
blog.hello-world.jp.net

気が向いたら、また書きます。