電力瞬時値の取得方法
curl -H 'Referer:http://ホスト名/smartmeter.html' -s 'http://ホスト名/php/get_property_m.php?ba=MACアドレス&eoj=0x028801&epc=0xE7'
16進文字列が返却されるので10進数で欲しい場合はxargs printf "%d\n"
にパイプで渡す。Zabbix等で監視するにはこちらの方が便利かも知れない。
curl -H 'Referer:http://ホスト名/smartmeter.html' -s 'http://ホスト名/php/get_property_m.php?ba=MACアドレス&eoj=0x028801&epc=0xE7' | xargs printf "%d\n"
ホスト名とMACアドレスは自分の設定を入力する。
MACアドレスは「スマートメータ設定」で表示される(画像の赤枠部分)。
背景
燃料費が高騰して新電力が次々と撤退する中、ついに自分が契約していた新電力も撤退してしまった。これまで電力監視をウェブサイトを経由してスクレイピングで取得していたのだが、新しい契約先の新電力ではデータ欠損が多く使い物にならない。そこで自宅に設置されているスマートメータから直接読み取ることにした。
スマートメーター(次世代電力計)
もう何年前だったか覚えていないが、ある日東京電力からスマートメーターに交換しますと連絡がきて交換された。その頃は東京電力がリモートでブレーカーを切ることができる程度の認識だった。しかしスマートメーターはもう少し賢かった。Bルートサービスに申し込んでWi-SUNと呼ばれる通信規格で接続すれば電気の使用量を取得できるらしい。これを知って早速申し込んでみたところ、認証IDは郵送で、パスワードは電子メールで届いた。
Wi-SUNモジュールは高い
Wifi子機は安いのだと1000円くらいからあるが、Wi-SUNはその10倍くらいの値段からスタート。ラズパイとモジュールとフルセットだと15000円くらいになる。安いモジュールも存在するがショップでは売り切れで買えるかどうかも分からない。調べるとスマートメーターの通信規格が将来Wi-SUNからWifiに変更され、現行機種はWifi対応に置き換えられる運命にあるらしい。こんな状況だと量産されないので安くするのも限界があるのだろう。結果的にWi-SUNをモジュール単品で購入するよりも撤退したメーカー製品を購入したほうが安くなっていたのでそちらを購入することにした。
HEM-GW26Aの購入
選定理由は「telnet/sshが使える」と記載をウェブで発見したからである。結果としては使えなかった。昔は使えたようだが、脆弱性として「開発者用の隠しページにアクセスできる」と報告されており、どうやらそこでenable/disableができたようだ。残念ながら新しいファームウェアではこのページは使えなくなっていた。sshが使えれば/dev/ttyあたりに直接アクセスできると考えていたので大誤算である。電力を取得するとしてもスクレイピングは極力避けたい。
Google Chromeによる検証
Google chromeの検証でネットワークアクセスを見ると電力の取得方法が分かる。リファラーを設定してそのURLへアクセスすれば簡単に取得できた。get_property_m.php
にGETパラメータとしてba
/eoj
/epc
の3つのパラメータを渡している。ba
はスマートメータのMACアドレスというのは分かるがeoj
とepc
は良くわからない。これを未知のまま使い続けるのは少し怖い。
ファームウェアを確認
生産終了とはいえファームウェアがダウンロードできるので中身を確認する。確認方法の詳細は大人の都合により割愛する。これによるとeoj
とepc
のパラメータの意味は以下の通り。
- eoj: 対象種別(2バイト)+番号(1バイト)
- epc: データ種別
それぞれ0xから始まる16進文字列で与える。
eojの上位2バイト | 対象種別 |
---|---|
0x0287 | エネルギーモニター |
0x0288 | スマートメータ |
0x0130 | エアコン |
0x0290 | 照明設定 |
0x026B | 給湯設定 |
0x027D | 蓄電池 |
0x05FD | HA対応機器設定 |
0x0287 | ガス機器 |
0x0601 | インターホン |
epcはエネルギーモニターやスマートメータで指定可能なパラメータらしい。
epc | データ種別 |
---|---|
0xE0 | 積算電力量計測値(正方向), kWh |
0xE2 | 積算電力量計測履歴1(正方向), kWh |
0xE3 | 積算電力量計測値(逆方向), kWh |
0xE4 | 積算電力量計測履歴1(逆方向), kWh |
0xE7 | 瞬時値, W |
0xEA | 定時積算電力計測値逆方向 |
0xEB | 定時積算電力計測値逆方向 |
すなわちeoj=0x028801&epc=0xE7
というのはスマートメータ(0x0288)の1台目(01)の瞬時値[W](0xE7)
という意味だった。
EPCについて
調べていくとEPCはECHONET Lite規格書にある「低圧スマート電力量メータ・HEMSコントローラ間」のECHONETプロパティと同一のものであることが分かった。例えば現在年月日を取得する0x98と現在時刻を取得する0x97を設定してみると
$ curl http://略&eoj=0x028801&epc=0x98
0x07e60410
$ curl http://略&eoj=0x028801&epc=0x97
0x1220
と表示された。16進数をそれぞれ10進数に直すと
16進数 | 10進数 |
---|---|
0x07e6 | 2022 |
0x04 | 4 |
0x10 | 16 |
0x12 | 18 |
0x20 | 32 |
と確かに2022-04-16 18:32と現在時刻になっている。
終わりに
telnet/sshでアクセスができずに絶望したがシンプルに電力監視ができるようになり良かった。EPCの値を設定して取得可能なWeb Service APIと思うとそれなりに活用できそうである。ただ本機とスマートメータ設置位置の距離を離すと読み取りに失敗した。遮蔽物が多かったのが問題なのか、あるいは周囲の電波状況が厳しかったのかは分からない。本機はWifiルーターとしての機能もあるが運用面の不安があるため別のルーターの下でHUBとして使うことにした(WifiのdisableとAPモード)。