Månadsgraf Elförbrukning?

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:

Re: Månadsgraf Elförbrukning?

Inlägg av Niklas »

Eftersom att hela grafgenereringen jag använder är skriven i perl så var jag tvungen att lära mig att skapa grafer med php för att få till det jag ville och så här blev resultatet. Det finns säkert flera olika sätt att göra det på men detta tycks fungera precis som jag vill. Hoppas att någon annan kanske har nytta av det. Man behöver förstås fixa in rrdtool-tillägget för PHP för att det ska funka.

Kod: Markera allt

<?php

    $rrd = "/sokvag/till/energi.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 = "energi_" . $starttime1 . "_" . $endtime1 . ".png";
    // Filernas namn: energi_starttid_sluttid.png


    	$opts = array(
         "--imgformat", "PNG",
         "--start", "$starttime",
         "--end", "$endtime",
         "--width", "$width",
         "--height", "$height",
         "--slope-mode",
         "--title",
         "Förbrukning $starttime1 till $endtime1",
         "--vertical-label", "Watt",
         "--lower", "0",
         "DEF:energi=$rrd:energi:AVERAGE",
         "CDEF:W=energi,3600,*",
         "CDEF:W_real=energi,1000,/",
         "VDEF:value_sum=W_real,TOTAL",
         "AREA:W#9999ee",
         "LINE1:W#000000",
         "GPRINT:value_sum:Förbrukad mängd\: %0.2lfkWh\\n",
         "GPRINT:W:MIN:Min\: %0.2lf%sW",
         "GPRINT:W:AVERAGE:Medel\: %0.2lf%sW",
         "GPRINT:W:MAX:Max\: %0.2lf%sW\\n",
         "COMMENT:Data sammanställd\: $now"
         );

    	$ret = rrd_graph($filename, $opts, count($opts));

    	if (!is_array($ret)) {
    		$err = rrd_error();
    		echo "rrd_graph() FEL: $err\n";
    	}

    }
?>
Bilagor
energi_2011-02-01_2011-02-28.png
energi_2011-02-01_2011-02-28.png (52.06 KiB) Visad 4885 gånger
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: Månadsgraf Elförbrukning?

Inlägg av daromer »

Ahh var de bara så du ville göra :) Jag trodde du ville ha 1 stapel per månad :)


Ja det ovan är ju lätt att göra. Det är ju bara 1månad bakåt i tiden :D
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: Månadsgraf Elförbrukning?

Inlägg av Niklas »

En graf per kalendermånad skulle genereras... vilket scriptet gör. :)
Inte bara 1 månad tillbaka i tiden utan X antal månader tillbaka.
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: Månadsgraf Elförbrukning?

Inlägg av daromer »

Jo det är ju lätt. Är ju bara att sätta start och slutdatum :D


Det hade jag färdiga script som gör. T ex man sätter startdatum och 1 månad. eller liknande :)
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: Månadsgraf Elförbrukning?

Inlägg av Niklas »

daromer skrev:Jo det är ju lätt. Är ju bara att sätta start och slutdatum :D


Det hade jag färdiga script som gör. T ex man sätter startdatum och 1 månad. eller liknande :)
Ja, precis..
Jag behövde en loop som loopar fram alla som jag har i min rrd, det är ca 3 år. Scriptet var som sagt skrivet i perl. Inte min grej. ;)
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: Månadsgraf Elförbrukning?

Inlägg av daromer »

Varför ska du loopa?

Är väl bara att sätta start och slutdatum i rrdgraph? Eller du menar att du vill automatiskt skapa 1 bild per månad kontinuerligt? Isåfall är jag med igen :)
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: Månadsgraf Elförbrukning?

Inlägg av Niklas »

daromer skrev:Varför ska du loopa?

Är väl bara att sätta start och slutdatum i rrdgraph? Eller du menar att du vill automatiskt skapa 1 bild per månad kontinuerligt? Isåfall är jag med igen :)
Precis.. och så ville jag ju generera fram en graf per månad x antal månader tillbaka också. Data som redan fanns.
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: Månadsgraf Elförbrukning?

Inlägg av daromer »

Lite som denna då:

https://luno.mine.nu/temp2/draw_one.php ... m&range=1m

Där kan man fylla i vad man vill ha och så genererar den en graf. Inte anpassad till energin utan bara tempsensorer i detta fallet men det går att göra en hel del med den.

t ex compare klarar den av med. Samt att köra xxx antal sensorer i samma bild :) Båda dagar samt sekunder.
Quart
Moderator
Inlägg: 566
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Månadsgraf Elförbrukning?

Inlägg av Quart »

Niklas skrev:Eftersom att hela grafgenereringen jag använder är skriven i perl så var jag tvungen att lära mig att skapa grafer med php för att få till det jag ville och så här blev resultatet. Det finns säkert flera olika sätt att göra det på men detta tycks fungera precis som jag vill. Hoppas att någon annan kanske har nytta av det. Man behöver förstås fixa in rrdtool-tillägget för PHP för att det ska funka.

Kod: Markera allt

<?php

    $rrd = "/sokvag/till/energi.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 = "energi_" . $starttime1 . "_" . $endtime1 . ".png";
    // Filernas namn: energi_starttid_sluttid.png


    	$opts = array(
         "--imgformat", "PNG",
         "--start", "$starttime",
         "--end", "$endtime",
         "--width", "$width",
         "--height", "$height",
         "--slope-mode",
         "--title",
         "Förbrukning $starttime1 till $endtime1",
         "--vertical-label", "Watt",
         "--lower", "0",
         "DEF:energi=$rrd:energi:AVERAGE",
         "CDEF:W=energi,3600,*",
         "CDEF:W_real=energi,1000,/",
         "VDEF:value_sum=W_real,TOTAL",
         "AREA:W#9999ee",
         "LINE1:W#000000",
         "GPRINT:value_sum:Förbrukad mängd\: %0.2lfkWh\\n",
         "GPRINT:W:MIN:Min\: %0.2lf%sW",
         "GPRINT:W:AVERAGE:Medel\: %0.2lf%sW",
         "GPRINT:W:MAX:Max\: %0.2lf%sW\\n",
         "COMMENT:Data sammanställd\: $now"
         );

    	$ret = rrd_graph($filename, $opts, count($opts));

    	if (!is_array($ret)) {
    		$err = rrd_error();
    		echo "rrd_graph() FEL: $err\n";
    	}

    }
?>
Försökte detta men lyckades inte, hur får man till det där tilläget för RRD i PHP ?
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: Månadsgraf Elförbrukning?

Inlägg av Niklas »

Quart skrev:
Niklas skrev:Eftersom att hela grafgenereringen jag använder är skriven i perl så var jag tvungen att lära mig att skapa grafer med php för att få till det jag ville och så här blev resultatet. Det finns säkert flera olika sätt att göra det på men detta tycks fungera precis som jag vill. Hoppas att någon annan kanske har nytta av det. Man behöver förstås fixa in rrdtool-tillägget för PHP för att det ska funka.

Kod: Markera allt

<?php

    $rrd = "/sokvag/till/energi.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 = "energi_" . $starttime1 . "_" . $endtime1 . ".png";
    // Filernas namn: energi_starttid_sluttid.png


    	$opts = array(
         "--imgformat", "PNG",
         "--start", "$starttime",
         "--end", "$endtime",
         "--width", "$width",
         "--height", "$height",
         "--slope-mode",
         "--title",
         "Förbrukning $starttime1 till $endtime1",
         "--vertical-label", "Watt",
         "--lower", "0",
         "DEF:energi=$rrd:energi:AVERAGE",
         "CDEF:W=energi,3600,*",
         "CDEF:W_real=energi,1000,/",
         "VDEF:value_sum=W_real,TOTAL",
         "AREA:W#9999ee",
         "LINE1:W#000000",
         "GPRINT:value_sum:Förbrukad mängd\: %0.2lfkWh\\n",
         "GPRINT:W:MIN:Min\: %0.2lf%sW",
         "GPRINT:W:AVERAGE:Medel\: %0.2lf%sW",
         "GPRINT:W:MAX:Max\: %0.2lf%sW\\n",
         "COMMENT:Data sammanställd\: $now"
         );

    	$ret = rrd_graph($filename, $opts, count($opts));

    	if (!is_array($ret)) {
    		$err = rrd_error();
    		echo "rrd_graph() FEL: $err\n";
    	}

    }
?>
Försökte detta men lyckades inte, hur får man till det där tilläget för RRD i PHP ?

Vad kör du för operativsystem?

Ubuntu:
http://blog.webdir.bg/install-php-rrdtool-ubuntu/

Andra Linuxvarianter:
http://servarica.com/installing-rrdtool ... extension/
Quart
Moderator
Inlägg: 566
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Månadsgraf Elförbrukning?

Inlägg av Quart »

Kör ubuntu 10.04 försökte med instruktionen för ubuntu som du länkade till men icke...
Är gröngöling på linux så jag har säkert gjort nåt fel.
När jag kör min php test så står det att Under enviroment
WD /usr/include/php5/ext/rrdtool
Inget om att rrdtool skall vara aktiverat såsom länken visar att de skall stå
Skriv svar