将传感器数据导入RRDtool数据库



尝试将从RFXtrx433e USB控制器收集的两个温度传感器的数据导入RRDtool DB。输出到.txt文件

我的数据库创建如下:

[代码]

# 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       Senastel" 
LINE1:probe#ff0000:"Utetemp" 
LINE1:0#ff0000: 
GPRINT:probe:MIN:"    %5.1lf"  
GPRINT:probe:MAX:"     %5.1lf"  
GPRINT:probe:LAST:"     %5.1lfn"  
LINE1:xxxx1#00ff00:"Xxxx1" 
LINE1:0#00ff00: 
GPRINT:probe:MIN:"      %5.1lf"  
GPRINT:probe:MAX:"     %5.1lf"  
GPRINT:probe:LAST:"     %5.1lfn"  
LINE1:vardagsrum#0000ff:"vardagsrum" 
LINE1:0#0000ff: 
GPRINT:probe:MIN:" %5.1lf"  
GPRINT:probe:MAX:"     %5.1lf"  
GPRINT:probe:LAST:"     %5.1lfn"  

给我这个图https://i.stack.imgur.com/TmPFF.png

现在回答我的问题:

  • 我是否以正确的方式创建了数据库和脚本的其余部分?我认为应该让NAN了解DB中没有的值?

  • 如何导入其余传感器?它们在几个模拟TXT文件中。

  • 我应该/可以用另一种更好的方式从传感器收集数据,将其输入RRDtool数据库吗

希望有人能帮助我。


新信息!

用于收集传感器数据的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`
  1. 是的,如果缺少值,则获得NaN。您的create语句看起来不错。。。虽然分辨率为1h的20y。。。哇!

  2. 从几个文本文件导入将像这个一样工作

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. 是的,我建议直接更新rrd文件,而不是先将它们写入文件
# 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倍,以允许不规则的数据到达。

然而,这些都与你的"未知"问题无关,托比已经回答了很多问题。

  1. 您将在未加载的时隙中获得"未知",是的

2和3。由于您只有一个RRD,因此需要在相同的时间戳、相同的操作中更新所有样本。在这种情况下,您最好一次将它们全部收集并存储到同一个文件中,这样您就可以将它们一起加载并存储到RRD中。如果这是一个问题,并且传感器是独立探测的,那么我建议每个传感器都有一个单独的RRD,这样你就可以独立地更新它们。你仍然可以在所有3个文件上生成一个图,因为你可以定义你的图DEFs来指向不同的RRD文件,这没有问题。这可能是更好的方法。

托比关于20年RRA可能有点过分的说法是正确的;(

相关内容

  • 没有找到相关文章

最新更新