Werte als JPGraph Digramm darstellen
Historische Werte lassen sich zum Beispiel mit jpgraph als Diagramm darstellen.
Dazu benötigt man lediglich die jpgraph Lib und eine PHP-Datei, die das Bild generiert.
Hier ein Beispiel eines 48 Stunden Digramms für 2 Werte (Temperatur und Luftfeuchte):
<?php
# ————————————————-
# Datei: graph_48h.php
# benötigt: jpgraph Libs
# ————————————————-
# Beschreibung:
# Holt Werte aus einer Datenbank und generiert draus ein Diagramm mit jpgraph
# ————————————————-
# Autor: Christian Haeussler
# geändert am: 04.07.2008
# ————————————————-// jpgraph Libs einbinden
require_once(“jpgraph/src/jpgraph.php”);
require_once(“jpgraph/src/jpgraph_line.php”);
require_once(“jpgraph/src/jpgraph_date.php”);// Grafik definieren
$graph = new Graph(800,600,”auto”,60);
$graph->SetScale(“datlin”);
$graph->SetY2Scale(“lin”);// Raender definieren
$graph->img->SetMargin(60,60,40,80);// Datumsformat der Zeitachse einstellen
$graph->xaxis->scale->SetDateFormat(‘H:i’);// Maximal und Minimalwert der Skala einstellen
$graph->xaxis->scale->SetTimeAlign(MINADJ_10);// Label-Text Winkel um 90° drehen
$graph->xaxis->SetLabelAngle(90);$sline = new PlotLine(HORIZONTAL,0,”black”,1);
$graph->Add($sline);// Verbindung zu mySQL aufbauen, auswählen einer Datenbank
$link = mysql_connect(“localhost”, “user”, “passwort”);
mysql_select_db(“io”);// ausführen der SQL Anfrage (288 Werte = 2 Tage * 24 h * 60 min / 10 min)
$query = “SELECT * FROM DB ORDER BY id DESC LIMIT 288″;
$result = mysql_query($query);// Ausgabe der Ergebnisse in Array
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$times[] = $row["timestamp"];
$ydata1[] = $row["relf"];
$ydata2[] = $row["temp"];
}// Freigeben des Resultsets
mysql_free_result($result);// schliessen der mySQL Verbinung
mysql_close($link);// Arrays umsortieren
$times = array_reverse($times);
$ydata1 = array_reverse($ydata1);
$ydata2 = array_reverse($ydata2);// Die Zwei Linien generieren
$lineplot1 = new LinePlot($ydata1,$times);
$lineplot2 = new LinePlot($ydata2,$times);// Legende definieren
$graph->legend->Pos(0.50,0.95,”center”,”top”);
$graph->legend->SetLayout(LEGEND_HOR);
$graph->legend->SetShadow(false);// Titel für Legende
$lineplot1->SetLegend(“Luftfeuchte “);
$lineplot2->SetLegend(“Temperatur “);$graph->xaxis->SetPos(“min”);
$graph->xgrid->Show(true,false);// Titel und Beschriftung der Skalen
$graph->title->Set(“Verlauf der Daten”);
$graph->subtitle->Set(“über 48 Stunden”);
$graph->subtitle->SetColor(“darkred”);
$graph->xaxis->title->Set(“t”);
$graph->xaxis->SetTitleSide(SIDE_RIGHT);
$graph->yaxis->title->Set(“°C”);
$graph->yaxis->SetColor(“red”);
$graph->y2axis->title->Set(“%rH”);
$graph->y2axis->SetColor(“blue”);// Schriftarten und Groesse festlegen
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->subtitle->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->y2axis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);// Lienfarben und staerke definieren
$lineplot1->SetColor(“blue”);
$lineplot1->SetWeight(2);
$lineplot2->SetColor(“red”);
$lineplot2->SetWeight(2);// Die Linien zu der Grafik hinzufügen
$graph->AddY2($lineplot1);
$graph->Add($lineplot2);// Grafik anzeigen
$graph->Stroke();
?>
Dieses PHP-Skript wird dann ganz einfach in eine HTML-Seite als IMG-Tag
<img href=”graph_48h.php”>
mit eingebunden.
Das generierte Diagramm sieht dann z.B. so aus:

# ------------------------------------------------- # Datei: update.php # benötigt: linknx.php # ------------------------------------------------- # Beschreibung: # Holt EIB-Werte und schreibt sie in eine Datenbank # ------------------------------------------------- # Autor: Christian Haeussler # geändert am: 17.02.2008 # -------------------------------------------------
Ähnliche Artikel:
- EIB-Werte sammeln
- AVR-Werte sammeln per PHP
- EIB-Visualisierung mit PHP
- EIB-Werte setzen und abfragen
- Ethernet Wetter Station

(4 Bewerter, Durchschnittlich: 4,75 von 5)
Kleiner Hinweis noch, ab MySQL Server 5 muß man den Timestamp umwandeln, da er in der Datenbank anders abgelegt wird.
Benutzt dazu einfach anstatt
$times[] = $row["timestamp"];
folgenden Befehl:
$times[] = strtotime($row["timestamp"]);
Viele Grüße,
Christian