IRKitはサービス終了しました。
IRKitサービス終了しましたをご確認ください。
IRKitとは
IRKitは、WiFi機能の付いたオープンソースな赤外線リモコンデバイス。 家庭のエアコンやテレビ、ライトなど、赤外線で操作できる家電を、 WiFiをとおして、iPhoneやiPad,Androidスマートフォンなどから操作できるようにするものです。
IRKitは、 公式iOSアプリ IRKitシンプルリモコン 公式Androidアプリ IRKitシンプルリモコン から操作できるほか、 IRKit iOS-SDK を使えば、 任意のタイミングで赤外線信号を送ることのできるiOSアプリを簡単につくることができます。
例えば
- 位置情報を使いiPhone/Androidが家の近くに来たら自動でエアコンを付けるアプリ
- 1ボタンで家中の家電の電源を消すアプリ(寝る前に便利)
- ソーシャルと連携してFacebook友だちの見ているテレビにチャンネルを合わせるアプリ
など、家電を操作する様々なアプリの可能性があるでしょう。
また、JavaScriptを使ってブラウザから赤外線信号を送ったり
curlを使って黒い画面(Terminal)から赤外線信号を送ることもできます。
IRKitデバイス自体にHTTPサーバがあり、
JSON形式の赤外線情報を HTTP POSTリクエストにのせて送ることで、赤外線信号を送ることができるのです。
また、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しています。
IRKitデバイスは、Arduino Derivative(派生)のプロダクトです。
未使用のピンは引き出してあるので、温度センサや明るさセンサなどを追加し、ArduinoIDEを使ってプログラムを書き込めば、
よりスマートなリモコンをつくることもできます。
リモコンのどんなところを、諦めていましたか?
どんなふうに家電を操作したいですか?
IRKit iOS SDK
It's as simple as:
See more on irkit/ios-sdk
IRKit Device Hardware
See more on irkit/device/hardware
IRKit Device Firmware
IRKit Device Case
See more on irkit/device/case
IRKit Device HTTP API
IRKitデバイスは、Bonjourを使ってIPアドレスを求めることができます。
- SafariなどBonjourの.localホスト名を解決するクライアントから以下のHTTPリクエストをする場合には上記は不要です。
IPアドレスがわかったら、以下のHTTP APIにアクセスしましょう。
GET /messages
最も新しい受信した赤外線信号を返します。
GET /messages
が完了すると、保存していた赤外線信号は消去します。
同じ赤外線信号を2度、続けてGETすることはできません。
POST /messages
赤外線信号を送ります。
- Windowsからcurlを使う場合には、ダブルクオートのエスケープに気をつけましょう。詳しくは コマンド ラインの指定
POST /keys
clienttoken
を取得します。
clienttoken
を次に IRKit Internet HTTP API の POST /1/keys へのリクエストにのせることで clientkey
, deviceid
を取得することができます。
詳しくは IRKit Internet HTTP API 参照
POST /wifi
IRKitは家のWiFiアクセスポイントに接続して動作しますが、 そのためには、IRKitは家のWiFiアクセスポイントのセキュリティ(WPA2/WEP/NONE)、SSID、パスワードを知る必要があります。
IRKitにそれを伝えるには、 IRKit自体がWiFiアクセスポイントになり、それに接続し、IRKitにHTTPリクエストを送ります。
家のWiFiアクセスポイントのSSIDなどは、シリアライズしてPOSTリクエストのbodyに入れます。 シリアライズ方法については、 keyserializer test にあるJavaScriptの実装と - (NSString *)morseStringRepresentation にあるObjective-Cの実装を見てください。
POST /wifi
がHTTPステータスコード200のレスポンスを返した後、POST /1/door を呼んでください。
赤外線信号を表すJSONについて
赤外線信号は↑のようなJSONで表します。以下のキーを持ちます。
Key | Description |
---|---|
format | "raw"のみ |
freq | 赤外線信号のサブキャリア周波数を表します。38 または 40 のみ。単位 [kHz] |
data | 赤外線信号は、サブキャリア周波数のオン・オフからなります。IRKitデバイスはオン→オフ間の時間、オフ→オン間の時間を 2MHz のカウンタで数えます。dataには、カウンタで数えた数をオン・オフの回数分ならびます。 |
IRKit Internet HTTP API
IRKit Device HTTP API は、IRKitデバイスと同じWiFiにつないでいる時のみ、アクセス可能です。 同じWiFiにいない場合には、インターネットのIRKitサーバを通してIRKitデバイスに赤外線を送ってもらうことができます。
概要
インターネットのIRKitサーバを使用する場合には、以下の2つのリクエストパラメータが必要になる場合があります。 誰からのリクエストであるか、どのIRKitへのリクエストであるか、を指定する場合に使います。
Name | Description |
---|---|
clientkey | クライアントがリクエストに付加し、クライアントを認証するためのキー |
deviceid | クライアントがリクエストに付加し、リクエスト先のIRKitデバイスを特定するID |
clientkey
, deviceid
を入手するには、2つ方法があります。
既にWiFiに接続済のIRKitがある場合には
POST /keys を使用してIRKitデバイスを通して clienttoken
を取得した後 POST /1/keys を使います。
IRKitを既に持っていて、家にあるIRKitを使ってライフハックしたい!使いこみたいという場合には、↑こちらを使うとよいでしょう。
まだWiFiに未接続のIRKitがあり、公式iOS/Androidアプリまたは iOS SDK を使用できない場合、 例えば、WindowsPhone向けのIRKit SDKを作成したい!という場合には、以下のAPIを使用します。
POST /1/clients を使用して clientkey
を取得した後
POST /1/devices を使って devicekey
, deviceid
を取得します。
次にIRKitのアクセスポイントに接続し、IRKitを接続する先のWiFiアクセスポイントの認証情報とともに devicekey
をIRKitデバイスに送ります(POST /wifi)。
devicekey
はIRKitデバイスがIRKitサーバへリクエストする際に使用します。
POST /1/door を使用して、IRKitが正常にWiFiに接続しインターネット上のサーバに接続できたことを確認します。 これで完了です。
POST /1/door のレスポンスに含まれる hostname
を使えば、同じWiFiアクセスポイントに接続しているクライアントからは Bonjour を使うことでIPアドレスを求め、 IRKit Device HTTP API にアクセスできます。
POST /1/keys
deviceid
を取得するために使います。
clientkey
リクエストパラメータを付加すると、この clientkey
と deviceid
を関連づけてサーバ側に保存します。
取得した deviceid
を使えば、POST /1/messages を使って赤外線信号を送信できるほか、
このIRKitデバイスが受信した赤外線信号を GET /1/messages を取得することができます。
Request Parameters
Name | Required | Description |
---|---|---|
clienttoken | o | POST /keys を使って取得したもの |
clientkey | x | see 概要 このパラメータがある場合にはこの clientkey にIRKitデバイスを関連づけます。 |
Response JSON keys
Name | Description |
---|---|
deviceid | see 概要 |
clientkey | see 概要 |
POST /1/messages
赤外線信号を deviceid
で指定するIRKitデバイスから送信します。
Request Parameters
Name | Required | Description |
---|---|---|
clientkey | o | see 概要 |
deviceid | o | see 概要 |
message | o | see 赤外線信号を表すJSONについて |
- Windowsからcurlを使う場合には、ダブルクオートのエスケープに気をつけましょう。詳しくは コマンド ラインの指定
GET /1/messages
最も新しい受信した赤外線信号を返します。
このリクエストは、ロングポーリングなリクエストです。
clear
を指定すると、過去にIRKitデバイスがサーバに送信しサーバで保存している赤外線信号を消去し、
新しい赤外線信号がIRKitデバイスから届いたらただちにレスポンスを返します。
規定値でタイムアウトすると空のレスポンスを返します。
赤外線信号を学習するシーンでは、最初に clear=1
をつけてリクエストをした後、リクエストがタイムアウトしたら clear
パラメータを付与せずに再度リクエストするとよいでしょう。
リクエストパラメータの clientkey
と関連するIRKitデバイスが複数ある場合には、
レスポンスに含まれる deviceid
と hostname
を使ってどのIRKitが赤外線信号を受信したかを識別します。
Request Parameters
Name | Required | Description |
---|---|---|
clientkey | o | see 概要 |
clear | x | サーバに保存している赤外線信号を消去してから新しい赤外線信号をIRKitデバイスから待ち受けます。 |
Response Parameters
Name | Description |
---|---|
message | see 赤外線信号を表すJSONについて |
hostname | IRKitデバイスのホスト名。IRKit Device HTTP API を使用する際に .local suffixをつけるとよいでしょう |
deviceid | see 概要 |
POST /1/clients
clientkey
を作成します。
Request Parameters
Name | Required | Description |
---|---|---|
apikey | o | see POST /1/apps |
Response Parameters
Name | Description |
---|---|
clientkey | see 概要 |
POST /1/devices
devicekey
, deviceid
を作成します。
このようにして取得した devicekey
を、
IRKitのアクセスポイントを使用して、IRKitを接続するWiFiの認証情報とともにIRKitデバイスに送ります((POST /wifi)。
Request Parameters
Name | Required | Description |
---|---|---|
clientkey | o | see 概要 |
Response Parameters
Name | Description |
---|---|
devicekey | see 概要 |
deviceid | see 概要 |
POST /1/door
IRKitのアクセスポイントを使用して、家のWiFiアクセスポイントの認証情報とともにdevicekeyをIRKitデバイスに送った後(POST /wifi)、POST /1/door
を使用して、IRKitデバイスが正常に家のWiFiアクセスポイントを通してインターネットに接続できたことを確認します。
このリクエストは、ロングポーリングなリクエストです。 IRKitデバイスが正常にインターネット上のAPIサーバに接続できるとただちにレスポンスを返します。 規定値でタイムアウトすると空のレスポンスを返します。
Request Parameters
Name | Required | Description |
---|---|---|
clientkey | o | see 概要 |
deviceid | o | see 概要 |
Response Parameters
Name | Description |
---|---|
hostname | Bonjour を使うことで同じWiFiアクセスポイントに接続したクライアントから #{hostname}.local として接続するために使います。 |
POST /1/apps
apikey
を作成します。
Request Parameters
Name | Required | Description |
---|---|---|
o | 開発者メールアドレス |
Response Parameters
Name | Description |
---|---|
message | - |