|
Die Erfassung und Darstellung der Daten erfolgt in den folgenden
sechs Schritten:
-
Auslesen der Daten aus dem Datenerfassungsgerät.
-
Überspielen der Daten auf den Webserver.
-
Vorbereiten der Daten zur Weiterbearbeitung.
-
Anwendung des Visualisierungstools
RRDTOOL.
-
Wichtig für alle, die unsere Graphiken in Ihre
Webseiten einfügen wollen:
Einfügen der Graphiken in die Webseiten.
-
Erstellen der Bilder "on demand".
- Schritt 1:
-
Das Datenerfassungsgerät (SIC 100) sendet
alle zwei Sekunden einen Datensatz bestehend aus aktueller
Temperatur, Modultemperatur sowie dem tagesaktuellen
Stand der Energiesumme an die serielle Schnittstelle.
Diese Daten werden von einem Programm erfasst und in eine
besser lesbare Form umgewandelt:
SIC2FILE Ausgabedatei
Datum=18.01.99
Zeit=10:18:00
E=2
T1=4,7
T2=4,9
dT=-0,3
W1=0
W2=0
- Schritt 2:
-
Das Ausleseprogramm startet alle drei Minuten einen FTP-Client, der
die Daten per FTP auf unseren Webserver überspielt, da der
Auswerterechner nicht von außen sichtbar ist.
- Schritt 3:
-
Das Format des Datenfiles ist für eine Weiterbearbeitung durch das
Visualisierungstool ungeeignet. Dieses verlangt einfache, reelle Zahlen
als Eingabe. Deshalb wird das oben dargestelle File mit Hilfe jeweils eines
Scripts pro Datenzeile bearbeitet. Beispielsweise für die Temperatur:
#!php.cgi -q
<?
/*
Lese SIC.SIC ein, nehme die 5. Zeile ab Zeichen 3,
ersetzte "," durch "." und gib es aus:
*/
$Filename="SIC.SIC";
$Feld=File($Filename);
$Ausgabe=ereg_replace(",",".",substr($Feld[4],3,10));
echo $Ausgabe;
>
Dieses Skript läuft unter dem Interpreter
PHP ließe sich aber
genauso in PERL, C, als Shellscript oder ähnlich realisieren.
Wie dem Kommentar zu entnehmen ist, wird die 5. Zeile ab dem
dritten Zeichen ausgegeben und dabei das "Komma" in einen "Punkt"
umgewandelt. Als Ergebnis erhält man eine Realzahl, die die
Temperatur darstellt.
Ein Programmaufruf liefert:
jesaja: # ./temp1
7.0
- Schritt 4:
-
RRDTOOL Version 3 erwartet
als Eingabe
regelmäßige Daten, was hier per Cronaufruf
realisiert wird. Alle fünf Minuten wird das Programm
rrdtool aufgerufen und es werden Daten dem Datenfile
zugefügt. Weitere Infos dazu findet man auf der Homepage von
RRDTOOL.
- Schritt 5:
-
Das Einfügen der Graphiken in den Webseiten geschieht durch einfaches
Aufrufen als Graphik:
<IMG SRC="Graphik.phtml?dauer=86400&source=temp&h=58&w=160">
liefert:
Falls Sie in Ihre Seiten eine solche Graphik einfügen wollen,
müssen Sie die URL natürlich vollständig angeben
(Beispiele siehe unten).
Graphik.phtml ist wiederum ein
PHP-Script. Durch die dem
Fragezeichen folgenden Angaben, kann die Darstellungsdauer (dauer),
die Datenquelle (source) sowie die Höhe und Weite des
Koordinatensystems der Graphik festgelegt werden.
Folgende
Angaben sind möglich:
| dauer |
ohne Angabe: | 10 Tage |
| Maximalwert: | 1 Jahr |
| Sonstiges: | Angabe in Sekunden |
| source |
ohne Angabe: | temp |
| temp | Temperatur |
| deltatemp | Temperaturunterschied |
| energie | Erzeugte Energie |
| leistung | Aus energie berechnete Leistung |
| maxmintemp | Minimale/maximale Tagestemperaturen. Hier ist eine
Angabe von dauer nicht möglich. |
| h (höhe) und w (weite)
beziehen sich immer auf die Größe des Koordinatensystems, die
jeweilige Graphik ist etwas größer. Ohne Angabe wird das
Koordinatensystem 200 * 500 Pixel groß |
Beispiele:
<IMG SRC="http://energie.biz-worms.de/solar/mrtg/... ...Graphik.phtml?dauer=604800&source=leistung&h=58&w=380">
liefert:
Zusätzlich gibt es noch die Möglichkeit nur die
Außentemperatur darzustellen:
<IMG SRC="http://energie.biz-worms.de/solar/mrtg/... ...EinzelTemp.phtml?dauer=86400&h=58&w=220">
liefert:
- Schritt 6:
-
Die Graphiken liegen nicht vorgefertigt auf der Festplatte, sondern werden
"on demand" jeweils neu erstellt. Das oben erwähnte PHP-Skript
Graphik.phtml ist im folgenden dargestellt:
<?
/* Automatische Erzeugung eines Bildes */
/* Das spricht fuer sich: */
Header("Content-Type: image/gif");
/* Bild nicht cachebar um aktuell zu sein */
Header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
$Tag = 24 * 60 *60 ;
if ($dauer=="") {
$dauer = 10 * $Tag;
};
if ($h=="") {
$h =200;
};
if ($w=="") {
$w =500;
};
if ($source=="") {
$source="temp";
}
if ($source=="temp") {
PassThru("TempGraphik $dauer $h $w")
}
if ($source=="deltatemp") {
PassThru("DeltatempGraphik $dauer $h $w")
}
if ($source=="energie") {
PassThru("EnergieGraphik $dauer $h $w")
}
if ($source=="leistung") {
PassThru("LeistungGraphik $dauer $h $w")
}
if ($source=="maxmintemp") {
/* Automatisch dauer anpassen */
/* Aktuelles Datum: */
$dauer = Date("U");
/* Beginn der Messung: 25.11.1998 */
$start = MkTime(0,0,0,11,25,1998);
$dauer = $dauer - $start;
/* Maximal ein Jahr darstellen */
$Jahr = 60 * 60 *24 *360;
if ($dauer >= $Jahr) {
$dauer = $Jahr;
};
PassThru("MaxMinTempGraphik $dauer $h $w")
}
>
Zunächst wird ein Header (Content-Type: image/gif) der
Ausgabedatei mitgegeben, damit der Browser die empfangenen Daten als
Graphik erkennt und in die Webseite einbaut. Nun folgt ein Header, der
dem Browser sagt, dass die Graphik bis zu einem bereits vergangenen
Zeitpunkt (hier beispielsweise das Jahr 1994) gültig ist.
Damit wird erreicht, dass beim Neuladen nicht eine evtl. bereits
zwischengespeicherte
Version verwendet wird. Als Verbesserung könnte man den
"Expires-Header" so anpassen, dass ein Zwischenspeichern der Graphik
für die Dauer bis zur nächsten Abfrage (z.B. 5 Minuten) möglich wäre.
Damit könnte bei mehrfachen Zugriff Netzbandbreite gespart werden.
Der folgende Quelltext ist nach einer
Einarbeitung in PHP selbsterklärend.
Mit dem PassThru-Kommando werden nun externe Programme (z.B.
TempGraphik) aufgerufen. In TempGraphik wird das
eigentliche Tool zur Erstellung der Graphiken, rddtool aus dem
RRDTOOL
-Paket aufgerufen:
/usr/src/mrtg/bin/rrdtool graph /dev/stdout \
-v "Grad C" -t "Temperaturverlauf" \
-h $2 -w $3 \
-r -s -$1 \
DEF:cel0=solaranlage.rrd:0:AVERAGE \
LINE1:cel0#009900:"Aussentemperatur" \
DEF:cel1=solaranlage.rrd:1:AVERAGE \
LINE1:cel1#0000ff:"Modultemperatur" \
HRULE:0#00FFFF \
GPRINT:cel0:MIN:"AT Min\: %f C"\
GPRINT:cel0:MAX:"Max\: %f C"\
GPRINT:cel1:MIN:"MT Min\: %f C"\
GPRINT:cel1:MAX:" Max\: %f C"\
Die Parameter, welche hier etwas kryptisch erscheinen mögen, sind in
der Dokumentation von
RRDTOOL.
genau erläutert.
|