このページでは、HEMS(本来は『Home Energy Management System』のはずだが、ここでは『Home Energy Measurement System』とする)に対する取り組みを紹介する。
誰がなんと言おうと、データを取るのは楽しいものである。だって、正しい判断のためにはその根拠(データ)は必須でしょ? さらには、判断するための手段としてのデータ取得であっても、その過程が楽しめればそれでいいんじゃないの?(結局は、『手段のためには目的を選ばない』って、変な思考ね)
太陽光発電機を設置したのでその取扱説明書を読むと...『ん?このモニターってイーサネットでネットワークにつなげば,ブラウザで稼動状況が確認できるんだ』ってことがわかったので,早速接続してみることに。
この企画がスタートしたのは,10以上前のこと。そのときにちょっとだけ情報を出していたのを振り返ってみよう。
2011-01-03 あけおめ
あけましておめでとうございます。実は,昨年末に無茶な(?)設備投資を実施したので,資金難がまだまだ続きそうだ。まぁ,その設備投資についてはそのうちに公開する(かも?)
まぁ,誰も昔のことなんて憶えてないが。
今回のデータロギングは以下の方法で実施している。
$_rawData = getURL( "http://xxx.xxx.xxx.xxx/pc/" ); #モニタのIPアドレス
function getURL( $pURL ) {
$_data = null;
if( $_http = fopen( $pURL, "r" ) ) {
while( !feof( $_http ) ) {
$_data .= fgets( $_http, 1024 );
}
fclose( $_http );
}
return( $_data );
}
$getdata = explode(' ',ereg_replace("\r|\n","",strip_tags($_rawData)));
上の画像のタイミングだと以下の文字列が取得できる。
連系運転中
6169
1940
0.98
0.50
0.48
こんな文字列になっている。そこから,必要な部分を抽出する。データは集めるだけでなく,解析しなけなりゃ何の役にもたたないので,解析の真似事をしてみることにする。
次に示すグラフはウチの発電ベストリザルトを記録した2011年4月下旬のデータだ。グラフ上段が電力消費と発電量の値で,下段が買電および売電金額となっている。ちなみに,データロギングは1回/5分のペースで実施しているが,電力会社の明細とは月間で3~5%の誤差となる程度だ。
では,時間経過に従いデータを確認していくことにしよう。
時間帯 | 注目点 |
---|---|
1:00-5:00 | 電力消費:エコキュートによる湯の製造 |
7:00付近 | 電力消費:朝食の準備 |
8:00-11:00 | 電力消費:一家団らん?および食器洗浄器の稼動 |
11:00-19:00 | 電力消費:全員外出し,常時稼動の冷蔵庫・24時間換気(およびサーバー)と家電機器の待機電力のみに |
19:00-23:00 | 電力消費:夕食の準備および一家団らん? |
とまぁ,こんな感じとなる。このロギングデータの恐ろしいところは電力消費量も確認できるということで,朝,家を出たにもかかわらず,こそっと舞い戻って引きこもってやろうとしても,電力を使用すればばれてしまうぞ。
このページを公開するまでに1年以上もかかったのは,やはり通年でのデータを載せたかったから。年間ではどういった推移をするのか? はたまた,1年での投資効果は? 一体何年で元を取れるのか...
季節 | 注目点 |
---|---|
冬季(11月~3月) | 使用電力が年間をとおして最も多い。これは風呂でのお湯使用量が多く,エコキュートの負荷が高くなっているため。ただし,使用するのは深夜電力時間帯なので電気料金が安く,買電料金よりも売電代金の方が多い(一応,儲かっている)。 |
春季(4~5月) | 最も発電量が多い季節。日照時間が長く,気温も高くないので発電効率が高い。 |
夏季(7~8月) | 日照時間は長いものの,気温が高く発電効率が落ちる。 |
秋季(10~11月) | 気温は下がってくるものの,日照時間減少により発電量が少なくなる。 |
この結果によると,投資額が回収されて本当に利益が出始めるのはやはり10年後くらい(そのくらいの投資額だった)か?
年率10%の配当があるものの元本は返金されない投資,みたいなものなので,投資意欲がわくかどうかは人それぞれかな?(3.11の地震以降は節電意識が高まって,設置数も伸びているらしいが)
と,以上のように,家電機器一つで一年間も遊べてしまった(この瞬間もデータロギングは続いている)。
設置後15年で故障した先代の代わりに急遽導入した、白くまくんエコキュート...近頃じゃwebサーバー内蔵ではなくてスマホアプリで確認できるようになっている。また、HEMS向けの通信規格:ECHONET-Liteが浸透して標準になっている...のは甘い考えで、スマホ用の通信モジュールとHEMS用の通信モジュールは別物で、どちらか一方しか使えないという設計思想...
通信アダプタ | 機能 |
---|---|
スマホアプリ用 | スマホ&天気予報連動で昼間の太陽光発電を利用した焚き上げができる。HEMS連携はできない。 |
HEMS用 | 天気予報連動の焚き上げはできない。 |
そんなケチ臭いことやめてほしいんだけど...スマホ用通信アダプタではHEMS連携できなくても、せめて実働状況の確認はしたいとは思いませんか?...白くまくん、ホントにそれでいいの??
白くまくんとの通信確認のため、宅内のネットワーク状況を眺めていたら、ローカルIPアドレスがDHCPで割り当てられている見覚えのない(?)MACアドレスの機器を発見した。『よそ者がWiFiにただ乗りしてる?』と慌てたが、よくよく調べると、昨年に入れ替えたエアコン『ナショナル坊や』くんが犯人だった。そういや、アプリで宅外からでも制御できるように設定したわ。そりゃ、WiFi接続されるよね。
で、この機械、どうもECHONET-Lite規格での通信に対応しているらしい。それならデータ取得してみることにしよう。
ECHONETのwebサイト(https://echonet.jp/)から必要な資料をダウンロードしよう。
対象機器との通信に必要なアドレス(後述)が記載されている。
対象機器に対し送受信可能なデータの内容とそのアドレス(後述)が記載されている。
今回は、「積算消費電力計測値」と「外気温度計測値」を取得することにする。
<?php
$Port = 3610; #通信ポート(ECHONET-Lite標準)
$IPadrs1 = "xxx.xxx.xxx.xxx"; #送信先(エアコン)IPアドレス
$IPadrs2 = "0.0.0.0"; #受信用(自分)IPアドレス
$IPdummy = ''; #「socket_recvfrom」は、関数内に直接記述したらダメ、らしい
$EHD1 = "10"; #ヘッダ1(固定値)
$EHD2 = "81"; #ヘッダ2(固定値)
$TID = "000f"; #任意のID
$SEOJ = "05ff01"; #要求元(HEMSコントローラのつもり)から
$DEOJ = "013001"; #相手側オブジェクトコードへ 「搭載機器オブジェクト申告書」の「グループコード」「クラスコード」「インスタンスコード」
$ESV = "62"; #コマンド送信する ※62=読み出し要求
$OPC = "02"; #2種類のデータ
$EPC1 = "85"; #1種類め 積算電力
$PDC1 = "00"; #1種類め 読み出し要求時はゼロ ※読み出し要求時はこの後にくる"EDT1"は不要
$EPC2 = "be"; #2種類め 外気温
$PDC2 = "00"; #2種類め 読み出し要求時はゼロ ※読み出し要求時はこの後にくる"EDT2"は不要
#コマンドを連結してバイナリ化
$command = pack("H*", $EHD1.$EHD2.$TID.$SEOJ.$DEOJ.$ESV.$OPC.$EPC1.$PDC1.$EPC2.$PDC2);
#送信用ソケット(UDP)
$socket1 = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($socket1, $IPadrs1, $Port);
#受信用ソケット(UDP) 送信用とは別に設けること
$socket2 = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket2, $IPadrs2, $Port);
#送信
socket_write($socket1, $command, strlen($command));
#受信 「$Data」に受信内容を入れる
socket_recvfrom($socket2, $Data, 1024, 0, $IPdummy, $Port);
#受信データをASCII化
$Data = unpack("H*", $Data);
var_dump($Data);
#ソケットの終了
socket_close($socket1);
socket_close($socket2);
?>
これを実行すると以下のようなレスポンスがある。
array(1) {
[1]=>
string(42) "1081000f01300105ff017202850400016b3dbe0107"
}
各項目ごとに分割すると
項目 | 内容 |
---|---|
1081 | ヘッダ |
000f | TID |
013001 | オブジェクトコード013001から |
05ff01 | オブジェクトコード05ff01へ |
72 | 読み出し要求62に対するレスポンス |
02 | データは2種類 |
85 | 積算電力 |
04 | 4バイトのデータ |
00016b3d | 0x00016b3d[Wh]=92.989[kWh] |
be | 外気温 |
01 | 1バイトのデータ |
07 | 0x07[℃]=7[℃] |
上記の通信プログラムについて、Windows機で実行するとレスポンスがあるんだけど、本運用するNAS(QNAP)で実行するとレスポンスがないってトラブルが発生した。調べてみると、通信ポート3610がブロックされているようだ。えーと、Linuxでポート開放ってどうすんの?...どうやらQNAPではアプリ(QuFirewwall)で操作することがわかった。
では、データを取得してみよう。下のグラフはその1例だ。
こんなふうに「見える化」はできるんだけど、やはり中途半端感は否めない。もっといろんなデータを取るため(目的じゃなくて手段ね、一応)、すべての電気機器を一気にそろえる新築時に考慮しておかないと無理ってことだ。