ROHM BP35A1を使用してBルート経由でスマートメーターから消費電力を取得する。
- Raspberry Pi Zero WH
- Golang 1.18
開発はRPi Zeroで行っていますが、Linuxが動いてBP35A1とシリアル通信できる環境であれば、 動作すると思います。
git pull https://github.com/yakumo-saki/b-route-reader-go.git
cd b-route-reader-go
go build .
b-route-reader-go というファイルが実行ファイルです。
- 20秒ごとに瞬時電力(E7)と瞬時電流(E8)を取得します。
- 180秒ごとに積算電力(E0)を取得します。
- 取得したデータをJSONとして一時ファイルに書き込み、設定されたコマンドにパスを引き渡して実行します。
以下の2つの動作を行う。なお瞬時電力と積算電力の取得タイミングが同時に来たとしても、同時に二つの動作が行われることはない。 瞬時電力取得→積算電力取得 の順で処理される(はず)
- 起動〜初期化
- (20秒後)瞬時電力と瞬時電流を取得
- 取得したデータを
/tmp/abcdefg
(ランダムなファイル名) に書き込む。 - 内容はJSONである。
{"E7":"1566","E8":"17","E8_Rphase":"8","E8_Tphase":"9","datetime":"2022-07-31T12:49:32.367Z"}
- EXEC_CMDで指定されたコマンドを実行する
./dist/zabbix.sh /tmp/abcdefg
- 繰り返し
- 起動〜初期化
- (180秒後)積算電力を取得
- 取得したデータを
/tmp/abcdefg
(ランダムなファイル名) に書き込む。 - 内容はJSONである。
{"E0":"10197.7","E3":"0.5","datetime":"2022-07-31T12:48:57.613Z"}
- EXEC_CMDで指定されたコマンドを実行する
./dist/zabbix.sh /tmp/abcdefg
- 繰り返し
BP35A1と接続された機器上で開発するのも手ですが、色々と面倒です。
以下のコマンドを使うと、シリアルポートを自分のPCにリダイレクトすることができます。
- シリアルポートがあるPCのIPアドレスを 10.1.0.191 として説明しています。
- 33444はポート番号です。何番でも構わないので好きな番号にしてください。
Run at serial port machine (eg: raspberry pi)
socat -d -d /dev/ttyAMA0,echo=0 tcp-listen:33444
running at your coding pc
socat -d -d pty,link=$HOME/ttyAMA0,waitslave tcp-connect:10.1.0.191:33444
- socatは一度実行されると終了してしまう(なにかおかしい気がする)ので while で無限ループさせる(bash)
while true; do <コマンド>; done
- socatで転送する前に minicom でハングアップを行っておく必要があります。
- minicom を起動して ctrl-a -> h で
hangup line?
->yes
した後、ctrl-a -> q で終了します。(ctrl-a -> x ではない) - このプログラムを実行すると、ローカルエコーがオフになるのでminicomには何も表示されませんが気にせずコマンドを入れることができます。
瞬時電力取得→積算電力取得 を連続で取得するときに、ウェイトなしで問い合わせを2連続で投げるのは規約違反である。 最低20秒の間を空ける必要がある(が、普通に動いているので無視している)
取り扱いがよくわからない。太陽光発電等で売電している場合に使用される?