目次
概要
電力会社のメーターを使って、電力監視をSNMPで行いたい。
アップデート履歴
2021/01/26 routeb.plスクリプトをバージョンアップ(0.20→0.21)
エラー発生時に/run/routeb/error.txtに詳細なデバッグログを吐くように変更。
あと、接続性の向上。
設計
電力送配電会社(今回は九州電力送配電)の電力メーターは、「電力メーター情報発信サービス(低圧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
- Perl-Device-SerialPortが見つからないとき(RaspberryPi用CentOSなど)は、CPANからダウンロードしてコンパイル(CentOSの設定→Perlモジュールインストールのくだり)する。
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/ chmod 755 /usr/local/bin/routeb.pl 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 PermissionsStartOnly=true ExecStartPre=/usr/bin/mkdir /run/routeb [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
コマンドが微妙に違うので、ソースコードを書き換えないといけない