スマートメーターのECHONETパケットを覗いてみた

# はじめに
- 以前からスマートメーターからの情報取得（瞬時電力、積算電力量）を行っていますが、あらためて取得可能なプロパティを調べてみました。
 
---
# Wi-SUNゲートウェイの制作
- 情報取得を容易にするため、Wi-SUNベースのECHONETパケットをEthernetベースのECHONETパケットに変換するWi-SUNゲートウェイをラズパイで制作しました。
    - Wi-SUNゲートウェイを経由する利点として、スマートメーターからの情報取得を複数のコントローラから行うことが可能になります。
     ![IMG_0586.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166435/f3ac9527-c933-370e-ad89-64a166b17f4f.jpeg)

- [PicoGW]( https://toyhack.club/2019/03/picogw-quickstart/ )によるプロパティ取得
    - echonetのプロパティ取得を繰り返すツールを作成しようと思ったのですが、PicoGWというものがあることを知り、利用することにしました。
    - 別に用意したラズパイにPicoGWをインストールしました。（Node.js環境が必要です）
    - PicoGWは、プロパティ通知パケットを定期的に送信して情報取得を行います。
        - 生のデータは、パケットキャプチャ（Wireshark）で取得しました。
        - 取得した値はブラウザ経由でも視認することができます。
![PicoGW.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166435/5fe6996e-b3ba-e756-b61b-1ea7086d5b0b.png)

- 情報取得時の機器構成は、下図のようになります。（EthernetをWiresharkでキャプチャ。）
     ![alt](http://www.plantuml.com/plantuml/png/ZO_FQzH05CVl-Il6snQQIT5R4UbQ0owqtILjBOAmp2Qlcy7vCRoPQIhYmGru5wHUl0ah7dhGWrV_cA3M_wBJRPRjeO6zv0ryF-_pljcnZg7pKaJsDLU68PEaW5FcXJk2SzSNVAeaA4Voy06CeWSXvGh8O7TuS9pjaT8vOxUJ15b5fzoLVk8jOAu3hHpDjKoSDwp0HuaHJDrSYdb8uzD0nDOWTs2JiuTqYsu5ELUvy0Lu5Ci3IL18hQW9c_Vc1PpT26qYkFBdQt38h9a0ufknuMlWUObQGZSecGFaJ2H6Lu2tNFGiVJ7E-eUZfscMlHoF1ZqJPDDginrA5x3nDdft3rXnwrL05ZE-moxGtUVPS3_jJL1N5d2pdIjclt-KPeF-tdWqF4cpdfKCdGGNa3lFrVLsdr3wXDnM8zkagI-Q-dipcpUpN_ylVbxDlqLjHZ5mYs8j-BcfBvlwOrD_Q6PVh-Rl__wOlL8zo4kjm16jIEfAmF3UM2eUKzfj-FFxox_BJrs6nTgonUftrYjomkF3uuEL9FJeTdHKMJfsG1LUYci0)

---
# パケットの流れ
- PicoGWが動いている状態でWi-SUNゲートウェイがスマートメーターに接続されると、下記のような順序でパケットが流れていました。
    1. 自ノードインスタンスリストSのプロパティ通知（EPC=0xD5）
        - スマートメーターから自発的に通知される。
    2. PicoGW起点で、プロパティマップの取得＆応答（EPC=0x9D,0x9E,0x9E）
    3. PicoGW起点で、各Getプロパティの取得＆応答
        - なぜか、存在しないプロパティを取得しようとする上、一部のプロパティしか取得しない。
        - EPC=0x80,0x82,0x8D,0x97,0x98,0xD3,0xD7,0xE0,0xE2,0xE3,0xE4,0xE5,0xE7,0xE8,0xEA,0xEBの各プロパティの取得が行われない。
    4. 2と3を繰り返し

---

# 自ノードインスタンスリストS（EPC=0xD5）の通知
- スマートメーターとのWi-SUN接続が完了すると、自ノードインスタンスリストSが通知されます
    - EOJ（ECHONETオブジェクト）は、0x028801（低圧スマート電力量メータ）です。
    - スマートメーターからのプロパティ通知に対して、Wi-SUNゲートウェイはマルチキャスト送信（224.0.23.0）を行います。

```
ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x0ef001 (Node profile)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): INF (0x73)
        Property size (OPC): 1
        Property 1: Instance list notification
            ECHONET Property (EPC): 0xd5 (Instance list notification)
            Property Data Counter (PDC): 4
            ECHONET Property Value Data (EDT): 01 02 88 01
                Instance count: 1
                - Low voltage smart electric energy meter (ID: 1)
```

---
# プロパティマップの取得
- 状変アナウンスプロパティマップ（EPC=0x9D）、Setプロパティマップ（EPC=0x9E）、Getプロパティマップ（EPC=0x9F）の３種類のプロパティマップを取得しているようです。

```
ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0x9d
            Property Data Counter (PDC): 4
            ECHONET Property Value Data (EDT): 03 80 81 88

ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0x9e
            Property Data Counter (PDC): 4
            ECHONET Property Value Data (EDT): 03 81 e5 ed

ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0x9f
            Property Data Counter (PDC): 17
            ECHONET Property Value Data (EDT): 19 41 41 41 60 40 40 00 62 43 00 41 40 40 43 02 02

```

|EPC|状変|Set|Get|プロパティ|
|:-:|:-:|:-:|:-:|:-:|
|0x80|○|×|○|動作状態|
|0x81|○|○|○|設置場所|
|0x82|×|×|○|規格Version情報|
|0x83|×|×|×|識別番号|
|0x84|×|×|×|瞬時消費電力計測値|
|0x85|×|×|×|積算消費電力計測値|
|0x86|×|×|×|メーカー異常コード|
|0x87|×|×|×|電流制限設定|
|0x88|○|×|○|異常発生状態|
|0x89|×|×|×|異常内容|
|0x8A|×|×|○|メーカーコード|
|0x8B|×|×|×|事業場コード|
|0x8C|×|×|×|商品コード|
|0x8D|×|×|○|製造番号|
|0x8E|×|×|×|製造年月日|
|0x8F|×|×|×|節電動作設定|
|0x93|×|×|×|遠隔操作設定|
|0x97|×|×|○|現在時刻設定|
|0x98|×|×|○|現在年月日設定|
|0x99|×|×|×|電力制限設定|
|0x9A|×|×|×|積算運転時間|
|0x9B|×|×|×|SetMプロパティマップ|
|0x9C|×|×|×|GetMプロパティマップ|
|0x9D|×|×|○|状変アナウンスプロパティマップ|
|0x9E|×|×|○|Setプロパティマップ|
|0x9F|×|×|○|Getプロパティマップ|
|0xD3|×|×|○|係数|
|0xD7|×|×|○|積算電力量有効桁数|
|0xE0|×|×|○|積算電力量計測値（正方向計測値）|
|0xE1|×|×|○|積算電力量単位（正方向、逆方向計測値）|
|0xE2|×|×|○|積算電力量計測値履歴１（正方向計測値）|
|0xE3|×|×|○|積算電力量計測値（逆方向計測値）|
|0xE4|×|×|○|積算電力量計測値履歴１（逆方向計測値）|
|0xE5|×|○|○|積算履歴収集日１|
|0xE7|×|×|○|瞬時電力計測値|
|0xE8|×|×|○|瞬時電流計測値|
|0xEA|×|×|○|定時積算電力量計測値（正方向計測値）|
|0xEB|×|×|○|定時積算電力量計測値（逆方向計測値）|
|0xEC|×|×|○|積算電力量計測値履歴２（正方向、逆方向計測値）|
|0xED|×|○|○|積算履歴収集日２|

---
# Getプロパティ取得
- 設置場所（EPC=0x81）
    - 0x61（庭、外周）

```
ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0x81
            Property Data Counter (PDC): 1
            ECHONET Property Value Data (EDT): 61
```
- 異常発生状態（EPC=0x88）
    - 0x42（異常発生なし）

```
ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0x88
            Property Data Counter (PDC): 1
            ECHONET Property Value Data (EDT): 42
```
- メーカーコード（EPC=0x8a）
    - 0x000016（株式会社東芝）

```
ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0x8a
            Property Data Counter (PDC): 3
            ECHONET Property Value Data (EDT): 00 00 16
```
- 積算電力量計測値履歴２（EPC=0xEC）
    - 初期値が返されている。
        - １〜６バイトが積算履歴収集日時に、６バイトの０xFFが返されている。
        - ７バイト目は収集コマ数は１
        - ８〜１１バイトが積算電力量計測値（正方向）で、０xFFFFFFFEが返されている。
        - １２〜１５バイトが積算電力量計測値（負方向）で、０xFFFFFFFEが返されている。

```
ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0xec
            Property Data Counter (PDC): 15
            ECHONET Property Value Data (EDT): ff ff ff ff ff ff 01 ff ff ff fe ff ff ff fe
```
- 積算履歴収集日２（EPC=0xED）
    - 初期値が返されている。
        - １〜６バイトが積算履歴収集日時に、６バイトの０xFFが返されている。
        - ７バイト目は収集コマ数は１

```
ECHONET Lite
    ECHONET Lite Header (EHD)
    Transaction ID (TID): 0x0000
    ECHONET Lite Data (EDATA)
        Source ECHONET Lite object (SEOJ): 0x028801 (Low voltage smart electric energy meter)
        Destination ECHONET Lite object (DEOJ): 0x0ef001 (Node profile)
        ECHONET Lite service (ESV): Get_Res (0x72)
        Property size (OPC): 1
        Property 1
            ECHONET Property (EPC): 0xed
            Property Data Counter (PDC): 7
            ECHONET Property Value Data (EDT): ff ff ff ff ff ff 01
```