未来を感じる照明:Hueで遊んでみた その1
2014年が始まったので、福笑いでもかるたでもなくHueで遊んでみました。
Hueとはこちら
ざっくり言えば「スマホとかから制御できる色変更可能なLED電球」です。公式のAndroidアプリやiOSアプリが提供されており、そこから自由に色の変更が可能となっています。また、Android/iOSそれぞれ向けのSDKに加えて、REST APIも提供されており、様々な自作のアプリケーションから自由に電球を制御できるようになっています。
お値段なんと約3万円。。。(;´д`)
ネットワーク構成
ネットワーク構成の例は下図の通りです。
Hueの電球はHueブリッジと呼ばれるゲートウェイを介してブロードバンドルータに接続されます。HueブリッジとHue電球の間はWi-Fi等の馴染みのある通信規格ではなく、ZigBeeというセンサネットワーク用の規格を利用しています。このおかげで電球ーHue間は面倒な設定等せずともアドホックにネットワークを構築できるようになっているようです。
それでは早速遊んでみましょう!
APIデバッグツールとユーザ作成
とは言いつつも幾つかの下準備がいります。具体的には、
という2点です。
1.HueブリッジのIPアドレス
Hueブリッジにアクセスするため、IPアドレスを調べる必要があります。Hueブリッジが正しく接続された状態で、同じネットワークからwww.meethue.com/api/nupnp にアクセスするとブリッジのIPアドレスを確認することができます。また、ルータのDHCPテーブルを見て確認するという方法でもOKです。
2.APIデバッグツール
確認したブリッジのIPアドレスを用いて
http://<ブリッジのIP>/debug/clip.html
にアクセスすると、APIデバッグツールを利用することができます。
こんなかんじ。このデバッグツールはリクエストの送信のみならず、レスポンスに含まれるJSON形式のメッセージを整形して表示してくれる優れもので、テストには持ってこいのツールとなっています。
次に各種API操作に必要なユーザの作成を行います。
ターゲットURLを
/api
メッセージボディを
{"devicetype": "デバイスの名前", "username": "ユーザ名"}
としてPOSTしてみましょう。どうでしょうか。エラーが帰ってきましたね。HueではAPI操作に必要なユーザに関してまともな認証を一切行わない代わりに、「ユーザ作成の際に必ずブリッジのリンクボタンを押す」という制約を設けています。
気を取り直し、リンクボタンを押してから同じPOSTを行いましょう。今度はメッセージボディの中に”success”の文字を発見することができるはずです。ちなみに、POSTの際にはusename属性はオプションとなっており、指定しなかった場合はランダムに生成されたキーが帰ってくるようになっています。
また、Hueの3つの電球はそれぞれIDによって管理されています。現在Hueブリッジから認識されている電球のIDは
/api/<username>/lights
をGETすることで確認できます。IDは初期値では1~3になっていると思います。
長かったですがようやく準備が整いました。今後はこのユーザ名と電球のIDを使ってHueで遊んで行くことになります。
まずはオンとかオフとかしてみる
まずは基本ということで電球のオン/オフを制御してみましょう。
ターゲットURLを
/api/<username>/lights/<電球のID>
メッセージボディを
{"on": true} //電球点灯
としてPUTしてみましょう。うまくいけばIDに対応した電球がつくはずです。同じターゲットURLに対してメッセージボディを
{"on": false} //電球消灯
としてPUTすることで電球を消すことができます。
次に色を変えてみましょう。Hueではその名の通りRGB色空間ではなくhue(色相)を用いたHSV色空間(詳しくはhttp://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93)を用いており、hue(色相:0~65535で指定)、sat(彩度:0~255で指定)、bri(明度:0~255で指定)の3値によって色を指定します。
試しに同じターゲットURLに対して
{"on": true, "hue": 65535, "bri": 255, "sat": 255} //赤色で点灯
をPUTすると、赤色で電球を光らせることができると思います。hue値を変えていくと、様々な色で光る電球を確認することができるでしょう。ちなみにこのPUTにおいては全てのパラメータがオプション扱いとなっているので、電球を光らせたまま色味だけをPUTすることもできます。
{"hue": 10000} //赤色で点灯している電球をオレンジに変更
ようやく好きな色で電球を光らせることができるようになりましたね!
とりあえずその1はここまで。次回はその他パラメータやGUIによる制御等を行います。