PHP och RRD

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:

PHP och RRD

Inlägg av Niklas »

Tjena.

Jag vill jobba lite med datan som finns i mina RRD-databaser.
Kan jag med php (eller något) hämta ut min förbrukning (kwh) per månad 12 månader tillbaka?
Jag vill också hämta fram förbrukning innevarande månad.. från 1:a fram tills när sidan genereras.

Tack på förhand!

Edit: Kompilerade in rrdtool-pluginen till PHP. Får se vad man kan göra för något roligt. :)
Hoffan
Hemautomation - det är mer än en hobby
Inlägg: 352
Blev medlem: 13 maj 2007, 22:46
Ort: Mölndal

Re: PHP och RRD

Inlägg av Hoffan »

Berätta gärna sedan ..
Om du kommer på nån bra lösning :)
Användarvisningsbild
CirruZZ
Master Moderator
Inlägg: 1621
Blev medlem: 13 feb 2008, 16:46
Ort: Ystad

Re: PHP och RRD

Inlägg av CirruZZ »

Använd någon CMD funktion och vanlig hedlig rrdtool. http://www.temperatur.nu/forum/rrdtool/ ... iner#p5186
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: PHP och RRD

Inlägg av Niklas »

Utan att använda CMD, med stöd för RRDTOOL direkt i php:

Kod: Markera allt

<?
$opts = array(
	'--start=end-1m',
    'DEF:energi=/home/niklas/rrd/energi.rrd:energi:AVERAGE',
    'CDEF:W=energi,3600,*',
    'CDEF:W_real=energi,1000,/',
    'VDEF:value_sum=W_real,TOTAL',
    'PRINT:value_sum:%0.2lf'

);

$result = rrd_graph('/dev/null', $opts, count($opts));
if ($result === false) {
	echo 'There was an error: ';
	echo rrd_error();
}
else {
  print_r($result);
}
?>
Ger mig:

Kod: Markera allt

Array ( [xsize] => 0 [ysize] => 0 [calcpr] => Array ( [0] => 2309.40 ) ) 
Dvs 2309.40kwh den senaste månaden. :)
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: PHP och RRD

Inlägg av daromer »

Jag körde med phps inbyggda innan med. Tills att jag gav mig på att grafa med php. där saknas mycke funktionalitiet. Att hämta datan går ju ivf.
PatrikN78
Tar hemautomation på allvar
Inlägg: 99
Blev medlem: 24 dec 2011, 16:24
Ort: Jämjö

Re: PHP och RRD

Inlägg av PatrikN78 »

Niklas skrev:Utan att använda CMD, med stöd för RRDTOOL direkt i php:

Kod: Markera allt

<?
$opts = array(
	'--start=end-1m',
    'DEF:energi=/home/niklas/rrd/energi.rrd:energi:AVERAGE',
    'CDEF:W=energi,3600,*',
    'CDEF:W_real=energi,1000,/',
    'VDEF:value_sum=W_real,TOTAL',
    'PRINT:value_sum:%0.2lf'

);

$result = rrd_graph('/dev/null', $opts, count($opts));
if ($result === false) {
	echo 'There was an error: ';
	echo rrd_error();
}
else {
  print_r($result);
}
?>
Ger mig:

Kod: Markera allt

Array ( [xsize] => 0 [ysize] => 0 [calcpr] => Array ( [0] => 2309.40 ) ) 
Dvs 2309.40kwh den senaste månaden. :)
Hm, jag får ut:

Kod: Markera allt

Array ( [xsize] => 697 [ysize] => 301 [calcpr] => Array ( ) ) Array ( [xsize] => 697 [ysize] => 301 [calcpr] => Array ( ) )
Någonstans måste jag ju gjort fel, eller eftersom array verkar tom?

Kod (Lånad från någonstans, nu med lustiga tecken från SSH-klienten..):

Kod: Markera allt

<?php

    $rrd = "/home/patrik/rrddata/outside_temp.rrd"; // S�kv�gen till rrd-databasen.

    $max_month = date('m');    // Max antal m�nader att r�kna upp. Nuvarande m�nad anges som max.
    $year = date('Y');    // Vilket �r. Nuvarande �r anges. Om 2010 anges s� �ndras max_month till 12 f�r att f� hela �ret.

    $width = "600";
    $height = "200";

    $now = date('Y-m-d');

    for ($i = 1; $i <= $max_month; $i++) {    //k�r loopen tills nuvarande m�nad har r�knats upp.
       $month = $i;    // Vilken m�nad. (Skapas av loopen)
       $starttime1 = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year));    // datum i lite mer l�sbart format
       $endtime1 = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year));    // datum i lite mer l�sbart format
       $starttime = strtotime(date('Y-m-d', mktime(0, 0, 0, $month, 1, $year)));    // Startdatum i Unixtid
       $endtime = strtotime(date('Y-m-t', mktime(0, 0, 0, $month, 1, $year)));    // Slutdatum i Unixtid
       $filename = "temp_" . $starttime1 . "_" . $endtime1 . ".png";

       $opts = array(
         "--imgformat", "PNG",
         "--start", "$starttime",
         "--end", "$endtime",
         "--width", "$width",
         "--height", "$height",
         "--slope-mode",
         "--title",
         "Temp $starttime1 till $endtime1",
         "--vertical-label", "°C",
         "--lower", "0",
         "DEF:temp=$rrd:outsidetemp:AVERAGE",
         "LINE1:temp#000000:Ute",
         "GPRINT:temp:LAST:Temperatur %0.2lf\\n",
         "GPRINT:temp:MIN:Min\: %0.2lf%s",
         "GPRINT:temp:AVERAGE:Medel\: %0.2lf%s",
         "GPRINT:temp:MAX:Max\: %0.2lf%s\\n",
         "COMMENT:Tid\: $now"
         );
        $ret = rrd_graph($filename, $opts, count($opts));
        if ($ret === false) {
          $err = rrd_error();
          echo "rrd_graph() FEL: $err\n";
        }
        else {
          print_r($ret);
        }

    }
?>
Användarvisningsbild
bertilson
Tar hemautomation på allvar
Inlägg: 133
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inlägg av bertilson »

Skall man köra med eller utan RRD-plugin till PHP?


Är det någon som har ett enklare exempel srcipt att dela med sig av?? Jag får det inte att fungera...
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: PHP och RRD

Inlägg av Niklas »

bertilson skrev:Skall man köra med eller utan RRD-plugin till PHP?


Är det någon som har ett enklare exempel srcipt att dela med sig av?? Jag får det inte att fungera...
Scriptet jobbar med RRD-pluginen till PHP så den måste du ha.
Den lånade koden du har hittat har jag skrivit. :)
Användarvisningsbild
bertilson
Tar hemautomation på allvar
Inlägg: 133
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inlägg av bertilson »

Jag har läst ganska mycket om att köra med "CMD" istället men vet inte vad det innebär

Är som det märks helt ny på detta med PHP.

Hur gör man för att köra bash-commandon ifrån PHP t.ex om jag vill köra nått i stil med

Kod: Markera allt

echo $_POST["fname"] > /var/www/fil.txt


Sen är jag ute efter att mina bilder skall genereras när jag laddar sidan, och inte som nu varannan minut dygnet runt.
Användarvisningsbild
bertilson
Tar hemautomation på allvar
Inlägg: 133
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inlägg av bertilson »

Och hur gör man för att få in RRD pluginet? Lyckas inte hitta någon bra dokumentation på detta
Användarvisningsbild
bertilson
Tar hemautomation på allvar
Inlägg: 133
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inlägg av bertilson »

Fick in pluginet.

Hittade hjälp här:
http://sam.liho.tw/2009/03/11/howto-bui ... extension/

Kör den lånade koden ovan.
Har ändrat den så att den letar efter min RRD istället

men får felmeddelande:

"rrd_graph() FEL: opening '/home/per/rrddata/temp_outside.rrd': Permission denied rrd_graph() FEL: opening '/home/per/rrddata/temp_outside.rrd': Permission denied"


Vad gör jag för fel nu då?

*Edit
Hade visst inte läsbehörighet till mappen den lag i, RRD-baserna flyttade och nu funkar det bättre
Senast redigerad av bertilson den 07 feb 2012, 20:58, redigerad totalt 1 gånger.
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: PHP och RRD

Inlägg av Niklas »

bertilson skrev:Fick in pluginet.

Hittade hjälp här:
http://sam.liho.tw/2009/03/11/howto-bui ... extension/

Kör den lånade koden ovan.
Har ändrat den så att den letar efter min RRD istället

men får felmeddelande:

"rrd_graph() FEL: opening '/home/per/rrddata/temp_outside.rrd': Permission denied rrd_graph() FEL: opening '/home/per/rrddata/temp_outside.rrd': Permission denied"


Vad gör jag för fel nu då?
PHP har inte rättigheter för att läsa /home/per/rrddata/temp_outside.rrd, vet inte riktigt vilka rättigheter du bör ändra till. chmod 755 /home/per/rrddata/temp_outside.rrd kan funka. Då ger du dock alla läsrättigheter men bara ägaren skrivrättigheter.
jed
Tar hemautomation på allvar
Inlägg: 179
Blev medlem: 16 apr 2011, 10:51
Ort: Stockholm

Re: PHP och RRD

Inlägg av jed »

Bertilson: användaren som kör din webserver (antagligen www_data) har inte rättigheter att läsa dina rrd-filer.

Kolla med ls -l (på ALLA kataloger i sökvägen samt rrd-filerna), antagligen kommer den inte åt /home/per

drwx------ <- då kommer bara du åt katalogen
drwxr-x--- <- då kommer du och din primära grupp åt den
drwxr-xr-x <- då kommer alla användare på servern åt den

om det bara är du som kommer in på maskinen kan du öppna upp lite.


Eller så lägger du dina rrd-filer någon annanstans, tex i /var/rrd och ger webservern läsrättigheter till dom
Användarvisningsbild
bertilson
Tar hemautomation på allvar
Inlägg: 133
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inlägg av bertilson »

Hur hanterar ni bilderna?


I mitt script jag har nu, på adgj.se/temp så heter alltid bilden graph.png och ligger alltid kvar, Detta påverkar 2saker hos mig.

1. webläsaren har en tendens att chacha bilden och uppdaterar den inte om jag vill ändra något.

2. Om scriptet pga en felaktig parameter inte genererar en graph är det inte alltid man märker det.


Sen helt hypotestiskt, om det är flera som samtidigt generear en graf, hur löser man det?? Jag har på nått sätt funderat på att använda unika filnamn som automatiskt raderas.

Men vad har ni för lösning?
PatrikN78
Tar hemautomation på allvar
Inlägg: 99
Blev medlem: 24 dec 2011, 16:24
Ort: Jämjö

PHP och RRD

Inlägg av PatrikN78 »

Min heter alltid graph.png och jag har lagt in en tidsstämpel i bilden. Då ser jag om bilden är gammal ellet ny. Bilderna ritar jag om varje 2,5min med perlscript. Det räcker tidsmässigt för mig.
Skriv svar