スマートメーターBルートの通信に挑戦(その4)

以前のブログはこちらです。
スマートメーターBルートの通信に挑戦
スマートメーターBルートの通信に挑戦(その2)
スマートメーターBルートの通信に挑戦(その3)

前回から2年半ほど経ってしまいましたが、ようやく再開しました。

以前作成したロームのWi-SUNモジュールを久しぶりに動かしましたが、動作は問題ありませんでした。

WiSunModuleBoard2.jpg
 

以前はTeraTermを使って、スマートメーターとBルートの接続が完了するまでの確認が出来ていましたので、次のステップとして、ECHONET Liteの通信をやってみました。

Bルートの接続完了まではASCII文字のやり取りが中心なのでTeraTermでもできましたが、ECHONET Liteのデータは16進のデータ列なので、簡単なソフトを作って確認することにしました。
ただし簡単と言っても、スマートメーターから勝手なタイミングでデータが送られてくることがあるので、シリアル通信の処理は、データの取りこぼしがないように注意する必要があります。

ということで、VC++でBルート通信テスト用ソフトを作りました。

BrouteTestSoft.jpg
 

送受信するECHONET Liteのデータの構成は、ECHONET Lite規格書 の中の第2部「ECHONET Lite通信ミドルウェア仕様」に記載されています。

EchonetLite電文構成
ECHONET Lite規格書 Ver.1.12

実際にやり取りするデータの値は、規格書の第2部の第3章以降と、APPENDIX ECHONET機器オブジェクト詳細規定に記載されています。

ソフトを作ってまず最初にやってみたのは、「瞬時電力計測値」の取得です。
これを取得すると、現在の家全体の消費電力がほぼリアルタイムで分かるようになります。

スマートメーターとWi-SUNモジュールの間でBルートの接続が完了した後は、
SKSENDTOコマンドでWi-SUNモジュールからECHONET Liteのデータを送信すると、
スマートメーターから送られてきたECHONET Liteのデータが ERXUDP のイベントで取得できます。

実際のデータはこんな感じです。
[ ]の値がECHONET Liteのデータです。

(Wi-SUNモジュールに設定するSKSENDTOコマンド)
SKSENDTO 1 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 1 000E [10][81][00][01][05][ff][01][02][88][01][62][01][e7][00]

(Wi-SUNモジュールから通知されるERXUDPイベント)
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0012 [10][81][00][01][02][88][01][05][ff][01][72][01][e7][04][00][00][01][1c][0d][0a]

ERXUDPイベントのECHONET Liteデータの内容は以下のようになっています。

EHD1: 0x10
EHD2: 0x81
TID: 0x0001
SEOJ: 0x028801
  Class Group Code: 0x02
  Class Code: 0x88
  Instance Code: 0x01
DEOJ: 0x05ff01
  Class Group Code: 0x05
  Class Code: 0xff
  Instance Code: 0x01
ESV: 0x72
OPC: 0x01
EPC1: 0xe7
PDC1: 0x04
EDT1: 0x00 0x00 0x01 0x1c

最後のEDT1の0x0000011cが瞬時電力計測値の値で、10進数にすると、284W となります。

とりあえず瞬時電力を取得できるようになりましたが、今のソフトはコマンドを単発で発行するだけなので、次は自動的に繰り返し取得できるようにしてみようと思います。