Rabbit Note

技術的な事柄をメモしていきます.

中部電力エリアでスマートメータと通信する方法 (後編)

前回からの続きです.実際にスマートメータに無線で接続します.

使用機材

スマートメータとは Wi-SUN という無線通信規格で通信を行う必要があります.ここを見ると対応モジュールはいくつかあるようですが,個人が入手できるものはロームの BP35Cx Series 位しかありません.

というわけで,以下を入手します.

BP35A1

アンテナ内蔵の Wi-SUM モジュールです.ホストとは UART で通信を行います.


BP35A7A

インターフェース基板です.
上記のモジュールには,B to B のコネクタしか載っていないので,これを使ってブレッドボードや基板に実装しやすい形に変換します.


BP35A7-ACCESSORIES

BP35A1 と BP35A7A を固定するためのアクセサリです.
B to B のコネクタを傷めないためにもあった方がよいです.


ちなみに,現時点だとみんな BP35A1 を使っているので,ネット検索するといろんな接続事例が見つけられます.

参考資料

ECHONET Lite 通信ミドルウェア仕様 [キャッシュ]
スマートメータとの通信に使用する ECHONET Lite プロトコルの通信仕様が規定されています.
「第3章 電文構成(フレームフォーマット)」に目を通すと,全体像がつかめます.プロトコルとしては,機器が持っているオブジェクトのプロパティを読み書きする仕組みになっています.
ECHONET 機器オブジェクト詳細規定 [キャッシュ]
機器の種類毎に,対応するオブジェクトが対応しているプロパティが規定されています.
スマートメータについては「低圧スマート電力量メータ」として規定されています.
BP35A1 コマンドリファレンスマニュアル [キャッシュ]
BP35A1 との間の通信仕様が規定されています.
メータとの間の通信を確立した後,SKSENDTO および ERXUDP を使って ECHONET Lite プロトコルに従った通信を行います.

回路

BP35A1 と UART で接続するだけで OK.こんな感じ.

プログラム

作ったプログラムはこちら.UART で BP35A1 と接続した状態で実行すると現在の消費電力を出力します.

よくあるプログラムとの最大の違いは,スマートメータとの間の通信チャンネルを毎回探しにいかないこと.ネットワークを探しにいくと,スマートメータとの通信を確立するまでに10秒程度かかってしまいますが,このスクリプトの場合,実行してから 3 秒ほどで消費電力を取得できます.

実行結果はこんな感じ.4秒ほどで取得できます.

よりベターなコード

前記のスクリプト書いている最中,なんかもやもや下ものを感じていたのですが,下記のサイトで紹介されているコードをみて腑に落ちました.

スマートメータから瞬間消費電力を読むRubyのコード
https://lowreal.net/2016/08/09/1

私のコードの場合,シーケンシャルに特定のイベントが発生することを仮定してしまっていますが,こちらのコードでは非同期的に発生するイベントを別スレッドでハンドリングし,イベントの内容に応じて事前に登録されたハンドラを呼び出すことで ECHONET Lite の通信を実現しています.

プロトコルの性質を踏まえると,イベントベースにするのが自然で理にかなっています.

常時起動させるようなデーモンのようなコードにする場合,こちらのコードのような形にするのが良さそうです.

Pocket

, ,

One thought on “中部電力エリアでスマートメータと通信する方法 (後編)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です