Wi-Sun_EnergyMeter(ワイサンエナジーメーター)
Branch 0.7a
Wi-SUNモジュールBP35A1(ROHM)をRaspberry Piに接続してスマートメーターと無線通信を行い、消費電力を取得するPythonスクリプト。さらに、その取得データをリアルタイムで配信するWEBサーバです。
いままでどおり地域の電力会社を選ぶもよし、それ以外の小売電気事業者を選ぶもよし。「電力自由化」によって、誰もが電気の購入先を自由に選択できるようになりました。
この制度を実現するためにはスマートメーターが不可欠です。スマートメーターと電力会社間のデータ通信「Aルート」による自動検針が必要だからです。
さらに、スマートメーターと宅内間の通信機能「Bルート」も実現されました。一般に、Bルート通信には「HEMSコントローラ」と呼ばれる装置が用いられます。
**HEMS(ヘムス)**とは「Home Energy Management System」の略で、家庭のエネルギーを賢く管理するための仕組みです。
スマートメーター(Bルート),HEMSコントローラ,HEMS対応の機器(エアコン、照明、給湯器,太陽光発電、蓄電池や充電器など)は、ECHONET Lite(エコーネット ライト)と呼ばれる製造メーカーの垣根を越えた共通のコマンドにより相互通信を行います。
HEMSとECHONET Liteにより,「省・創・蓄エネルギー」を賢くコントロールするスマートハウスが現実のものになりました。
ECHONET Liteはあくまでも通信コマンドの規格であり,物理的なネットワークについての規定がありません。
HEMSコントローラと対応機器間は,有線LAN,Wi-Fi,Bluetoothなど,既存のネットワークで接続することができます。このことがHEMS導入の障壁を低くしています。
宅外のスマートメーターと宅内のHEMSコントローラ間のBルート通信は,宅内外を接続するため無線通信が最適です。とはいえ,宅内外の装置であるが故に距離に隔たりがあったり、壁が障害になることが考えられ,Wi-Fi接続では安定な通信が望めません。
そのため,新しい無線通信規格**Wi-SUN(ワイサン)**がBルート通信の1つに採用されました。
Wi-SUNは,920 MHz帯を使い,壁を通過しやすく建物の陰にも回りやすく,Wi-Fiよりも遠距離まで電波が届く性質があります。さらに省エネです。
ただし,低速(100 kbps)です。とはいえ,スマートメーターからデータを取得するには十分なスピードです。
本プロジェクトの目的は,Wi-SUNモジュールBP35A1(ROHM)をRaspberry Piに接続し、スマートメーターと無線通信を行い、電力値等を取得することです。
ECHONET Liteにおいて、一般家庭のスマートメーターは低圧スマート電力量メータークラスという機器オブジェクトとして規定されており、ECHONET Liteの電文フォーマットに則り、瞬時電力・電流、30分毎の電力量計量値等を取得できます。本プロジェクトでは瞬時電力を取得し、そのログを取るプログラムをPythonで構築しました。
さらに、取得したデータを配信するためのWEBサーバを、Node.js + Express + socket.ioで構築しました。
- Raspberry Pi
- Raspbian (Stretch with Desktop, 2017-09-07で動作確認)
- Node.js (v6.11.4で動作確認)
- Wi-SUNモジュール BP35A1 (ROHM)
Raspberry PiとBP35A1との接続は次のファイルを参照してください。 なお、BP35A1とブレッドボードは、ピッチ変換アダプターボードBP35A7Aを使い,CN1及びCN2で接続します。
- wiring.jpg: 実体配線図
- circuit.jpg: 回路図
- GPIO18: BP35A1のリセットに接続します。
- GPIO4: LEDを接続します(省略可)。
- GPIO14, GPIO15: BP35A1とのシリアル通信に使用します。
これらのピンはデフォルトでシステムログインで使用されているため,設定を変更する必要があります。
ラズパイの種類やRaspbianのバージョンによって設定方法が異なります。別途,情報収集をお願いします。
git及びnode.jsがインストールされている必要があります。 本プロジェクトをインストールしたい適当なディレクトリで、次の手順でインストールします。
$ git clone https://github.com/yawatajunk/Wi-SUN_EnergyMeter.git
$ cd Wi-SUN_EnergyMeter
$ git checkout 0.7a
$ cd sem_app
$ npm install
- circuit.png: 回路図
- echonet_lite.py: ECHONET Liteクラス
- LICENCE.md: MITライセンス
- README.md: このファイル
- sem_appフォルダ: Node.jsによるWEBサーバ関連
- sem_com.py: スマート電力量メーター通信プログラム
- user_conf.py: スマート電力量メーターのID、パスワード等の設定ファイル
- wiring.png: 実体配線図
- y3module.py: BP35A1通信クラス
スマートメーターから消費電力を受信するプログラムです。
user_conf.pyを編集し、スマートメーターのID及びパスワードを設定します。
SEM_INTERVALには瞬時電力を取得する時間間隔[秒]を設定します。0を設定すれば最大頻度でデータを取得することができます。
SEM_DURATIONは、アクティブスキャンのとき、チャンネルごとのスキャン時間を設定するものです。数値が1増すごとにスキャン時間が2倍になります。闇雲に大きい値を設定するとスキャン時間が大幅に長くなりますのでご注意ください。アクティブスキャンでスマートメーターが見つかりずらいときは、+1してお試しください。なお、アクティブスキャンに数十秒かかってとしてもそれが正常です。じっくり気長に待ちましょう。
SEM_ROUTEB_ID = '00000000000000000000000000000000'
SEM_PASSWORD = 'XXXXXXXXXXXX'
SEM_INTERVAL = 3
SEM_DURATION = 6
次のコマンドでプログラムを起動します。
スマメとの距離が遠かったり電波の状態が良くないと、アクティブスキャンをリトライするため時間がかかることがあります。
暫く待つと、瞬時電力が表示されます。
プログラムを停止するときは、CTRL
とc
を同時に押します。
$ ./sem_com.py
Log files setup...
Wi-SUN reset...
(1/10) Active scan with a duration of 6...
.
.
.
.
(略)
.
.
.
.
[ 18] 960 W
[ 19] 928 W
[ 20] 912 W
[ 21] 912 W
[ 22] 904 W
[ 23] 912 W
[ 24] 920 W
.
.
.
.
Node.js + ExpressでWEBサーバを構築しました。
また、画面デザインの大枠作成にはJetstrapを、グラフの表示にはHighcharts, Highstockを使っています。
プロジェクトをインストールした、起点となるディレクトリに移動します。
$ cd /path/to/Wi-SUN_EnergyMeter
####「./user_conf.py」 先述のとおり、スマートメータのIDとパスワードを設定します。
####「./sem_app/bin/www」 WEBサーバのポート番号を設定します。
//
// ポート番号設定
//
var PORT_NO = '3610';
WEBサーバを起動します。
$ ./sem_app/bin/www
スマートメーター通信プログラムを起動します。
$ ./sem_com.py
WEBサーバにブラウザでhttp://サーバURL:ポート番号/
にアクセスします。例えば次のとおりです。
http://raspi0.local:3610/
0.1a: 初版
0.2a: 軽微な変更,README.mdを刷新
0.3a: スマートメーター通信プログラム&配信WEBサーバ追加
0.5a: 瞬時電力の履歴を記録。WEB表示機能を追加
0.6a: node.jsとモジュールをアップデート
sem_com.pyの安定性向上
UNIXドメインソケット及びログファイル周りを改善
0.7a: 配信WEBサーバに瞬時電力を返すだけのページ(/inst_power)を追加
Raspberry Pi
Wi-SUNモジュール BP35A1 (ROHM)
ECHONET Lite
Node.js
Express
socket.io
Jetstrap
Highcharts
Highstock