我正在开发一个能耗图表系统。该脚本正在拉动能量计的当前Kwh,然后使用DS COUNTER将其推送到rrd数据库。我试图使用VDEF来计算平均DEF的总数,但我似乎找不到用这种方法制定“步骤”的好方法。
我的目标是能够从数据库中获取一周的数据,然后计算每天的总数。我似乎找不到最好的方法来做到这一点。 RRDtool是推动这种方式吗?如果是这样,那么正确的方法是什么?
感谢。
答案 0 :(得分:0)
RRDTool在录制速率时效果最佳。因此,通过使用COUNTER
DS类型,您可以将数据库中的定期kWh总数更改为时间点W值。
例如,如果您每分钟采样一次,那么您可以将您的kWh乘以3600000(得到瓦特秒或焦耳)并让RRDTool使用COUNTER类型将其转换为每秒速率,或瓦特(为了清晰和简单,最好以SI单位存储数据)。
然后,您可以通过乘以步长来显示或计算它。
例如,如果您希望查看每天使用的kWh图表,则需要定义1天的粒度RRA。然后,您可以从中获取数据(使用具有特定数据粒度的rrdtool fetch
或rrdtool graph
)并获得通过将平均瓦数乘以间隔获得的计算值,然后除以3600000得到千瓦时。
这会创建一个采样率为1分钟的RRD文件来存储瓦特。
rrdtool create power.rrd --step 60 \
DS:watts:COUNTER:120:0: \
RRA:AVERAGE:0.5:1:86400 \
RRA:AVERAGE:0.5:1440:400
这将更新RRD,给出您最新的kWh样本
JOULES=`expr $KWH \* 3600000`
rrdtool update power.rrd N:$JOULES
这将绘制一个月内的每日使用量(以kWh为单位)
rrdtool graph graph.png \
--end now --start "end-1month" --step 86400 \
--title "Power usage per day" --vertical-label "kWh" \
--units-exponent 0 \
DEF:watts=power.rrd:watts:AVERAGE:step=86400 \
CDEF:kwh=watts,STEPWIDTH,*,3600,/,1000,/ \
VDEF:totkwh=watts,TOTAL,3600000,/ \
GRPINT:totkwh:"Total kWh this month: %.0lf kWh"
当然,您可以根据需要对其进行修改。您可能需要不同的RRA,图形步骤或摘要。