従来の電力メーターからスマートメーターになって、Bルートと呼ばれる無線通信経路から積算電力量、瞬時電流、瞬時電力などを読み取れるようになっています。

ただし、その実現方法には多様なものがあり、具体的な利用方法もどこで調べたら良いかわかりにくいので、最も労力の少ない最短の実現方法を書いてみようと思います。

※Bルートとは、スマートメーターと建物内に設置された機器間の通信路で、おもに920MHz帯の無線通信が使われます。


必要な機器と構成

Bルートを介してスマートメーターと通信するための機器とそれを制御する機器が最小限の構成です。

いろいろな機器がありますが、ここでは最も安価に実現できる一例として、下記の構成とすることに。
Fig2

ハードウェア

パソコン、シリアル通信インターフェース、Wi-SUN対応無線モジュールを使用しました。

Wi-SUN対応無線モジュールは、USBドングルタイプなどもありますが、ここではローム社製のモジュール(BP35A1)を使用しました。
1

BP35A1のコネクタは超小型なので、このままではハンダ付けできないため、2.54mmの標準ピッチに変換する基板(BP35A7A)も合わせて購入しました。

シリアル通信インターフェースは、手元にあった秋月電子製のUSB-シリアル変換モジュール(FT232RL)を利用しました。

※FT232RLは5V駆動、BP35A1は3.3V駆動なので、信号線の接続にはレベル変換などが必要です。


ソフトウェア

ハードウェアが準備できればBP35A1を介するスマートメーターとの通信は、一般的なシリアル通信を行えば良く、コマンドを送ってレスポンスを読み取るだけの単純なやりとりとなります。

ただ、積算電力量などをスマートメーターから読み出すプログラムを作成するためには、ガイド、リファレンス、仕様書などが多数あって、何を読めば良いのかわかりにくいのが難点です。

幸い、Bルートを利用するための説明やプログラムが複数のブログで紹介されているため、苦労しつつなんとか積算電力量や瞬時電力、瞬時電流などを読みとれるようになりました。

この記事では、プログラムを作成するための近道を明示してみようと思います。

※解答を知った上で、そこから必要最小限の手順を割り出すイメージです。
※一般的なシリアル通信プログラムを作成するための方法は省きます。


必要なドキュメントと基本アプリ

必要なドキュメントは以下の2系統です。
(1)Wi-SUNモジュール(BP35A1)に関するドキュメント
(2)スマートメーターから情報を読み出すための規格書

基本アプリとしては、通信ソフトの「Tera Term」を利用するのが簡単ですが、自作のターミナルソフトでもOKです。当初だけ一時的に使用します。

以下に詳細を記載します。

(1)Wi-SUNモジュール(BP35A1)に関するドキュメント

ローム社のWEBサイトからダウンロード可能です。
https://www.rohm.co.jp/products/wireless-communication/specified-low-power-radio-modules/bp35a1-product#documentationSubMenu
2_rohm

最小限必要なものは、上図で赤枠で囲った3つです。
①BP35A1 データシート
②BP35A1 スタートアップマニュアル
③BP35A1 コマンドリファレンス(パスワードが必要)

①には、電源電圧、ピンアサイン、UART仕様などが記載されています。
ちなみに、UART仕様は以下です。
・ボーレート:115,200bps
・データ幅:8 ビット
・パリティ:なし
・ストップビット:1 ビット
・HW フロー制御:無効(デフォルト)
 
②は、評価ボードBP359Cを使用する場合に便利ですが、そうでない場合には読み飛ばすページが多いです。ただし、13ページに「ユーザーID とパスワードの入手」の方法が記載されていて、とても重要です。
 →③を参照するためには、このユーザー名とパスワードが必要です

③は、BP35A1で使用されているコマンドの使い方を記述したドキュメントです。多数のコマンドが記載されていますが、実際に使用するのは10個程度です。(具体例は後記)


(2)スマートメーターから情報を読み出すための規格書

スマートメーターから積算電力量などの情報を読み出すためには、ECHONET Lite規格書を参照する必要があり、以下のURLから参照できます。
「規格書・仕様書など」https://echonet.jp/spec_g/

ただし、あまりに多数の規格書が存在するので何を読めば良いのか全くわからず、私の場合はここで心が折れました。

幸いにも、Bルートを利用するための説明やプログラムが複数のブログで紹介されているため、拾い読みしてなんとか積算電力量や瞬時電力、瞬時電流などを読みとれるようになりました。

その経験から、最小限必要な規格書は2つであることがわかりました。

上に示す「規格書・仕様書など」のページの初頭にある「ECHONET Lite規格書 Ver.1.14(日本語版)」をクリックして「ECHONET Lite規格書 Ver.1.14(日本語版)のダウンロード ファイルリスト」のページへ進むと以下のリストが表示されます。
3_echonet
これだけで、もう嫌になりますが、最も重要なものは「第2部 ECHONET Lite 通信ミドルウェア仕様」なので、これをダウンロードします。

このブログでは、これを④通信ミドルウェア仕様として利用します。全て読む必要はなく、必要に応じ参照する辞書的な使い方になると思います。

もう一つは、「規格書・仕様書など」のページの後半にある「APPENDIX ECHONET機器オブジェクト詳細規定 Release Q(日本語版)」をクリックして、「APPENDIX ECHONET機器オブジェクト詳細規定Release Q のダウンロード ファイルリスト」のページへ進み、「APPENDIX ECHONET機器オブジェクト詳細規定Release Q」をダウンロードします。

この中で必要になるのは、「3.3.25 低圧スマート電力量メータクラス規定」の部分だけです。このブログでは、これを⑤低圧スマート電力量メータクラス規定として利用します。

規格書を普通に読破するだけでは何故これが必要かを知るのはとても難しいと思います。ここでは、解答を知ってそこから逆引きしているということになります。(言わばズル)


ドキュメント・規格書まとめ

まとめると、以下の5つになります。
①BP35A1 データシート
②BP35A1 スタートアップマニュアル
③BP35A1 コマンドリファレンス
④通信ミドルウェア仕様(第2部 ECHONET Lite 通信ミドルウェア仕様)
⑤低圧スマート電力量メータクラス規定(APPENDIX ECHONET機器オブジェクト詳細規定Release Qの一部)


スマートメーターとやりとりするための具体例

積算電力量などをスマートメーターから読み出すための手順は次の通りです。

1)認証ID、パスワードをセット
2)周辺に存在する機器のスキャン
3)スマートメーターに接続
4)スマートメーターから積算電力量などを読み出す

それぞれの手順について、実際のコマンド/レスポンス例を示します。

プログラムとしてはシリアル通信の送受信だけであり、コマンドを作成&送信してレスポンスを受信し、解釈&表示することにつきます。

なお、事前準備として1回だけ、WOPTコマンドを実行して、受信データ部の表示形式を16進ASCII文字で表示するように設定します。OKが返ってきたら正常終了です。③参照
※デフォルトはバイナリ表示となっていますが、16進ASCII表示の方が扱いやすいため

wopt


(1)認証ID、パスワードのセット

電力会社にBルートの利用申請を行って、送られてきた認証IDとパスワードをセットします。

SKSETPWD、SKSETRBIDコマンドを使用し、OKが返ってきたら正常終了です。③参照
PWD

ID

◆実行例
ini
個別情報の値は白塗りにしてあります。(以下同様)

SKSETPWD C xxxxxxxxxxxx」は、BP35A1へ送信したコマンド(ASCII文字列)のエコーバックです。
OK」は、BP35A1からのレスポンスです。
SKSETRBID xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」は、BP35A1へ送信したコマンド(ASCII文字列)のエコーバックです。
OK」は、BP351からのレスポンスです。


(2)周辺に存在する機器のスキャン

SKSCANコマンドを使用します。スキャンに対し応答した機器の情報がレスポンスとして返ってきます。③参照

SKSCANの引数についてはあまり理解できていませんが、以下の数値でこれまで成功しています。
◆引数の説明
2:アクティブスキャンを行う
FFFFFFFF:全チャネルスキャン
6:各チャンネルのスキャン時間

◆実行例
ini2
SKSCAN 2 FFFFFFFF 6」は、BP35A1へ送信したコマンドのエコーバックです。
OK」以下は、BP35A1からのレスポンスです。

Channel、Pan ID、Addrの値が重要で、次の手順で使用します。


(3)スマートメーターに接続

SKSCANコマンドの応答を参照して、SKSREGコマンドでチャネル番号とPan IDをレジスタに設定し、SKJOINコマンドでスマートメーターのIPアドレスを指定してPANA接続シーケンスを開始します。③参照
setreg

join

◆レジスタ指定
S2:チャネル番号
S3:Pan ID

◆IPアドレス(IPv6リンクローカルアドレス)
SKSCANコマンドの応答のAddr(MACアドレス)をIPv6 リンクローカルアドレスに変換して指定する必要があります。

この変換のためSKLL64コマンドが用意されているので、それを使います。③参照
slkk64
一度実行してIPv6 リンクローカルアドレスを入手しておけばスマートメーターが変わらない限り不変のようなので、あらかじめ記憶してプログラムに埋め込んでいるため、以下の実行例ではSKLL64の実行は省略しています。

◆実行例
join2
SKSREG S2 35」は、BP35A1へ送信したSKSREGコマンドのエコーバックです。
OK」は、BP35A1からのレスポンスです。

SKSREG S3 xxxx」は、BP35A1へ送信したSKSREGコマンドのエコーバックです。
OK」は、BP35A1からのレスポンスです。

SKJOIN FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx」は、BP35A1へ送信したSKJOINコマンドのエコーバックです。
OK」以降は、BP35A1からのレスポンスです。

PANA接続に成功すると、諸々のデータの最後の方で、EVENT 25が返ってきます。

応答が長いので通信不良などで失敗する確率が高くなりますが、これまでの経験では、失敗しても数回以内には概ね成功しています。


(4)スマートメーターから積算電力量などを読み出す

以上でスマートメーターからデータを読み出す準備が完了するので、あとはECHONET Lite規格書に従って積算電力量や瞬時電力、瞬時電流などを読み出して表示することになります。

具体的には、SKSENDTOコマンドを利用し、ECHONET Lite規格のデータを送信し、レスポンスを受信するわけです。SKSENDTOコマンドは③を参照
send1
send2

◆積算電力量を読み出す実行例
kwh
SKSENDTO 1 FE80:0000:0000:00000:xxxx:xxxx:xxxx:xxxx 0E1A 1 000E」は、BP35A1へ送信したSKSREGコマンドのエコーバックです。③のSKSENDTOコマンドの説明にあるように、正味データ部分はエコーバックされません。実際には、積算電力量を読み出すためのECHONET Lite規格に基づいたバイナリデータが送信されています。

◆エコーバック部の説明
1:送信元UDPハンドル
FE80:0000:0000:00000:xxxx:xxxx:xxxx:xxxx:宛先IPv6アドレス
0E1A:宛先ポート番号
1:暗号化送信を指定
000E:バイナリデータ長

このバイナリデータの構造を知るには、④通信ミドルウェア仕様の第3章を読む必要があります。
format
理解できていない設定値もありますが、先達の実施例も参考に実際の値を示します。以下の14バイトです。(バイナリデータ長0x000E)
EHD1:0x10  ※電文ヘッダー1
EHD2:0x81  ※電文ヘッダー2
TID:0x00,0x01  ※トランザクションID
SEOJ:0x05,0xFF,0x01  ※送信元
DEOJ:0x02,0x88,0x01  ※相手先
ESV:0x62  ※サービス(0x60ならSet、0x62ならGet)
OPC:0x01  ※処理プロパティ数
EPC:0xE0  ※積算電力量を読み出す場合
PDC:0x00  ※EDT長さ(このケースではEDT無しなので0x00)
EDT:なし

正常に受け付けられると「EVENT 21 FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx 00」および「OK」が返ってきます。

その後、スマートメーターから積算電力量を示すデータがUDP送信されてくるので、これを受信して解釈して表示することになります。

実行例では、「ERXUDP」以下がこれに相当します。③を参照
erxudp

実行例では、最後尾の受信データ部に注目すると、以下のようになっています。
1081000102880105FF017201E0040000B054

EHD1:0x10  ※電文ヘッダー1
EHD2:0x81  ※電文ヘッダー2
TID:0x00,0x01  ※トランザクションID
SEOJ:0x02,0x88,0x01  ※送信元
DEOJ:0x05,0xFF,0x01  ※相手先
ESV:0x72  ※読み出し応答
OPC:0x01  ※処理プロパティ数
EPC:0xE0  ※積算電力量を読み出す場合
PDC:0x04  ※EDT長さ
EDT:0x00,0x00,0xB0,0x54

積算電力量はEDTの値です。16進数を10進数に変換すると、0xB054→45140となります。
単位は(デフォルトで)0.1kWhなので、4514.0(kWh)が実際の積算電力量になり、これはスマートメーター本体の表示と一致するはずです。


積算電力量以外を読み出すには

積算電力量を読み出すにはSKSENDTOコマンドのEPC値を0xE0と指定しましたが、この値を変えることで種々のデータを読み出すことができます。

具体的には、⑤低圧スマート電力量メータクラス規定に示される表を参照し、EPCとして所望の値をセットします。

t1
この表には、プロパティ内容、データサイズなどが記載されているので、読み出すプロパティに応じて、レスポンスを解釈し表示すればOKです。
t2

◆プロパティ例
積算電力量計測値(正方向):EPCは0xE0、データサイズ4バイト
瞬時電力計測値:EPCは0xE7、データサイズ4バイト
瞬時電流計測値:EPCは0xE8、データサイズ4バイト


まとめ

スマートメーターから積算電力量、瞬時電流、瞬時電力などを読み取るための実現方法には多様なものがあり、具体的な利用方法もどこで調べたら良いかわかりにくいので、低コストで実現できる方法をあげてみました。

また、プログラムを作成するためには、ガイド、リファレンス、仕様書などが多数あって何をどこまで読めば良いか不明で心が折れそうになるので、解答を知った上でそこから逆引きする気持ちで要点を整理してみました。

プログラムの改修等で迷うことが多いので備忘録として整理しましたが、どなたかの参考になれば幸いです。