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.

PHP och RRD

Inläggav Niklas » 07 mar 2011, 20:58

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. :)
Niklas
Moderator
 
Inlägg: 734
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm

Annons


Re: PHP och RRD

Inläggav Hoffan » 07 mar 2011, 22:36

Berätta gärna sedan ..
Om du kommer på nån bra lösning :)
Hoffan
Amatörmeterolog
 
Inlägg: 289
Blev medlem: 13 maj 2007, 22:46
Ort: Mölndal

Re: PHP och RRD

Inläggav CirruZZ » 08 mar 2011, 08:37

Projekt tråd | Blogg | Hemautomation
Rapporterar för : Ystad & Duved
Användarvisningsbild
CirruZZ
Master Moderator
 
Inlägg: 1286
Blev medlem: 13 feb 2008, 16:46
Ort: Ystad

Re: PHP och RRD

Inläggav Niklas » 08 mar 2011, 18:34

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. :)
Niklas
Moderator
 
Inlägg: 734
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm

Re: PHP och RRD

Inläggav daromer » 08 mar 2011, 20:25

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.
daromer
Har temperatur.nu som hobby
 
Inlägg: 742
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: PHP och RRD

Inläggav PatrikN78 » 05 feb 2012, 10:07

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);
        }

    }
?>
PatrikN78
Wannabe
 
Inlägg: 17
Blev medlem: 24 dec 2011, 16:24
Ort: Jämjö

Re: PHP och RRD

Inläggav bertilson » 07 feb 2012, 16:56

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...
bertilson
Väderfreak
 
Inlägg: 70
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inläggav Niklas » 07 feb 2012, 16:59

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. :)
Niklas
Moderator
 
Inlägg: 734
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm

Re: PHP och RRD

Inläggav bertilson » 07 feb 2012, 19:12

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.
bertilson
Väderfreak
 
Inlägg: 70
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inläggav bertilson » 07 feb 2012, 20:11

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

Re: PHP och RRD

Inläggav bertilson » 07 feb 2012, 20:46

Fick in pluginet.

Hittade hjälp här:
http://sam.liho.tw/2009/03/11/howto-build-the-php-rrdtool-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 07 feb 2012, 20:58, redigerad totalt 1 gång.
bertilson
Väderfreak
 
Inlägg: 70
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

Re: PHP och RRD

Inläggav Niklas » 07 feb 2012, 20:56

bertilson skrev:Fick in pluginet.

Hittade hjälp här:
http://sam.liho.tw/2009/03/11/howto-build-the-php-rrdtool-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.
Niklas
Moderator
 
Inlägg: 734
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm

Re: PHP och RRD

Inläggav jed » 07 feb 2012, 20:56

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
jed
Amatörmeterolog
 
Inlägg: 179
Blev medlem: 16 apr 2011, 10:51
Ort: Stockholm

Re: PHP och RRD

Inläggav bertilson » 22 mar 2012, 16:26

Hur hanterar ni bilderna?


I mitt script jag har nu, på [url]adgj.se/temp[/url] 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?
bertilson
Väderfreak
 
Inlägg: 70
Blev medlem: 21 dec 2009, 11:41
Ort: Borås

PHP och RRD

Inläggav PatrikN78 » 22 mar 2012, 17:14

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.
PatrikN78
Wannabe
 
Inlägg: 17
Blev medlem: 24 dec 2011, 16:24
Ort: Jämjö

Nästa

Återgå till RRDTool

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 2 gäster