RRDtool数据不一致



我正在使用RRDtool来绘制我的树莓派上的泵的状态。我一定是做了一些配置错误,因为值接近我输入的,但不准确。

引脚状态应为1或0。

<!-- 2014-03-10 10:24:00 CDT / 1394465040 --> <row><v>NaN</v></row> <!-- 2014-03-10 10:25:00 CDT / 1394465100 --> <row><v>NaN</v></row> <!-- 2014-03-10 10:26:00 CDT / 1394465160 --> <row><v>1.0000000000e+00</v></row> <!-- 2014-03-10 10:27:00 CDT / 1394465220 --> <row><v>2.3711630000e-01</v></row> <!-- 2014-03-10 10:28:00 CDT / 1394465280 --> <row><v>9.8168226667e-01</v></row> <!-- 2014-03-10 10:29:00 CDT / 1394465340 --> <row><v>1.6624716667e-02</v></row> <!-- 2014-03-10 10:30:00 CDT / 1394465400 --> <row><v>9.8544061667e-01</v></row> <!-- 2014-03-10 10:31:00 CDT / 1394465460 --> <row><v>2.9590616667e-02</v></row> <!-- 2014-03-10 10:32:00 CDT / 1394465520 --> <row><v>9.7204963333e-01</v></row> <!-- 2014-03-10 10:33:00 CDT / 1394465580 --> <row><v>2.6263616667e-02</v></row> <!-- 2014-03-10 10:34:00 CDT / 1394465640 --> <row><v>9.7533411667e-01</v></row> <!-- 2014-03-10 10:35:00 CDT / 1394465700 --> <row><v>2.3075633333e-02</v></row> <!-- 2014-03-10 10:36:00 CDT / 1394465760 --> <row><v>9.7849575000e-01</v></row> <!-- 2014-03-10 10:37:00 CDT / 1394465820 --> <row><v>1.9948233333e-02</v></row> <!-- 2014-03-10 10:38:00 CDT / 1394465880 --> <row><v>9.8158333333e-01</v></row> <!-- 2014-03-10 10:39:00 CDT / 1394465940 --> <row><v>1.6888216667e-02</v></row> <!-- 2014-03-10 10:40:00 CDT / 1394466000 --> <row><v>9.2141166667e-01</v></row> <!-- 2014-03-10 10:41:00 CDT / 1394466060 --> <row><v>5.2411610000e-01</v></row> <!-- 2014-03-10 10:42:00 CDT / 1394466120 --> <row><v>5.2411610000e-01</v></row> <!-- 2014-03-10 10:43:00 CDT / 1394466180 --> <row><v>9.6672030000e-01</v></row> <!-- 2014-03-10 10:44:00 CDT / 1394466240 --> <row><v>5.0939110833e-01</v></row> <!-- 2014-03-10 10:45:00 CDT / 1394466300 --> <row><v>5.0939110833e-01</v></row> <!-- 2014-03-10 10:46:00 CDT / 1394466360 --> <row><v>4.9845539167e-01</v></row> <!-- 2014-03-10 10:47:00 CDT / 1394466420 --> <row><v>4.9845539167e-01</v></row> <!-- 2014-03-10 10:48:00 CDT / 1394466480 --> <row><v>9.9399037500e-01</v></row> <!-- 2014-03-10 10:49:00 CDT / 1394466540 --> <row><v>9.9399037500e-01</v></row> <!-- 2014-03-10 10:50:00 CDT / 1394466600 --> <row><v>2.6977033333e-02</v></row> <!-- 2014-03-10 10:51:00 CDT / 1394466660 --> <row><v>9.7898348333e-01</v></row> <!-- 2014-03-10 10:52:00 CDT / 1394466720 --> <row><v>9.7898348333e-01</v></row>

create_db.sh#!/bin/bash rrdtool create pinstats.rrd --step 60 DS:pump:GAUGE:600:0:1 RRA:MAX:0.5:1:2016

update.sh

#!/bin/sh a=0 while [ "$a" == 0 ]; do echo "pump on日期" /home/pi/on.sh /home/pi/graph.sh pump=1 rrdtool update pinstats.rrd N:$pump sleep 60 echo "pump off日期" /home/pi/off.sh /home/pi/graph.sh pump=0 rrdtool update pinstats.rrd N:$pump sleep 120 done

您正在受到数据规范化的影响。

这将根据线性近似调整您的值,以便使时间点位于间隔边界上。例如,如果你的间隔是5分钟,那么更新后的值将是在12:00,12:05,12:10…等

这是有意义的,如果你正在绘制一个大的数字,这是一个比率;总的平均值仍然可以计算出来,并且数据间隔是有规律的。但是,如果您使用带有小整数的Gauge数据类型,则会出现问题。

为了避免这种情况,您必须在间隔边界上更新,而不是使用N作为您的时间点。

试试下面的shell代码:

interval=60
timestamp=`date +%s`
num_intervals=`expr $timestamp / $interval`
adjusted_time=`expr $num_intervals '*' $interval`
rrdtool update pistats.rrd $adjusted_time:1
sleep $interval
adjusted_time=`expr $adjusted_time + $interval`
rrdtool update pistats.rrd $adjusted_time:0

这段代码确保更新时间正好在间隔边界上,因此没有执行数据规范化(实际上,它变成了一个空操作)。

有关更多详细信息,请参阅Alex van den Bogaerdt的优秀教程。

相关内容

  • 没有找到相关文章

最新更新