スマートメーターからリアルタイムに消費電力を取得する
少し前からスマートメーターの導入が始まっています。東電は2020年度末までに一般家庭などへの導入を完了させるそう。
http://www.tepco.co.jp/smartmeter/index-j.html
東電の場合、電力メーター情報発信サービス(Bルートサービス)を申し込むと、優先的にスマートメーターに交換してくれます。特に費用はかかりません。スマートメーターが設置されるとでんき家計簿から30分毎の電力使用状況グラフ(0.1kWh単位)を見ることができるようになりますが、加えて上記サービスに申し込むと、スマートメーターと家庭内のHEMS機器との間(これをBルートと言います)で通信を行うことが可能になり、リアルタイムで詳細な電力使用状況(瞬時電力値(W)、瞬時電流値(A)など)が取得できるようになります。
利用にあたってHEMS機器やサービスの導入に費用がかかるのがネックですが、HEMSに使われている無線通信方式(Wi-SUN)やプロトコル(ECHONET Lite)はオープンな規格であり対応する通信モジュールも一般販売されているため、自作の機器でもBルートで通信を行って電力使用状況の取得ができるはずです。
というわけで瞬時電力値の取得に挑戦してみました。
作ったのは、7セグにリアルタイムに瞬時電力(W)が表示されるというもの。シリアルでPCからも値を読み取れます。
まずはBルートサービスに申し込み
自宅の場合、スマートメーターへの交換は申し込んで1週間ほど(週末を指定したので)でやってくれました。要立会い、作業は15分くらい、そのうち5分くらい停電しました。交換後、翌々週くらいにBルート接続用のIDとパスワードが送られてきました。トータル3週間ほど。
使用した機器
その間にWi-SUN関係の通信機器をこちらなどで購入しました。→ https://www.zaikostore.com/zaikostore/itstoreWireless?cid=3#c2
- Wi-SUN通信モジュール: ROHM BP35A1 [Amazon][RS購入ページ]
- BP35A1用ゲタ基盤 (XBee同等のピン配置に変換): DT101EACV101
(DT101EACV101の方が簡単に使えますが、購入できない場合は BP35A7A でもOKと思います。)
BP35A1は電圧が3.3Vで、5Vには対応していませんので、USBシリアルやArduinoも3.3Vに合わせる必要があります(または適切に分圧やレベル変換が必要です)。
シリアル対応7セグは手持ちの古い版なので、真似する場合は適当に別のものに置き換えた方がいいでしょう。(その場合、下記のスケッチの dig というキーワードが出てくる部分の書き換えも必要でしょう。)
なおPCで使う場合は、WSR35A1-00 というUSBシリアルとBP35A1を一体化したUSBデバイスも売られているので、これが一番簡単でしょう。
Wi-SUN通信モジュールBP35A1のデータシート等は以下にあります。
http://micro.rohm.com/jp/download_support/wi-sun/
追記
Arduinoではなく、RaspberryPiなどのLinuxボードを使う場合はこちらの記事もみてください。
スマートメーターの瞬時電力や履歴をWebブラウザで見る - Okiraku Programming
事前準備
BP35A1はDT101EACV101を噛ませ、さらに XBeeの載る「C基板」上に乗せました。
C基盤にはArduino Pro MiniのUSBシリアル接続と同配置になるようピンヘッダに配線し、PCと簡単につなげるようになっています。
BP35A1とArduinoは直接シリアル通信で利用できます。ただ、Arduino Pro Miniは一系統しかハードウェアシリアル(UART)を持っていないので、ここにBP35A1を繋いでしまうとPCとシリアル通信ができなくなり、デバッグ等が困難になってしまいます。そこで、BP35A1はArduinoのソフトウェアシリアルを使って接続することにします。*1
ソフトウェアシリアルの欠点として、半二重なので送信と受信が同時にできない、通信速度が高速だと不安定になりやすいという問題があります。BP35A1のデフォルト設定は115200bpsなのですが、3.3V/8MHzのArduinoでは文字が化けたりして正常に動作しませんでした。そこで,事前に通信速度の設定を9600bpsにし、さらに文字間にウェイト400μsを入れるように変更しておきます。
これは、BP35A1をPCにUSBシリアルの3.3V, GND, TX<->RXの4本で接続して、ターミナルソフトを115200bps設定で起動します。
Arduino IDEのシリアルモニターでも改行コードをCRにすれば通信できますので、これが手っ取り早いでしょう。
WUART 43
というコマンドを実行すればシリアル設定はOKです。一度設定すると内蔵のフラッシュに保存され、電源を再投入すると以後は9600bpsでの通信になります。
PCに直接繋いで利用する場合はこのシリアル設定は不要です。また、設定変更後にデフォルトの設定に戻したい時は WUART 00 を実行すればOKです。
配線
こんな感じでブレッドボード上に配線しました。
スケッチ
ArduinoのスケッチはGist上に置いてあります。
https://gist.github.com/NeoCat/72390f357d3ee2ce339d
Bルート用のID・パスワードをスケッチの先頭のID, PASSWORDに設定し、Arduinoに書き込みます。
//#define DEBUG
と書かれた部分のコメントアウトを外すと、詳細な通信状況がシリアルに出力されるようになります。
概ね以下の処理を行っています。
- setup
- loop
- 3秒ごとにスマートメーターから瞬時電力(EPC 0xe7)を取得,シリアルおよび7セグに表示
ちなみに自宅のスマートメーターは最初なぜか異常状態になっており、セッションの確立は出来るものの、EPC 0x88 = 0x41 (異常あり)を返し、かつ瞬時電力や累積電力なども取得しようとすると"非対応"のエラーを返してきていました。電力会社のスマートメーター推進室ということろに問い合わせてEPC等の状態を伝えたところ、遠隔でスマートメーターの通信機能のログ確認やリブートを行ってくれ、その結果無事に瞬時電力等が取れるようになりました。言ってみるものですね。
参考資料
- ECHONET Lite規格: https://echonet.jp/spec_v112_lite/ 第2部 第3章に通信のフォーマットの記載があります。
- ECHONET規格(一般公開): https://echonet.jp/spec_object_rg_revised/ APPENDIX ECHONET機器オブジェクト詳細規定 Revision G Revised 3.3.25に低圧スマートメーター(クラス 0x02 0x88)の対応EPCについて説明があります。
- Raspberry PiとWi-SUNモジュールでスマートメーターから情報取得 - メモ書きブログ