bgets ソースコード rev.3 (bgets.rb) (右クリック -> 名前を付けて保存)
BSDライセンスで。
2016/5/7 rev.3 一部nil判定がgetWしかなかったのを修正
WSR35A1-00 の受信データの表示形式をテキストモードにする。
TeraTermを使った手順は下記の通り。
1. WSR35A1-00 のシリアルポートに接続する。
2. 通信速度を 115200kbps にする。メニュー [設定] - [シリアルポート] で設定する。
3. 「SKVER」+ Enter を入力して、バージョンが表示されれば接続できている。
4. 「WOPT 01」+ Enter を入力して、受信データの表示形式を16進テキスト形式に変更する。(デフォルトはバイナリをそのまま表示する形式)
5. 「ROPT」+ Enter を入力して、01(Cでの設定内容)が設定されていることを確認する。
手元の環境だと、RubyのserialportはTeraTermで一度 WSR35A1-00 に接続しておかないと動作しなかった。
(USB接続のたびに発生。シリアルポートをopenしても処理がserialportから返ってこない)
原因はよくわからない。
以下コマンドラインでbgetsを起動する。
EVENT 25 がWSR35A1-00から返ってくれば接続OK。
その後、スマートメーターの情報が取得できれば次のような表示になり、続いて電力計測がはじまる。
日付ごとにCSVファイルに計測結果を保存する。
スマートメーターが何者かはググってほしい。
導入にはいろんな背景があると思うけど(電力自由化、検針自動化とか)、Bルートといわれる電力の消費者が直接電力計にアクセスできるのが特徴だ。
(Aルート、Cルートもある。詳細はGoogle先生へ...)
Bルートは家電を制御する機器(ホームゲートウェイ)につなぐのを想定していると思うけど、全然盛り上がってない。
お金を払ってまで家電制御をネットワーク化したい人はいないということだろう...
後述するECHONET liteという家電制御の規格があり、スマートメーターと誰でも通信できるのを使わないとは、なんてもったいない。
(ECHONETは家電・屋内設備を仮想的なクラスとみなし制御するようなプロトコル。温水便座クラスとかシャッタークラスとかポットクラスとか・・・不思議な感じのする規格)
それを利用して、スマートメーターから電力をリアルタイムに取得してみることにした。
Bルートでアクセスするためには、スマートメーターへ接続するための認証情報が必要だ。
(PANAという認証の仕組み))
認証情報は電力会社(関東だと東電の送電会社である東京電力パワーグリッド)へ申請して情報をもらう。
# 東電の場合はユーザIDが郵送で、パスワードがメールに平文で送られてきたのにはびっくりした。
# まぁIDとパスワードがそろわないと不正使用はできないけどさ・・・
スマートメーターへはwi-sunという無線の通信規格で接続する。
Ethernetと同じトランスポート層の規格だ。
wi-sunはPCでは一般的な規格でないため、接続には専用の通信インタフェースが必要となる。
wi-sunで接続した上で、IPプロトコル(TCP/UDP)でスマートメーターと通信する。
スマートメーターとの通信にはPANAという仕組みの認証を行う。IP層の認証らしい。
通信インタフェースは調べてみたけど製品の種類が少なく、個人で手軽に扱えそうなのはロームの
BP35A1
という製品だけだった。
PCからシリアルで接続してwi-sunの制御コマンドを送信する。結果もシリアルで受信する。
ただ、BP35A1とPCとの配線を自作する必要があるようで、それをより簡単にしたのが Jorjin Technologies Inc. の
WSR35A1-00
だ。
こいつはUSBに接続すると、PCからはシリアルポートとして見えて、BP35A1 の制御コマンドが簡単に送受信できるもので、今回はこれを使ってみることにした。
BP35A1 の仕様はロームのサイトで公開されていて、スタートアップガイドまであるのでとても助かった。
日本語ドキュメントということもとてもありがたい。
BP35A1の制御コマンドでスマートメーターと接続を確立した後は、TCPまたはUDPでECHONET liteの電文(バイナリ)を送受信することで
スマートメータと通信できる。
電文は
1つの電文に複数の宛先や命令を含めたりもできるが、簡単に作りたいこともあり今回は1電文1命令にすることにした。
WSR35A1-0(BP35A1)の使い方は下記とした。
ECHONET liteの仕様はECHONETのサイトからダウンロードできる。
これもありがたいことに日本語ドキュメントだ。
せっかくオープンな規格なのにもったないなと思う。
いろいろ便利そうなことができると思うのだけど。
昔ながらの(スマートメーターではない)電力系のクルクル回る円盤が
ちょうど標準出力に出ているような感じだった。
(スマートメーターはクルクルがないのでそっけない)
ブレーカーを落としたら瞬時電力が 0W になるので、ちゃんと動いてるとは思う。
こんなのがあれば、東電のスマートプランなんてうまく使えそうなんだけどね。