HEMS計画(「Management」じゃなくて「Measurement」ね)

このページの目的と目次[2024-01-07]

このページでは、HEMS(本来は『Home Energy Management System』のはずだが、ここでは『Home Energy Measurement System』とする)に対する取り組みを紹介する。

誰がなんと言おうと、データを取るのは楽しいものである。だって、正しい判断のためにはその根拠(データ)は必須でしょ? さらには、判断するための手段としてのデータ取得であっても、その過程が楽しめればそれでいいんじゃないの?(結局は、『手段のためには目的を選ばない』って、変な思考ね)

目次

太陽光発電機モニター[2012-01-28] [2024-01-07 Update!]

太陽光発電機を設置したのでその取扱説明書を読むと...『ん?このモニターってイーサネットでネットワークにつなげば,ブラウザで稼動状況が確認できるんだ』ってことがわかったので,早速接続してみることに。

太陽光発電本体
太陽光発電モニター画面

この企画がスタートしたのは,10以上前のこと。そのときにちょっとだけ情報を出していたのを振り返ってみよう。

2011-01-03 あけおめ
あけましておめでとうございます。実は,昨年末に無茶な(?)設備投資を実施したので,資金難がまだまだ続きそうだ。まぁ,その設備投資についてはそのうちに公開する(かも?)

まぁ,誰も昔のことなんて憶えてないが。

太陽光発電のデータロギング方法[2012-01-28]

今回のデータロギングは以下の方法で実施している。

  1. PHPプログラムでモニタ画面にアクセスし,文字のみを抽出する。該当部分のソースはこんな感じ(どこかで拾ってきたサンプルコードそのままだ)
    $_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
    
    
    こんな文字列になっている。そこから,必要な部分を抽出する。
  2. 抽出した数字をデータベース(MySQL)に保存する。
  3. そのプログラムは,24時間稼動している自宅サーバー(参照:NASを活用した自宅サーバー構築からcronで実行する。
  4. 保存したデータは,PHPで作った表示画面によりデータ解析をおこなう(?)

太陽光発電のロギングデータを解析してみる(2012-01-28)

データは集めるだけでなく,解析しなけなりゃ何の役にもたたないので,解析の真似事をしてみることにする。

1日の中ではどういう状況か?

次に示すグラフはウチの発電ベストリザルトを記録した2011年4月下旬のデータだ。グラフ上段が電力消費と発電量の値で,下段が買電および売電金額となっている。ちなみに,データロギングは1回/5分のペースで実施しているが,電力会社の明細とは月間で3~5%の誤差となる程度だ。

下段グラフの説明
買電計=電力会社より購入した電気の料金 売電計=発電の余剰分を電力会社に売却した代金
投資効果=売却代金+発電により購入しなくてすんだ分の電気料金(上段グラフの青と赤のエリアが重なっている部分
太陽光発電履歴その1_1日の状況太陽光発電履歴その1_1日の状況

では,時間経過に従いデータを確認していくことにしよう。

時間帯注目点
1:00-5:00電力消費:エコキュートによる湯の製造
7:00付近電力消費:朝食の準備
8:00-11:00電力消費:一家団らん?および食器洗浄器の稼動
11:00-19:00電力消費:全員外出し,常時稼動の冷蔵庫・24時間換気(およびサーバー)と家電機器の待機電力のみに
19:00-23:00電力消費:夕食の準備および一家団らん?

とまぁ,こんな感じとなる。このロギングデータの恐ろしいところは電力消費量も確認できるということで,朝,家を出たにもかかわらず,こそっと舞い戻って引きこもってやろうとしても,電力を使用すればばれてしまうぞ。

年間をとおしてはどんなことになるのか?

このページを公開するまでに1年以上もかかったのは,やはり通年でのデータを載せたかったから。年間ではどういった推移をするのか? はたまた,1年での投資効果は? 一体何年で元を取れるのか...

太陽光発電履歴その2_1年の状況太陽光発電履歴その2_1年の状況
季節注目点
冬季(11月~3月)使用電力が年間をとおして最も多い。これは風呂でのお湯使用量が多く,エコキュートの負荷が高くなっているため。ただし,使用するのは深夜電力時間帯なので電気料金が安く,買電料金よりも売電代金の方が多い(一応,儲かっている)。
春季(4~5月)最も発電量が多い季節。日照時間が長く,気温も高くないので発電効率が高い。
夏季(7~8月)日照時間は長いものの,気温が高く発電効率が落ちる。
秋季(10~11月)気温は下がってくるものの,日照時間減少により発電量が少なくなる。

まとめ[2012-01-28]

この結果によると,投資額が回収されて本当に利益が出始めるのはやはり10年後くらい(そのくらいの投資額だった)か?

年率10%の配当があるものの元本は返金されない投資,みたいなものなので,投資意欲がわくかどうかは人それぞれかな?(3.11の地震以降は節電意識が高まって,設置数も伸びているらしいが)

と,以上のように,家電機器一つで一年間も遊べてしまった(この瞬間もデータロギングは続いている)。

▲目次に戻る

エコキュート[2024-01-07]

設置後15年で故障した先代の代わりに急遽導入した、白くまくんエコキュート...近頃じゃwebサーバー内蔵ではなくてスマホアプリで確認できるようになっている。また、HEMS向けの通信規格:ECHONET-Liteが浸透して標準になっている...のは甘い考えで、スマホ用の通信モジュールとHEMS用の通信モジュールは別物で、どちらか一方しか使えないという設計思想...

通信アダプタ機能
スマホアプリ用スマホ&天気予報連動で昼間の太陽光発電を利用した焚き上げができる。HEMS連携はできない。
HEMS用天気予報連動の焚き上げはできない。

そんなケチ臭いことやめてほしいんだけど...スマホ用通信アダプタではHEMS連携できなくても、せめて実働状況の確認はしたいとは思いませんか?...白くまくん、ホントにそれでいいの??

▲目次に戻る

エアコン[2024-01-07]

白くまくんとの通信確認のため、宅内のネットワーク状況を眺めていたら、ローカルIPアドレスがDHCPで割り当てられている見覚えのない(?)MACアドレスの機器を発見した。『よそ者がWiFiにただ乗りしてる?』と慌てたが、よくよく調べると、昨年に入れ替えたエアコン『ナショナル坊や』くんが犯人だった。そういや、アプリで宅外からでも制御できるように設定したわ。そりゃ、WiFi接続されるよね。

で、この機械、どうもECHONET-Lite規格での通信に対応しているらしい。それならデータ取得してみることにしよう。

どんな方法でどんなデータが取得できるのか?

ECHONET-Liteとは
『スマートホーム実現のために、2012年2月に経済産業省が設置したスマートハウス標準化検討会においてHEMSにおける公知な標準インターフェースとして推奨』の規格らしいぞ。

ECHONETのwebサイト(https://echonet.jp/)から必要な資料をダウンロードしよう。

ECHONET-Lite規格書
https://echonet.jp/spec_g/#standard-01
アプリケーション通信インタフェース仕様書
https://echonet.jp/spec_g/#standard-01
APPENDIX ECHONET機器オブジェクト詳細規定
https://echonet.jp/spec_g/#standard-05
対象機器の詳細情報
https://echonet.jp/product/echonet/
今回は『ナショナル坊やエアコン』の、『搭載機器オブジェクト申告書』『搭載プロパティ申告書(2種類)』の計3書類

搭載機器オブジェクト申告書

対象機器との通信に必要なアドレス(後述)が記載されている。

搭載機器オブジェクト申告書搭載機器オブジェクト申告書

搭載プロパティ申告書

対象機器に対し送受信可能なデータの内容とそのアドレス(後述)が記載されている。

搭載プロパティ申告書搭載プロパティ申告書

通信サンプルプログラム(PHPの場合)

今回は、「積算消費電力計測値」と「外気温度計測値」を取得することにする。

<?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ヘッダ
000fTID
013001オブジェクトコード013001から
05ff01オブジェクトコード05ff01へ
72読み出し要求62に対するレスポンス
02データは2種類
85積算電力
044バイトのデータ
00016b3d0x00016b3d[Wh]=92.989[kWh]
be外気温
011バイトのデータ
070x07[℃]=7[℃]

通信ポート操作

上記の通信プログラムについて、Windows機で実行するとレスポンスがあるんだけど、本運用するNAS(QNAP)で実行するとレスポンスがないってトラブルが発生した。調べてみると、通信ポート3610がブロックされているようだ。えーと、Linuxでポート開放ってどうすんの?...どうやらQNAPではアプリ(QuFirewwall)で操作することがわかった。

  1. 管理画面の「App Center」から「QuFirewall」をインストール
  2. ファイヤウォールプロファイル」で選択されているプロファイル名の「編集(アイコン)」を選択する
  3. ルールの追加
    QuFirewall設定QuFirewall設定
  4. 注意:このアプリを有効にしたら今まで使えていた他のポートがブロックされてる可能性があるので、そんな場合は同様に追加する。
    例:ターミナルソフト、データベース遠隔操作、DLNAサーバー、あたりが使用するポートがブロックされてしまってた。

データ取得例

では、データを取得してみよう。下のグラフはその1例だ。

データ取得例データ取得例
00:20-02:20頃
おそらく、白くまくんエコキュートが焚き上げているはず。
05:30-06:59頃
おそらく、白くまくんエコキュートが当日の天気予報をぎりぎりまで見極めたうえで、深夜電力時間帯を利用して焚き上げているはず。電力のピーク時間帯になっているのは、人間が起きだして活動(暖房、洗濯、朝食準備)しているから。
11:30-13:30頃
おそらく、白くまくんエコキュートが太陽光発電時間帯(要設定)を狙って焚き上げている。
20:30-22:30頃
ナショナル坊やくんエアコンを使用中だ(機器の消費電力が特定できるので色分け表示)。
外気温データ
ナショナル坊やくんエアコンが教えてくれる...が、運転中だけしかデータを出してくれない。

こんなふうに「見える化」はできるんだけど、やはり中途半端感は否めない。もっといろんなデータを取るため(目的じゃなくて手段ね、一応)、すべての電気機器を一気にそろえる新築時に考慮しておかないと無理ってことだ。

▲目次に戻る