ECHONET Liteとは?家のシャッターを3コマンドで動かす
$ enl set 192.0.2.10 026301 open_close_operation close
これを打つと、リビングの電動シャッターがウィーンと降りてきます。リモコンには触れていません。1行のコマンドが、家の中の物理的なモノを動かす。
おもしろいのは、これがクラウドを一切経由していないことです。宅内LANにUDPを1発投げているだけ。しかも相手は特別なスマート機器ではなく、家に最初から付いている電動シャッターです。いったんこの状態を作ってしまえば、あとは cron で回すのも、AIに直接叩かせるのも、同じ1コマンドの延長でしかありません。
前回の記事「Home Assistantをやめて、家のOSを自作しはじめた」で、家を動かすためのツール群(enl / mat / ais / casa / mando)を紹介しました。今回はその第1弾、enl の話です。enl は、ECHONET Lite という仕組みを扱うために僕がつくって公開しているツールです。
なぜ、コマンド1つでシャッターが動くのか。答えは、シャッター側が最初からこの ECHONET Lite という共通の仕組みでしゃべれるように作られているからです。順番に見ていきます。
ECHONET Liteとは
一言でいうと、日本の住まいの設備や家電が共通で使う通信の仕組みです。
エアコン、給湯器(エコキュート)、電動シャッター、電力を測るスマートメーター——メーカーもカテゴリもばらばらな機器が、同じ仕組みの上で「いまの状態」を教えてくれたり、「こう動いて」という指示を受け取ったりします。
ポイントは、メーカーをまたいで同じやり方で扱えることです。前回書いた「特定のメーカーに縛られないスマートホームがやりたい」という思いと、ここでつながります。ECHONET Liteは日本発の規格ですが、国際的にも標準化されていて、一部の変わったローカルルールというより「日本の住まいの設備が広く採用している共通語」という位置づけです。
通信の細かい中身まで踏み込むと長くなるので、今回は触れません。「共通の言葉でやりとりしている」と押さえておけば、この先は十分です。
Matterとの関係
スマート家電まわりでは、最近「Matter(マター)」という言葉も聞くようになりました。ECHONET Liteと何が違うのか、軽く整理しておきます(Matterを知らなくても、この先は問題なく読めます)。
ざっくりした棲み分けはこうです。
- Matter — ここ数年で広がってきた世界共通の規格。照明やプラグなど、新しく売り出されるスマート機器の側で採用が進んでいます
- ECHONET Lite — 日本の据え付け設備や家電の側で広く使われている規格。エアコン・給湯器・シャッターなど、家に最初から組み込まれているものに多いです
僕は、この2つを別々のツールとして作っています。enl(ECHONET Lite用)と mat(Matter用)です。理由は単純で、家の中に両方の規格が現に混在しているからです。
新しく買ったスマートプラグはMatterでしゃべり、備え付けの電動シャッターはECHONET Liteでしゃべる。どちらか一方に統一されるのを待つより、両方を素直に扱える道具を持っておくほうが早い——そう考えて、規格ごとに道具を分けています。
対応機器の見つけ方
ここまで読んで、「うちにもそんな機器あったかな」と思った方は、たぶん正解です。
見分け方は、カタログや取扱説明書の表記です。「ECHONET Lite対応」「HEMS対応」と書かれていたら、それがサインです。特に多いのは、電動シャッター、エアコン、エコキュート、分電盤まわりの機器。新築で家を建てた場合、スマートメーターまわりに標準で載っているケースも珍しくありません。
うちの電動シャッターは、まさにこれを狙って選びました。最初から「シャッターを無線で開け閉めしたい」と思っていたので、ECHONET Liteで操作できることを確認したうえで導入したんです。おかげで、家が最初から「操作できる状態」で立ち上がりました。
enl で家に聞いてみる
ここからは、実際に動かしてみます。使うのは enl。ECHONET Lite専用に、僕がRustで書いてGitHubで公開しているCLIです。デーモンは立てません。ソケットを開いて、送って、タイムアウトまで待って、終了する——それだけのone-shotなツールです。やることは「探す → 調べる → 動かす」の3ステップだけ(以下、機器のアドレスはドキュメント用の 192.0.2.x にしています)。
まず、宅内LANにどんな機器がいるかを探します。
$ enl discover{
"devices": [
{
"ip": "192.0.2.10",
"count": 1,
"instances": ["026301"]
}
]
}
discover は、ローカルの /24 への unicast sweep と multicast を併用して応答を集めます。192.0.2.10 に機器が1つ見つかりました。
026301 は EOJ と呼ばれる機器の識別子です。前半の 0263 がクラス(=電動シャッター)、末尾の 01 がそのインスタンス番号。つまり「1台目の電動シャッター」を指しています。
見つかっただけでは何ができるかわからないので、次は describe でプロパティマップ——その機器が何を読めて(get)、何を書けて(set)、何を通知してくる(inf)のか——を引きます。
$ enl describe 192.0.2.10 026301{
"set_map": [
{
"epc": "E0",
"name": "open_close_operation",
"values": { "41": "open", "42": "close", "43": "stop" }
}
]
}
(実際の出力はもう少し項目が多いですが、ここでは要点だけ抜き出しています)
open_close_operation(開け閉めの操作)に値を書き込めて、open(開ける)・close(閉じる)・stop(途中で止める)が指定できる。これで、冒頭のコマンドの意味がつながります。
$ enl set 192.0.2.10 026301 open_close_operation close{
"ip": "192.0.2.10",
"eoj": "026301",
"esv": "SetRes",
"result": "accepted",
"properties": [
{ "epc": "E0", "name": "open_close_operation" }
]
}
"result": "accepted"(受け付けました)が返ってきて、実際にシャッターが降ります。念のため、いまの開閉状態も読んでおきます。
$ enl get 192.0.2.10 026301 open_close_state
探す(discover)→ 調べる(describe)→ 動かす(set)の3ステップで、機器を見つけてから操作するまでが完結しました。
なぜ、この作りにしたのか
ここが enl の肝なので、少しだけ設計の話をさせてください。
stateless / one-shot。 enl は常駐しません。ソケットを開いて、送って、タイムアウトまで待って、終了する。状態を抱え込まないので、「いまの状態」を知りたければ、その場で家に聞けばいい。前回書いたとおり、家の状態は家自身が持っているからです。状態を持たない道具は、壊れようがありません。
stdoutは純粋なJSONだけ。 ログも進捗も装飾も混ぜません。診断ログ(tracing)とエラーは、すべてstderrに逃がしてあります。だから、そのまま jq に流せます。
# シャッターが開いていたら閉める
$ enl get 192.0.2.10 026301 open_close_state \
| jq -e '.properties[0].value.state == "fully_open"' >/dev/null \
&& enl set 192.0.2.10 026301 open_close_operation close
exit codeで分岐できる。 成功は 0、タイムアウトは 3、機器がリジェクト(SNA)したら 4。cron や n8n から回したときに、「応答がない」のと「拒否された」のを区別できます。これは Home Assistant を使っていて一番つらかった、何が起きているのか分からないの裏返しです。
AIがそのまま叩ける。 出力が構造化JSONで、しかも enl schema get で各サブコマンドの JSON Schema を返せるので、LLMのfunction callingにそのまま食わせられます。統合ソフトのGUIを介さず、AIが直接家を操作できる——これが、自作に踏み切った一番の動機でした。
1つ実務上の注意を。同じマシンで Home Assistant のようなECHONET Lite対応の統合ソフトが動いていると、UDP 3610 を先に握られて応答を横取りされます。enl を試すときは、そちらを止めておいてください。
ここで見せた3つ以外にも、状態変化の通知を待ち受ける listen、任意のESV/EPCを生で投げる raw などがあります。詳しくはリポジトリを見てください。
おわりに
コマンド1つでシャッターが降りたとき、正直、感動しました。ずっと憧れていた「コンピュータから、現実の物理的なモノを動かす」が、目の前で起きたからです。前回の記事で書いた原体験——画面の中の操作が、現実のモノをぱちっと動かす——を、自分の手で再現できた瞬間でした。
そしてもう一つ大きいのは、こういうことが今は個人でも手が届くようになった、ということです。道具をゼロから作るのは、少し前まで時間的にも難易度的にもかなり大変でした。それがAIのおかげで、ぐっと現実的になった。この身軽さも、いま家づくりを面白くしている大きな理由です。
enl は、ECHONET Lite側の入り口にすぎません。次は mat(Matter側)や、それらをまとめる casa の中身も、同じように手を動かしながら書いていきます。自分の家がしゃべる言葉を少しずつ覚えていく記録として、また覗きに来てもらえたらうれしいです。