MysQl och JpGraph

Generella mjukvarufrågor som inte är beroende av vilket operativsystem som körs skall ställas i denna kategori
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
B.R.A
Wannabe
Inlägg: 17
Blev medlem: 13 jan 2013, 08:41
Ort: Sandviken
Kontakt:

MysQl och JpGraph

Inlägg av B.R.A »

Tjena allihop.

Har ett 1-wire nätverk där jag loggar temp och elförbrukning och samla data i mysql genom LogTemp.
Håller på med att få till lite grafer för elförbrukningen men får inte in värdena från databasen till grafen.

Så här ser queryn ut:

Kod: Markera allt

$dataArray=array();


	$sql="SELECT DATE_FORMAT( DATETIME, '%H:%i' ) AS hour, 
		(MAX(5B0000000F8AC51D) - MIN(5B0000000F8AC51D)) /1000 AS EL FROM counts 
		WHERE DATETIME BETWEEN DATE_SUB( NOW() , 
		INTERVAL 24 HOUR ) 
		AND NOW( ) 
		GROUP BY HOUR( DATETIME) 
		ORDER BY hour DESC" or die(mysql_error());
		
	$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
		if ($result) {
  		while ($row = mysql_fetch_assoc($result)) {
     		   
      		   $dataArray[$row['hour']]=$row["EL"];
		}
	}
 
och den ger ut följande när jag kör
print_r($dataArray);

Kod: Markera allt

Array ( [23:00] => 2.43 [22:00] => 1.961 [21:00] => 2.074 [20:00] => 2.354 [19:00] => 3.245 [18:00] => 2.766 [17:00] => 2.879 [16:00] => 2.309 [15:00] => 2.268 [14:00] => 2.042 [13:00] => 2.351 [12:00] => 1.951 [11:00] => 1.828 [10:00] => 1.584 [09:40] => 0.642 [08:00] => 1.271 [07:00] => 3.559 [06:00] => 2.93 [05:00] => 3.11 [04:00] => 3.049 [03:00] => 2.878 [02:00] => 2.708 [01:00] => 3.027 [00:00] => 2.719 ) 
Mitt graf script

Kod: Markera allt


// Create the graph. These two calls are always required
$graph = new Graph(350,220,'auto');
$graph->SetScale("textlin");

//$theme_class="DefaultTheme";
//$graph->SetTheme(new $theme_class());

$graph->SetBox(false);

//$graph->ygrid->SetColor('gray');
$graph->ygrid->SetFill(false);
$graph->yaxis->HideLine(false);
$graph->yaxis->HideTicks(false,false);

// Create the bar plots
$b1plot = new BarPlot($dataArray);

// ...and add it to the graPH
$graph->Add($b1plot);


$b1plot->SetColor("white");
$b1plot->SetFillGradient("#4B0082","white",GRAD_LEFT_REFLECTION);
$b1plot->SetWidth(45);
$graph->title->Set("Bar Gradient(Left reflection)");

// Display the graph
$graph->Stroke();
?>
Ger inget felmeddelande utan bara en bildikon i övre vänstra hörnet.

Nån vänlig själ som ser felet....har hållt på i timmar nu med googlesökningar och provat fram och tillbaka.
HomeAutomation 2.0.2
Tellstick duo
LogTemp
1-wire MicroLan
www.b-r-a.se
B.R.A
Wannabe
Inlägg: 17
Blev medlem: 13 jan 2013, 08:41
Ort: Sandviken
Kontakt:

Re: MysQl och JpGraph

Inlägg av B.R.A »

*Ändrade första inlägget då jag råkat lägga in fel graphscript*
HomeAutomation 2.0.2
Tellstick duo
LogTemp
1-wire MicroLan
www.b-r-a.se
B.R.A
Wannabe
Inlägg: 17
Blev medlem: 13 jan 2013, 08:41
Ort: Sandviken
Kontakt:

Re: MysQl och JpGraph

Inlägg av B.R.A »

Efter mycke om och men har jag hittat felet .
Här är felet ifall nån annat stöter på samma.

Första felet var att första <?php tagggen inte låg på rad ett...efter jag ändrat det så fick jag en massa felmeddelanden
om "undefined offset".
Provad fram och tillbaka och kom fram till att man inte kunde lägga x o y axelns värden i samma array fast dom ser lika ut
ex:
Om jag hade denna array:en (Som inte ger graf)

Kod: Markera allt

$datay[$row['hour']]=$row['EL'];
så gav det denna data sträng

Kod: Markera allt

Array ( [23:00] => 2.401 [22:00] => 3.24 [21:00] => 2.643 [20:00] => 2.709 [19:00] => 3.562 [18:47] => 82.827 [17:00] => 3.318 [16:00] => 3.493 [15:00] => 4.924 [14:00] => 2.638 [13:00] => 2.355 [12:00] => 2.53 [11:00] => 2.376 [10:00] => 3.089 [09:00] => 3.623 [08:00] => 5.09 [07:00] => 5.859 [06:00] => 4.125 [05:00] => 3.98 [04:00] => 4.658 [03:00] => 3.603 [02:00] => 2.433 [01:00] => 2.423 [00:00] => 2.543 ) 
Och kör jag denna array:en (som ger graf)

Kod: Markera allt

array_push($datax, $row['EL']);
Så ger den denna datasträng

Kod: Markera allt

Array ( [0] => 2.401 [1] => 3.24 [2] => 2.643 [3] => 2.709 [4] => 3.562 [5] => 82.827 [6] => 3.318 [7] => 3.493 [8] => 4.924 [9] => 2.638 [10] => 2.355 [11] => 2.53 [12] => 2.376 [13] => 3.089 [14] => 3.623 [15] => 5.09 [16] => 5.859 [17] => 4.125 [18] => 3.98 [19] => 4.658 [20] => 3.603 [21] => 2.433 [22] => 2.423 [23] => 2.543 )
Det roliga är att om man kör andra exemplet så blir x-axelns värden det som står inom [] dvs 0, 1, 2, 3, 4 osv.
Fattar inte varför det första exemplet funkar och ger 23:00, 22:00 osv som X-axelns värden. :?

Orkar nog inte gröta i det men har någon nån förklaring till detta fenomen så vore det kul att veta :wink:

Här e iallafall den fungerande koden som jag nu ska förfin grafdesignen bara.
Bara leka vidare så lär man sig nått nytt vid nästa problem :roll: :D

Kod: Markera allt

<?php
require_once ('../../plugins/jpgraph/jpgraph.php');
require_once ('../../plugins/jpgraph/jpgraph_bar.php');
mysql_connect ('localhost','root','*******') or die(mysql_error());
mysql_select_db ('energi') or die(mysql_error());
$datax=array();
$datay=array();
$sql="SELECT DATE_FORMAT( DATETIME, '%H,%i' ) AS hour,
(MAX(5B0000000F8AC51D) - MIN(5B0000000F8AC51D)) /1000 AS EL FROM counts
WHERE DATETIME BETWEEN DATE_SUB( NOW() ,
INTERVAL 23 HOUR )
AND NOW( )
GROUP BY HOUR( DATETIME)
ORDER BY hour DESC" or die(mysql_error());
     $result = mysql_query($sql) or die('Query failed: ' . mysql_error());
         if ($result) {
            while( $row = mysql_fetch_array ($result) ) {
                 array_push($datay, $row['EL']);
                 array_push($datax, $row['hour']);
                              }
             }

$graph = new Graph(640,340,'auto');
$graph->SetScale("textlin");
//$theme_class="DefaultTheme";

//$graph->SetTheme(new $theme_class());
$graph->SetBox(false);

//$graph->ygrid->SetColor('gray');
$graph->ygrid->SetFill(false);
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10);
$graph->xaxis->SetLabelAngle(50);
$graph->yaxis->HideLine(false);
$graph->yaxis->HideTicks(false,false);

// Create the bar plots
$b1plot = new BarPlot($datay);

// ...and add it to the graPH
$graph->Add($b1plot);
$b1plot->SetColor("white");
$b1plot->SetFillGradient("lime","white",GRAD_LEFT_REFLECTION);
$b1plot->SetWidth(10);
$graph->title->Set("Kw PER TIMME");


// Display the graph
$graph->Stroke();
?>
Bilagor
timggraf.png
timggraf.png (11.07 KiB) Visad 5643 gånger
HomeAutomation 2.0.2
Tellstick duo
LogTemp
1-wire MicroLan
www.b-r-a.se
Skriv svar