もしも家中にECHONET Lite対応機器がいっぱいあったら

この記事は[おうちハック Advent Calendar 2016](http://qiita.com/advent-calendar/2016/ouch-hack)の12日目の記事です。

昨日は[ooDEMi](http://qiita.com/ooDEMi)さんの、[おうちハック未経験者が自宅にPhilips HueとMESHを導入した話](https://medium.com/demi-other-things/%E3%81%8A%E3%81%86%E3%81%A1%E3%83%8F%E3%83%83%E3%82%AF%E6%9C%AA%E7%B5%8C%E9%A8%93%E8%80%85%E3%81%8C%E8%87%AA%E5%AE%85%E3%81%ABphilips-hue%E3%81%A8mesh%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%9F%E8%A9%B1-355c19aa0987#.srvvim2ll)でした。

ノンプログラミングでおうちハックできる時代になりましたか、素晴らしい！

#はじめに

みなさん、[ECHONET Lite](https://echonet.jp/)というプロトコルをご存知でしょうか。

ECHONET Liteとは、スマートハウス向け制御プロトコルであり、家電やエネルギー機器、センサーの情報を取得したり、操作したりできるプロトコルです。ISO規格およびIEC規格として国際標準化されています。

その[プロトコル仕様](https://echonet.jp/spec/)は公開されており、[OpenECHO](https://github.com/SonyCSL/OpenECHO)というJava/C＋＋でのオープンソース実装もGPLで公開されています。また、[TOPPERS/ECNL](https://www.toppers.jp/ecnl.html)という組み込み向け実装も公開されています。

世の中は[HomeKit](http://www.apple.com/jp/ios/home/)/[homebridge](https://github.com/nfarina/homebridge)の方に注目があつまっている感がありますが、今日はHomeKitのことを忘れ、ECHONET Liteで何ができるかについて考えてみようと思います。

ということで、「もしも家中にECHONET Lite対応機器がいっぱいあったら」という想定のもと、サンタクロースさんをおもてなししてみる仕組みについて~~妄想して~~考えてみようと思います。

#どんなものが操作できるの？

現在、認証を受けて、ECHONET Liteを正式サポートしている機器は、以下のサイトで確認できます。

* [エコーネットの製品紹介](https://echonet.jp/product/)

この中から、今回のテーマで使えそうなものをピックアップしてみると、、、

* [家庭用エアコン](https://echonet.jp/product/echonet-lite/grid/air/%E5%AE%B6%E5%BA%AD%E7%94%A8%E3%82%A8%E3%82%A2%E3%82%B3%E3%83%B3/)
* [換気扇](https://echonet.jp/product/echonet-lite/grid/air/%E6%8F%9B%E6%B0%97%E6%89%87/)
* [空気清浄器](https://echonet.jp/product/echonet-lite/grid/air/%E7%A9%BA%E6%B0%97%E6%B8%85%E6%B5%84%E6%A9%9F/)
* [床暖房](https://echonet.jp/product/echonet-lite/grid/house/%E5%BA%8A%E6%9A%96%E6%88%BF/)
* [瞬間式給湯器](https://echonet.jp/product/echonet-lite/grid/house/%E7%9E%AC%E9%96%93%E5%BC%8F%E7%B5%A6%E6%B9%AF%E5%99%A8/)
* [電気温水器](https://echonet.jp/product/echonet-lite/grid/house/%E9%9B%BB%E6%B0%97%E6%B8%A9%E6%B0%B4%E5%99%A8/)
* [電動雨戸/シャッター](https://echonet.jp/product/echonet-lite/grid/house/%E9%9B%BB%E5%8B%95%E9%9B%A8%E6%88%B8_%E3%82%B7%E3%83%A3%E3%83%83%E3%82%BF%E3%83%BC/)
* [オーブンレンジ](https://echonet.jp/product/echonet-lite/grid/cooking/%E3%82%AA%E3%83%BC%E3%83%96%E3%83%B3%E3%83%AC%E3%83%B3%E3%82%B8/)
* [クッキングヒータ](https://echonet.jp/product/echonet-lite/grid/cooking/%E3%82%AF%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%83%92%E3%83%BC%E3%82%BF%E3%83%BC/)
* [冷凍冷蔵庫](https://echonet.jp/product/echonet-lite/grid/cooking/%E5%86%B7%E5%87%8D%E5%86%B7%E8%94%B5%E5%BA%AB/)
* [洗濯乾燥機](https://echonet.jp/product/echonet-lite/grid/cooking/%E6%B4%97%E6%BF%AF%E4%B9%BE%E7%87%A5%E6%A9%9F/)
* [雨センサー](https://echonet.jp/introduce/gz-000240/)
* [テレビ](https://echonet.jp/product/echonet-lite/grid/av/%E3%83%86%E3%83%AC%E3%83%93/)

このあたりが使えそうです。

#なにができるの？

ECHONET Liteでは、各機器について取得・設定できるものを標準化し、[「ECHONET機器オブジェクト詳細規定」](https://echonet.jp/spec/#standard-01)にまとめ公開しています。このことで、異なるメーカーの機器であっても基本的には同じ方法で値の取得・設定ができることになります。

では、家庭用エアコンを例に何ができるかをECHONET機器オブジェクト詳細規定から読み取ってみましょう。

##家庭用エアコンの場合

調べ方の手順は以下になります。

* まずは、現在最新の[「APPENDIX ECHONET機器オブジェクト詳細規定 Release H」](https://echonet.jp/spec_object_rh/)をダウンロードしてきます。※実際は機器が対応してるものを取得します。
* 目次から、調べたい機器について記載している章を探します。家庭用エアコンは、「3.2.1 家庭用エアコンクラス規定」になります。対象のページまで移動します。（PDFで目次の対象の章をクリックすると、その章までジャンプしてくれます。）
* 表のプロパティ名称およびプロパティ内容の項目から、取得・設定できる内容を知ることができます。次に、アクセスルールの項目をみます。この項目に、SetやGetと書かれていますが、Setと書かれているものは値の設定が、Getと書かれているものは値の取得が、両方書かれていると取得・設定の両方が可能ということです。
* 次に、必須の項目を見ます。必須に「〇」が書かれているものは基本的にサポートが必須なプロパティとなっています。必須でないものは、製品によってサポートする／しないが異なります。
* 状変時アナウンスの項目に「〇」が書かれているものは、そのプロパティの値に変化があった場合に、機器からその変化の通知が送信されるものです。


必須のプロパティのものを列挙すると以下になります。

|プロパティ|内容|Set|Get|
|:---|:---|:---|:---|
|動作状態|ON/OFF|〇|〇|
|節電動作設定|節電動作中/通常動作中|〇|〇|
|運転モード設定|自動／冷房／暖房／除湿／送風／その他|〇|〇|
|温度設定値|0～50℃|〇|〇|
|室内温度計測値|－127～125℃|－|〇|
|風量設定|風量自動 or 風量レベル 8段階|〇|〇|
※温度設定値が0～50℃となっていますが、実際に設定できる値は機器に依存します。

これから、サンタさんが部屋に入った際に、「運転モード設定」を「暖房」、「温度設定値」を「28℃」に設定し、「動作状態」を「ON」にして暖かい部屋にしてあげることが可能になります。そして、サンタさんが部屋から出て行った際に、「動作状態」を「OFF」にすることで、無駄な電気代を節約することが可能になります。

##その他の機器の場合

同様にして、その他の機器についても調べます。

基本、どの機器にも動作状態のON/OFFはあるので、それ以外から使えそうなプロパティを羅列してみます。

|機器|プロパティ|内容|Set|Get|
|:--|:---|:---|:---|:---|
|換気扇|換気風量設定|換気風量レベル 8段階|〇|〇|
|空気清浄器|煙(タバコ)検知状態|煙(タバコ)検知有/無|－|〇|
|空気清浄器|光触媒動作設定|光触媒ON/OFF|〇|〇|
|空気清浄器|空気汚れ検知状態|空気汚れ検知有/無|－|〇|
|床暖房|温度設定|0～50℃|〇|〇|
|床暖房|ゾーン切り替え|0～7|〇|〇|
|電気温水器|風呂温度設定値|0～100℃|〇|〇|
|電気温水器|音量設定値|操作部から出力される音量設定|〇|〇|
|オーブンレンジ|加熱設定|加熱開始・再開/一時停止/停止|〇|〇|
|オーブンレンジ|仕上がり温度設定値|-273.2～3276.6℃|〇|〇|
|オーブンレンジ|加熱時間設定値|加熱時間をHH:MM:SSで指定|〇|〇|

などなど。サンタさんをお迎えする快適な空間を提供することは可能そうです。

#実現方法について考える

それでは、これらのECHONET Lite機器を使ってシステムを構築してみましょう。

## システム構成

ECHONET Liteを使ったシステムの構成要素には、大きく２つの役割があります。
１つはこれまでみてきた家庭用エアコンや冷蔵庫といった**「機器」**、もう１つはそれらを制御する**「コントローラ」**です。**「コントローラ」**はネットワークに接続された**「機器」たち**から値を取得したり、値を設定したりすることができます。
![image](https://qiita-image-store.s3.amazonaws.com/0/51272/74a5601c-20d0-422c-01d8-0fa990881b03.png)


ECHONET Liteでは、コントローラには、ネットワーク上につながっている機器を自動発見する手段が提供されています。また、各機器が備えているプロパティが何かを知る方法が提供されています。「メーカーコード」や「商品コード」に「製造番号」、「設置場所」というプロパティももっており、機器に関するより細かい情報を得ることができます。

すごくざっくり説明すると、機器側が電源を入れた際には、

![image](https://qiita-image-store.s3.amazonaws.com/0/51272/86c676ad-33ce-41c3-649b-1398ba0e5732.png)

的なことをやります。

また、コントローラ側から機器に問い合わせすることもできます。

![image](https://qiita-image-store.s3.amazonaws.com/0/51272/c5d396d9-ed09-ebbd-0b0b-e1dbe9743194.png)

こうやって、機器側の情報を取得し、その後、必要な制御をコントローラから機器側に行うことになります。

##コントローラの実装

サンタさんお迎え装置を作るには、これまで考えたサービスを実現するコントローラを作成する必要があります。

１つは、OpenECHOを使う方法があります。Javaのプログラミングができる方は、Raspberry pi上でOpenECHOを使ってJavaアプリを作るのはそんなに難しくはないと思います。

次に、Node.js向けのECHONET Liteモジュールが公開されていますのでそれを使うという方法があります。

* [echonet-lite](https://www.npmjs.com/package/echonet-lite)

また、このモジュールを使い、Node-REDでECHONET Lite機器を制御されている方がいらっしゃるので、この方法で作成するという手もあります。

* [Node-REDを使ってECHONET Lite機器を制御１](http://qiita.com/KAITHEMS/items/72b44ab4c3849e1d3a27)
* [Node-REDを使ってECHONET Lite機器を制御する2](http://qiita.com/KAITHEMS/items/0e02768795174a98d93f)

##センサーノードを作成する

あと１つ足りないものがあります。

それは、サンタさんが来たことやサンタさんの状態を取得するための情報です。これにはセンサー機器が必要になってきます。ECHONET Liteでも、以下のようなセンサーについての規定があります。

|規定されているセンサ|ガス漏れセンサ,防犯センサ,非常ボタン,救急用センサ,地震センサ,漏電センサ,人体検知センサ,来客センサ,呼び出しセンサ,結露センサ,空気汚染センサ,酸素センサ,照度センサ,音センサ,投函センサ,重荷センサ,温度センサ,湿度センサ,雨センサ,水位センサ,風呂水位センサ,風呂沸き上がりセンサ,水漏れセンサ,水あふれセンサ,火災センサ,タバコ煙センサ,ＣＯ２センサ,ガスセンサ,ＶＯＣセンサ,差圧センサ,風速センサ,臭いセンサ,炎センサ,電力量センサ,電流量センサ,昼光セ,水流量センサ,微動センサ,通貨センサ,在床センサ,開閉センサ,活動量センサ,人体位置センサ,雪センサ,気圧センサ|
|:---|:---|

一方で、ECHONET Lite対応のセンサー製品はあまりみかけません。従って、センサーノードは自力で作成する必要があります。

これについても、Raspberry Piと[OpenECHO](https://github.com/SonyCSL/OpenECHO)を使うことで作成可能です。
Raspberry piで、OpenECHOを使った人感センサー・温度センサー・湿度センサーを実際に作ってみる記事を、後日Qiitaにあげる予定でいます。（今年の[大晦日ハッカソン](https://atnd.org/events/83845)でやります。）

#最後に

「もしも家中にECHONET Lite対応機器がいっぱいあったら」という前提のもとで、サンタさんをお迎えするシステムを実現する方法について考えてみました。

とはいえ、私の家にもECHONET Lite対応製品は１台もありません（汗）。
しかしながら、OpenECHOやTOPPERS/ECNLを使って、自作の機器を作成することは可能です。

ECHONET Lite対応にしておくと、作成した機器を他の人でも容易にシステムに組み込んで利用することができる、この点がメリットだと思います。

ECHONET Lite対応機器を作ってみようと思う方が一人でも増えることを願って、Merry X'mas!（まであと13日）。