スマートメーターに無線接続(Wi-SUN Profile for ECHONET Lite)して、電力測定値を読み出す。
プログラムを作成する前に、まずはシリアル通信(シリアルコンソール)を使って、「手作業」で通信してみることとする。
まずは、今回購入したHEMS用 Wi-SUNモジュール, Wi-SUN Route-B 専用RL7023 Stick-D/IPS(税込み 8,060円)のSKコマンド・リファレンスマニュアルをダウンロード。 または、Googleで検索可能なROHMのBP35A11コマンドリファレンスマニュアルをダウンロードしておく。
ECHONET Liteの通信プロトコルは、公式ページから、
・ ECHONET Lite規格書 Ver.1.13(日本語版) 第2部 ECHONET Lite 通信ミドルウェア仕様
・ APPENDIX ECHONET機器オブジェクト詳細規定Release N
の2つを使うのでダウンロードしておく。
シリアル通信での全処理
個別のコマンドを細かく見ていく前に、今回のシリアル通信での全ての送受信記録をまず示す。
SKINFO EINFO FE80:0000:0000:0000:1234:5678:1234:5678 1234567812345678 21 FFFF FFFE OK SKSETRBID 12345678123456781234567812345678 OK SKSETPWD c 1234567890ab OK SKSCAN 2 FFFFFFFF 6 EVENT 20 FE80:0000:0000:0000:1234:5678:1234:5678 EPANDESC Channel:39 Channel Page:09 Pan ID:9876 Addr:1234567812345678 LQI:2D PairID:12345678 EVENT 22 FE80:0000:0000:0000:1234:5678:1234:5678 SKSREG S2 39 ← Channel OK SKSREG S3 9876 ← Pan ID OK SKLL64 1234567812345678 FE80:0000:0000:0000:9876:5432:9876:5432 SKJOIN FE80:0000:0000:0000:9876:5432:9876:5432 OK EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 02 EVENT 02 FE80:0000:0000:0000:9876:5432:9876:5432 ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 02CC 02CC 1234567812345678 0 0028 00000028C00000024A1F4DC0C99C3A6A00060000000400000000000500030000000400000000000C 〜 中略(いろいろなデータが返される) 〜 EVENT 25 FE80:0000:0000:0000:9876:5432:9876:5432 ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FF02:0000:0000:0000:0000:0000:0000:0001 0E1A 0E1A 1234567812345678 1 0012 108100000EF0010EF0017301D50401028801 SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E← 000Eの後ろにスペースを1つ入れ、ENTERキーではなく、ファイル送信する EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 0012 1081000102880105FF017201E704000001D4 SKTERM EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 02CC 02CC 1234567812345678 0 0028 00000028000000034A1F4DC176A6152D00010000001000002DFC9362BA73BA85173C06D163A4B04B EVENT 27 FE80:0000:0000:0000:9876:5432:9876:5432
マニュアルを参照しながら、1ステップずつ通信してみる
まずは、現在の設定値を表示することで、ちゃんとWi-SUN通信デバイスが機能しているかを見てみる。
SKINFO EINFO FE80:0000:0000:0000:1234:5678:1234:5678 1234567812345678 21 FFFF FFFE OK
返されるデータは、デバイス自体のIPアドレス、デバイス自体のMACアドレス、利用中の周波数チャネル、PAN ID、固定値(FFFE)
IDとパスワードの設定
それでは、スマートメーターとの通信を始める。まず最初に行うのは、IDとパスワードを設定します。
SKSETRBID 12345678123456781234567812345678 OK SKSETPWD c 1234567890ab OK
IDは16進数を文字列化した「32文字」、パスワードはASCIIの「12文字」。パスワードの文字数はSKSETPWDの第1引数に16進数でセットする。今回は12文字なので 0x0c 。
デバイスのスキャン
次に、(設定したIDに合致した)スマートメーターをスキャンします。
SKSCAN 2 FFFFFFFF 6 EVENT 20 FE80:0000:0000:0000:1234:5678:1234:5678 EPANDESC Channel:39 Channel Page:09 Pan ID:9876 Addr:1234567812345678 LQI:2D PairID:12345678 EVENT 22 FE80:0000:0000:0000:1234:5678:1234:5678
SKSCANの第1引数はスキャンモード = アクティブスキャン、第3引数チャンネルごとのスキャン時間 = 0.01 * (2^6+1) sec という設定だが、とにかくサンプルどおりやれば問題なし…
結果はEVENT 0x22 (アクティブスキャンが完了した) が返ってきていれば成功。そして、EPANDESCで返された値は、このあとの通信に使うから重要。
EVENTコードの定義は次のようになっている
デバイスに接続
ここでは、3つのコマンドを使うので、まずはそのマニュアル…
Channel と Pan ID をレジスタに登録するSKREGコマンド
MACアドレスをIPアドレスに変換するコマンド
デバイス(今回はスマートメーター) に接続するSKJOINコマンド
では、順次コマンドを投入して、デバイス(スマートメーター)に接続する。 チャンネルとPan IDをレジスタにセットし、MACアドレスをIPアドレスに変換した後に、そのIPアドレスを指定してデバイスに接続する。
SKSREG S2 39 ← Channel OK SKSREG S3 9876 ← Pan ID OK SKLL64 1234567812345678 FE80:0000:0000:0000:9876:5432:9876:5432 SKJOIN FE80:0000:0000:0000:9876:5432:9876:5432 OK EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 02 EVENT 02 FE80:0000:0000:0000:9876:5432:9876:5432 ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 02CC 02CC 1234567812345678 0 0028 00000028C00000024A1F4DC0C99C3A6A00060000000400000000000500030000000400000000000C 〜 中略(いろいろなデータが返される) 〜 EVENT 25 FE80:0000:0000:0000:9876:5432:9876:5432 ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FF02:0000:0000:0000:0000:0000:0000:0001 0E1A 0E1A 1234567812345678 1 0012 108100000EF0010EF0017301D50401028801
EVENT 0x25が、「PANA による接続が完了した」というメッセージなので、これが現れるかどうかを確認する。
現在の電流値を試しに読み出してみる
ECHONET Liteでスマートメーターにコマンドを送るのは、SKSENDTO を用いる。
この送信データ(DATA)部分は、次のようなバイナリデータである。
送信するデータはバイナリなので、バイナリエディタまたは、次のように端末でバイナリファイルを作成する。
echo -ne '\x10\x81\x00\x01\x05\xFF\x01\x02\x88\x01\x62\x01\xE7\x00' > data.bin
それぞれの値の説明は
EHD1 = 0x10
EHD2 = 0x81
TID = 0x00 0x01
SEOJ = 0x05 0xff 0x01 ... 送信側:管理操作機器クラス 0x05, コントローラ 0xff
DEOJ = 0x02 0x88 0x01 ... 受信側:住宅設備機器クラス 0x02, 低圧スマートメーター 0x88
ESV = 0x62 ... Get ( 0x60 = Set, 0x61 = Set with response, 0x62 = Get )
OPC = 0x01 ... 処理プロパティ数 は 1
EPC1 = 0xe7 ... 瞬時電力計測値(W)を4バイトで得る
PDC1 = 0x00 ... EDT1のバイト数
EDT1 設定なし(EDT1のバイト数がゼロ設定なので…)
そして、このデータを送信する (SKSENDTOコマンドの第6引数として、ターミナルソフトでdata.binを送信する)
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E← 000Eの後ろにスペースを1つ入れ、ENTERキーではなく、ファイル送信する
EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00
OK
ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 0012 1081000102880105FF017201E704000001D4
EHD1 = 0x10
EHD2 = 0x81
TID = 0x00 0x01 ... パケット番号は1
SEOJ = 0x02 0x88 0x01 ... 受信側:住宅設備機器クラス 0x02, 低圧スマートメーター 0x88
DEOJ = 0x05 0xff 0x01 ... 送信側:管理操作機器クラス 0x05, コントローラ 0xff
ESV = 0x72 ... Get_Res プロパティ値読み出し応答
OPC = 0x01 ... 処理プロパティ数 は 1
EPC1 = 0xe7 ... 瞬時電力計測値(W)を4バイトで得る
PDC1 = 0x04 ... EDT1のバイト数
EDT1 = 0x00 0x00 0x01 0xd4 ... 0x1d4 = 468 Watt
現在の電力測定値が得られた !
EOJ や ESV の値は 「APPENDIX ECHONET機器オブジェクト詳細規定Release N」に掲載されている。一部を抜粋すると…
通信切断
SKTERM EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 02CC 02CC 1234567812345678 0 0028 00000028000000034A1F4DC176A6152D00010000001000002DFC9362BA73BA85173C06D163A4B04B EVENT 27 FE80:0000:0000:0000:9876:5432:9876:5432
EVENT 0x27 が受信されたら、通信切断が確認されている。
主だった値をスマートメーターから読み出してみる
0x80 : 動作状態
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 80 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 000F 1081000102880105FF017201800130
応答は
EPC1 = 0x80 ... 動作状態
PDC1 = 0x01 ... EDT1のバイト数
EDT1 = 0x30 ... スマートメーター ON
0xd3 : 係数
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 d3 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 000E 1081000102880105FF015201D300
応答は
EPC1 = 0xd3 ... 係数
PDC1 = 0x00 ... EDT1のバイト数
EDT1 ... 設定なし
0xd7 : 積算電力量 有効桁数
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 d7 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 000F 1081000102880105FF017201D70107
応答は
EPC1 = 0xd7 ... 積算電力量 有効桁数
PDC1 = 0x01 ... EDT1のバイト数
EDT1 = 0x07 ... 積算電力の有効桁数は7桁
0xe0 : 積算電力量 計測値
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e0 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 0012 1081000102880105FF017201E00400180ACF
応答は
EPC1 = 0xe0 ... 積算電力量 計測値
PDC1 = 0x04 ... EDT1のバイト数
EDT1 = 0x00 0x18 0x0a 0xcf ... 0x00180acf = 15756.31 kWh ← 単位が0.01kWh設定(0xe1のプロパティ読み出しより)
0xe1 : 積算電力量 単位
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e1 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 000F 1081000102880105FF017201E10102
応答は
EPC1 = 0xe1 ... 積算電力量 単位
PDC1 = 0x01 ... EDT1のバイト数
EDT1 = 0x02 ... 単位は0.01kWh
0xe2 : 積算電力量 計測値履歴1
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e2 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 00D0 1081000102880105FF017201E2C20000001807A4001807B8001807CB001807D9001807DC001807DF001807E3001807E7001807EA001807EE001807F2001807F6001807FC0018081100180833001808450018085E0018087700180899001808AB001808C9001808FE001809360018096000180988001809910018099B001809B5001809CF001809DC001809EF00180A0900180A2B00180A5600180A6900180A7C00180A9900180AB500180AC5FFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE
応答は
EPC1 = 0xe2 ... 積算電力量 単位
PDC1 = 0xc2 ... EDT1のバイト数 0xc2 = 194バイト
EDT1 = 0x00 0x00 ... 最初の2バイトは、収集日(現在からマイナス日)
0x00 0x18 0x07 0xa4 ... 0x001807a4 = 15748.20 kWh (0:00の値)
0x00 0x18 0x07 0xb8 ... 0x001807b8 = 15748.40 kWh (0:30の値)
0x00 0x18 0x07 0xcb ... 0x001807cb = 15748.59 kWh (1:00の値)
0x00 0x18 0x07 0xd9 ... 0x001807d9 = 15748.73 kWh (1:30の値)
〜 以下省略
0xff 0xff 0xff 0xfe ... 未測定 (23:30の値)
0xe5 : 積算履歴収集日 1
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e5 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 000F 1081000102880105FF017201E50100
応答は
EPC1 = 0xe5 ... 積算履歴収集日
PDC1 = 0x01 ... EDT1のバイト数
EDT1 = 0x00 ... 0は当日
0xe7 : 瞬時電力計測値
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e7 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 0012 1081000102880105FF017201E7040000011C
応答は
EPC1 = 0xe7 ... 瞬時電流計測値
PDC1 = 0x04 ... EDT1のバイト数
EDT1 = 0x00 0x00 0x01 0x1c ... 0x0000011c = 284 Watt
0xe8 : 瞬時電流計測値
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e8 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 0012 1081000102880105FF017201E804000F0011
応答は
EPC1 = 0xe8 ... 瞬時電流計測値
PDC1 = 0x04 ... EDT1のバイト数
EDT1 = 0x00 0x0f ... R相 1.5 A (単位は0.1A固定)
0x00 0x11 ... T相 1.7 A (単位は0.1A固定)
○○日前の「積算電力量 計測値履歴1」を読み出す
0xe5 : ○○日前を設定する
たとえば、2日前は次のようなデータを送信する
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 61 01 e5 01 02
の15バイト
ESV = 0x61 ... Set ( 0x60 = Set, 0x61 = Set with response, 0x62 = Get )
OPC = 0x01 ... 処理プロパティ数 は 1
EPC1 = 0xe5 ... 瞬時電力計測値(W)を4バイトで得る
PDC1 = 0x01 ... EDT1のバイト数
EDT1 = 0x02 ... 2日前 (初期値は 0 で当日)
送信データサイズが15バイトなので、上述の(値読み取り)例と違い、SKSENDTOの第4引数は 000F と指定する。
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000F [EDTバイナリデータ]
EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00
OK
ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 000F 1081000102880105FF017101E500
そして、その設定が正しく反映しているか調べる
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e5 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 000F 1081000102880105FF017201E50102
応答は
EPC1 = 0xe5 ... 積算履歴収集日
PDC1 = 0x01 ... EDT1のバイト数
EDT1 = 0x02 ... 0は当日
0xe2 : 積算電力量 計測値履歴1
送信データ EDT は、 10 81 00 01 05 FF 01 02 88 01 62 01 e2 00
の14バイト
SKSENDTO 1 FE80:0000:0000:0000:9876:5432:9876:5432 0E1A 1 000E [EDTバイナリデータ] EVENT 21 FE80:0000:0000:0000:9876:5432:9876:5432 00 OK ERXUDP FE80:0000:0000:0000:9876:5432:9876:5432 FE80:0000:0000:0000:1234:5678:1234:5678 0E1A 0E1A 1234567812345678 1 00D0 1081000102880105FF017201E2C200020018039F001803B2001803C5001803D5001803D9001803DB001803DF001803E4001803E8001803EC001803F0001803F4001803F80018040C0018042F001804490018046400180482001804A6001804E1001805010018052C00180550001805640018056E00180592001805C0001805DC001805F5001806010018061A0018061F0018062E00180644001806540018066B001806770018068A00180698001806AB001806CB001806E9001807060018072A00180742001807570018076C00180788