pChart 2.x forum http://wiki.pchart.net/forum/ |
|
Monitoring house temperature and electric consumption http://wiki.pchart.net/forum/viewtopic.php?f=6&t=2218 |
Page 1 of 2 |
Author: | Niii [ Wed Oct 26, 2011 12:38 am ] | ||
Post subject: | Monitoring house temperature and electric consumption | ||
Hi, Just for show my utilization of pChart library (and add a new topic to showcase :>). Based on OpenWRT on a pogoplug (pink). One daemon reads data from electric supplier every 30 minutes, and saves it to a SQLite database. For temperature, another daemon reads one-wire device (ds18b20) from owfs every 30 minutes, and saves it to another SQLite database. Thanks for this great library !
|
Author: | otownd [ Sun Oct 30, 2011 11:01 pm ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
This is fantastic! I need to do something exactly like this. Can you post your sample code for this? |
Author: | Niii [ Mon Oct 31, 2011 2:44 am ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
I can make documentation for that. About data from electric supplier, do you live in France ? (Or have you an example of data) For information, on 1 Ghz (kirkwood), pChart take 2,5 seconds to generate one image. @Jean-Damien : Do you have tips for optimization ? |
Author: | otownd [ Mon Oct 31, 2011 2:59 am ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
I live in the US. Our power is only provided to us in .CSV format once a month From there I've written a ruby script to make it more readable, once done, I move it to a MySQL DB for now so that I can pull it from there. This is my first time around with pChart, so if you could show me some of your code I would be very appreciative. Some data would be rack,circuit_id,read_date,read_value, 3.1.2.b.01,,423.1.1,2011-09-01,2345.01 |
Author: | Niii [ Tue Nov 01, 2011 11:28 pm ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
My data are not like yours. For generate a graph, I need six variables : $abs_x : Interval for one day/month. $stats : Consumption for each 30 minutes. $date : Date for title. $opt : Because for a day I used bar, and for a month i used stacked bar, value is 0 or 1. (used for title too). $rate_hc : price for one watt/hour between 22:30 to 6:30. $rate_hp : same between 6:30 to 22:30. $rate_hc & $rate_hp : It's an example, depend of your electric supplier and your contract. $stats : The last two array is if the daemon failed to read data (I think you don't need that, so you can delete miss_* charts). Example of data : $abs_x : Code: Array ( [0] => 00:00 [1] => 00:30 [2] => 01:00 [3] => 01:30 [4] => 02:00 [5] => 02:30 [6] => 03:00 [7] => 03:30 [8] => 04:00 [9] => 04:30 [10] => 05:00 [11] => 05:30 [12] => 06:00 [13] => 06:30 [14] => 07:00 [15] => 07:30 [16] => 08:00 [17] => 08:30 [18] => 09:00 [19] => 09:30 [20] => 10:00 [21] => 10:30 [22] => 11:00 [23] => 11:30 [24] => 12:00 [25] => 12:30 [26] => 13:00 [27] => 13:30 [28] => 14:00 [29] => 14:30 [30] => 15:00 [31] => 15:30 [32] => 16:00 [33] => 16:30 [34] => 17:00 [35] => 17:30 [36] => 18:00 [37] => 18:30 [38] => 19:00 [39] => 19:30 [40] => 20:00 [41] => 20:30 [42] => 21:00 [43] => 21:30 [44] => 22:00 [45] => 22:30 [46] => 23:00 [47] => 23:30 [48] => 00:00 ) $stats : Code: Array ( [0] => Array ( [0] => 0 [1] => 72 [2] => 63 [3] => 34 [4] => 36 [5] => 79 [6] => 52 [7] => 35 [8] => 51 [9] => 967 [10] => 1457 [11] => 81 [12] => 79 [13] => 76 [14] => 3 [15] => 0 [16] => 0 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 0 [23] => 0 [24] => 0 [25] => 0 [26] => 0 [27] => 0 [28] => 0 [29] => 0 [30] => 0 [31] => 0 [32] => 0 [33] => 0 [34] => 0 [35] => 0 [36] => 0 [37] => 0 [38] => 0 [39] => 0 [40] => 0 [41] => 0 [42] => 0 [43] => 0 [44] => 0 [45] => 0 [46] => 1103 [47] => 839 [48] => 29 ) [1] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 41 [15] => 33 [16] => 45 [17] => 75 [18] => 41 [19] => 53 [20] => 123 [21] => 191 [22] => 89 [23] => 86 [24] => 43 [25] => 80 [26] => 120 [27] => 98 [28] => 79 [29] => 112 [30] => 76 [31] => 198 [32] => 86 [33] => 83 [34] => 37 [35] => 24 [36] => 32 [37] => 67 [38] => 41 [39] => 23 [40] => 94 [41] => 160 [42] => 135 [43] => 112 [44] => 101 [45] => 146 [46] => 6 [47] => 0 [48] => 0 ) [2] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 0 [15] => 0 [16] => 0 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 0 [23] => 0 [24] => 0 [25] => 0 [26] => 0 [27] => 0 [28] => 0 [29] => 0 [30] => 0 [31] => 0 [32] => 0 [33] => 0 [34] => 0 [35] => 0 [36] => 0 [37] => 0 [38] => 0 [39] => 0 [40] => 0 [41] => 0 [42] => 0 [43] => 0 [44] => 0 [45] => 0 [46] => 0 [47] => 0 [48] => 0 ) [3] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 0 [15] => 0 [16] => 0 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 0 [23] => 0 [24] => 0 [25] => 0 [26] => 0 [27] => 0 [28] => 0 [29] => 0 [30] => 0 [31] => 0 [32] => 0 [33] => 0 [34] => 0 [35] => 0 [36] => 0 [37] => 0 [38] => 0 [39] => 0 [40] => 0 [41] => 0 [42] => 0 [43] => 0 [44] => 0 [45] => 0 [46] => 0 [47] => 0 [48] => 0 ) ) And function : Code: function make_graph_conso($abs_x,$stats,$date,$opt,$rate_hc,$rate_hp) { /* Y axis */ $MyData = new pData(); $MyData->addPoints($stats[0],"hchc"); $MyData->setSerieDescription("hchc","Heures creuses"); $MyData->setSerieOnAxis("hchc",0); $MyData->addPoints($stats[1],"hchp"); $MyData->setSerieDescription("hchp","Heures pleines"); $MyData->setSerieOnAxis("hchp",0); $MyData->addPoints($stats[2],"miss_hchc"); $MyData->setSerieDescription("miss_hchc","Heures creuses manquantes"); $MyData->setSerieOnAxis("miss_hchc",0); $MyData->addPoints($stats[3],"miss_hchp"); $MyData->setSerieDescription("miss_hchp","Heures pleines manquantes"); $MyData->setSerieOnAxis("miss_hchp",0); $MyData->setAxisName(0,"Watt/Heure"); /* X axis */ $MyData->addPoints($abs_x,"x_serie"); $MyData->setSerieDescription("x_serie","Heures"); $MyData->setAbscissa("x_serie"); $MyData->loadPalette("pchart/palettes/edf.color",TRUE); /* Create the pChart object */ $myPicture = new pImage(900,400,$MyData); /* Turn of Antialiasing */ $myPicture->Antialias = FALSE; /* Add a border to the picture */ global $div_bgcolor; $rgb = html2rgb($div_bgcolor); $Settings = array("R"=>$rgb[0], "G"=>$rgb[1], "B"=>$rgb[2]); $myPicture->drawFilledRectangle(0,0,900,400,$Settings); /* Set the title */ $myPicture->setFontProperties(array("FontName"=>"pchart/fonts/verdana.ttf","FontSize"=>8)); $TitleSettings = array("Align"=>TEXT_ALIGN_TOPLEFT, "R"=>255, "G"=>255, "B"=>255); if ($opt == 0) $myPicture->drawText(65,17,"Consommation électrique du ".dateFR($date),$TitleSettings); if ($opt == 1) $myPicture->drawText(65,17,"Consommation électrique du mois de ".strftime('%B', strtotime("now",strtotime($date))),$TitleSettings); /* Define the chart area */ $myPicture->setGraphArea(60,60,850,340); $myPicture->setFontProperties(array("R"=>255,"G"=>255,"B"=>255, "FontName"=>"pchart/fonts/verdana.ttf","FontSize"=>7)); /* Draw the scale */ $AxisBoundaries = array(0=>array("Min"=>0,"Max"=>50000)); $scaleSettings = array("GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>FALSE,"CycleBackground"=>TRUE, "LabelRotation"=>90,"Mode"=>SCALE_MODE_START0,"ManualScale"=>$AxisBoundaries); $myPicture->drawScale($scaleSettings); /* Turn on shadow computing */ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); /* Draw the chart */ $Config = array("BarOffset"=>8); if ($opt == 0) {$myPicture->drawStackedBarChart($Config);} if ($opt == 1) {$myPicture->drawBarChart($Config);} /* Write the chart legend */ $Config = array("FontR"=>255, "FontG"=>255, "FontB"=>255, "FontName"=>"pchart/fonts/verdana.ttf", "FontSize"=>7, "Margin"=>6, "Alpha"=>30, "BoxSize"=>$ $myPicture->drawLegend(700,11,$Config); /* Write cost */ $day_conso_hchc = 0; $day_conso_hchp = 0; for($x=0;$x<=sizeof($abs_x)-1;$x++) { $day_conso_hchc += $stats[0][$x]+$stats[2][$x];} for($x=0;$x<=sizeof($abs_x)-1;$x++) { $day_conso_hchp += $stats[1][$x]+$stats[3][$x];} $myPicture->setFontProperties(array("FontName"=>"pchart/fonts/verdana.ttf","FontSize"=>8)); $TitleSettings = array("Align"=>TEXT_ALIGN_TOPLEFT, "R"=>255, "G"=>255, "B"=>255); $myPicture->drawText(65,30,'Heures creuses : '.round(($day_conso_hchc/1000),2).' Kwh, heures pleines : '.round(($day_conso_hchp/1000),2).' Kwh, soit un cout de '.round((($day_conso_hchc/1000)*$rate_hc)+(($day_conso_hchp/1000)*$rate_hp),2).' euros',$TitleSettings); $myPicture->Antialias = TRUE; $myPicture->stroke(); } |
Author: | Andyyyy [ Tue Jun 12, 2012 7:31 am ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
Hello Niii, your chart looks really awesome !!! Would you please Post the code for the dateselection in the header ? THX Andyyyy |
Author: | Niii [ Tue Jun 12, 2012 8:10 am ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
Hi, Take a look at : http://bugsvoice.com/applications/bugsV ... erDemo.jsp |
Author: | Andyyyy [ Tue Jun 12, 2012 8:26 am ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
Thank You !!!!! Andyyyy |
Author: | Andyyyy [ Tue Jun 12, 2012 9:46 am ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
How did you send The date to pchart ??? Andyyyy |
Author: | Niii [ Tue Jun 12, 2012 12:03 pm ] |
Post subject: | Re: Monitoring house temperature and electric consumption |
I use variable from callback "callback:function(cal)" : cal.currentDate.getDate() cal.currentDate.getMonth() cal.currentDate.getFullYear() |
Page 1 of 2 | All times are UTC |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |