
はじめに



一人暮らしするようになってから
こまめに電気を消したり、エアコン我慢したり
節電してるつもりだけど
普段どのぐらい電力を使用しているのだろう????
と思ったので今回は電力スマートメータと
通信してデータを取得してみたいと思います。
今回の記事は私の電子工作記録と言う事で自分のやってみた事を記録して公開しますが、間違えている内容などがある可能性があるのでその際は記事を更新させていただきます。
買ってきたもの



こちらの写真が主に使用したものです。
4月末に注文してそろえたので下に記載の購入価格は4月末のものです。
すべて合わせて1万2000円ぐらいでした。
Raspberry Pi Zero WH



秋月電子で2,200円でした
コロナウイルス外出自粛期間中でしたので通販で購入しました。
Raspberry Pi ZERO用ユニバーサル基板



秋月電子で100円でした
ピンソケットメス40P
秋月電子で80円でした、意外と高いんですねこれ。
I2C接続 SSD1306



aliexpressで中国から輸入しました
送料を入れて226円でした
Wi-SUN モジュール BP35A1



ROHM Wi-SUN通信モジュール BP35A1
こちらが一番重要な部品で一番高かったです。
chip1stop.comで7,490円で購入しました!
アダプターボード BP35A7A



BP35A1をつなぎやすくするための部品と言ったところでしょうか、
chip1stop.comで1,190円でした。
BP35A7-accessories
BP35A1とBP35A7Aの固定用のスペーサーとねじです。
chip1stop.comで190円でした。
その他
抵抗やタクトスイッチ、SDカード、USBなど
色々なものが必要になってきますが家に転がっているものを使用しました。
Bルート申込
スマートメータと通信するには無料で申込が可能な
電力情報発信サービス(Bルート)の申込が必要になるみたいなので
今回申込をしました!



パスワードがメールで送られてきてIDが郵送で送られてきます
IDの方は到着まで時間がかかったので早めに申込をした方がいいと思います
申込の際に検針票や電力自由化のマイページに記載の
供給地点特定番号が必要でした!
制作
ピンヘッダの取り付け



BP35A7Aにピンヘッダを取り付けました
18ピンはんだで取り付けていますが
実際使うのは四つの(VCC・GND・RX・TX)ピンだけです。
BP35A1とBP35A7Aの合体



BP35A7-accessoriesのスペーサーとねじを使用して取り付けました。
ブレッドボードを使用した動作確認



Raspberry Pi ZERO用ユニバーサル基板に
取り付ける前に動作確認を兼ねてブレッドボード上にジャンパー線を
用いて作成しました。
Raspberry Pi ZEROはSSH接続が可能な状態にして
IPアドレスを固定してTeraTeamでポチポチやっていきます!



このようにRaspberry Pi ZERO と BP35A7Aをシリアル通信
できるように配線します!



ブレッドボード上に回路が出来上がりました
ls /dev/tty*
と入力して出てきた中に
/dev/ttyAMA0 と /dev/ttyS0
があったのでPythonを使用して
import serial print("通信開始") s = serial.Serial('/dev/ttyAMA0', 115200) s.write(str.encode("SKVER\r\n")) print(s.readline().decode(encoding='utf-8'), end="") print(s.readline().decode(encoding='utf-8'), end="") print(s.readline().decode(encoding='utf-8'), end="")
どちらかにBP35A1のバージョンを聞くコマンドを送ってみたところ
pi@raspberrypi:~/hems $ sudo python3 version.py 通信開始 SKVER EVER 1.2.10 OK
しっかりとバージョンが返ってきました!
https://rabbit-note.com/wp-content/uploads/2016/12/50f67559796399098e50cba8fdbe6d0a.pdf
ROHM社のBP35A1 コマンドリファレンスマニュアルを見ると
送信するコマンドがわかります。
瞬間電力量を引っこ抜いた
インターネットで情報を調べていくとこのサイトにたどり着きました
@rukihenaさんのQiitaに記載されていた
スマートメーターの情報を最安ハードウェアで引っこ抜くです。
https://qiita.com/rukihena/items/82266ed3a43e4b652adb
@rukihenaさんのQiita
こちらのサンプルプログラムをお借りしたところ
瞬時電力計測値:264[W]
約三秒おきに瞬間電力計測値が送られてきました。
これには感動しました。
見やすくした
SSD1306の追加
SSD1306を接続して見やすくしたいと思いました



そこで先ほどのBP35A1とは別にI2C接続でSSD1306を付けました



おれめちゃくちゃSSD1306好きなんだ



このような感じになりました。
タクトスイッチはいろいろな機能選択で使用するためにつけました。
Python2→Python3
私がSSD1306表示用に作成していたプログラムがPython3用だったので
先ほどのサイトのサンプルプログラムを
Python2.7→Python3.Xの形にしてあげる必要がありましたので
一行一行見ながら変換していきました。
2to3と言う自動変換してくれる便利な物もあるみたいですが
プログラムを理解したかったので手作業で行いました。
(1からコードを作成していないのでコードを乗っけるのは控えます)
表示プログラムの追加
SSD1306に文字表示させるプログラムを追加しました。
取得した瞬間電力使用量に加え
私の契約している電気会社のLoop電気が26.4円(税込) / kWhの料金設定だったので
その瞬間電力量を1時間・1日・1カ月使用した場合の電気料金を表示しました
計算方法は瞬間電力量[W]をnow_wとして
一時間 = round((now_w * 26.4) / 1000, 1)
一日 = round((now_w * 26.4) * 24 / 1000, 1)
一か月 = ((now_w * 26.4) * 24 / 1000) * 31
で計算と出力をしました(この計算方法であっているのか不明)



このように約3秒毎に電力使用量と先ほど計算した値を表示させることによって
今どれだけ使用しているか簡単にわかるようになりました。
基板に移植
色々な機能を追加してもっと便利にもっとわかりやすく
家の電力使用量や電気料金を知りたいとおもい
ブレッドボードのまま使用するのはなんか嫌でしたので
基板に移し替えることにしました。



基盤が小さく配置がとても大変でした。
これが作っているときのタイムラプスです!



そして完成したのがこちらです!半田面は汚いです・・・
途中GNDがSSD1306につながってなくて動かなかったりなど
ありましたが、ブレッドボードと同じようにしっかり動作してくれたので
とても嬉しかったです!!
機能の追加
積算電力量を取得する
https://echonet.jp/wp/wp-content/uploads/pdf/General/Standard/Release/Release_H_jp/Appendix_H.pdf
こちらのECHONET機器オブジェクト詳細規定内の
3.3.25 低圧スマート電力量メータクラス規定を見ると
スマートメーターと通信して瞬間電力量のほかに
動作状況・積算電力使用量・積算電力使用量履歴・電力使用量・電流量
などのデータを取得することが可能みたいです。
サンプルプログラムではスマートメーターと接続完了後
瞬時電力計測値 0xE7を取得していましたが
私は試しに定時積算電力使用量0xEAの要求をしてみました。
そして返ってきた値がこちら。
07E4050813000000001E6F
積算電力量単位0xE1の要求には
01



????????????
となったのですがECHONET 機器オブジェクト詳細規定を
しっかり理解すると謎が解けました。









ふむふむ



とりあえず紙に詳細規定見ながら変換してみたところ
今日の日付(5/8)と積算電力値(779.1kWh)が入っていました。



外のスマートメーターを見てみると同じ値が書いてありました!!
これはテンションマックスです!!
この定時積算電力使用量は00分と30分に更新されるみたいです。
Pythonのコードに分割や結合を繰り返して以下の表示が
できる様にしました!
最新積算電力量は2020/06/23 23:30 944.1kWh
電源を入れれば使用できるようにした
すごい適当なやり方ですが、何か例外が発生したときに
Pythonプログラムが止まらないように無限ループでの中にtry文を追加し
その中にプログラムの記述をコピーしました。
これで何か例外が発生してもプログラムにリセットがかかります。
そしてスマートメーターに要求を送ってもデータが返ってこないことがあるので
3回連続でデータが来なかった場合わざと例外を発生し再接続するようにしました。
この時、スマートメーターのスキャンはせずに前回使用した値を使って
接続することによって、接続までの時間を短縮しました!
systemctl start hems.service
で起動や停止、電源投入時自動起動ができる様にしました。
たまにフリーズしているときがあるのでまだまだデバックが必要みたいです。
MQTTで値を各機器から読めるようにした
Raspberry Pi の中にMQTTサーバーを構築し
Pythonのプログラムの中に瞬間電力使用量のデータが来た時に
サーバーにpublishするようにしました。
そしてWindws用にHEMSシステムをマネして
C#でデータを表示するアプリケーションを作成しました。



電気代は積算電力使用量をもとにパソコン上で計算しています。
グラフは動きが変なのでいったん削除しました。



それっぽいでしょ?
パ〇ソニックとか出してそうでしょ??
MySQLデータベースを構築した
Raspberry Pi ZERO はスペックが高いわけではないので
どこまで頑張ってくれるかわかりませんがMQTTサーバーに加え
MySQLサーバーも構築しました。
そしてデータが来た時に積算電力使用量だけInsertするようにしました。
もちろん同じデータは入らないようにしています。
SELECT DISTINCT CAST(datetime
AS DATE) AS日付
FROM allenergy; +------------+ | 日付 | +------------+ | 2020-05-13 | ~~~~~~~~ | 2020-06-24 | +------------+ 43 rows in set (0.057 sec)
43日間欠かさず30分毎の積算電力使用量を記録してくれていますね!
SELECT * FROM allenergy; +---------------------+--------+ | datetime | energy | +---------------------+--------+ | 2020-05-13 17:00:00 | 796.3 | | 2020-05-13 18:00:00 | 796.5 | ~~~~~~~~~~~~~~~~~ | 2020-06-23 00:00:00 | 940.3 | | 2020-06-23 00:30:00 | 940.3 | | 2020-06-23 01:00:00 | 940.4 | ~~~~~~~~~~~~~~~~~ | 2020-06-23 22:30:00 | 943.9 | | 2020-06-23 23:30:00 | 944.1 | +---------------------+--------+ 1836 rows in set (0.053 sec)
こんな感じでデータベースに記録し続けています。
データベースはSQL文をマスターするだけでこのデータから
日付のみを取り出す・一つ前の値を今の値から引いて表に出力などを
素早くできるのでデータがいっぱいあるととても面白いです!
今後何がしたいか
Webブラウザからデータの取得
MySQLデータベースの値をWebブラウザ上からみれるようにしたいです、
例えば日付を選択するとその日の電気料金と使用量グラフが表示されたりです。
PHPで作成できるとは思うのですがあまり時間がなく1か月ほど経ってしまいました。
データ分析
エアコンを使うとき・使わないとき
洗濯機を使うとき・使わないとき
冷蔵庫の開け閉めをなるべく早くするか・気にしないか
などいろいろな条件を変えて生活し蓄積したデータベース内のデータから
分析を行い一人暮らしの電気代節約術などを検証出来たらと考えています。



ま、大学のレポートに追われてて
今それどころじゃないんだけど(´;ω;`)
またブログで分析結果を紹介するね!



最後までブログ見ていただきありがとうございます!
ブログランキングポチポチしていただけると
うれしいです!
コメント