My Pi将每分钟的温度和湿度记录到csv文件和RRDtool数据库中:
我创建了这样的RRDtool数据库:
rrdtool create /home/pi/Desktop/GarageData.rrd --step 60
DS:Temperatur:GAUGE:300:U:U
DS:Humidity:GAUGE:300:U:U
RRA:AVERAGE:0.5:12:24
RRA:AVERAGE:0.5:288:31
所以数据库应该每60秒接受一个值
我使用python 3脚本进行日志记录。这是重要的部分。
import Adafruit_DHT
from rrdtool import update as rrd_update
humidity, temperatur = Adafruit_DHT.read_retry(Adafruit_DHT.AM2302, '22')
rrd_update('/home/pi/Desktop/GarageData.rrd', 'N:%s:%s' %(temperatur, humidity))
当使用rrdtool fetch GarageData.rrd AVERAGE r300
时,我只看到nan
Temperatur Humidity
1469111040: nan nan
1469128320: nan nan
1469145600: nan nan
1469162880: nan nan
1469180160: nan nan
1469197440: nan nan
以及绘制数据库时。。。。情节中什么也没有出现。
我的剧本有什么问题?我想我做的每件事都和本教程中的一模一样
您可能还没有收集到足够的数据。
您的RRD定义使用60秒的步长,但最小的RRA是12分钟的步长(1cdp=12pdp)。这意味着你需要至少有2个条目才能有意义,因此在你看到输出中的内容之前,至少要收集24分钟,甚至更长时间的数据。
当你试图以5分钟的间隔获取数据时,我建议你也有一个5pdp的RRA,可能还有一个1pdp的用于测试的RRA。这些RRA也很短,但我想你有理由这样做。
rrdtool create /home/pi/Desktop/GarageData.rrd --step 60
DS:Temperatur:GAUGE:300:U:U
DS:Humidity:GAUGE:300:U:U
RRA:AVERAGE:0.5:1:600
RRA:AVERAGE:0.5:5:200
RRA:AVERAGE:0.5:12:24
RRA:AVERAGE:0.5:288:31
如果您添加这些额外的RRA,那么您将能够更快地查看收集的数据。
如果您仍然在值中看到nan
,则可能是您收集的数据不正确,并且您的read_retry()函数调用没有返回有效数据。将这些值打印到文件中,这样您就可以看到它们实际上是数字。