LED電球(Philips HUE)をコントロールする その(1) node-RED

LED電球を自在に扱う

 蛍光灯の時代、調光機能をもつリモコンを使うと、たいへん便利でした。LED電球に時代が移り、初期のころは調光機能が働きませんでしたが、今では対応品が市販されています。しかし、メーカの作った仕様でしか利用できません。

 ここでは、LED電球に含まれるRGBの3種類のLED光源をプログラムで自在に制御できる電球を使います。

最初に必要なのはファームウェアのバージョンアンプ

 Philips Hue(ヒュー)シングルランプというLED電球は、通信にZigBeeを使います。したがって、PCなどから制御するには、TCP/IPとのゲートウェイが必要です。無線で制御を行うときWi-Fiが手軽ですが、一部屋にノートPCなど複数のクライアントがいる状況では、電球がTCP/IPで通信するにも個数に限界があります。ZigBeeはもともと数十個から数百の機器の通信を前提とした通信仕様なので、会社のビルなどに適しています。

 しかし、1、2個のLED電球で用が足りる部屋にゲートウェイを1個設置するのはコスト・パフォーマンスがよいとは言えません。

 今回実験用に購入したのは、次の2点です。

 スマホ用アプリやPCのWebに組み込むアプリケーションが用意されているので、インストールして、ゲートウェイ(ブリッジ)と電球のファームウェアを更新します。

 NeXus7でアプリのPhilips Hueをインストールしました。動作させ、更新を行います。更新後、ゲートウェイ、電球共に、電源を入れなおします。

node-REDではnode-red-contrib-node-hueノードをインストール

 ラズパイでは0.15.3から0.16.2へバージョンを上げてあります。node.jsは6.10.0に上がっています。

 HUE用のノードをインストールします。0.15.3のときには、スタート時のコメントに出ているように、npmのバージョンを上げておきます

 右上にメニュー・アイコンがあります。そこからプルダウンして「処理ノードの追加削除」を選択します。

 画面の左側に「処理ノードの追加削除」の区画ができます。ここの「現在の処理ノード」のタブにはインストールされているノードが表示されています。もう一つのタブ「処理ノードを追加」を選びます。

 検索に「HUE」と入れると複数のノードが出てきます。「node-red-contrib-node-hue」の右下にあるinstallボタンの「処理ノードを追加」をクリックします。インストールは数分かかります。終了したら「完了」をクリックします。

 画面左のノード・パレットに、node-hue-outとnode-hue-inのノード・アイコンが追加されました。

基本的な命令を動かす準備

 ブリッジの電源であるAC-DCアダプタをつなぎ、有線LANをLANケーブルでハブにつなぎます。LED電球を電球ソケットに入れます。電源スイッチがあれば、ONにします。

 最初に、ゲートウェイであるブリッジを認識させます。ブリッジを認識させた後は、Lightを探します。購入時のままでは見つけてきませんでした。また、ファームウェアの更新をしても、ブリッジの電源を入れなおなさないと、Lightを見つけてきませんでした。

 出力の項目に入っているnode-hue-inのノード・アイコンを中央のキャンパスへドラッグ&ドロップ(1)します。ダブルクリックして(2)設定画面を出します。Hue bridge項目右の鉛筆アイコンをクリック(3)します。

 Host項目の虫眼鏡のアイコンをクリックすると、ブリッジのIPアドレスが入ります。

 ブリッジの中央にあるボタンを押して、API key(ユーザ名)項目右の人型のアイコンをクリックすると、長い文字列が入ります。

 追加ボタンを押し、一つ前に戻ります。Light IDの右にあるアイコンを押し、その左の三角印をクリックすると、見つけてきた「1:Hue color lamp 1」というlightを表示するので選択します。

 完了を押します。これで、LED電球を制御する準備が整いました。

node-red-contrib-node-hueでプログラミング

 左のノード・パレットの一番上にあるinjectノードを二つ、キャンパスへドロップします。ドロップしたら、名前はtimestampに変わります。

 

 injectは、アイコンの左のボタンをクリックすると、メッセージを次のノードに送る役目をするノードです。

 一つ目のtimestampをダブルクリックして設定画面を開きます。Payloadの項目をJSONに変更します。Payloadは、メッセージの本体のことで、JSONという記述方式を選びました。

 

 node-red-contrib-node-hueのWebに書かれているように、命令をJSONで与えます。

  • OFF {"on":false}
  • ON {"on":true}

 それぞれのtimestampに上記の命令を書き込みます。Nameもわかりやすいように、OFFとONに変更します。

 OFFとONノードを、「light1」に名前が変わっているnode-hue-inのノードにマウスでつなぎます。画面右上にデプロイをクリックすると、プログラミングが終了します。

 LED電球が点灯している状態ならば、「light1」ノード下にonという表示が出ます。

 OFFが表示されているノード左のボタンを押します。

 LED電球は消灯します。

コラム 0.15.3から0.16.2へのアップデート

 2017年3月2日版の RASPBIAN JESSIE WITH PIXELは、node-redが0.15.3です。apt-getではアップグレードできません。node-REDのサイトに書かれるように、次のスクリプトを実行します。

 update-nodejs-and-nodered

 念のためリブートし、node-REDを起動すると、メニュー類が日本語になった0.16.2が動きます。