Sida 1 av 1

Inte stoppa in felaktig data i RRD-databas?

Postat: 20 jan 2009, 04:00
av Niklas
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

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 20 jan 2009, 09:24
av elf98
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

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 20 jan 2009, 14:43
av Niklas
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. ;-)

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 20 jan 2009, 14:59
av FredrikS

Kod: Markera allt

if ($sensor eq "") {$sensor="NAN";}
typ....

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 20 jan 2009, 15:18
av Niklas
FredrikS skrev:

Kod: Markera allt

if ($sensor eq "") {$sensor="NAN";}
typ....
Det verkar funka fint.

Kod: Markera allt

if ($temp eq "") {$temp="NAN";}
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.

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 24 jan 2009, 13:40
av HUSKii
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?

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 24 jan 2009, 14:55
av Dowser
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.

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 24 jan 2009, 15:22
av Niklas
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. :)

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 24 jan 2009, 16:03
av HUSKii
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.

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 24 jan 2009, 16:08
av Dowser
Logiken är precis densamma.
Fritt ur huvudet och otestat borde bash-versionen bli såhär:

if [ "$sensor" = "" ]
then
sensor="NAN"
fi

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 24 jan 2009, 16:54
av CirruZZ
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! :wink:

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 24 jan 2009, 17:06
av HUSKii
Instämmer med föregående talare!

Tackar för den kodsnutten Dowser!

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 01 feb 2009, 16:43
av HUSKii
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.

Re: Inte stoppa in felaktig data i RRD-databas?

Postat: 01 feb 2009, 20:10
av Niklas
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==""