2016-01-10 Arduinoでスマートメーターからリアルタイムに消費電力を取得する
スマートメーターからリアルタイムに消費電力を取得する
少し前からスマートメーターの導入が始まっています。東電は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
(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です。
配線
こんな感じでブレッドボード上に配線しました。
- 7seg RX -- Arduino 8pin
- 7seg GND -- Arduino 9pin
- BP35A1 RX -- Arduino A5pin
- BP35A1 TX -- Arduino A4pin
スケッチ
https://gist.github.com/NeoCat/72390f357d3ee2ce339d
Bルート用のID・パスワードをスケッチの先頭のID, PASSWORDに設定し、Arduinoに書き込みます。
//#define DEBUG
と書かれた部分のコメントアウトを外すと、詳細な通信状況がシリアルに出力されるようになります。
概ね以下の処理を行っています。
- setup
- loop
ちなみに自宅のスマートメーターは最初なぜか異常状態になっており、セッションの確立は出来るものの、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モジュールでスマートメーターから情報取得 - メモ書きブログ
スケッチ
購入: 8人 クリック: 159回
- 1067 https://www.google.co.jp/
- 441 https://www.google.co.jp
- 123 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjQmJXH16DKAhWIFaYKHY4bB7sQFggcMAA&url=http://d.hatena.ne.jp/NeoCat/20100308/1268027155&usg=AFQjCNGCpvN0qhWeEozvfVJRksttR-m8FQ
- 76 http://search.yahoo.co.jp/search?p=スマートメーター+Raspberry&aq=-1&ei=UTF-8&pstart=1&fr=top_ga1_sa&b=11
- 64 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCMQFjAF&url=http://d.hatena.ne.jp/NeoCat/20160110/1452407542&ei=InKTVtz6BqHxmAXHXA&usg=AFQjCNHpEXXd2-Tp6RmqSyKOe0mp0yth3w
- 49 https://www.google.com/
- 44 https://t.co/OXp6z5KMOq
- 40 http://www.facebook.com/Gertruda
- 40 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0ahUKEwjT7feZ36DKAhUCnJQKHRFHBkcQFggpMAI&url=http://d.hatena.ne.jp/NeoCat/20080429/1209458664&usg=AFQjCNFU-EWf0qkcdqcsaacvKfxTijhD1A
- 37 http://eikatou.net/blog/2012/07/1796/