Sida 1 av 2

PHP och RRD

Postat: 07 mar 2011, 20:58
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. :)

Re: PHP och RRD

Postat: 07 mar 2011, 22:36
av Hoffan
Berätta gärna sedan ..
Om du kommer på nån bra lösning :)

Re: PHP och RRD

Postat: 08 mar 2011, 08:37
av CirruZZ
Använd någon CMD funktion och vanlig hedlig rrdtool. http://www.temperatur.nu/forum/rrdtool/ ... iner#p5186

Re: PHP och RRD

Postat: 08 mar 2011, 18:34
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. :)

Re: PHP och RRD

Postat: 08 mar 2011, 20:25
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.

Re: PHP och RRD

Postat: 05 feb 2012, 10:07
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);
        }

    }
?>

Re: PHP och RRD

Postat: 07 feb 2012, 16:56
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...

Re: PHP och RRD

Postat: 07 feb 2012, 16:59
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. :)

Re: PHP och RRD

Postat: 07 feb 2012, 19:12
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.

Re: PHP och RRD

Postat: 07 feb 2012, 20:11
av bertilson
Och hur gör man för att få in RRD pluginet? Lyckas inte hitta någon bra dokumentation på detta

Re: PHP och RRD

Postat: 07 feb 2012, 20:46
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

Re: PHP och RRD

Postat: 07 feb 2012, 20:56
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.

Re: PHP och RRD

Postat: 07 feb 2012, 20:56
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

Re: PHP och RRD

Postat: 22 mar 2012, 16:26
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?

PHP och RRD

Postat: 22 mar 2012, 17:14
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.