家電を操作するアプリを自作してみたい。こんなことを考えたとき、その方法は様々だ。例えば赤外線を利用する方法がある。赤外線コマンド送受信機「IRKit」を利用すると、赤外線を使った家電操作が出来ることは既に紹介した。ただし赤外線は、簡単に扱える一方で、赤外線リモコン対応の家電しか操作できなかったり、機器の状態を把握できなかったりという不便さがある。

 今の日本において、この不便さを解消したうえで、家電機器を操作したり、モニターしたりする通信プロトコルの本命となるのが、「ECHONET Lite」だろう。電力会社が設置を進めているスマートメーターもECHONET Liteを採用している。

 ECHONET Liteは低レイヤーの通信を規定していないため、IPネットワークであればUDP、TCP、そのほかBluetooth、Wi-SUNなど、さまざまな通信方式の上で動作する。ECHONET Liteの仕様は、エコーネットコンソーシアムのWebサイトで無料公開されている。

Node.jsでECHONET Liteを扱おう

 今回はNode.jsを使い、ECHONET Liteを扱ってみる。IPネットワークにおいてECHONET Liteは、機器発見のためにUDPのブロードキャストを使う。同じサブネット上に存在するECHONET Lite対応機器がこれに応答するため、それを捕捉することで、機器の存在を確認する。

 機器のIPアドレスを特定したら、操作やモニターのためのコマンドをUDP上で送信する。ECHONET Lite仕様では、機器の種類ごとにデータの値を定めており、これだけで500ページを超える仕様書になっている。思いつくあらゆる機器の通信仕様があるはずだ。

 例えば、温度センサー機器から温度を取得するには、次のようなデータを送信する。実際にはバイナリーデータとして送信するのだが、ここでは16進数で表記している。

10 81 00 00 0E F0 01 00 11 00 62 01 E0 00

 8、9バイトめの2バイト「00 11」が機器の種類と機能を表す。11バイトめの「62」が「Get」の意味で、何かしらの値を要求している。13バイトめの「E0」が温度計測値だ。

 リクエストを温度センサー機器に送信すると、温度センサー機器は次のようなデータを返してくる。

10 81 00 00 00 11 01 0E F0 01 72 01 E0 02 00 C8

 温度計測値は最後の「00 C8」だ。整数に置き換えると200(20度)になる。もちろん、制御も可能だ。照度を調整可能なライトであれば、次のようなコマンドを送る。

10 81 00 00 0E F0 01 02 90 01 61 01 B0 01 64

 最後のバイトの「64」が照度のパーセンテージを表す。10進数で読み替えると100%という意味だ。