<?php
/*******************************************
/* Programm graph.php4
/* displays temperature
/* (c) Copyright 2002, Jens Bierkandt
/* e-mail: jens@bierkandt.org
/* Entstanden im Rahmen meiner Diplomarbeit
/*******************************************
*/
error_reporting(63);
set_time_limit(60);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "
GMT");
// always modified
header("Cache-Control: no-store, no-cache,
must-revalidate");
// HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: public");
$total = time();
include ("jpgraph-1.6.1/src/jpgraph.php");
include ("jpgraph-1.6.1/src/jpgraph_line.php");
include ("/home/schtorch/public_html/diplom/config.php4");
// Check variables and initialize
if (!isset($table))
Header("Location: index.php4"); // Forward user to main
page to reselect table
if (!isset($average)) $average = 10;
if ($average > 999) $average = 999;
if (!(isset($width_graph) || isset($height_graph))) {
$width_graph = 600;
$height_graph = 400;
};
if ($width_graph < 600 || $height_graph < 400) {
$width_graph = 600;
$height_graph = 400;
};
// check if only max and mins with refering sensor
selected
if (isset($sendmax)) {
$b = 0;
for ($i = 0; $i < sizeof($sendmax); $i++) {
for ($a = 0; $a < sizeof($sensor); $a++) {
if ($sendmax[$i] == $sensor[$a]) {
$max[$b] = $sendmax[$i];
$b++;
}
}
}
}
if (isset($sendmin)) {
$b = 0;
for ($i = 0; $i < sizeof($sendmin); $i++) {
for ($a = 0; $a < sizeof($sensor); $a++) {
if ($sendmin[$i] == $sensor[$a]) {
$min[$b] = $sendmin[$i];
$b++;
}
}
}
}
// Initialize connection to DB
$db = mysql_connect($hostname, $username, $password);
mysql_select_db($database, $db);
echo mysql_error();
// Get number of rows
// Needed to limit lines to draw
$result = mysql_query("SELECT COUNT(*) FROM `tmp`", $db);
$row = mysql_fetch_row($result);
$rownumber = $row[0];
//echo $rownumber." ";
if ($rownumber/$width_graph < 1) $rownumber =
$width_graph;
$result = mysql_query("SELECT MIN(id) FROM `tmp`", $db);
$row = mysql_fetch_row($result);
$min_id = $row[0];
// Select data
$result = "SELECT id, UNIX_TIMESTAMP(timestamp), mictime,
";
for ($a = 0; $a < sizeof($sensor); $a++) {
$result .= "AVG(`sensor".$sensor[$a]."`),";
}
if (isset($max)) {
for ($a = 0; $a < sizeof($max); $a++) {
$result .= "MAX(`sensor".$max[$a]."`),";
}
}
if (isset($min)) {
for ($a = 0; $a < sizeof($min); $a++) {
$result .= "MIN(`sensor".$min[$a]."`),";
}
}
$result = substr($result, 0, strlen($result)-1);
$row_step = ceil($rownumber/$width_graph);
$result .= "FROM `tmp` GROUP BY
(id-id%($row_step))/$row_step ORDER BY id ASC";
$result = mysql_query($result, $db);
echo mysql_error();
//echo $rownumber/$width_graph;
$i = 0;
while($row = mysql_fetch_row($result)) {
//echo $row[0]."<br>";
while ($min_id+$i*$row_step < $row[0]) {
$mictime = $min_id+$i*$row_step;
$time = date ("H:i:s", substr($mictime, 0,
strlen($mictime)-1));
$date = date ("d.M.Y", substr($mictime, 0,
strlen($mictime)-1));
$datax[$i] = $time.".".substr($mictime,
strlen($mictime)-1, strlen($mictime))."\n".$date;
for ($a = 0; $a < sizeof($sensor); $a++) {
$ydata[$a][$i] = "";
$maxdata[$a][$i] = "";
$mindata[$a][$i] = "";
}
//echo $datax[$i]."--<br>";
$i++;
}
$last_id = $row[0];
$mictime = $row[2];
$time = date ("H:i:s", $row[1]);
$date = date ("d.M.Y", $row[1]);
$datax[$i] = $time.".".($mictime*10)."\n".$date;
for ($a = 0; $a < sizeof($sensor); $a++) {
$ydata[$a][$i] = $row[$a+3];
}
//echo $datax[$i]." ".$ydata[0][$i]."<br>";
if (isset($max)) {
for ($a = 0; $a < sizeof($max); $a++) {
$maxdata[$a][$i] = $row[sizeof($sensor)+$a+3];
}
}
if (isset($min)) {
for ($a = 0; $a < sizeof($min); $a++) {
if (isset($max))
$mindata[$a][$i] =
$row[sizeof($sensor)+sizeof($max)+$a+3];
else
$mindata[$a][$i] = $row[sizeof($sensor)+$a+3];
}
}
$i++;
}
//echo $i;
$x_tick_diff = 1;
if (isset($datax[0])) {
$x_temp = round(($width_graph-120-50)/100);
$x_tick_diff = (sizeof($datax)-1)/$x_temp;
//echo $x_tick_diff;
}
if ($x_tick_diff < 10) $x_tick_diff = round($x_tick_diff);
// Create the graph. These two calls are always required
$graph = new Graph($width_graph, $height_graph, "auto");
if ($scale != "man") {
$graph->SetScale("textlin");
} else {
$graph->SetScale("textlin", $scale_min, $scale_max);
}
//if ($x_tick_diff<10) $graph->img->SetAntiAliasing();
// Create the linear plots
$color = array("blue", "green", "orange", "magenta",
"black", "red");
for ($a = 0; $a < sizeof($sensor); $a++) {
if (isset($sensor[$a])) {
$lineplot[$a] = new LinePlot($ydata[$a]);
$lineplot[$a]->SetColor($color[$a]);
$lineplot[$a]->SetWeight(1);
$lineplot[$a]->SetLegend("Sensor $sensor[$a]");
$graph->Add($lineplot[$a]);
}
}
if (isset($max)) {
$color = array("lightblue", "lightgreen",
"lightsalmon", "magenta", "black", "lightred");
for ($a = 0; $a < sizeof($max); $a++) {
if (isset($max[$a])) {
$maxplot[$a] = new LinePlot($maxdata[$a]);
$maxplot[$a]->SetColor($color[$a]);
$maxplot[$a]->SetWeight(1);
$maxplot[$a]->SetLegend("Max Sensor $max[$a]");
$graph->Add($maxplot[$a]);
}
}
}
if (isset($min)) {
$color = array("darkblue", "darkgreen", "darkorange",
"magenta", "black", "darkred");
for ($a = 0; $a < sizeof($min); $a++) {
if (isset($min[$a])) {
$minplot[$a] = new LinePlot($mindata[$a]);
$minplot[$a]->SetColor($color[$a]);
$minplot[$a]->SetWeight(1);
$minplot[$a]->SetLegend("Min Sensor $min[$a]");
$graph->Add($minplot[$a]);
}
}
}
$graph->legend->Pos(0.03, 0.4, "right", "center");
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetTextTickInterval($x_tick_diff);
//$graph->xaxis->SetTextLabelInterval(2);
$graph->img->SetMargin(50, 120, 30, 50);
if (isset($computer)) $graph->title->Set($computer);
//$graph->xaxis->title->Set("\nDate");
//$graph->xaxis->SetLabelAngle(90);
$graph->yaxis->title->Set("°C");
$graph->title->SetFont(FF_FONT1, FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1, FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1, FS_BOLD);
$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();
//echo "Total: ".(time()-$total)."\n";
// Display the graph
$graph->Stroke();
//echo "Total +graph: ".(time()-$total)."\n";
?>