8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-30

はじめに

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 021バイト目の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バイト以降も同様の手順でプロパティマップの解析が出来る。以下が解析結果である

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](https://qiita-image-store.s3.amazonaws.com/0/140159/0326bbb9-fd12-1883-baa9-e499e96ac8d1.jpeg)

#参考文献
[APPENDIX ECHONET機器オブジェクト詳細規定](https://echonet.jp/spec_object_rh/)
##関連文献
[RubyでECHONET Lite家電を制御する](http://qiita.com/miyazawa_shi/items/4c645315262d5cf5b015)
[ PythonでECHONET Lite家電を操作](http://qiita.com/miyazawa_shi/items/9384f0d2cd1ee255b1c1)
[C言語でECHONET Lite家電を操作](http://qiita.com/miyazawa_shi/items/6d2bd86b19014b0ce161)
[Node-REDを使ってECHONET Lite機器を制御する2](http://qiita.com/KAITHEMS/items/0e02768795174a98d93f)
[ECHONET Lite入門 スマートハウスの通信技術を学ぼう!](https://www.amazon.co.jp/ECHONET-Lite%E5%85%A5%E9%96%80-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%8F%E3%82%A6%E3%82%B9%E3%81%AE%E9%80%9A%E4%BF%A1%E6%8A%80%E8%A1%93%E3%82%92%E5%AD%A6%E3%81%BC%E3%81%86-%E6%9D%89%E6%9D%91-%E5%8D%9A/dp/4274506320)
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?