読者です 読者をやめる 読者になる 読者になる

とあるエンジニア系ライダーの日常

Webエンジニアの話、バイクの話

IRKitが届いたので遊んでみた

IRKitが届いたので遊んでみた

  • IRKitについて
  • やりたいこと
  • 手始め
  • 初めてのiOSApp
  • 実際の開発
  • 完成 

IRKitについて

引用:公式サイト http://getirkit.com/

IRKitは、 公式iOSアプリ IRKitシンプルリモコン 公式Androidアプリ IRKitシンプルリモコン から操作できるほか、
IRKit iOS-SDK を使えば、 任意のタイミングで赤外線信号を送ることのできるiOSアプリを簡単につくることができます。
また、JavaScriptを使ってブラウザから赤外線信号を送ったり
curlを使って黒い画面(Terminal)から赤外線信号を送ることもできます。
IRKitデバイス自体にHTTPサーバがあり、
JSON形式の赤外線情報を HTTP POSTリクエストにのせて送ることで、赤外線信号を送ることができるのです。
また、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しています。
IRKitデバイスは、Arduino Derivative(派生)のプロダクトです。
未使用のピンは引き出してあるので、温度センサや明るさセンサなどを追加し、ArduinoIDEを使ってプログラムを書き込めば、
よりスマートなリモコンをつくることもできます。

やりたいこと

「帰ったよ」って言うと電気、エアコン、テレビをつける。
「いってきます」って言うと電気、エアコン、テレビを全部消す。

手始め

まずはcurlでエアコンをつけてみようかと

  1. IRKitをWifiに接続
  2. エアコンからIRKitに赤外線を送る
  3. MacからcurlでIRKitに送信された赤外線をJson形式で取得する
  4. MacからcurlでIRKitに赤外線を送信してエアコンをつける

1.IRKitをWifiに接続
まずはiPhoneを使って、IRKitに家のWifiの情報を送ってSetUp。
赤いランプの点滅が青くなったら接続完了!
RouterにつないでみるとIRKitが接続されていることがわかるので、
ホスト名を( ..)φメモメモ

2.エアコンからIRKitに赤外線を送る
とりあえずcurlがつながるか確認

curl -i "http://IRKitHoge.local/messages" -H "X-Requested-With: curl"

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain

 

つながった!

次、青いランプが点灯している状態で、エアコンのONボタンをIRKitに向かって押した後GET
curl -i "http://IRKitHoge.local/messages" -H "X-Requested-With: curl"

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain

{"format":"raw","freq":38,"data":
[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,
1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190
,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190
,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190
,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

f:id:kensanty:20150824173808p:plain

赤外線信号って、、、複雑。。。

ということでこれをそのまま送信してみましょう。

curl -i "http://10.0.1.2/messages" -H "X-Requested-With: curl" -d
'{"format":"raw","freq":38,"data":
[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,
1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190
,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190
,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190
,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}'

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain

エアコンついたーー!!!

ちなみにそれぞれのJsonの意味はこんなんらしい
Key Description
format "raw"のみ
freq 赤外線信号のサブキャリア周波数を表します。38 または 40 のみ。単位 [kHz]
data 赤外線信号は、サブキャリア周波数のオン・オフからなります。IRKitデバイスはオン→オフ間の時間、オフ→オン間の時間を 2MHz のカウンタで数えます。dataには、カウンタで数えた数をオン・オフの回数分ならびます。
よくわからん。

初めてのiOSApp

さて、Siriに話しかけてリモコンを操作したかったものの、

実はiOSAppを作ったことがありませんでした!!!

というかXCodeを触ったこともありませんでした!!!

というかSwift書いたことない!!!

ので、実機確認が無料でできるXCode7をダウンロード。

XCode6まではDeveloperProgramに登録(有料)しないと実機確認

できないので注意。

Swiftは、まぁノリで書けるだろうと。

とりあえずこれだけ覚えた

func メソッド名(引数:型) -> 戻り値の型 {
        return 戻り値
}

型の定義とかがJavaと逆なのかー。

でも、なんか書きやすい!

ってか言語仕様わかりやすいから以外とスラスラ書ける。

Swiftおもしろい、iOSAppおもしろい!

実際の開発

最初

irkit/ios-sdk · GitHub

本家のSDKを使おうと思ったんですが、、、

Objective-C ! そっちは書きたくない。

BridgeでImportできるらしいけど、

そんな面倒なこともあんまりしたくないなーということで、

UIViewのLoad後の処理にHTTPリクエストを書きましたw

func sendMessage(message: String) {
   let urlString = "http://IRKithoge.local/message/"
   var request = NSMutableURLRequest(URL: NSURL(string: urlString)!)
   request.HTTPMethod = "GET"
request.HTTPBody = message.dataUsingEncoding(NSUTF8StringEncoding)
var task = session.dataTaskWithRequest(req, completionHandler: {
(data, resp, err) in
println(resp.URL!)
println(NSString(data: data, encoding: NSUTF8StringEncoding))
})
task.resume() }
}

普通にHTTPのBodyに赤外線情報のJSONを突っ込んで送りました。

で、このアプリ名を「帰ったよ」にして

iPhoneにデプロイ。

すると、Siriに「帰ったよ」と言うと、

アプリが起動して自動で赤外線が送られるという簡単な仕組み。

Siriがアプリ内のコマンド実行できたらもっといいのになー。。。

完成

「HeySiri 帰ったよ」でエアコンON、電気全灯

「HeySiri いってくる」でエアコンOFF、電気消灯

はい、なぜテレビはできなかったか。。。

テレビはONとOFFの信号が同じなので、

どっちかわからないのです!

まぁ、帰ったらちょっと便利になったのでいいや。

 

item.rakuten.co.jp

 

公式サイト

IRKit - Open Source WiFi Connected Infrared Remote Controller