root@kmconner.net:~/www/# cat << TECH
###################################################################################
##                                             TOP  PROFILE  POSTS  TAGS  ABOUT  ##
##                                                                               ##
##                         Welcome to kmconner’s Website                         ##
##                               浅く広く 時に深く                               ##
##                                                                               ##
###################################################################################
TECH
root@kmconner.net:~/www/# cat << TECH
###########################################
##     TOP  PROFILE  POSTS  TAGS  ABOUT  ##
##                                       ##
##     Welcome to kmconner’s Website     ##
##           浅く広く 時に深く           ##
##                                       ##
###########################################
TECH

家の電気使用量を可視化する

この記事は CAMPHOR- Advent Calendar の 16 日目の記事です。

皆さんこんにちは @km_conner です!

今回は、 Grafana を使って家の電力使用量を可視化しようと思います。

システムの全体像

システムの全体像はこのような感じです。 矢印が電力使用量の情報の流れを表しています。

左から順に

となっています。

スマートメーターからの情報取得

最近の電気メーターはスマートメーターと呼ばれる機器に徐々に置き換わってきています。 スマートメーターの大きな特徴として、電力使用量を自動的に外部に送信する機能が挙げられます。 電力使用量のデータは電力会社が利用者の料金を計算するのに使う以外にも利用者が自分で使用量に関する情報を取得することもできます。

このような、利用者が自分の機器を使って電力の使用状況を取得できるようにするサービスは B ルートサービスと呼ばれ、各電力会社によって提供されています。 自分は関西電力管内に住んでいるので、 https://www.kepco.co.jp/souhaiden/untiring/smartmeter/routeb/routeb_how.html にある申し込み用紙を使って申し込みをする必要があります。 申し込みが完了すると、スマートメーターとの接続に使用する ID やパスワードの書かれた紙が郵送されてきます。

スマートメーターと接続するには…

スマートメーターとの通信は Wi-SUN と呼ばれる無線規格と、 ECHONET Lite と呼ばれるメッセージフォーマットを使用して行います。

Wi-SUN を使用するには専用の無線モジュールが必要です。今回は、 ROHM の BP35A1 を使用しました。それに加えて、 BP35A1 を Raspberry PI の GPIO と接続するための基板である、 BP35A7A も併せて使用しています。データシートは https://micro.rohm.com/jp/download_support/wi-sun/index.php にあるので、それを見れば配線方法が書いてあります。

配線後の写真はこんな感じです。

正しく配線出来たら、無線モジュールとの間でシリアル通信が可能となります。使用した Raspberry PI 3 model B では /dev/ttyS0 のデバイスによってシリアル通信が可能でした。

スマートメーターとの通信内容

ここまでで、スマートメーターとの通信が可能となりました。 次は実際にメッセージをやり取りする方法を説明していきます。

まず必要なのは、接続先の IP を取得し、認証を行うことです。 これらのフローは ROHM が公式に出しているコマンドリファレンスに書かれているのでそこを参照してください。

認証が完了した後は、 UDP を使用して通信を行います。 UDP の中身に関しては、 ECHONET Lite と呼ばれる規格によって決められています。 仕様書は https://echonet.jp/spec_g/ からダウンロードできます。

通信内容としては、スマートメーターに対してデータをリクエストすると、しばらくしてレスポンスとしてデータが送られてくるといった流れです。詳しくは先述の ECHONET Lite の仕様書に書かれています。(主に第2部、 Appendix に書かれています。)

情報の可視化方法

情報を可視化するために、 Prometheus 、 Grafana を使用します。 Prometheus とはサービスやリソースの監視ツールで、電力使用量の時系列的なデータを収集するのに使用します。 また、 Grafana はデータの可視化ツールで Prometheus によって収集されたデータをグラフで表示するのに使用します。

Prometheus に対してデータを渡すためのプログラムは Exporter と呼ばれ、 Python などの言語で簡単に記述することのできるライブラリがあります。 Exporter の作成の仕方や、 Prometheus、Grafana の環境構築・設定に関してはネット上に様々なドキュメント、ブログ記事などがあるので、そちらを参照してください。

完成品

実際に作成したプログラムは https://github.com/KMConner/SmartMeterReceiver にて公開しています。

また、実際にデータを表示するとこのような感じになりました。

まとめ

スマートメーターと接続して電力の使用状況を取得し、 Grafana によって可視化する方法を紹介しました。 今回は瞬時消費電力を取得するといった単純なことしかしていませんが、これをきっかけに色々なハックに役立てていただけたらと思います。