RRDTool är en Linuxmjukvara som kan användas för att lagra data i Round-Robin Databaser för att sedan generera grafer utifrån den lagrade datan.
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Niklas
Moderator
Inlägg: 1019 Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:
Inlägg
av Niklas » 20 jan 2009, 04:00
Hej,
Jag vet att det finns personer här som i sina script kontrollerar om värdet som kommer från sensorn är rimligt eller ej.
Jag har ingen felkontroll alls utan pillar in alla värden i databasen. Detta leder till att jag ibland får konstiga dippar ner till 0.00 i mina grafer vilket inte är bra.
Antingen så bör jag ta föregående värdet när jag får ett 0.00 eller så inget alls. Vilket som spelar ingen roll så länge jag slipper de fula dipparna ner till 0 som även sabbar medelvärden osv. Jag kan ha 0.00-kontroll på de sensorer där det aldrig blir 0 grader men på utomhussensorn fungerar ju inte det då det faktiskt kan vara 0 grader ute. En annan möjlighet är ju att jämföra tidigare värde för att se om det är en rimlig föränding. 85-grader ska ju också rensas bort. Jag sparar mina värden i en mySQL-databas också om det kan vara till någon hjälp.
Dela gärna med er av era kontroller som ni gör i era script så att man kan få lite ideer till lösningar!
Tack på förhand!
/Nicke
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434 Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:
Inlägg
av elf98 » 20 jan 2009, 09:24
När du trycker in 0 i databasen har dina script troligt vis omvandlat "" till 0.
Sä kör en koll på strängländen precis efter att du läst in temperaturen så kommer du ifrån detta problem
Grundade m.nu & temperatur.nu
Driver temperatur.nu
Niklas
Moderator
Inlägg: 1019 Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:
Inlägg
av Niklas » 20 jan 2009, 14:43
elf98 skrev: När du trycker in 0 i databasen har dina script troligt vis omvandlat "" till 0.
Sä kör en koll på strängländen precis efter att du läst in temperaturen så kommer du ifrån detta problem
Ja, så måste det ju vara.
Frågan är hur. Perl och jag funkar inte.
FredrikS
Tar hemautomation på allvar
Inlägg: 98 Blev medlem: 23 sep 2008, 21:39
Ort: Linköping
Inlägg
av FredrikS » 20 jan 2009, 14:59
Niklas
Moderator
Inlägg: 1019 Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:
Inlägg
av Niklas » 20 jan 2009, 15:18
Det verkar funka fint.
blev det.
Jag dödade owfs och testade. Funkar fint. Tack.
Det verkar vara rrdtool som stoppar in 0.00 när värdet är tomt.
HUSKii
Tar hemautomation på allvar
Inlägg: 270 Blev medlem: 16 jun 2008, 20:08
Ort: Oskarström
Inlägg
av HUSKii » 24 jan 2009, 13:40
Jag har ett graf genererings skript och ett skript som hämtar temperaturerna och sparar de i *.rrd filer.
Vart ska jag stoppa in den kodsnutten isåfall?
Dowser
Hemautomation - det är mer än en hobby
Inlägg: 811 Blev medlem: 10 mar 2007, 09:44
Ort: Trosa
Kontakt:
Inlägg
av Dowser » 24 jan 2009, 14:55
Detdär skall vara i scriptet där du hämtar temperaturen, innan du stoppar den i databasen.
När du genererar grafen hämtar du bara data från databasen och då är det försent.
Niklas
Moderator
Inlägg: 1019 Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:
Inlägg
av Niklas » 24 jan 2009, 15:22
HUSKii skrev: Jag har ett graf genererings skript och ett skript som hämtar temperaturerna och sparar de i *.rrd filer.
Vart ska jag stoppa in den kodsnutten isåfall?
Jag la det här:
Kod: Markera allt
{
# process sensor
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
# $_[1]: sensor description
# get temperature from sensor
my $temp = `cat $_[2]|tr -d [:space:]`;
# remove eol chars
chomp($temp);
if ($temp eq "") {$temp="NAN";}
print "sensor $_[0]: $temp grader C\n";
Det beror ju lite på hur ditt script ser ut.
HUSKii
Tar hemautomation på allvar
Inlägg: 270 Blev medlem: 16 jun 2008, 20:08
Ort: Oskarström
Inlägg
av HUSKii » 24 jan 2009, 16:03
Såg nu att denna lösningen var för perl, jag hämtar mina temperaturer via ett bash script. Så det sket sig. Men men tack för hjälpen iaf.
Dowser
Hemautomation - det är mer än en hobby
Inlägg: 811 Blev medlem: 10 mar 2007, 09:44
Ort: Trosa
Kontakt:
Inlägg
av Dowser » 24 jan 2009, 16:08
Logiken är precis densamma.
Fritt ur huvudet och otestat borde bash-versionen bli såhär:
if [ "$sensor" = "" ]
then
sensor="NAN"
fi
CirruZZ
Master Moderator
Inlägg: 1621 Blev medlem: 13 feb 2008, 16:46
Ort: Ystad
Inlägg
av CirruZZ » 24 jan 2009, 16:54
Dowser skrev: Logiken är precis densamma.
Fritt ur huvudet och otestat borde bash-versionen bli såhär:
if [ "$sensor" = "" ]
then
sensor="NAN"
fi
Works like a charm!
HUSKii
Tar hemautomation på allvar
Inlägg: 270 Blev medlem: 16 jun 2008, 20:08
Ort: Oskarström
Inlägg
av HUSKii » 24 jan 2009, 17:06
Instämmer med föregående talare!
Tackar för den kodsnutten Dowser!
HUSKii
Tar hemautomation på allvar
Inlägg: 270 Blev medlem: 16 jun 2008, 20:08
Ort: Oskarström
Inlägg
av HUSKii » 01 feb 2009, 16:43
Jag håller på att "förbättra" "inte stopppa in felaktig data i rrd" script. hittils har jag detta:
Kod: Markera allt
#!/bin/bash
OutsideTemp=`cat /mnt/1wire/10.3AD85F010800/temperature|sed -e s/" "//g|awk '{$1=$1 + 0.005;printf "%.2f", $1}'`
if [ "$OutsideTemp" == "" ]
then
OutsideTemp="NAN"
elif [ "$OutsideTemp" == "85" ]
then
OutsideTemp="NAN"
elif [ "$OutsideTemp" == "00" ]
then
OutsideTemp="NAN"
else
echo $OutsideTemp
fi
Men hur ska jag skriva t.ex om den inte får kontakt med en sensor?
Som det är nu så kommer det upp:
Kod: Markera allt
cat: /mnt/1wire/10.2AD85F010800/temperature: No such file or directory
Om jag ändrar 3:an i ID numret till en 2:a.
Niklas
Moderator
Inlägg: 1019 Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:
Inlägg
av Niklas » 01 feb 2009, 20:10
HUSKii skrev: Jag håller på att "förbättra" "inte stopppa in felaktig data i rrd" script. hittils har jag detta:
Kod: Markera allt
#!/bin/bash
OutsideTemp=`cat /mnt/1wire/10.3AD85F010800/temperature|sed -e s/" "//g|awk '{$1=$1 + 0.005;printf "%.2f", $1}'`
if [ "$OutsideTemp" == "" ]
then
OutsideTemp="NAN"
elif [ "$OutsideTemp" == "85" ]
then
OutsideTemp="NAN"
elif [ "$OutsideTemp" == "00" ]
then
OutsideTemp="NAN"
else
echo $OutsideTemp
fi
Men hur ska jag skriva t.ex om den inte får kontakt med en sensor?
Som det är nu så kommer det upp:
Kod: Markera allt
cat: /mnt/1wire/10.2AD85F010800/temperature: No such file or directory
Om jag ändrar 3:an i ID numret till en 2:a.
När den inte kan läsa så blir $OutsideTemp = ingenting så då fungerar $OutsideTemp==""