我想根据持续时间和用户通过gui提交的时间间隔来填充rrd数据库。我建立了一个计时器,每隔...分钟调用一次更新函数。在测量之后,我尝试通过使用获取方法来查看收集的数据,但我仅获得“无” - 列出的值。RRD数据库为空虽然正在更新
def update(self):
t=getTemperature()
h=getHumidity()
if self.status==11:
rrdtool.update(self.path,"N:"+t+":"+h)
elif self.status==10:
rrdtool.update(self.path,"N:"+t)
elif self.status==01:
rrdtool.update(self.path,"N:"+h)
传感器值是正确的,我通过打印输出来检查它。 rrdtool.create-method工作也完全正常,数据库被创建,但正如我所说的,实际上并没有正确更新。
这里rrdtool.create的使用():
def __init__(self,term,temEnabled,humEnabled,mins,hrs,fre):
self.path="/home/pi/Wetterstation/Speicherort/"+term+".rrd"
if os.path.exists(self.path)==False:
totalEntries=int((mins+hrs*60)/fre)
totalEntries=str(totalEntries)
if temEnabled==True and humEnabled==True:
rrdtool.create(self.path,
"DS:temperature:GAUGE:900:0:50",
"DS:humidity:GAUGE:"+str(fre)+":0:100",
"RRA:AVERAGE:0.5:1:"+totalEntries, "RRA:MIN:0.5:12:2400",
"RRA:MAX:0.5:"+totalEntries+":1",
"RRA:MIN:0.5:"+totalEntries+":1")
self.status=11
elif temEnabled==True:
rrdtool.create(self.path,
"DS:temperature:GAUGE:"+str(fre)+":0:50",
"RRA:AVERAGE:0.5:1:"+totalEntries,
"RRA:MIN:0.5:"+totalEntries+":1",
"RRA:MAX:0.5:"+totalEntries+":1")
self.status=10
elif humEnabled==True:
rrdtool.create(self.path,
"DS:hum:GAUGE:"+str(fre)+":0:100",
"RRA:AVERAGE:0.5:1:"+totalEntries,
"RRA:MIN:0.5:"+totalEntries+":1",
"RRA:MAX:0.5:"+totalEntries+":1")
self.status=01
self.success=True
else:
self.success=False
'fre'的价值是什么?这是你的湿度心跳。什么是totalEntries?这是您的RRA的大小。最后,在尝试查看数据之前,您多久调用一次update()以及多少个样本?可能你没有提交足够长的时间(45分钟或更长时间)的数据来获得RRA条目?你能否显示存储数据的列表以及你用来提取的命令 - 可能你正在查询存储数据的不同时间窗口? –
此外,如果两个DS都存在,您似乎硬编码900的心跳,但使用“fre”,否则。这可能会导致你的问题,如果你得到不同的心跳,你期望的。你没有指定一个步骤,所以可能会获得300作为默认值,但你的RRA计算是基于心跳,当他们应该在步骤... –
@SteveShipway“fre”是在几分钟内提交的频率,“ totalEntries“计算我保存一个值的次数。每调用一分钟我都会调用方法更新。我仅在短时间内提交数据(测试时),例如等一下。我忘了用“fre”代替,就像我现在定义的步骤一样。 – byteshark17