2013年1月4日金曜日

電力消費をRRDtoolで作ったグラフでひと工夫した。

自宅にHEMSを入れて、その値をRRDtoolに1分間隔で格納しています。
グラフを1分間隔のデータで作成すると急な電力消費の変化から何がどのぐらいの電力消費かがみえて対策を打ちやすく、契約アンペアの検討には良いのですが、電力量としては読みにくく、どの時間帯で電気の消費が大きいのか掴めません。
そこでRRDtoolのグラフの書き方を工夫して1時間ごとの電力量の表現と移動平均での表現することにした。


ちなみに、RRDファイルは下記のように作成しています。
rrdtool create hems.rrd  -s 60 \
        DS:sensor00:GAUGE:300:U:U  \
        DS:sensor01:GAUGE:300:U:U  \
        DS:sensor02:GAUGE:300:U:U  \
      略(senserの後の数字をどんどん増やすだけ)
        DS:sensor29:GAUGE:300:U:U  \
        DS:sensor30:GAUGE:300:U:U  \
        RRA:MAX:0.5:1:2700000

まずは普通にグラフ書いてみる。
rrdtool graph hems-day.png -t "消費電力" -v "電力(w)" \
         -w 1005 -h 400 -r -u 800 --start "-24hours" \
         DEF:a=hems/hems.rrd:sensor00:MAX   "LINE2:a#FF0000:ALL\n" \
         DEF:b=hems/hems.rrd:sensor01:MAX   "LINE1:b#00FF00:洗面/浴室" \
         DEF:c=hems/hems.rrd:sensor02:MAX   "LINE1:c#00FFFF:厨房" \
         DEF:d=hems/hems.rrd:sensor03:MAX   "LINE1:d#FF8000:りびんぐ" \
         DEF:e=hems/hems.rrd:sensor04:MAX   "LINE1:e#0000FF:1F和室/玄関" \
         DEF:f=hems/hems.rrd:sensor05:MAX   "LINE1:f#FF0080:2F鯖室" \
         DEF:g=hems/hems.rrd:sensor06:MAX   "LINE1:g#008000:2F寝室" \
         DEF:h=hems/hems.rrd:sensor07:MAX   "LINE1:h#008080:洗濯機" \
         DEF:i=hems/hems.rrd:sensor08:MAX   "LINE1:i#800000:電子れんじ"




次に1時間ごとの電力量(wh)でのグラフを作ってみる。
RRDtoolの世界に転がしてある
RRDtool 1.2系を使う 1.0版(PDF)のp.36 「グラフを作成する DEFの詳細」に書いてあるようにDEFで変数を引っ張って来る際にstepを変更する。今回は1時間(=60分=3600秒)で描画したいので3600を選択する。また電力量を計算する為には毎分の値を平均すれば良いのでreduceにはAVERAGEを指定する。
画像は全体の電力だけ書き方を替えてみた(なので正確には赤線のグラフだけが縦軸の単位がwhになる)。
参考:本家のDEFのマニュアル

rrdtool graph hems-day-h.png -t "消費電力" -v "電力量(wh)" \
         -w $W2 -h 400 -r -u 800 --start "-24hours" \
         DEF:a=hems/hems.rrd:sensor00:MAX:step=3600:reduce=AVERAGE \
                                            "LINE2:a#FF0000:ALL(unit hour)\n" \
         DEF:b=hems/hems.rrd:sensor01:MAX   "LINE1:b#00FF00:洗面/浴室" \
         DEF:c=hems/hems.rrd:sensor02:MAX   "LINE1:c#00FFFF:厨房" \
         DEF:d=hems/hems.rrd:sensor03:MAX   "LINE1:d#FF8000:りびんぐ" \
         DEF:e=hems/hems.rrd:sensor04:MAX   "LINE1:e#0000FF:1F和室/玄関" \
         DEF:f=hems/hems.rrd:sensor05:MAX   "LINE1:f#FF0080:2F鯖室" \
         DEF:g=hems/hems.rrd:sensor06:MAX   "LINE1:g#008000:2F寝室" \
         DEF:h=hems/hems.rrd:sensor07:MAX   "LINE1:h#008080:洗濯機" \
         DEF:i=hems/hems.rrd:sensor08:MAX   "LINE1:i#800000:電子れんじ"




続いて移動平均でグラフを書いてみる。先ほどと同じPDFのp.42 「CDEFの逆ポーランド記法で使える演算子3」に書いてあるTREND演算子を使う。今回は10分(=600秒)で移動平均を取ることにしたので600を与えて描画する事にする。今回も全体の電力量だけ表現を替えてみた。
参考:本家のTRENDのマニュアル

rrdtool graph hems-day-MA.png -t "消費電力" -v "電力(w)" \
         -w $W2 -h 400 -r -u 800 --start "-24hours" \
         DEF:a=hems/hems.rrd:sensor00:MAX \
        CDEF:aa=a,600,TREND \
                                            "LINE2:aa#FF0000:ALL(10 Minutes Moving Average)\n" \
         DEF:b=hems/hems.rrd:sensor01:MAX   "LINE1:b#00FF00:洗面/浴室" \
         DEF:c=hems/hems.rrd:sensor02:MAX   "LINE1:c#00FFFF:厨房" \
         DEF:d=hems/hems.rrd:sensor03:MAX   "LINE1:d#FF8000:りびんぐ" \
         DEF:e=hems/hems.rrd:sensor04:MAX   "LINE1:e#0000FF:1F和室/玄関" \
         DEF:f=hems/hems.rrd:sensor05:MAX   "LINE1:f#FF0080:2F鯖室" \
         DEF:g=hems/hems.rrd:sensor06:MAX   "LINE1:g#008000:2F寝室" \
         DEF:h=hems/hems.rrd:sensor07:MAX   "LINE1:h#008080:洗濯機" \
         DEF:i=hems/hems.rrd:sensor08:MAX   "LINE1:i#800000:電子れんじ"




このように、rrdtoolの世界だけでグラフを変更できました。
なおrrdtoolは1.4.7, OSはNetBSD/amd64 5.1.2です。

0 件のコメント:

コメントを投稿