Skriv RRD-data till textfil

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!
Mossfeldt
Wannabe
Inlägg: 10
Blev medlem: 07 sep 2010, 12:27
Ort: Hagfors
Kontakt:

Skriv RRD-data till textfil

Inlägg av Mossfeldt »

Är det möjligt att skriva ut RRD-data till en textfil?

Jag skulle vilja ha ut föregående och nuvarande veckas elanvändning i x.xx kWh för att sedan visa detta på min hemsida.
Elanvändningen loggar jag enligt Wikin.

Johan
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Skriv RRD-data till textfil

Inlägg av motoz »

Allt är möjligt!

Utan att veta exakt hur ditt skript ser ut, så principen är:
Ta bort alla 'AREA' och 'LINE' från från 'rrdtool graph' kommandoraden och byt ut GPRINT till PRINT, så skrivs data endast ut till skärmen i stället för att skrivas in i bildfilen. Lägg sedan till

Kod: Markera allt

>> data.txt
i slutet så skrivs data till filen data.txt istället för att hamna på skärmen.

Vill du också ha kurvdata och inte bara data från GPRINT till filen så använder du rrdtool xport istället för rrdtool graph, så får du allt i xml (eller json) format, se http://oss.oetiker.ch/rrdtool/doc/rrdxport.en.html
Open source pellet logger: https://github.com/motoz/PellMon
Mossfeldt
Wannabe
Inlägg: 10
Blev medlem: 07 sep 2010, 12:27
Ort: Hagfors
Kontakt:

Re: Skriv RRD-data till textfil

Inlägg av Mossfeldt »

Tackar!
Det hjälpte mig halvvägs. Jag får ut den data jag vill men i textfilen skrivs även upplösningen på grafen ut. Vet om det finns en parameter i RRDTool för att inte skriva ut upplösningen? Har sökt men utan resultat.

Kod: Markera allt

PRINT:W:LAST:"%0.2lf%sW" \
> /mnt/web/txt/energinu.txt \
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Skriv RRD-data till textfil

Inlägg av motoz »

Det finns säkert hur många sätt som helst att skippa första raden från utskriften från rrdtool, men ett sätt är 'tail' med parametern '-n +2'

från 'man tail':
-n, --lines=K
output the last K lines, instead of the last 10; or use -n +K to
output lines starting with the Kth

testade med:

Kod: Markera allt

rrdtool graph test.png \
--start -24h --end now \
DEF:e=rrd.db:outside_temp:AVERAGE PRINT:e:AVERAGE:"tempertur\: %0.2lf%sW"|tail -n +2>test.txt
verkar fungera...

Tydligen måste man ge ett filnamn (test.png) trots att man inte vill ha någon bildfil...
Open source pellet logger: https://github.com/motoz/PellMon
Mossfeldt
Wannabe
Inlägg: 10
Blev medlem: 07 sep 2010, 12:27
Ort: Hagfors
Kontakt:

Re: Skriv RRD-data till textfil

Inlägg av Mossfeldt »

Tusen tack för hjälpen motoz!

Jag ändrade helt enkelt koden till

Kod: Markera allt

   PRINT:W:LAST:"%0.2lf%sW"|tail -n +2>/mnt/web/txt/energinu.txt \
Kanske är en omväg att köra PRINT till skärmen och sedan till .txt via tail men det funkar. :wink:
Nu kan jag äntligen fortsätta med min websida.
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Skriv RRD-data till textfil

Inlägg av motoz »

Nja, det far ju inte via skärmen utan till STDOUT, som normalt hamnar på skärmen, men via en pipe '|' så riktar du om STDOUT till nästa kommando 'tail' istället som gör sin grej och sedan skickar du output därifrån vidare till filen med '>'. Kort och gott så som UNIX är tänkt att fungera!
Open source pellet logger: https://github.com/motoz/PellMon
Mossfeldt
Wannabe
Inlägg: 10
Blev medlem: 07 sep 2010, 12:27
Ort: Hagfors
Kontakt:

Re: Skriv RRD-data till textfil

Inlägg av Mossfeldt »

Lät inte riktigt som jag menade i tidigare inlägg.
Måste be om mer hjälp då jag inte får detta att fungera med flera värden.
Jag har tre värden jag vill skriva till tre separata filer /tot el, hh el och llvp el)

Kör tre PRINT och det funkar

Kod: Markera allt

   PRINT:W:LAST:"%0.2lf%sW" \
   PRINT:X:LAST:"%0.2lf%sW" \
   PRINT:Y:LAST:"%0.2lf%sW" \
Vet inte riktigt hur jag ska bära mig för att köra pipe och få ut alla tre värdena.
Lägger jag en |tail på första raden så får jag felmeddelande att

Kod: Markera allt

tail: cannot open `PRINT:X:LAST:%0.2lf%sW' for reading: No such file or directory
tail: cannot open `PRINT:Y:LAST:%0.2lf%sW' for reading: No such file or director
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Skriv RRD-data till textfil

Inlägg av motoz »

För att få data till tre filer så kan du anropa "rrdtool graph" tre gånger med olika PRINT och en >filX.txt på slutet av varje.

Eller så kör du rrdtool graph en gång med alla PRINT till en och samma fil, och sedan efteråt kan du dela upp filen till tre nya filer, tex med 'sed'.

Så här kan du skippa 'tail' också, om fil.txt innehåller fyra rader, så hamnar rad 2 i fil1.txt, rad3 i fil2.txt osv

Kod: Markera allt

cat fil.txt|sed '2!d'>fil1.txt
cat fil.txt|sed '3!d'>fil2.txt
cat fil.txt|sed '4!d'>fil3.txt
Open source pellet logger: https://github.com/motoz/PellMon
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Skriv RRD-data till textfil

Inlägg av motoz »

Om det fortfarande var oklart så posta gärna hela skriptet så är det lättare att ge precisa råd.
Open source pellet logger: https://github.com/motoz/PellMon
aminders
Inlägg: 2
Blev medlem: 01 feb 2012, 21:41
Ort: Sundsvall

Re: Skriv RRD-data till textfil

Inlägg av aminders »

Hej!
Har liknande problem med att få ut sista värdet ur en rrd-fil.
Kör med Raspberry Pi, 1wire och rrdtool och får ut fina grafer.
Graferna skriptas med perl:
#!/usr/bin/perl

use RRDs;

my $cur_time = time();
my $start_time = $cur_time - 21600; # set end time to 24 hours ago

RRDs::graph "/mnt/www/graph_utetemp_6h.png",
"--start= $start_time",
"--end= $cur_time",
"--title= xxx - ute - senaste 6 timmarna",
"--watermark=xxx",
"--height= 150",
"--width= 800",
"--vertical-label= °C",
"--alt-autoscale",
"--alt-y-grid",
"--slope-mode",
"DEF:UteTemp=/mnt/rrddata/Ute_Temp.rrd:UteTemp:AVERAGE",
"DEF:UteTempmax=/mnt/rrddata/Ute_Temp.rrd:UteTemp:MAX",
"COMMENT:\t\tNu Medel Max Min\\n",
"HRULE:0#0000FF",
"LINE1:UteTemp#00F:Ute\t",
# "AREA:UteTemp#EEE",
"GPRINT:UteTemp:LAST:%6.1lf",
"GPRINT:UteTemp:AVERAGE:%6.1lf",
"GPRINT:UteTemp:MAX:%6.1lf",
"GPRINT:UteTemp:MIN:%6.1lf\\n";
my $err=RRDs::error;
if ($err) {print "problem generating the graph: $err\n";}

print "Done!\n"
Hur skriptar jag för att få ut en textfil med sista avlästa värdet?
Jag har letat som besatt!
Tror att rrdlastupdate skulle fixa det men fattar inte hur.

Snälla någon hjälp.

Mvh
Anders
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Skriv RRD-data till textfil

Inlägg av motoz »

Kod: Markera allt

rrdtool lastupdate
gör mycket riktigt det du vill. Men nu använder du alltså perl bindningarna till rrdlib istället för att använda rrdtool kommandot direkt. Enligt https://oss.oetiker.ch/rrdtool/prog/RRDs.en.html så ser ut som att det inte finns nån perl bindning för 'lastupdate'.

Men du kan ju anropa rrdtool lastupdate från perlskriptet, se tex http://stackoverflow.com/questions/3200 ... erl-script

Rrdtool lastupdate dokumentation:
http://oss.oetiker.ch/rrdtool/doc/rrdlastupdate.en.html
Open source pellet logger: https://github.com/motoz/PellMon
aminders
Inlägg: 2
Blev medlem: 01 feb 2012, 21:41
Ort: Sundsvall

Re: Skriv RRD-data till textfil

Inlägg av aminders »

Tack för svaret!
Jag hittade en annan lösning. Plockade sista värdet direkt ur 1wire. Sitter på jobbet så jag har inte bash-scriptet aktuellt i skallen.
Allt för att visa aktuella temperaturer i huset. Ex från övervåningen och ute.
hustemp.png
hustemp.png (261.11 KiB) Visad 10265 gånger

Mvh
Anders
Skriv svar