我正在使用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 ondate" /home/pi/on.sh /home/pi/graph.sh pump=1 rrdtool update pinstats.rrd N:$pump sleep 60 echo "pump offdate" /home/pi/off.sh /home/pi/graph.sh pump=0 rrdtool update pinstats.rrd N:$pump sleep 120 done
发布于 2014-03-11 11:47:17
您正受到Data Normalisation的影响。
这将根据线性近似调整您的值,以便使时间点位于间隔边界上。也就是说,如果你的时间间隔是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这段代码确保更新时间正好在间隔边界上,因此不会执行数据标准化(实际上,它变成了null操作)。
有关更多详细信息,请参阅Alex van den Bogaerdt的优秀教程here。
https://stackoverflow.com/questions/22304872
复制相似问题