自宅の使用電力を見える化してみた

月々の電力使用量は請求書を見ればわかるけれど、「どの機器が消費しているのか」「ピーク使用量はどのくらいか」など見てみたかったのと、電力会社や料金プラン選びの参考になればってことで。

# 使ったもの

* ハードウェア
 * [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b/)
 * [Wi-SUN USBドングル](https://www.amazon.co.jp/gp/product/B01FLAP3FK/)

* ソフトウェア
 * [Grafana](http://grafana.org)
 * [InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/)
 * [Go](https://golang.org)

* 参考にした記事
 * [スマートメーターの情報を最安ハードウェアで引っこ抜く](http://qiita.com/rukihena/items/82266ed3a43e4b652adb)

# 手順

下準備は[参考記事](http://qiita.com/rukihena/items/82266ed3a43e4b652adb)のハードウェア準備と同じです。

## ソフトウェアのインストール

### Go
[golang-1.7-src_1.7.1-2_armhf.deb](http://ftp.jp.debian.org/debian/pool/main/g/golang-1.7/golang-1.7-src_1.7.1-2_armhf.deb)
[golang-1.7-go_1.7.1-2_armhf.deb](http://ftp.jp.debian.org/debian/pool/main/g/golang-1.7/golang-1.7-go_1.7.1-2_armhf.deb)

インストールしたら path を通しておきます。

```
$ export PATH=${PATH}:/usr/lib/go-1.7/bin
$ export GOROOT=/usr/lib/go-1.7
```

ビルドツールもインストールしておきます。

```
$ export GOPATH=~/.go
$ go get github.com/constabulary/gb/...
$ go get github.com/constabulary/gb/cmd/gb-vendor
```

##### InfluxDB
[influxdb_1.0.0-1_armhf.deb](https://repos.influxdata.com/debian/pool/stable/i/influxdb/influxdb_1.0.0-1_armhf.deb)

##### Grafana
[grafana_3.1.1-1470786449_armhf.deb](https://github.com/fg2it/grafana-on-raspberry/blob/master/jessie/v3.1.1/grafana_3.1.1-1470786449_armhf.deb)


## ビルド
ソースは [github](https://github.com/hadanas/smartmeter) で公開しています。

```
$ git clone https://github.com/hadanas/smartmeter.git

$ cd smartmeter

$ gb vendor restore

$ pushd vendor/src/golang.org/x/sys/unix
$ chmod +x *.sh *.pl
$ GOOS=linux GOARCH=arm ./mkall.sh
$ popd

$ gb build
```

インストール

```
$ sudo install bin/smartmeter /usr/local/bin/smartmeter
$ sudo install smartmeter.conf /etc/smartmeter.conf
```

## 設定

##### InfluxDB
udpセクションを以下のように編集します。

```/etc/influxdb/influxdb.conf
[[udp]]
  enabled = true
  bind-address = "127.0.0.1:8089"
  database = "wattmeter"
```

#### systemd

```/lib/systemd/system/smartmeter.service
[Unit]
Description=Smartmeter
After=influxdb.service

[Service]
ExecStart=/usr/local/bin/smartmeter -c /etc/smartmeter.conf
WorkingDirectory=/var/lib/smartmeter
Restart=always
Type=simple
User=smartmeter
Group=smartmeter

[Install]
WantedBy=multi-user.target
```

設定ファイルを書いたらsystemdに反映させます。

```
$ systemctl daemon-reload
```

#### smartmeter

BルートのIDとパスワードを設定します。

```/etc/smartmeter.conf
[routeb]
id = "00000000000000000000000000000000"
password = "************"
```

## 起動
設定が終わったら、起動します。

```
# systemctl start influxdb
# systemctl start smartmeter
# systemctl start grafana-server
```

Grafanaにグラフを書かせるところの説明は割愛 :astonished: 
Watt, WattHourにそれぞれ電力、電力量の値が入っています。

```
$ influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.0.0
InfluxDB shell version: 1.0.0
> use wattmeter
Using database wattmeter
> show measurements
name: measurements
------------------
name
Watt
WattHour

> select * from Watt limit 1
name: Watt
----------
time			watt
1472351032206787174	292

> select * from WattHour limit 1
name: WattHour
--------------
time			watthour
1472351400000000000	3074.8
```


ブラウザで表示させたところ
![screenshot.jpg](https://qiita-image-store.s3.amazonaws.com/0/141835/ca7e7ad8-3e03-28d6-ddb2-bbc126c87359.jpeg)

Raspberry PI だとこんな感じ。
![raspberrypi3.jpg](https://qiita-image-store.s3.amazonaws.com/0/141835/3c776686-2ac6-bfaf-2199-8674b8318d61.jpeg)