皆さんは、うっかりブレーカー落とした経験ありませんか?
「ドライヤー使う前に今の電気使用量が分かれば良いのに!」とか思ったことないですか?
最近は、その希望が簡単に叶うって知ってますか!?
と言う事で、今回は、「スマートメーターから電力状況を取得して表示する」ことが出来る機械を作ってみたお話です。
もうブレーカー落とさずに済むよん♪
前説:あなたのお宅は「スマートメーター」ですか!?
ここ数年で、全国の家庭用電力メーターがスマートメーターにどんどん置き変わっています。
2019年末時点だと、もう殆どのご家庭がスマートメーターになっているのではないでしょうか?
スマートメーターって何?って人は、コチラ↓をどうぞ。
要は、昔の「薄い円盤みたいなのがグルグル回ってたアナログ的な電力メーター」ではなく、「通信機能の付いた円盤の無いデジタル式の電力メーター」の事です。(雑ッ)
なんで、スマートメーターへの置き換えが行われているかと言うと、国策で電力需給の安定化を目標にした法改正が行われたからの様ですね。
要は、電気使用量の検針を自動化して省力化しよう! 電気使用状況を細かく計測することで、電力需給を安定化させよう! という事みたい。
(各ご家庭を毎月回る検針作業が不要になることだけ見ても、かなりの効率化になってそう)
じゃあ、美味しいのは電力会社だけなの?というと、そんなことはありません。
スマートメーターになる前は、個人でリアルタイムの電気使用状況を取得する手段は、配電盤の中の電線にクランプ型電流センサを仕込む等のかなりの力業を使うしかありませんでした。
クランプ型電流センサを使った電力モニタってこんな奴↓ですね。我が家でも使っておりました。(笑)
記事中では免許なしでも出来ると書いてありますが、素人が配電盤内の電線に触るのは大変危険なので、それなりのキチ・・もとい勇者しか手を出していないと思います。
でも、スマートメーターなら、個人でも、無線通信だけでリアルタイムの電気使用状況を取得出来るんですよ!
先の様な危険な力業はもう不要なのです! なんてスマートなんでしょう!(笑)
もし、家の電力メーターがまだスマートメーター化されてないお宅でも諦める必要はありません。
経済産業省の資料によると、日本全体で2024年末までに導入完了する計画とのこと。(更に、希望すれば先んじて交換してくれるという話も。。)
スマートメーターへの置き換えには契約者の費用負担が無い(要はタダ!)のも有り難いですよね♪
ビバ! スマートメーター!!
ちなみに、スマートメーターと通信する為には、920MHz帯特定小電力無線の「Wi-SUN」規格に対応した機器が必要となります。(特殊な事情で無線が使えない環境向けに「PLC」方式のもある様ですが、今回は対象外)
最近の新築の装備奢ってる戸建てやマンションなら、最初からHEMS電力モニタ機器として上記規格に対応したメーカー品が装備されてるかも知れませんが(羨ましい!!)、そんな方は今回の対象ではありません!
今回の対象は、既に家を建てちゃってる方や、そんなブルジョア装備付けなかった!と言う方です!!(賃貸の方も)
ハックすると何が出来る様になるのか?
本ハックの概要イメージはこんな感じです。
Wi-SUN規格に対応した通信モジュール「BP35A1」(勿論、個人でも購入可能)を使って、お手軽WiFiマイコンの「M5StickC」でスマートメーターをハックします♪
家の好きな場所で今の電気使用状況が見れます!
洗面所でドライヤー使う前に、今の電気使用状況が見れたら、うっかりブレーカー落とさずに済みます。
台所で電子レンジ使う前に・・・以下同文。(笑)
一般的なHEMS機器だとモニターが一個しかない商品も多いので、ハック出来た人ならではアドバンテージになるかも?
積算電力量データーを取得出来る!
30分毎の積算電力量データーを取得できますので、記録する方法を組み込めば過去の電気使用状況を確認することが出来るでしょう。
電気代の変化と照らし合わせて、電力自由化でお得なプランの検討にも使えるでしょう。
ハックの為に必要なブツ
以下に、ハック実現に向けて必要な機器類を示します。
親機用「M5StickC」(必須)
既に持ってる人も多いかも知れませんね。
無い人は、この機会にゲットしましょう。
「Wi-SUN HATキット」(必須)
当ブログ主がBOOTHで販売している商品です。
次項の「BP35A1」を組み合わせることで「Wi-SUN HAT」となります。(「BP35A1」は同梱されません)
購入時に「BOOST↑」して下さると、この詳細ガイドを書いた甲斐があるので、大変嬉しいです!
よろしくお願いしま~す!m(__)m
Wi-SUN通信モジュール「BP35A1」(必須)
Wi-SUN通信規格に対応したモジュールとして、ROHM製の「BP35A1」が必要です。
モニター子機用「M5StickC」または「M5Stack」(オプション)
モニター子機には、親機と同じ「M5StickC」か、より液晶の大きい「M5Stack」が使えます。
「M5Stack」にされる場合は、本用途なら基本構成の「Basic」で十分だと思います。
WiFi環境(オプション)
当然ありますよね!?
無い人は・・・親機でスマートメーターからのリアルタイムの電気使用状況をモニターすることだけは出来ます。(モニター子機への通信はWiFiを使うので諦めて下さい・・・)
注意事項
当然ですが、全ての環境で動作を保証するものではありません。
スマートメーターの通信方式は、環境条件等によって設置が困難な場合などはWi-SUN以外にPLCになっているケースもある様です。
各自の判断で自己責任としてご利用願います。
モニター子機と親機は全て同じWiFiチャネルに繋がっている必要があります。(「SSID」ではなく「チャネル」)
WiFi中継機等を使っている場合はチャネルが違っている可能性がありますので、ご注意下さい。(チャネルが違っていた場合は、子機への通信は出来ません)
これは、サンプルプログラムで親機からの同報通信に「ESP NOW」という機能を採用した為の制約事項です。
WiFiチャネル外への送信を可能にするには、サンプルプログラムを「ESP NOW」を使わない方法にご自身でカスタムして下さい。
ハックの前に必要な事務手続き
まず、お住まいの地域の電力会社へ「電力メーター情報発信サービス(Bルートサービス)」の申請をする必要があります。
Bルートというのは、経済産業省の資料によると「①スマートメーター」と「④需要家」間の通信ルートのことで、どうやら他に「②電力会社等」と「①スマートメーター」を結ぶAルートや、Cルートがある様ですね。(さも”知ってて当然”の様にBルートと出てくるのでビックリですよね。。)
(経済産業省の資料2ページより引用)
ちなみに、この申請先の電力会社は「小売電気事業者」ではなく、送配電を担っている地域の電力会社になります。(電力自由化で「小売電気事業者」契約を変えられている場合はご注意下さい!)
尚、申請にあたり、
「供給(受電)地点特定番号」(電気代の明細に「地点番号」として記載がある)
「本人確認書類」(当然、赤の他人は申請出来ません)
が必要になりますので、事前に用意しましょう。
各電力会社の「電力メーター情報発信サービス(Bルートサービス)」の申請リンク
※一般的な家庭用は低圧電力メーターになります(高圧と間違えない様にご注意を!)
ちなみに、IDとパスワードを入手するまでには、申請から1週間以上(場合によっては3週間くらい)は掛かる様ですね。
Bルートサービスの「認証ID」と「パスワード」を無事ゲットしたら、次のステージに進みましょう。
作業の大まかな流れ
公開しているサンプルプログラムを使う場合は、以下のステップで進めます。
- 「Wi-SUN HAT」を組み立てる
- 「M5StickC」のファームを更新する
- 「VS Code」をインストールし「M5StickC」を接続する
- 「Ambient」に登録する
- 必要なファイルを親機の「M5StickC」へ転送する
- 必要なファイルをモニター子機の「M5StickC」(M5Stack)へ転送する
- 親機とモニター子機を設置する
- グラフを確認する
作業はコレだけです♪(実質一時間と掛からないでしょう)
では、早速始めましょう!
「Wi-SUN HAT」を組み立てる
まずは届いたブツを確認して下さい。半完成品の「Wi-SUN HAT」とスペーサー2個が入っています。
「W-SUN HAT」のケースが組み立った状態になっていると思いますので、2本のネジを外して裏蓋を外してください。(裏蓋は写真の様に外すと爪が折れないで外れます)
「BP35A1」の組み込み
別途御用頂いてる「BP35A1」を「W-SUN HAT」基板に合体させます。
「BP35A1」と「W-SUN HAT」基板の白いBoard to Board(BtoB)コネクタのオスメスを合わせて、真直ぐに挿し込みます。(斜め挿しすると壊れますのでご注意を!)
こんな感じ↓で綺麗に水平に嵌ればOKです。
続いて、スペーサーを滑り込ませますが、位置合わせの為に先程ケースを留めていたネジを仮に差し込んでおきます。(組み立て時にスペーサーが移動しない様にする為のケア)
(写真は金属スペーサーですが、同梱のスペーサーはショート防止でプラ版になってます)
スペーサーを2か所共取り付けたら、ケースに仮置きします。 そーっとね♪
ネジが浮いてる筈なので、スペーサーを動かさない様に、そーっとネジを外しましょう。
続いて、裏蓋を取り付けます。写真↓の様に斜めに挿してからパタンと倒す様にすると付けやすいです。
スペーサーがズレない様に裏蓋を嵌めれたら、ネジを2本締めます。
横に隙間が残りますが、「BP35A1」の実装ズレを吸収する為の意図的なスリットですので、この状態で正常です。
「M5StickC」に挿し込んで「Wi-SUN HAT」完成です♪
「Wi-SUN HAT」と「M5StickC」の固定がぐらぐらする場合は、「ひっつき虫」等を使って、固定させて下さい。
以降の写真では、親機の「M5StikC」で「Wi-SUN HAT」が付いてない状態のモノもありますが、付けたままでもOKです。
「M5StickC」のファームを更新する
M5Stack公式のクイックスタートを参考にして、「WiFiセッティング」まで作業を進めて下さい。
最初のM5Burnerのダウンロードリンクが404 Not Foundになってますが、メゲちゃダメです。
右上の「SOFTWARE」の「Downloads」で真のダウンロードページに遷移できます。
(いい加減リンク直そうぜ >M5Stackさん)
M5StickCにUIFlowを入れる件
公式のクイックスタート↓がやや情報古くて、凄く初歩的な所で躓いてしまったので、私の様な超初心者向けに公式との差分を残しておきますhttps://docs.m5stack.com/#/ja/quick_start/m5stickc/m5stickc_quick_start_with_uiflow …
(詳しい方にはお目汚し失礼)
尚、「M5StickC」へ書込むファイルは出来るだけ最新が望ましいです。(1.3.4β以降は必須)
ということで、クイックスタートを見つつ、WiFi接続までとっとと済ませちゃって下さい。
「VS Code」をインストールし「M5StickC」を接続する
「M5StickC」へMicroPythonプログラムを転送する方法は色々ありますが、今回は、最近流行りの統合開発環境「Visual Studio Code(VS Code)」を使ってみます。
無料で使えますので、「VS Code」初めてという方もぜひ試してみてください。
(細かいところは追々学べば良いと思います。つか、私も分からないので誰か教えて・・・)
「VS Code」をインストールする
こちらからお使いのPC環境に合った「VS Code」をダウンロードしインストールしましょう。
(私はWindowsユーザーなので「User Installer 64bit」を選択しました)
M5Stack公式のVS Code機能拡張をインストールする
「VS Code」が起動したら、下記の赤矢印のExtensionsボタンを押します。(機能拡張ボタン)
現れた機能拡張エリアの「Marketplaceで機能拡張を検索する」の場所に「m5stack」を入力し、リスト上のM5Stack社公式の機能拡張「vscode-m5stack-mpy」を選択してインストールします。
「M5StickC」をPCに接続し、COMポート番号を確認する
「M5StickC」をPCに繋ぐ前に「USB接続モード」へ遷移させる必要があります。
まず、「M5StickC」の「Power Button」を6秒長押しして電源OFF。続いて「Button A」を押しながら「Power Button」を押して起動します。
すると、モード選択の画面になるので、「Button B」を2度押して「Setup」を選択し、「Button A」を押して決定。
次に、Cloud Mode(UiFlow) / USB Mode / WiFi Setting を選ぶ画面になるので、「Button B」を1度押して「USB Mode」を選択し、「Button A」を押して決定。
これでUSB接続モードになりました。
実は、最初、モード選択が分からなくて困りました・・・この辺の情報少なすぎるよ!!
と言う事で、補足情報として躓いた一連呟きを載せておきます。(^_^;)
昨日、M5StickCをVS Codeで弄るのに戸惑ったので、「M5StickCをUSB接続モードへの遷移させる方法」メモを残しておく
まず、電源ボタン6秒長押しでM5StickCの電源オフ
続いて、M5ボタンを押しつつ、電源ボタンを押す(やや長め)、電源ボタンを離してからM5ボタンを離す
ご参考まで。
続いて、USBケーブルでPCへ繋ぎます。
「M5StickC」を繋いだ際にPCが認識したCOMポート番号をデバイスマネージャー等で控えます。
(公式クイックスタートのファーム更新の際と同じです)
私の場合は「COM9」で認識してました。
「VS Code」で「M5StickC」を繋ぐ
「VS Code」画面左下の「Add M5Stack」をクリック。
上の方に現れたCOMポートリストで、先程控えたCOMポート番号をチェックし「OK」をクリック。
次に「VS Code」の左上のエクスプローラーボタンでエクスプローラーを開きます。
エクスプローラーウィンドウ内の「M5STACK DEVICE」を選択すると、先程チェックしたCOMポート番号が現れます。
このCOMポートを選択すると、「M5StickC」の中のファイルリストが見える様になっている筈です。
はい。見えましたね。
これで「VS Code」で「M5StickC」にプログラムを流し込む準備が整いました!
リストが現れない場合は下記をご確認ください。
PC上で認識されてる「M5StickC」のCOMポート番号が合ってるか?
「M5StickC」が「USB接続モード」になっているか?
それでもダメなら一度USBケーブルを抜き差しし、「M5StickC」を電源OFF(電源ボタン6秒長押し)して再起動させるなどを試してみてください。
ここまで進んだところで、一旦「VS Code」はそのまま置きます。(終了させる必要はありません)
「Ambient」に登録する
「Ambient」とはIoTデーターの可視化サービスです。
デバイスで取得したデーターをネットワーク越しにAmbientサーバーに投げるだけで、後はAmbientサーバー上で簡単にグラフにしてくれます。
無料枠だと制限がありますが、気圧グラフくらいは問題無く作れるので、今回はこのサービスを活用させて頂きます。
まずは、ユーザー登録(無料)を行いましょう。
ログイン後、「Myチャネル」の左下の「チャネルを作る」を選択し、チャネルを2個作ります。(「瞬間電力計測値」用と「積算電力量」用)
新たに生まれたチャネル名の「チャネルID」と「ライトキー」をそれぞれ控えます。(※「リードキー」は今回は使いません)
必要なファイルを親機「M5StickC」へ転送する
必要なファイルを用意する
サンプルプログラムはGitHubに置いてありますので、GitHubのリンクより、必要なファイルを取得しましょう。
「Clone or download」のDownload ZIPにて、ZIPファイルがダウンロードされますので、任意の場所で解凍しておきましょう。
他に必要なファイルは、GitHubのREADMEに記載してありますので、そちらをご参照下さい。
続いて、「ntitime.py」ライブラリの日本時間補正用の修正と、設定ファイル「wisun_set_m.txt」へご自身の各種ID等を入力して頂く必要があります。
※修正内容については、先のGitHubのREADMEにて説明しておりますので、そちらをご参照下さい。
ライブラリと設定ファイルを「M5StickC」へ転送する
続いて、「Ambientライブラリ「ambient.py」、NTP時刻補正ライブラリ「ntptime.py」、Wi-SUNのUDPデータ解析ライブラリ「wisun_udp.py」、設定ファイル「wisun_set_m.txt」をアップロード(転送)します。
「VS Code」上で、「M5StickC」のCOMポート番号のファイルリスト右上の「upload」ボタンをクリックし、先程ダウンロードしたファイル群から各ファイルを選択して「M5StickC」へ転送します。
転送が終了すると、「M5StickC」のファイルリストにそれぞれのファイルが追加されている筈です。
テストプログラム本体「test_WiSUN_Ambient.py」を「M5StickC」へ転送する
テストプログラムのアップロード先は、先程のライブラリ類とは違って「apps」配下である必要があります。(後述するプログラム指定モードで選択出来るのが「apps」配下のファイルだけの為)
といっても何も難しいことではなく、「VS Code」の「M5STACK DEVICE」リスト上で「apps」の横のuploadボタンを押すだけです。
この画面キャプチャ上では色々と余計なファイルが置かれてますが、気にしちゃダメです(笑)
「M5StickC」をプログラム指定モードにして、プログラムを起動する
前述した方法と同じ様に、「M5StickC」を一旦電源OFFし、モード選択操作で「APP.List」を選択し、先程転送したテストプログラムを選択します。
以降は、電源OFFしても次回起動時にこのプログラムが自動起動する様になります。
起動すると、「M5StickC」の画面上に「*」マークが増えていきます。
初回起動はスマートメーターのチャンネルのスキャンなどの処理が走るので、数分掛かるかも知れません。(正しく起動すれば、次回以降はチャンネルスキャン処理はスキップされます)
ある程度「*」マークが増えたところで、画面クリアされて時計表示になり、更に10秒程待つと今の電力値が表示されます。(テストプログラムのデフォルト設定だと、電力値は5秒毎更新です)
グラフを確認する
今回のテストプログラムでは、「瞬間電力計測値」を30秒毎に、「積算電力量」を30分毎に「Ambient」サーバーへ投げています。
今回のテストプログラムでは、「瞬間電力計測値」は丸一日分以上、「積算電力量」は2ヶ月分以上が見える状態になっている筈です。(超えた分は自動的に消えます)
数分待ったら、「Ambient」にログインし、Myチャネルより対象のチャネルをクリックし、グラフを確認します。
もし出てこない様なら下記をご確認下さい。
プログラム上の「チャネルID」や「ライトキー」が間違えてないか?
「M5StickC」がちゃんとWiFiでインターネット接続出来ているか?
尚、グラフの表示状態はカスタマイズが可能です。
私のカスタマイズ例を以下に示します。
「瞬間電力計測値」のAmbient設定
この設定だとおおよそ1日分の「瞬間電力計測値」の変化がこんな感じで表示されます。
「積算電力量」のAmbient設定
この設定だと1日単位の「積算電力量」の変化が棒グラフ表示される様になります。 こんな感じね。
必要なファイルをモニター子機「M5StickC」(M5Stack)へ転送する
続いて、子機を使う場合です。
事前に子機のファーム更新も親機同様に行いましょう。(「M5Stack」の場合はM5Burnerの操作が変わりますのでご注意を!)
必要なファイルを用意して子機へ転送する
サンプルプログラムは親機と同様にGitHubに置いてありますので、GitHubのリンクより、必要なファイルを取得しましょう。
他に必要なファイルも、同様にGitHubのREADMEに記載してありますので、そちらをご参照下さい。
子機では、「ntitime.py」ライブラリの日本時間補正用の修正は必須ですが、設定ファイル「wisun_set_r.txt」は必須ではありません。
※修正内容については、親機同様にGitHubのREADMEにて説明しておりますので、そちらをご参照下さい。
ライブラリと設定ファイルを子機へ転送する
続いて、NTP時刻補正ライブラリ「ntptime.py」と(カスタム値を使いたい場合は)設定ファイル「wisun_set_r.txt」をアップロード(転送)します。
テストプログラムを子機へ転送する
子機のテストプログラムは、「M5StickC」用と「M5Stack」用の2種類存在します。
詳しくは、先のGitHubのREADMEにて説明しておりますので、そちらをご参照下さい。
尚、テストプログラムのアップロード先も、親機同様に、先程のライブラリ類とは違って「apps」配下である必要があります。(後述するプログラム指定モードで選択出来るのが「apps」配下のファイルだけの為)
子機をプログラム指定モードにして、プログラムを起動する
前述した方法と同じ様に、「M5StickC」を一旦電源OFFし、モード選択操作で「APP.List」を選択し、先程転送したテストプログラムを選択します。(「M5Stack」の場合はボタンが違います)
以降は、電源OFFしても次回起動時にこのプログラムが自動起動する様になります。
親機とモニター子機を設置する
お好きな設置方法で設置して下さい。
拙作の壁掛けホルダー等もご活用頂けると嬉しいです!
「M5StickC」用壁掛けホルダー

「M5Stack」用壁掛けホルダー

基本的な使い方
サンプルプログラムには下記の機能を盛り込んであります。
画面消灯/点灯切り替え
Aボタンに割り当ててあります。(「M5StickC」だとM5ロゴの有るボタンで、「M5Stack」は3ボタンの左のボタンです)
瞬間電力値が使用警告閾値(「ブレーカー契約値」×「警告係数」×100)を超えている場合は、消灯モードでも勝手にLCDが点灯します。この場合は閾値を下回れば自動消灯します。
「ブレーカー契約値」は、設定ファイルの「AMPERE_LIMIT」の値です。
「警告係数」は、設定ファイルの「AMPERE_RED」の値です。
親機・子機それぞれで設定可能なので、オーブンは電力消費が大きいから台所の子機だけ係数厳しめ(より小さい値)にして置く事で、それぞれの場所に合わせた使い方が出来ると思います。
画面表示方向180度回転(「M5StickC」用のみ)
Bボタン(電源ボタンじゃない方の側面ボタン)を押すと表示が180度回転しますので、設置向きに合わせてお選び下さい。
サンプルプログラムの詳細説明については、別の記事で纏めたいと思いますので、ここでは割愛します。
困ったときは?
・親機は、スマートメーターからの通信が30秒(設定ファイルの「TIMEOUT」値)以上途絶えた場合は、瞬間電力値の表示が消えます。(異常時の判定用)
・子機は、親機からのデータ送信が30秒(設定ファイルの「TIMEOUT」値)以上途絶えた場合は、瞬間電力値の表示が消えます。(異常時の判定用ですが、WiFiが30秒以上途絶えることはままありますので、あまり気にしない様にしましょう)
その他については、公開しているサンプルプログラムを読んでください。
(MicroPythonで記述していますから、Python読める人ならなんとかなりますよね?)
まとめ
なんでコレを作ったのか?
最近は企業の採算悪化などで唐突にサービス停止されて、今まで使えてたモノが急に使えなくなることが起こりかねないご時世です。
出来る限り、自分で何とか出来る状況にしておきたいよね!?・・・というのが最初に始めた経緯です。
「M5Stack」を使ったシステムは昨年末からありましたが、今年になって「M5StickC」というもっとお値打ちでシンプルなデバイスが発売されたので、多数のモニター子機を家の好きな場所に置きたい!とか、親機も「M5StickC」にすれば内蔵バッテリー付きで停電時もダウンしないんじゃね!?とか、色々と妄想が膨らんだ結果が、今回の成果となります。
謝辞
・@cinimlさん
Wi-SUN HATの最初のきっかけを下さった方です!!
それ以外にも、いつも色々なアドバイスを有難う御座います。m(__)m
昨日見たコレ
モニター付きのM5Stackとロームモジュールの組み合わせは良いアイデアだよなぁ
ラズパイとUSBドングルで済まそうかと入手性の良さそうなデバイス探しでずっとペンディングしてたスマートメーターからの情報取得システムの再考をぼちぼち始めようと思う https://twitter.com/ciniml/status/1040831359424462848 …
@cinimlさんは、BOOTHでM5Stack用Wi-SUNスタックを販売されてます。(今は休止中?)
拙作のWi-SUN HATのサンプルをお渡ししたところ、速攻でUIFlowで動かすプログラムを作って下さったりと、もう感謝しかない!!(足を向けて寝れないです)
とりあえずCustom Block作ってUIFlowで @norifumi5001 さんのWi-SUN HAT動かせるようになった。流石にCustom Blockのコード領域に全部の制御コード突っ込むのは無理なので、Resource Managerでバイトコード化したモジュールを突っ込んでimportしてる。 #M5Stack #M5StickC
ひっつき虫のアイデアはこの方から頂きました。
素晴らしいアイデアです! 有難う御座います。m(__)m
コメント