LoginSignup
8
9

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 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入門 スマートハウスの通信技術を学ぼう!

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