N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
<< ゆっくり実況で収益化するときライセンス購入は必要? | main |
ミルエネのUSBドングルでスマートメーターからリアルタイムに消費電力を取得する

Keywords: Wi-SUN, HEMS, スマートメーター, ECHONET Lite

 

■概要
USBドングル「UDG-1-WSNE」を使って、スマートメーター(電力量計)から瞬時電力を習得・蓄積し、現在の消費電力などをグラフと共に表示する表示するシステムを作りました。このモニター端末をリビングに常設し、電気の「見える化」を実現。

 

表示画面

monotor-sample

スマートメーターとの接続には、920MHz帯のWi-SUN規格の無線通信で行いますので、Wi-SUN通信のハードウェアが必要です。
このWi-SUN通信デバイスとしては ROHM の BP35A1 を使った例はありますが、今回はUSBドングル「UDG-1-WSNE」を使用しましたので、はんだ付けなどの電子工作は一切ありません。
なお、この記事では、このUSBドングルを使うときの注意点のみ詳しく記述します。


■システム構成
ハードウェア

hardware
スマートメーターは、電力会社が無料で設置してくれます。スマートメータにアクセスするためのIDやパスワードの取得に、Bルートサービスの利用申し込みが必要です。

 

USBドングル「UDG-1-WSNE」は、NTT東日本の「フレッツ・ミルエネ」サービスを申し込んだときに購入しました(¥5,400)。

サーバーは何でも良いのですが、我が家では既にサーバーとして使っていたWindowsのPCを使いました。USBドングルのデバイスドライバが入れられれば、Raspberry Pi等のLinux環境でも構築できそうです。

 

表示部分は、任意のWebブラウザでOK。今回は常時表示したかったので格安の中華タブレットを購入。なお、VPNを使えば外出先から手持ちのスマホでも見れます。

 

ソフトウェア

software

毎分瞬時電力と積算電力量をファイルに書き込む「データ取得プログラム」と、そのファイル情報をグラフ等に整形してHTTP出力する「表示プログラム」の2つから構成されます。

 

データ取得プログラム

- 機能は、毎分0秒に瞬時電力と積算電力量をスマートメーターから取得し、日時と共にファイルに追加書き込む。
- プログラム側からはUSBドングルはシリアルCOMポートとして見える。
- 通信プロトコルはスカイリー・ネットワークス社のSK STACK。
- 瞬時電力等の各種情報取得にはECHONET_Liteのフォーマット。
- 今回はC++で書いたコンソールアプリ(.exe)を作って常時起動。

 

表示プログラム

- 規定のURLにアクセスすると、グラフや各種消費電力を表示し、毎分30秒になると表示を自動更新。
- WebサーバーにはIISを用い、ファイルの情報を表示用に変換する部分はPHPで記述。

 

現在、我が家では次のような項目を表示しています。

- 現在の消費電力
- 待機電力
- 今日これまでの電力量
- 分単位の消費電力グラフ
- 毎時の電力量と累積のグラフ
- 過去30日の積算電力量

 

■UDG-1-WSNEのデバイスドライバ
このUSBドングルをWindows PC(Windows7 64bit)に挿しただけでは、不明のデバイスとなりました。
「UDG-1-WSNE」のドライバーは探しても見つからなかったので、デバイス名称「USB-UART LP」からCypressのチップと想定し、CypressのUSB-SerialドライバーのPIDを以下の方法で偽装してインストールしました。

 

1.    http://www.cypress.com/sdc から USB-Serial Driver Installer - Windowsをダウンロード(アカウントが必要)
2.    ダウンロードした CypressDriverInstaller_1.exe  を実行すると以下のフォルダに展開される。
        C:¥Program Files (x86)¥Cypress¥Cypress USB-Serial Driver¥DriverBinary¥
3.    この中のCDC_Driver¥bin¥win7¥x64フォルダを任意の場所にコピー(使用するOSに応じたものを選択)
4.    CypressUsbAndBus.inf をエディタで開く。
5.    [Cypress.NTamd64]の項目に次の行を追加
        %USB¥VID_0409&PID_04C7&MI_00.Desc% = CypressUsb.NTamd64, USB¥VID_0409&PID_04C7&MI_00
6.    [Strings]の項目に次の行を追加
        USB¥VID_0409&PID_04C7&MI_00.Desc="UDG-1-WSNE CypressUsb"
7.    同様に CypressSerial.inf をエディタで開く。
8.    [Cypress.NTamd64]の項目に次の行を追加
        %CypressSerial% = CypressSerial.NTamd64,Ports¥VID_0409&PID_04C7&MI_00
9.    [Strings]の項目に次の行を追加
        CypressSerial = "UDG-1-WSNE USB Serial Port"
10.    CypressUsbAndBus.inf(USBのドライバ)、CypressSerial.inf(仮想COMポート)の順序でインストール。

 

ドライバーのインストール後、115200bps/8bit/none-parity/1stop-bit/none-flow-control のパラメータでシリアル通信が出来るようになりました。

 

■通信シーケンス
以下に、瞬時電力と積算電力量を取得したときのシリアル通信の送受信内容を示します。
コマンド体系はBP35A1と同じSK STACK IPですが、バージョンが異なるため、BP35A1と比べて使えるコマンドが少なく、フォーマットも微妙に異なっているので注意が必要です。[BINARY:XX XX...]の部分は、ASCIIでなく8bitバイナリ列として送信します。送信はバイナリで受信は16進ASCIIって仕様はちょっと違和感ありますね。なお、送信時の改行コードはCRLFです。

積算電力量は、正しくは補正係数や単位も都度取得して求めるべきですが、今回は固定としました。補正係数と単位を別途取得したところ、私の場合は積算電力量計測値(EPC:E0)の単位は0.1KWhでした。

 

SKSETPWD C  XXXXXXXXXXX ←Bルートのパスワード
OK
SKSETRBID XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ←BルートのID
OK
SKSCAN 2 FFFFFFFF 6 0 ←フォーマット注意
OK
EVENT 20 FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0
EPANDESC
Channel:2F
Channel Page:09
Pan ID:XXXX
Addr:ZZZZZZZZZZZZZZZZ
LQI:7D
Side:0
PairID:XXXXXXXX
EVENT 22 FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0
SKSREG S2 2F  ←上のChannelを指定
OK
SKSREG S3 XXXX  ←上のPan IDを指定
OK
SKLL64 ZZZZZZZZZZZZZZZZ    ←上のAddrを指定
FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX ←スマートメーターのIPアドレス取得
SKJOIN FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX ←スマートメーターのIPアドレス設定
OK
EVENT 21 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0 00
〜中略〜
EVENT 25 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FF02:0000:0000:0000:0000:0000:0000:0001 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0012 108100000EF0010EF0017301D50401028801 ←node start時の基本シーケンス
SKSENDTO 1 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 1 0 000E [BINARY:10 81 00 01 05 FF 01 02 88 01 62 01 E7 00] ←E7:瞬時電力計測値 フォーマット注意
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0026 1081000102880105FF017302EA0B07R0031F0B000000000E7DEB0B07E0031F0B00000000001B
EVENT 21 FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0 00
OK
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0012 1081000102880105FF017201E70400000195	←最後の195が16進の瞬時電力計測値(W)
SKSENDTO 1 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 1 0 000E [BINARY:10 81 00 01 05 FF 01 02 88 01 62 01 E0 00] ←E0:積算電力量計測値 フォーマット注意
EVENT 21 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0 00
OK
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0012 1081000102880105FF017201E00400000EB9 ←最後のEB9が16進の積算電力量計測値(100Wh)

 

■リトライは必須
無線を使ったシステムなので、通信プロトコルの途中でタイムアウトやエラーが生じます。データ取得プログラムでは、エラー時のリトライの回数や待ち時間、エラー時にプロトコルのどこから再開するかなど、多くの工夫が必要です。これまで数ヶ月運用して、週一程度の頻度で10分程度取得できなくないことがありますが、いまのところ連続運用しています。


■参考リンク

■あとがき
消費電力の「リアルタイムな見える化」は想像以上に面白いです。グラフから冷蔵庫の消費電力の時間パタンなどもわかるようになります。今はスマートメーターとの接続だけですが、今後HEMS家電を購入したら、これらもすぐに応用できそう。高価で融通のきかないHEMSモニター機器を購入しなくても、自由に好みに合わせた情報を表示・利用できるのが自作のよいところですね。


 

| 電子工作 | 13:50 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND