ROHM BP35C2 + Bルート + Net-SNMP + Zabbixで電力監視


概要

電力会社のメーターを使って、電力監視をSNMPで行いたい。

設計

電力送配電会社(今回は九州電力送配電)の電力メーターは、「電力メーター情報発信サービス(低圧Bルートサービス)」を行っており、申し込むとスマートメーターに交換され、メーターにBルート通信(ECHONET Lite規格通信)でアクセスできるようになる。

ECHONET Lite規格とは、いわゆる「IoT」な家電同士で通信を行うための規格。電力メーターから温水洗浄便座まで幅広く規格を網羅している。

今回はBルート通信を行えるUSBドングル「ROHM BP35C2」を通じてスクリプトで電力メーターの数値を取得し、SNMPサーバーを介してZABBIXから監視する。

連携設計

構築

2020年現在の情報

準備

電力メーター情報発信サービス(低圧Bルートサービス)を申し込む

1週間(すでにスマートメーターの場合)~3週間(スマートメーター交換工事が入る場合)程度で、書き留めでIDやパスワードが届く。

Perl環境の構築とNet-SNMPサーバーの構築(スクリプトの組み込みは後述)

yum install perl-core perl-libwww-perl perl-Carp-Clan perl-Device-SerialPort wget unzip net-snmp-utils gcc-c++ minicom

ROHM BP35C2

ROHM BP35C2をUSBポートに接続する

RS-232Cコンソールに接続する

minicom -b 115200 -D /dev/ttyUSB0
  • [Ctrl]+[A]→[Q]で終了

BP35C2のテスト

SKVER
EVER 1.5.2 #BP35C2のファームウェアバージョン
OK
SKINFO
EINFO FE80:0000:0000:0000:****:****:****:**** **************** 21 FFFF 0 #BP35C2の自IPv6リンクローカル
OK
SKAPPVER
EAPPVER rev15 #BP35C2のソフトウェアバージョン
OK
  • 赤字部分が技術資料(参考を参照)ダウンロード用ID(FE80)とパスワード

BP35C2の初期設定(1つのBP35C2に対して複数回行わないこと)

ROPT
OK 00
WOPT 01
OK
  • BP35C2が受信したバイナリデータをテキストデータに変換して表示するオプション
  • WOPTコマンドは設定書き込み回数に限界があるため、毎回行わず、製品を使用する初回(ROPTの応答がOK 00の場合)のみ行うこと。

Bルート通信テスト

SKRESET #←初期状態に戻す
OK
SKSETPWD C ************ #←Bルート認証用パスワード(12桁)をセット
OK
SKSETRBID ******************************** #←Bルート認証ID(32桁)をセット
OK
SKSCAN 2 FFFFFFFF 6 0 #←認証情報に合致するスマートメーターを検索
OK
EVENT 20 ****:****:****:****:****:****:****:**** 0
EPANDESC #12~20秒ほどでスマートメーターの情報が返ってくる
Channel:3B #←チャネル
Channel Page:09
Pan ID:***E #←PAN ID
Addr:FE80********0526 #←機器MACアドレス
LQI:63
Side:0
PairID:00CF1A80
EVENT 22 ****:****:****:****:****:****:****:**** 0
SKLL64 FE80********0526 #←機器MACアドレスをIPv6リンクローカルアドレスに変換
FE80:****:****:****:****:****:****:0526 #IPv6アドレス
SKSREG S2 3B #←通信チャネルをセット
OK
SKSREG S3 ***E #←PAN IDをセット
OK
SKJOIN FE80:****:****:****:****:****:****:0526 #←接続
OK
EVENT 21 FE80:****:****:****:****:****:****:0526 0 00
ERXUDP FE80:****:****:****:****:****:****:0526 ****:****:****:****:****:****:****:**** 02CC 02CC (以下大量に略)
  • コマンドを入力するととりあえず”OK”が返ってくる。しかし、データ応答はパラレルで処理され、イベントとして返ってくる。なので、スクリプト側で任意に待ち時間を設定し、イベント応答を処理する必要がある。
  • 一度SKJOINすると、USBを抜き取らなければ接続状態を維持する。しかし、何かのはずみ(電力会社との通信とか電波状況とか?)で切断されることがある。
  • 実際にコンソールで値の取得までテストしたいが、コマンドにバイナリデータを含めないとならないため、省略。
  • TCP/IPではなく、「ECHONET Lite」という独自レイヤーを使用してIP通信を行っている。参考を参照。

Bルートスクリプト

USBにROHM BP35C2を接続し、RS-232Cポート(/dev/ttyUSB0)からBルート通信(ECHONET)を行う。

wget "https://jamfunk.jp/wp/wp-content/uploads/2020/09/routeb.zip"
unzip routeb.zip
mv routeb.pl /usr/local/bin/
mkdir /run/routeb

スクリプトのテスト

/usr/local/bin/routeb.pl
1601349632 #UNIX時間(time)
  #動作状態(status) ※標準で取得しない
1 #積算電力計測値・履歴を実使用量に換算する係数(coefficient)
6 #積算電力量計測値の有効桁数(effective digits)
763.72 #積算電力量計測値(正方向)(cumulative normal)
0.01 #積算電力量単位(乗率)(unit)
0 #積算電力量計測値(逆方向・売電)(cumulative reverse) ※標準で取得しない
191 #瞬時電力計測値(電力実効値)(instantaneous elecrtic energy)
2.1 #瞬時電流計測値(実効電流値R相)(instantaneous currents r)
0 #瞬時電流計測値(実効電流値T相)(instantaneous currents t)
  • 初回は接続・人相処理があるため、12~20秒ほどかかる。2回目以降は取得処理のみなので1~2秒ほど。
    SNMPサーバーを介して取得する場合は、接続・認証処理でSNMPサーバーがタイムアウトになってしまうので、値が取得できない時間帯が発生する。(上の設計のグラフ空白部分)
  • 主な流れは、疎通確認(SKPING)→応答がなければ接続・認証(SKSCAN, SKJOIN)→値の取得(SKSENDTO)→出力。
  • エラーは/run/routeb/error.txtに、IPv6アドレスは/run/routeb/ipaddr.txtに落ちてくる。
  • 1回の取得項目数に制限があったので、「標準で取得しない」項目がある。ソースコードを参照。
  • 腐った言語であるPerlスクリプトですが、なにか?

スタートアップスクリプト

systemctlで起動時、routeb.plに接続処理を行わせるスクリプト

vi /etc/systemd/system/routeb.service
----
[Unit]
Type=simple
Description=Route-B startup script
After=network.target chronyd.service multi-user.target

[Service]
ExecStart=/bin/perl /usr/local/bin/routeb.pl

[Install]
WantedBy=multi-user.target
----

スクリプトの登録

systemctl daemon-reload
systemctl enable routeb.service
systemctl start routeb.service

SNMPサーバーへの登録

Net-SNMPに登録

vi /etc/snmp/snmpd.conf
----
extend routeb /usr/local/bin/routeb.pl
----
systemctl restart snmpd
  • 最終行とかに適当に追加する。

テスト

snmpwalk -v 2c -c public -On localhost nsExtendObject
.1.3.6.1.4.1.8072.1.3.2.1.0 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.2.1.2.6.114.111.117.116.101.98 = STRING: /usr/local/bin/routeb-getamp.pl
.1.3.6.1.4.1.8072.1.3.2.2.1.3.6.114.111.117.116.101.98 = STRING:
.1.3.6.1.4.1.8072.1.3.2.2.1.4.6.114.111.117.116.101.98 = STRING:
.1.3.6.1.4.1.8072.1.3.2.2.1.5.6.114.111.117.116.101.98 = INTEGER: 5
.1.3.6.1.4.1.8072.1.3.2.2.1.6.6.114.111.117.116.101.98 = INTEGER: exec(1)
.1.3.6.1.4.1.8072.1.3.2.2.1.7.6.114.111.117.116.101.98 = INTEGER: run-on-read(1)
.1.3.6.1.4.1.8072.1.3.2.2.1.20.6.114.111.117.116.101.98 = INTEGER: permanent(4)
.1.3.6.1.4.1.8072.1.3.2.2.1.21.6.114.111.117.116.101.98 = INTEGER: active(1)
.1.3.6.1.4.1.8072.1.3.2.3.1.1.6.114.111.117.116.101.98 = STRING: 1590854335
.1.3.6.1.4.1.8072.1.3.2.3.1.2.6.114.111.117.116.101.98 = STRING: 1590854335

1
6
10487.4
0.1
0
374
4.6
0.6
.1.3.6.1.4.1.8072.1.3.2.3.1.3.6.114.111.117.116.101.98 = INTEGER: 10
.1.3.6.1.4.1.8072.1.3.2.3.1.4.6.114.111.117.116.101.98 = INTEGER: 0
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.1 = STRING: 1590854335
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.2 = STRING:
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.3 = STRING: 1
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.4 = STRING: 6
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.5 = STRING: 10487.4
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.6 = STRING: 0.1
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.7 = STRING: 0
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.8 = STRING: 374
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.9 = STRING: 4.6
.1.3.6.1.4.1.8072.1.3.2.4.1.2.6.114.111.117.116.101.98.10 = STRING: 0.6

ZABBIXサーバー用テンプレート

参考

USBドングル(ROHM BP35C2)

ROHM > 無線通信モジュール > Wi-SUNモジュール BP35C2
https://www.rohm.co.jp/products/wireless-communication/specified-low-power-radio-modules
技術資料からドキュメントがダウンロードできる(SKINFOでIDとパスワードを取得する必要がある。)

  • スタートガイド BP35C2 1.01 2019/2/18 BP35C0搭載USBドングル
  • ハードウェア仕様書 BP35C2 日本語 BP35C0搭載USBドングル
  • アプリケーションノート BP35C0-J11 特定小電力無線モジュールBP35C0-J11

「ROHM Sub-GHzシリーズ」サポートページ(小売業者リスト)
https://micro.rohm.com/jp/download_support/wi-sun/

ECHONET Lite規格書

https://echonet.jp/spec_g/#standard-01

  • ECHONET Lite規格書 Ver.1.13 (日本語版) 第2部 ECHONET Lite 通信ミドルウェア仕様
  • APPENDIX ECHONET機器オブジェクト詳細規定 Release M Revised (日本語) P. 3-303 – 3-311

その他参考

スマートメーターの情報を最安ハードウェアで引っこ抜く
https://qiita.com/rukihena/items/82266ed3a43e4b652adb

TESSERA製ドングル
HEMS用 Wi-SUNモジュール, Wi-SUN Route-B 専用 RL7023 Stick-D/IPS
https://www.tessera.co.jp/rl7023stick-d_ips.html
コマンドが微妙に違うので、ソースコードを書き換えないといけない