B-Routeサービスの魅力に迫る:ハードウェアとソフトウェアの準備完全ガイド

序章

最近引っ越しをしたので、以前から興味があったB-Routeサービス(電力メーター情報発信サービス)を試してみることにしました。東京電力の管轄内に住んでいるので、直接東京電力に申し込んでB-Routeサービスを開始しました。これで、自分のIoTデバイスを通じて、自宅の電力消費量や累計のキロワット時数をリアルタイムで取得できるようになります。

ハードウェアの準備

東京電力は迅速にB-Routeサービスを開始してくれました。認証IDとパスワードも受け取りました。次は、デバイスの準備です。最初は、検索エンジンでB-Route + Arduinoと検索し、ロームのBP35A1モジュールを使用したいくつかのソリューションを見つけました。簡単に評価した結果、実行可能だと判断しました。そこで、BP35A1モジュールを販売しているディーラーを探し始めましたが、税込みで8000円以上もすることがわかりました。そこで、中古市場で安いものがないか探してみると、IIJクラウドサービスが廃業したことで市場に出回っているIoTデバイス「SA-M0」を見つけました。これはシングルボードコンピュータのソリューションで、BP35A1モジュールが内蔵されている点が鍵です。ヤフオクで3000円で手に入れることができたので、即購入し、このデバイスの研究を始めました。

購入前に、このSA-M0は本来IIJクラウドサービスと連携して使用する必要があることを知っていましたが、IIJが廃業したため、現在中古市場ではジャンク品として扱われています。最悪の場合、シングルボードコンピュータ自体が使えず、モジュールを取り外して単独で使用する必要があるかもしれません。しかし、運が良ければ、この記事のケースのように、シングルボードコンピュータも利用でき、追加のハードウェアを節約し、個人的にはArmadillo-Box WS1ベースのSA-M0は、回路設計や筐体設計が非常に精巧な商業レベルの製品で、多くのオープンソースソリューションよりも優れていると考えています。そのため、このシングルボードコンピュータを使ってスマートメーターとのやり取りを行うことにしました。

ソフトウェアの準備

まずはshellアクセスを試みます。Armadilloの公式ウェブサイトのマニュアルによると、このマシンはBusyboxLinuxを搭載しています。公式マニュアルの手順に従ってshellに成功裏にアクセスしました。

ここでちょっとしたエピソードがあります。私はESP32からマイコンに触れ始めたので、通信に関する理解はTTLレベルのUARTに留まっていました。しかし、このSA-M0はRS232レベルなので、USB->UARTアダプタに接続するためにはレベル変換が必要でした。

RS232

[root@abws1-0 (pts/0) ~]# uname -a
Linux abws1-0 3.14.36-at11 #1 PREEMPT Sat Mar 31 02:35:12 JST 2018 armv5tejl GNU/Linux
[root@abws1-0 (pts/0) ~]# cat /proc/cpuinfo
processor       : 0
model name      : ARM926EJ-S rev 4 (v5l)
BogoMIPS        : 133.00
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 4

Hardware        : Armadillo-420
Revision        : 0300
Serial          : 0000000000000000
[root@abws1-0 (pts/0) ~]#

当初は、B-Routeのプロトコルを自分で調べて小さなプログラムを書いてみようと思っていましたが、Githubを軽く検索すると、既にたくさんのソリューションがありました。その中からPythonで書かれたプログラムを使ってみることにしましたが、このマシンに実行環境を整えるのが結構大変だと気づきました。最終的には、コンパイル型のソリューションを使うことに決めました。例えばGoやRustなどです。Githubオープンソースのプロジェクトもあり、早速試してみると、とても使いやすかったですが、そのプロジェクトはデータの読み取りのみで、どうやらexecを使ってshellスクリプトを実行し、zabbixのようなサービスに送信しているようです。しかし、私たちが必要なのはHome Assistantに直接データを取得してもらうことです。色々と研究した結果、万能のmqttを橋渡しとして使い、接続を完了することにしました。

コードの部分は非常にシンプルです。ほとんどの部分は元のリポジトリの実装を参考にすることができるので、mqttの部分を追加するだけでよかったのです。最後にパラメータを設定し、起動時に自動で実行されるようにすると、大きな成果が得られました。

ha

参考文献

https://www2.hatenadiary.jp/entry/2023/04/26/202125

https://github.com/yakumo-saki/b-route-reader-go