秋月電子の謎SOC基板を使って、家の電力計の値を取得してHome Assistantで可視化しよう


**([2024/06/11補足] [HomeAssistant](https://www.home-assistant.io/)と[ESPHome](https://esphome.io/)を使って、この記事で取得した電力計の値を小さい液晶画面に表示する記事を書きました。ESPHomeは超便利で楽しいので、ぜひこの記事を参考に遊んでみてください!!
⇒[秋月電子の謎SOC基板で取得した家の電力利用状況を、小型液晶画面に表示しよう](https://qiita.com/tonasuzuki/items/f499ba012aefbc0c23c1)**

**([2024/05/24補足] [githubに置いたスクリプト]( https://github.com/tonasuzuki/GetSmartMeterData )ですが、計測値が取得できなかった場合のエラー処理を修正いたしました。利用されている方は、再取得頂けますようお願いいたします。( プルリクくださった [Unlimish](https://github.com/unlimish) さま、ありがとうございました。)**

# はじめに
2024年3月現在、秋月電子に[部品取りに!無線モジュール付きSoc基板+白色プラスチックケース](https://akizukidenshi.com/catalog/g/g117437/) (以下、謎SOC基板)というモノが売られています。(2023年3月に一度販売され一瞬でなくなりましたが、2024年2月末に在庫が復活しています(さすがに安すぎたのか、値段が上がっています(笑)))
なんとこの謎SOC基板、[Wi-SUN](https://www.rohm.co.jp/electronics-basics/wireless/wireless_what4)モジュールが取り付けてある[Beaglebone Black](https://www.beagleboard.org/boards/beaglebone-black)互換ボード(らしい)です。がんばれば、家の外に設置してあるスマートメーター(電力量計)から無線接続(Wi-SUN Profile for ECHONET Lite)して家の電力使用量を取得することができるのです。(詳細は、[秋月謎Soc基盤まとめ](https://zenn.dev/buttyo_kuny/articles/fd91aea9f955cb)などを読んでみてください)

![aki-wi-sun-box.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679798/b753a958-68e7-7844-6865-5a0b0de6aa3d.jpeg)

すでに[シリアル通信でスマートメーター（Bルートサービス）から電力測定値を読む](https://netlog.jpn.org/r271-635/2020/11/echonet-smartmeter-serialaccess.html)や、[Pythonでスマートメーターの情報を引っこ抜く](https://qiita.com/kanon700/items/d4df13d45c2a9d16b8b0)など、多くの方によって解析が完了しており、苦労せずにお手軽に活用することができそうです。
今回、[Home Assistant](https://www.home-assistant.io/)に電力量を取得し、稼働することができましたので、簡単にまとめてみました。また、Home Assistant以外でも使えるよう、なるべく簡単に取得できるよう、スクリプトもまとめておきましたので、ご活用ください。

# 電力会社からスマートメーターの認証ID,パスワードを取得する
まずは、管轄している電力会社から、電力メーター情報発信サービス（Bルートサービス）の申し込みを行い、スマートメーターの認証ID,パスワードを取得します。電力は別の事業者から契約していても、実際にスマートメーターを設置している電力会社に申し込みを行います。

![powermeter.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679798/f2979d68-f287-bbfa-1c82-c664b1843be4.jpeg)

自分は東京電力管轄に住んでいるので、東京電力パワーグリッドの[電力メーター情報発信サービス（Bルートサービス）](https://www.tepco.co.jp/pg/consignment/liberalization/smartmeter-broute.html)から申し込みを行いました。なお、申し込みには、スマートメーターを特定する「供給地点特定番号」が必要です。これは、「電気使用量のお知らせ」などに記載してあります。申し込みから1週間ほどで認証ID・パスワードが届きました。

# 謎SOC基板にDebianを入れ、送信可能な状態に設定する
- 認証IDが届くまでに、謎SOC基板を準備しましょう。すでに[秋月のSoC基板 (白い箱) にDebianを入れる](https://qiita.com/chibiegg/items/4b1b70a5ba09c4a52a12)でDebian化に成功される方がおられますので、これを参考にDebianを稼働できるようにします。
    - 上記でDebianのイメージを格納したSDカードを作ってブートするのですが、内蔵eMMCにU-BOOTが生き残っており、SDカードから起動しない場合は、基板中央のDIPスイッチをON側に変更してください。

- python3をインストールします。
```
sudo apt update
sudo apt install python3 python3-pip
sudo pip3 install pyserial
sudo pip3 install requests
```

-  [github]( https://github.com/tonasuzuki/GetSmartMeterData )にスクリプトを入れておきましたので、取得して /opt にGetSmartMeterData.pyをコピーして、実行権限を追加します。
```
chmod +x  /opt/GetSmartMeterData.py
```
- スクリプトの上のほうに「Bルートサービス 設定情報」という項目がありますので、ここに電力会社から届いた認証ID、パスワードを設定します。
```
# Bルートサービス 設定情報
B_ROUTE_ID     = '0123456789ABCDEF0123456789ABCDEF' # 認証ID
B_ROUTE_PW     = '0123456789AB'                     # パスワード
```

- 「デバッグログ設定」のすぐ下にあるコメントを外して、logging.basicConfig()を有効にします。これで、以下のように実行することで、コンソールに「瞬時電力計測値」「積算電力量計測値」が表示されれば成功です。(接続まで30秒程度かかります)
```
sudo /opt/GetSmartMeterData.py
```
- 謎SOC基板とスマートメーターの間は、無線通信で接続するので、「ECHONetデバイスが見つかりません」などが表示される場合は、謎SOC基板とスマートメーターの距離を近づけるなど、通信できる場所に設置しましょう。

# Home Assistantの設定を行う
HomeAssistantの homeassistant/configuration.yaml に、以下のようにwebhookの設定を追記します。「configuration.yaml」ってどこ？って方は、「設定」⇒「アドオン」で、「File editor」アドオンを入れると楽です。「File editor」アドオンの画面で、左上のフォルダの形のアイコンをクリックすると、homeassistant/フォルダの一覧が出てきますので、「configuration.yaml」を選びます。

```
# Webhook for SmartMeter(Wi-SUN Profile for ECHONET Lite) (2024-03-03)
template:
  - trigger:
      - platform: webhook
        webhook_id: echonet-aki-wi-sun
    sensor:
      - name: "Echonet Integrated Power"
        state: "{{ trigger.json.integratedpower }}"
        device_class: energy
        state_class: total_increasing
        unit_of_measurement: kWh
      - name: "Echonet Measured Power"
        state: "{{ trigger.json.measuredpower }}"
        device_class: power
        unit_of_measurement: W
```
設定後HomeAssistantを再起動することで、「設定」⇒「デバイスとサービス」⇒「エンティティ」に、上記configuration.yamlの「name」で設定したエンティティに、取得した瞬時電力計測値と積算電力量計測値が記録されると思います。

![ha-powermeter.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679798/8ad37956-dd45-dc60-a704-b8d04660073a.jpeg)


# 電源ONで自動起動するよう、スクリプトをsystemdに登録する
- スクリプトを自動起動するように、/etc/systemd/system/smartmeter.service を作成します。(スクリプト内のデバッグログ設定のlogging.basicConfig()をコメントを入れて、コンソールにログが出ないようにしましょう)
```
[Unit]
Description=Send SmartMeter Data to HomeAssistant

[Service]
ExecStart=/opt/GetSmartMeterData.py
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target
```
- systemdに登録し、起動します。
```
sudo systemctl enable smartmeter.service
sudo systemctl start smartmeter.service
```
- これで、謎SOC基板の電源を入れれば、自動でHome Assistantに瞬時電力計測値と積算電力量計測値が蓄積されるようになります。

# スクリプトに手を入れる
- スマートメーターとの通信部分などはクラスにしてありますので、スクリプトの最後のほうの「def main(arg1, arg2)」の中を適当に変えれば、Home Assistant以外への送信などが容易に行えるかと思います。

![aki-wi-sun-box-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679798/96099abc-cff9-f22a-0928-59542d123642.jpeg)

- なお、謎SOC基板の電源緑LEDの横には、4つの青色LEDがついています。AkiboxLedクラスのon/offメソッドで点灯・消灯できるようにしましたので、動作確認などに使ってください。スクリプトでは、LED2:初期化完了 LED3:スマートメーター接続中 LED4:スマートメータからデータ取得中 のときにLEDが点灯するようになっています。