WADA-DEV(7) $ /ja/blog/wisun-smartmeter-route-b-ha/

NAME

wisun-smartmeter-route-b-ha

SYNOPSIS

Wi-SUN ドングルで電力スマートメーター(B ルート)を読もうと 2024 年に自前スクリプトを書きかけ、タイムアウトとデコード処理の面倒さで塩漬けにした。数年後、HA Core に公式の Route B Smart Meter 統合が入っていて、ドングルを挿して B ルート ID とパスワードを入れるだけで瞬時電力・積算消費が取れるようになっていた話。

DESCRIPTION

はじめに

2024 年、電力スマートメーターの値を宅内からリアルタイムに取りたくて、Wi-SUN USB ドングルで B ルートを読む自前スクリプトを書きかけました。が、SK コマンドのシリアル叩きと ECHONET Lite のパース、そして「送っても返ってこない」タイムアウト処理が面倒で、vault のメモごと塩漬けにした。数年後、Home Assistant をいじっていたら、当時自分が書かなかった処理を丸ごとやってくれる 公式統合 route_b_smart_meter が Core に入っていた。ドングルを挿して B ルート ID とパスワードを入れるだけで、瞬時電力・積算消費が生えました。「面倒で諦めた」ものに後から道具が追いついてきた記録です。

背景 ─ B ルートは自前で読むと地味に面倒

低圧スマートメーターは、電力会社に B ルート 利用を申請すると、宅内から Wi-SUN 経由で ECHONET Lite を直接読めます。申請すると認証 ID とパスワードが発行され、Wi-SUN USB ドングルでメーターと喋れるようになる。

ここまでは分かっていた。問題はその先でした。ドングルとのやり取りは SK コマンドSKVER / SKSCAN / SKSENDTO …)をシリアルで叩き、ECHONET Lite のフレームを自分で組み立ててパースする世界になる。当時 vault に残した要件メモにも、こう書いてあります:

  • タイムアウト処理 — データを送っても返ってこないことがあるので必須
  • デコード処理 — unicode でデコードできないケースの検討が必要

要するに、地味なシリアル通信のエラーハンドリングを延々書く必要がある。面白そうではあったが、面倒で後回しにした。そのノートは「someday」判定のまま Archive に沈みました。

放置していたら公式が追いついた

数年後、Home Assistant をいじっていたら、route_b_smart_meter(Route B Smart Meter)という統合が動いているのに気づいた。

最初は「HACS から落とした気がする」と思っていた。が、調べると custom_components/ にも HACS のインストール済みリストにも無い。HA の起動ログを見ると custom integration の警告(“We found a custom integration …”)が出るのは別の自作物だけで、route_b_smart_meter には出ていない。これは 公式ドキュメント を持つ first-party のコア統合 だった、というオチでした。

つまり、自分が「面倒だから」と書かなかった SK コマンドのシリアル叩き + ECHONET Lite パース + リトライを、HA 本体が中で全部やってくれる状態になっていた。

実装 ─ 設定フォーム 3 項目で済んだ

  1. B ルート利用申請(電力会社に申請 → 認証 ID とパスワードが届く)。これは昔やってあった。

  2. Wi-SUN USB ドングルを挿す。FTDI のシリアルで見える個体だと、こういうパスになる:

    /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_XXXXXXXX-if00-port0
  3. HA で統合を追加 → device(上のシリアルパス)/ B ルート ID / パスワードを入れるだけ。

  4. センサーが生える:

    センサー内容
    瞬時電力いま何 W 使っているか
    瞬時電流(R 相 / T 相)相ごとの電流
    積算消費電力量kWh の累積

コードは一行も書いていません。2024 年に書こうとして放り出した処理が、設定フォーム 3 項目で済んだ。

注意点・ハマりどころ

  • B ルート ID がそのままエンティティ ID に入るsensor.route_b_smart_meter_XXXXXXXX_total_consumption のように認証 ID がエンティティ名の一部になる。スクショや YAML のコピペで外に出すと漏れるので、共有・記事化のときは必ずマスクする(この記事でも XXXXXXXX に置換してある)。
  • 接続に時間がかかることがある。昔ハマった「返ってこない」問題自体は健在で、統合が内部でリトライしている。初回スキャンは気長に待つ。
  • B ルートの同時接続は基本 1 つ。別の機器(HEMS など)がメーターを掴んでいると競合する。
  • ドングルと Wi-SUN のバージョン依存はある。FTDI 系で見えるドングルを使用。手持ちが対応しているかは事前に確認。

結果

センサーが取れれば、あとは HA の世界。自分はこう繋ぎました:

  • 積算消費電力量を utility_meter で日次集計し「今日の消費電力」を作成。
  • それを使って、自宅の Echo Dot に 毎日 21 時「本日の電力レポートです。今日の電気料金は約◯◯円です」 と読み上げさせる自動化(消費電力 × 単価で概算)。
  • さらに 瞬時電力が 2000W を 5 分超えたら Alexa が警告。エアコンと電子レンジの重ね掛けみたいな時に気づける。

2024 年に「面倒だから」と書かなかったスクリプトの価値を、コードゼロで回収した格好になった。読み上げ側の作り込みは別記事(HA × Alexa の話)と地続きです。

まとめ

  • スマートメーターの B ルートを自前で読むには、SK コマンドのシリアル叩き + ECHONET Lite パース + エラーハンドリングが要る。面倒で塩漬けにしていた。
  • 放置している間に HA Core に公式 route_b_smart_meter 統合が入り、ドングル + B ルート ID / パスワードだけで瞬時電力・積算消費が取れるようになっていた。
  • 「やりたかったけど面倒で諦めた」ものは、後から道具(今回は HA 本体)が追いついてくることがある。塩漬けノートは時々見返すと拾える。
  • 公開時は B ルート ID(エンティティ ID に混入する)とパスワードのマスク を忘れない。

参考リンク

TAGS

Home Assistant · Wi-SUN · スマートメーター · 個人開発

SEE ALSO