尝试将数据导入RRDtool DB,以便从RFXtrx433e USB控制器收集几个温度传感器。输出到.txt文件
我的数据库创建如下:
[code]
# Script to create rrd-file
# 24h with 2,5 min resolution
# 7d with 5 min resolution
# 1y with 10 min resolution
# 20y with 1h resolution
directory="/home/pi/temp/rrddata/"
filename="domoticz_temp.rrd"
# Check i file already exists
if [ ! -f "$directory$filename" ]
then
# File doesn't exist, create new rrd-file
echo "Creating RRDtool DB for outside temp sensor"
rrdtool create $directory$filename \
--step 120 \
DS:probe:GAUGE:120:-50:60 \
DS:xxxx1:GAUGE:120:-50:60 \
DS:vardagsrum:GAUGE:120:-50:60 \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:2:2016 \
RRA:AVERAGE:0.5:4:52560 \
RRA:AVERAGE:0.5:24:175200 \
RRA:MAX:0.5:1:5760 \
RRA:MAX:0.5:2:2016 \
RRA:MAX:0.5:4:52560 \
RRA:MAX:0.5:24:175200 \
RRA:MIN:0.5:1:5760 \
RRA:MIN:0.5:2:2016 \
RRA:MIN:0.5:4:52560 \
RRA:MIN:0.5:24:175200
echo "Done!"
else
echo $directory$filename" already exists, delete it first."
fi
导入传感器数据
rrdtool update /home/pi/temp/rrddata/domoticz_temp.rrd --template probe N:`head -n 1 </home/pi/temp/output/temp_probe.txt`
导入的文本文件只包含一行数字(通过LUA脚本从传感器收集的温度)
创建图表的代码
rrdtool graph /home/pi/temp/output/img/test/hour.png \
-w 697 -h 287 -a PNG \
--slope-mode \
--start -6h --end now \
--vertical-label "Last 6 hour temperature" \
DEF:probe=/home/pi/temp/rrddata/domoticz_temp.rrd:probe:AVERAGE \
DEF:xxxx1=/home/pi/temp/rrddata/domoticz_temp.rrd:xxxx1:AVERAGE \
DEF:vardagsrum=/home/pi/temp/rrddata/domoticz_temp.rrd:vardagsrum:AVERAGE \
COMMENT:" Location Min Max Senaste\l" \
LINE1:probe#ff0000:"Utetemp" \
LINE1:0#ff0000: \
GPRINT:probe:MIN:" %5.1lf" \
GPRINT:probe:MAX:" %5.1lf" \
GPRINT:probe:LAST:" %5.1lf\n" \
LINE1:xxxx1#00ff00:"Xxxx1" \
LINE1:0#00ff00: \
GPRINT:probe:MIN:" %5.1lf" \
GPRINT:probe:MAX:" %5.1lf" \
GPRINT:probe:LAST:" %5.1lf\n" \
LINE1:vardagsrum#0000ff:"vardagsrum" \
LINE1:0#0000ff: \
GPRINT:probe:MIN:" %5.1lf" \
GPRINT:probe:MAX:" %5.1lf" \
GPRINT:probe:LAST:" %5.1lf\n" \
给我这张图http://i.imgur.com/lnFxTik.png
现在回答我的问题:
我是否以正确的方式创建了数据库和其余脚本?我认为应该在不在DB中的值上获得NAN?
如何导入其余传感器?它们有几个类似的TXT文件。
希望有人能帮助我。
新信息!
用于收集传感器数据的我的LUA脚本
commandArray = {}
if (devicechanged['Probe']) then
local file = io.open("/home/pi/temp/output/temp_probe.txt", "w")
file:write(tonumber(otherdevices_temperature['Probe']))
file:close()
end
if (devicechanged['Xxxx1']) then
local file = io.open("/home/pi/temp/output/temp_xxxx1.txt", "w")
file:write(tonumber(otherdevices_temperature['Xxxx1']))
file:close()
end
if (devicechanged['Vardagsrum']) then
local file = io.open("/home/pi/temp/output/temp_vardagsrum.txt", "w")
file:write(tonumber(otherdevices_temperature['Vardagsrum']))
file:close()
end
return commandArray`
答案 0 :(得分:1)
是的,如果缺少一个值,你会得到NaN。你的创建语句看起来不错......虽然20y的分辨率为1h ......哇!
从多个文本文件导入将像这样工作
A=`perl -ne 'chomp;print;exit' xx1.txt`
B=`perl -ne 'chomp;print;exit' xx2.txt`
rrdtool update domoticz_temp.rrd --template xx1:xx2 N:$A:$B
答案 1 :(得分:1)
# 24h with 2,5 min resolution
# 7d with 5 min resolution
# 1y with 10 min resolution
# 20y with 1h resolution
...
rrdtool create $directory$filename \
--step 120 \
DS:probe:GAUGE:120:-50:60 \
DS:xxxx1:GAUGE:120:-50:60 \
DS:vardagsrum:GAUGE:120:-50:60 \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:2:2016 \
RRA:AVERAGE:0.5:4:52560 \
RRA:AVERAGE:0.5:24:175200 \
好的,你似乎有2分钟的步长,你的RRA正在进行1,2,4和24步。这相当于2分钟,4分钟,8分钟和48分钟,而不是2.5分钟,5分钟,10分钟和1小时。也许你的步骤应该是150?此外,您的DS上的心跳与您的步骤相同,这可能会导致您丢失数据。一般来说,心跳应该是步长的1.5到2倍,以允许不规则的数据到达。
然而,这些都与你的“未知”问题无关,而Tobi已经回答了很多问题。
2和3.由于您有一个RRD,因此您需要在同一操作中的同一时间戳更新所有样本。在这种情况下,您可能最好立即收集它们并将它们存储在同一个文件中,这样您就可以将它们一起加载并一起存储到RRD中。如果这是一个问题,并且传感器是独立探测的,那么我建议为每个传感器设置一个单独的RRD,以便您可以单独更新它们。您仍然可以一起生成所有3个图形,因为您可以定义图形DEF以指向不同的RRD文件没有问题。这可能是一种更好的方法。
而Tobi对20y RRA的权利可能有点过分;)