2016-10-28 5 views
0

Пытается импортировать данные в RRDtool DB для пары датчиков температуры, собранных с USB-контроллера RFXtrx433e. Вывод в .txt файлыИмпортируйте данные датчика в RRDtool DB

Моя база данных создана, как это:

[код]

# 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

Теперь моим вопросам:

  • Создал я базу данных, а остальные сценарии в правильном пути? Я думаю, должен получить NAN по значениям не в БД?

  • Как импортировать остальные датчики? Они находятся в нескольких файлах 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
  1. Да, если значение отсутствует, вы получаете NaN. Ваше заявление о создании выглядит нормально ... хотя 20y с разрешением 1h ... ничего себе!

  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. yes вместо того, чтобы сначала записать их в файл, я бы рекомендовал напрямую обновить rrd-файл.
+0

1. Да, мало что знаю. Создаст новый с 1й макс :). 2. Не могли бы вы посоветовать мне, как писать их прямо на rrd. Я добавил свой LUA-скрипт выше Всего новичков в этом, поэтому я очень ценю всю вашу помощь –

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 \ 

КИ, вы, кажется, имеет размер шага 2min, и ваш RRAS является consolodating 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 вместе, так как вы можете определить свой DEF диаграммы, чтобы не указывать на разные файлы RRD. Это может быть лучший способ сделать это.

И право Тоби относительно 20-летнего RRA, возможно, несколько чрезмерно;)

+0

Хорошая точка. Я сделал несколько RRD вместо этого и получил результат, который я хотел. Спасибо –