ミルエネのUSBドングルを使ってDatadogで電力見える化

# はじめに
諸般の事情があって残念ながら余ってしまった、**5,000円で買えるWi-SUNのUSBドングル（UDG-1-WSNE）** を使って、Datadogで消費電力の見える化をしたお話です。*BP35C2等の通常手に入るUSBドングルはミエルネのそれの4倍近い価格*ですが、コマンドリファレンス等しっかりしているので、不意に余ってしまった方以外はそちらを使った方が良いかと思います。（BP35C2とは概ねコマンドは一緒ですが、細部が異なるため、本手順は無加工では動きません）
ちなみに、サーバは頑張りたくないのでRaspberry Pi3@raspbianを使っています。

#### 出来上がりイメージ
![電力モニター _ Datadog (1).png](https://qiita-image-store.s3.amazonaws.com/0/15830/55da3c5b-fad1-e481-5e1a-3fa408116954.png)


# 手順
## 事前準備
Raspberry Pi3にraspbianを入れて動くようにしておきます。また、グラフ描画にDatadogを使いますので、アカウント開設＆エージェントインストールを済ませておきます。Raspberry PiはARMですので、Datadogエージェントの導入はちょっとだけ面倒です。

Raspberry PiへのDatadogエージェント導入
https://help.datadoghq.com/hc/en-us/articles/208163513-Deploying-the-Agent-on-RaspberryPI

その他、スマートメーターに接続するためにはBルートサービスを申し込んでID（郵送）とパスワード（メール）の2つを用意しておく必要があります。

## 本編
### Raspberry Pi3に挿して動作確認
認識しているであろうドングルのデバイス名を取得します

```bash:USBデバイス情報の取得
root@raspberrypi:/var/log# lsusb -v -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
##############
## USBを挿す
##############
root@raspberrypi:/var/log# lsusb -v -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
        |__ Port 2: Dev 4, If 0, Class=Communications, Driver=cdc_acm, 12M
        |__ Port 2: Dev 4, If 1, Class=CDC Data, Driver=cdc_acm, 12M
root@raspberrypi:/var/log# grep cdc messages
messages:Jun 24 11:41:52 raspberrypi kernel: [    3.640333] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device
messages:Jun 24 11:41:52 raspberrypi kernel: [    3.641379] usbcore: registered new interface driver cdc_acm
messages:Jun 24 11:41:52 raspberrypi kernel: [    3.641386] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
```

こちらの例では`/dev/ttyACM0`になりました。
あとはscreenコマンドで試してみます。screenは終わった後は`Ctrl-a`して`k`で終了です。

```bash:USBドングルの動作確認（シリアル通信）
root@raspberrypi:/var/log# screen /dev/ttyACM0 115200
SKVER  #打鍵しても表示されないですが、入力してEnter。EVER～OKがレスポンスです
EVER 1.0
OK
```

### スクリプトの取得
こちらに公開してありますので、`git clone`してください
https://github.com/unagi/miruene-datadog

```bash:スクリプトの導入
root@raspberrypi:~# cd /opt
root@raspberrypi:/opt# git clone https://github.com/unagi/miruene-datadog
root@raspberrypi:/opt# cd miruene-datadog
root@raspberrypi:/opt/miruene-datadog# pip install -r requirements.txt
root@raspberrypi:/opt/miruene-datadog# cp systemd/smartmeterd.service /etc/systemd/system/smartmeterd.service
root@raspberrypi:/opt/miruene-datadog# systemctl daemon-reload
```

また、READMEにもありますように、config.iniにデバイス名とBルートサービスの認証情報を記入します。

```ini:config.ini
[General]
com_port = /dev/ttyACM0
interval = 10

[RouteB]
rbid = xxxxxxxxxxxxxxxxxxxxxxxx
rbpwd = xxxxxxxxxxxx
```

そして起動してみます。

```bash:起動
root@raspberrypi:/opt/miruene-datadog# systemctl start smartmeterd.service
● smartmeterd.service - Smartmeterd
   Loaded: loaded (/etc/systemd/system/smartmeterd.service; disabled)
   Active: active (running) since 土 2017-07-01 18:43:38 JST; 16min ago
 Main PID: 11264 (python)
   CGroup: /system.slice/smartmeterd.service
           └─11264 python /opt/miruene-datadog/smartmeter.py

 7月 01 18:55:53 raspberrypi smartmeter.py[11264]: INFO:__main__:瞬時電力計測値:1304[W]
 7月 01 18:56:04 raspberrypi smartmeter.py[11264]: INFO:__main__:瞬時電力計測値:1284[W]
 7月 01 18:56:16 raspberrypi smartmeter.py[11264]: INFO:__main__:瞬時電力計測値:1156[W]
```

### Datadogでダッシュボードの作成
無事、スクリプトが動作すると、Raspberry Piで稼働していたDatadog Agent経由でメトリクスが送信されますので、グラフが作れるようになります。お好みの形でグラフを作って終了です！

# あとがき
Wi-SUNには送信休止時間等が規定されていて、Wi-Fiと同じように使う事はできません。
http://sgforum.impress.co.jp/article/1558

こちらのサンプルを使って実際にデータ取得を継続的にされる場合は、そのあたりをよく確認の上、よろしくお願いします！
詳細についてはARIB STD-T108とかでググると出てくるんじゃないかと思います。