Edited at

ECHONET Lite のプロパティマップの解析

More than 1 year has passed since last update.


はじめに

ECHONET Liteは通信のプロトコルであり、機器から取得や操作する事ができるプロパティが決まられている。

しかし、エアコンや空気清浄機のように同一名の機器でも、メーカや機種によって取得できる機器情報や操作の種類が異なる。

そこで、機器から取得できる機器情報や操作方法を調べる方法としてプロパティマップがある。

今回はプロパティマップの解析方法の話

※ ECHONET Lite (ISO/IEC 14543-4-3)国際規格


環境

-対象機器

SHARP  : 空気清浄機

TOSHIBA : エアコン

os : windows7

Ruby 2.2.4


プロパティマップの種類

プロパティマップには、「Setプロパティマップ」、「Getプロパティマップ」がある。


Setプロパティマップ

Appendix のアクセルルールで「Set」に該当する部分を取得できる

例) 以下の図はAppendixに記載されているエアコンに関するプロパティである。

オレンジ色で囲まれている範囲は Setプロパティマップで取得できる種類である。

セットプロパティマップAppendix.jpg


Getプロパティマップ

Appendix のアクセルルールで「Set」に該当する部分を取得できる

例) 上記と同じく図はAppendixに記載されているエアコンに関するプロパティである。

オレンジ色で囲まれている範囲は Getプロパティマップで取得できる種類である。

※アクセルルールの欄にSetのみが記載されているものは取得できない

ゲットマッププロパティ.jpg


プロパティマップの取得方法

対象機器にSetマッププロパティ もしくは Getマッププロパティの要求をする電文を送信する

今回は空気清浄機とエアコンを例にとって電文構成を示す

※ なおECHONET Liteの送受信の方法は以下のURLを参照

RubyでECHONET Lite家電を制御する

PythonでECHONET Lite家電を操作

あなたのお家をスマートハウスにしてみませんか? #SSNG編#

※ 電文構成に関しては

ECHONET Liteの電文 作成方法

ECHONET Lite規格書


Setマッププロパティ 電文構成


空気清浄機

1081 0000 05FF 0101 3501 6201 9E00


エアコン

1081 0000 05FF 0101 3001 6201 9E00 


Getマッププロパティの電文構成


空気清浄機

1081 0000 05FF 0101 3501 6201 9F00  


エアコン

1081 0000 05FF 0101 3001 6201 9F00 


解析方法

● プロパティの数が16より少ない場合には、2バイト目以降はそのままEPCとする

● プロパティの数が16以上の場合は以下の手順を行う

   1. 2バイト目以降を2進数に変換する

   2. Appendixを参照しプロパティマップ対応表をみながら、対応するプロパティを探す


例1 プロパティ数が 16より少ない場合

以下のようなマッププロパティに関するEDTを受け取った場合



04 80 81 A0 F3



1バイト目は プロパティの数を示すので

04 はプロパティが4個であることを表す

プロパティ数が 16個未満なので 2バイト目以降をそそままEPCとする

EPC ⇒ 「0x80 0x81 0xA0 0xF3」


例2 プロパティ数が16より多い場合

以下のようなゲットマッププロパティに関するEDTを受け取った場合

23 1F 01 03 0C 0A 00 13 11 01 09 0B 39 01 82 8B 02

1バイト目の23はプロパティ数を示すので、10進数に直すと25になる。

よってプロパティが全部で25個あることがわかる。

2バイト目以降は以下の表でプロパティの確認を行う。プロパティ確認表.jpg


2バイト目

2バイト目の1Fは2進数に変換すると0001 1111となるので以下のプロパティが該当する

0xC0 0xB0 0xA0 0x90 0x80

1バイト目.jpg


3バイト目

3バイト目の01は2進数に変換すると0000 0001となるので以下のプロパティが該当する

0x81

2 バイト目.jpg

4バイト以降も同様の手順でプロパティマップの解析が出来る。以下が解析結果である

0xC0,0xB0,0xA0,0x90,0x80,0x81,0x92,0x82,0xB3,0xA3,0xB4,0x94,0xC6,0x96,0x86,0xC7,

0x87,0x88,0xB9,0x89,0xBA,0x9A,0x8A,0xDB,0xCB,0xBB,0x8B,0x8C,0xFD,0x9D,0xFE,0xBE,0x9E,0x8E,0x9F


解析 サンプルコード ( Ruby )

プロパティ数が16個以上になる場合は解析が面倒になるので

以下のサンプルコードを作成した。

1行目のedt = " "のところに、解析したいEDTをいれて実行

コマンドプロンプト上に解析されたプロパティが表示されます

edt = "111F01020C0A0003110000001000008000"

pp = ["0xF","0xE","0xD","0xC","0xB","0xA","0x9","0x8"]
px = ["","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]
property_name=""

# 文字列を二文字ずつ割っていく
n_msg = edt.scan(/.{1,#{2}}/)

if n_msg[0].hex >= 16

for count in 1..n_msg.length-1 do
# 16進数を10進に変換
dd = n_msg[count]
ff = dd.hex

# 二進するに変換
binary_number = ff.to_s(2)
# 文字数を表示
bit_count = 8-binary_number.size

for count1 in 0..binary_number.size-1 do
boolean_data = binary_number[count1] #2進数の一文字

if boolean_data == "1" #もし1だった場合
property_name = property_name + pp[bit_count] + px[count] + ","
end
bit_count = bit_count + 1
end
end
puts property_name
end

解析結果.jpg


参考文献

APPENDIX ECHONET機器オブジェクト詳細規定


関連文献

RubyでECHONET Lite家電を制御する

PythonでECHONET Lite家電を操作

C言語でECHONET Lite家電を操作

Node-REDを使ってECHONET Lite機器を制御する2

ECHONET Lite入門 スマートハウスの通信技術を学ぼう!