ECHONET Liteの電文　作成方法

#はじめに
ECHONET Liteの電文作成方法について記述します。

詳しくは以下の規格書で確認してください
[ECHONET Lite規格書](https://echonet.jp/spec_v112_lite/)　

#電文構成
## フレーム
電文のフレームは下の図のようになっている。
決められた要素とバイト数で記述をしていく
![電文フレーム.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/f570fec1-d471-b1d9-84a4-ce978ec68078.jpeg)

###例えば
「空気清浄機　を　on　にする」 　⇨ _1081000005FF010135016101800130_　
の電文の場合　対応する要素と数値は以下のようになる。
![電文構成.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/c0fa038e-58c2-be8b-1d6a-c6ce3455dd44.jpeg)






##EHD1 & EHD2
_電文が　ECHONET Liteであることを宣言する部分_
基本的にこの部分に入る　文字は
　　　　　*1081*
以外は入らないので　電文の最初は1081のままでよい


##TID
この部分は自由記述である。
なので、2バイト以内なら

1111　or 　1234 　or 　1573　 or　 1899 

どんな文字を記入してもよい。
　最初のうちはわかりにくいので、0000　を入れることをお勧めする。
※　TIDの便利な使用方法は下で紹介する。

##SEOJ
送信元機器を明記する。
要するに、自分の機器名（ECHONET Liteオブジェクト）を記述する。
例えば、自分のパソコンが家電機器に命令を送信したい場合は
SEOJ　⇒　05FF01 
になる。 主に使用される機器名（ECHONET Liteオブジェクト）は以下である

![オブジェクト.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/46cadc68-f095-74cc-0e87-6d8cdc6f1d25.jpeg)
他の機器名(ECHONET Liteオブジェクト)の検索は
[APPENDIX ECHONET機器オブジェクト詳細規定](https://echonet.jp/spec_object_rh/)を参照
##DEOJ
送信先の機器名（ECHONET Liteオブジェクト）を記述する
例えば、エアコンの制御をしたい場合
DEOJ ⇒　013001
になる。主な送信先になるのは　SEOJ　と同じです

SEOJと同様に他の機器は
[APPENDIX ECHONET機器オブジェクト詳細規定](https://echonet.jp/spec_object_rh/)を参照

##ESV
送信時に使用するESVは主に３種類である。
###①　SetI
ESV　⇒　60
例） エアコンの動作をONにする
###②　SetC
ESV ⇒　61
エアコンの動作をONにし、エアコンからONになったことの応答をしてもらう。
応答の時、ESVは　71 で返ってくる
###③  Get
ESV ⇒　62
例） エアコンの動作状態を確認する。
例） エアコンの設定温度を確認する。
状態の応答は　ESV ⇒　72　になっている
![ESV.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/0fb03377-d309-2e46-7826-e6868d6cf7af.jpeg)

②と③　はどちらも機器から返事が返ってくるが、違いとして
②は機器を制御する
③は制御しないで状態の取得だけを行う。

##OPC
処理プロパティ数を示す。制御内容が一つの場合は
　　　　　　OPC　⇒　01 
で示す。

※　基本的に01 でよい
##EPC
ECHONET Liteプロパティの指定をする。
ECHONET Liteプロパティは全機器共通の　機器オブジェクトスーパークラス　と
機器固有の　機器オブジェクト
の二種類がある。
###スーパークラス
スーパークラスは、どの機器に対しても、プロパティ名とEPCの値同じである。
例）
エアコンの動作状態を確認したい場合　　EPC　⇒　８０
空気清浄機の動作状態を確認したい時も　EPC　⇒　８０

###機器固有のオブジェクト
エアコンの場合　　　　　　　　　空気清浄機　　　　　　　　照明レベル
節電動作設定　: 8F　　　　　　風量設定　　　:　A0　　　照明レベル: B0
運転モード　　: B0　　　　　　空気汚れ検出　:　C0　　　点等モード: B6
温度自動設定　: B1　　　　　　　　　　　　　　　　　　 光色設定　: B1
など

※詳しい説明は下のEDTと一緒に説明をする

##PDC
EDTのバイト数を示す。制御内容が一つの場合は
　　　　　　PDC　⇒　01 

※　基本的に01 でよい

##EDT
EPCで指定したプロパディ名によって、値を入れる
###スーパークラスの場合
EPC　⇒　80（動作状態）　の時は
EDT　⇒　30(ON)
　　 　⇒　31(OFF)
###機器固有のオブジェクト
####エアコン
エアコンの場合、機器固有のオブジェクトは以下のようになる
例えば、　エアコンの風向きスイングを　上下に　変化させたい場合
　　　EPC ⇒　A3　,　EDT ⇒　41
![Aircon.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/ff3e55df-3db8-2411-6ef6-a8abad7aa573.jpeg)
####一般照明
一般照明の機器固有オブジェクトは以下のようになる
例えば、照明の　光色を　白色　に変化させたい場合
　　　EPC ⇒　B1　　,　　EDT ⇒　42
![一般照明.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/0cac596e-f033-d850-8403-b47e66908d1d.jpeg)

※　アクセスルールとはESV　の説明にあった　Set　と　Get　の使用が出来るかを示している。
もしも、アクセスルールに　Get しかなかった場合、そのプロパティはGet の要求しか行えない。

#まとめ
基本的に以下の　？　の部分を変えればよい
何の機器を　どうしたいのかは　[APPENDIX ECHONET機器オブジェクト詳細規定](https://echonet.jp/spec_object_rh/)を参照
![電文構成　送信.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/33e9cddb-4116-1146-45dd-f5ec3ea9d345.jpeg)


#TID の使い方について
TIDは自由記述なので２バイトならば何を記述してもよい。
ECHONETの約束ごととしてGetや SetCで来たとき応答するときのパケットは送られて来たときの、TIDと同一の文字列を返すようになっている。
なんで、LAN内にECHONETLite電文が複数ある場合など、プログラム内で電文の処理をしやすくなる。

![TID.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/0fd2dced-95ce-0a3c-54ef-5952ec7a8fee.jpeg)


#参考文献
[ECHONET Lite規格書](https://echonet.jp/spec_v112_lite/)
[APPENDIX ECHONET機器オブジェクト詳細規定](https://echonet.jp/spec_object_rh/)