Beruflich Dokumente
Kultur Dokumente
html
Typ: WS500
Hersteller: ELV ONLINE-WETTER
Masteinheit: montiert auf Flaggenmast, umfasst: >>>
- Windgeschwindigkeitsmesser
- Windrichtungsmesser
- Außentemperatur und Feuchte WEB-KAMERA
- Regensensor >>>
- Sonnenscheinsensor
Installierte Programme:
Weather Professional
PostgreSQL Datenbank
Borland JBuilder
JFreeChart
PostgreSQL JDBC
jbproject.zip
Wetterdata.java
- Hauptklasse in Java
- beinhaltet die Datenstruktur für die Datenaufbereitung
- in die Class werden die Wetterdaten der letzten 96 Stunden
hineingeschrieben
- Hauptfunktionen der Class: Erzeugung der Plots und Grafiken
Wetterserie.java
Datawriter.java
FTP Watchdog
Die Daten von den Außensensoren werden per Funk an die WS500 in der Veranda übermittelt. Leider
sind die Sender nicht so stark, daher ist die gegenwärtige Position im Ausgang des Wintergartens die
einzig mögliche (siehe hierzu auch den Bericht „Tja, wo hängt sie denn nun?“). Per USB Verbindung
werden die Daten an den Internetrechner im Vorstandszimmer gesendet. Da die Kabellänge mehr als 5
m sind wurde ein Repeater gesetzt (liegt hinter der neuen Wand über der Tür zum Saal).
Auf dem Rechner im Vorstandszimmer läuft Weather Professional. Dieses Programm liest die Daten aus
der WS 500 aus und stellt sie grafisch auf der Benutzeroberfläche dar. Gleichzeitig sendet es die Daten
an den PostgreSQL Server, der sie wiederum in die Wetter-Datenbank schreibt. Weather Professional
kann auch Wetterverläufe darstellen. Dazu greift es per SQL-Abfrage über den PostgreSQL Server auf
die Datenbank zu.
Um die Daten aus der Datenbank für die Internetübermittlung auszulesen, erwies es sich als praktisch,
die Programmiersprache Java zu verwenden. Java ist eine indirekte Sprache, das heißt, die
geschriebenen Programmzeilen werden zunächst von einem Compiler in Maschinencode übersetzt und
dann als .class Datei gespeichert. Dieses .class-file kann dann mit dem java Hauptprogramm aus
gestartet werden. javac und java selbst haben keine nette Windows-Oberfläche, sondern funktionieren
von der DOS-Oberfläche aus. Man kann daher den aufrufenden Befehl in einer Batch Datei ablegen,
was mühsames tippen erspart (Hierbei sei angemerkt, dass sowohl beim javac als auch beim java
Befehl der gesamte classpath eingegeben werden muss. Und was ist ein classpath? java ist eine
objektorientierte Programmsprache. Das heißt, die Grundausführung enthält nur recht wenige Befehle.
Wer spezielle Befehle benötigt, lädt sich diese beim Programmstart ein. Die Befehle stehen in
Befehlssammlungen, die selber compilierte Java-Scripts darstellen. So stehen in der PostgreSQL JDBC
Sammlung (Endung zumeist .jar oder .zip) sämtliche Befehle, die Java für die Kommunikation mit der
Datenbank braucht. Damit Java weiß, wo diese Erweiterungsdateien zu finden sind, wird das Programm
mit der Syntax java -classpath Programmname aufgerufen. Achtung: Bei allem Java ist immer die
Groß/Kleinschreibung zu beachten. Also Programmname genauso schreiben, wie im Java-Script.) Die
Programmierung von java ist recht einfach, man mag es für eine Mischung aus Visual Basic und C
halten. Ein gutes Tutorial gibt es im Netz. Es empfiehlt, sich einen speziellen Java-Editor zu
verwenden. Besonders angetan hat mir der JBuilder von Borland, der mit deiner einfach zu
bedienenden Oberfläche und seiner genialen Syntaxkontrolle genau das richtige für Tippfehlerkünstler
wie mich ist. Daneben hat es durchaus Sinn gemacht sich mit einem Java Kompendium auszustatten,
allerdings sind die on-line Internethilfen zu Java auch sehr brauchbar. Ob das so ganz schick
programmiert ist, weiß ich als Java Newbie nicht, aber es läuft sehr stabil und gut is.
Das Java Script besteht aus drei Teilen (alles zusammen gibt es als Zip File zum Download:
jbproject.zip). Der erste Teil ist die Klasse Wetterdata.java Diese Klasse enthält als Werte zunächst den
Namen des Datensatzes, zum Beispiel „Außentemperatur“, die dazu gehörige Einheit, eventuell
bewusst festgesetzte Maximal- und Minimalwerte für die Plot Achsen und einiges mehr. Schließlich
enthält die Klasse auch zwei TimeSeriesCollection, die neben der Zeit die differentielle und kumulative
Darstellung der Werte enthalten. Neben der Daten enthält die Klasse die üblichen Getter und Setter
Methoden zum Handling und zudem die Methoden zur Erzeugung der verschiedenen Plots. Die Plots
selber werden von den JFreeChart erzeugt. Außer den 2D-Plots werden auch die Werte für die
Kompass-, Thermometer- und Tachometerdarstellung der aktuellen Werte hier erzeugt und
gespeichert. Dazu sind noch ein paar mehr Methoden notwendig. Exemplarisch sind zu nennen:
getLastYValue, getLastXValue usw.
Die zweite Klasse ist die Wetterserie.java. Diese stellt eine Art Container dar, in der 8 Wetterdata-
Klassen liegen. Mehr kann das Ding eigentlich nicht und ich bin nicht so sicher, ob ich das
entsprechende Kapitel im Java-Lehrbuch verstanden habe. Aber gut, läuft und gut!
Die dritte Klasse ist der Datawriter.java. Das ist die eigentliche Hauptklasse, die alles steuert und
bestimmt. Sie besteht aus einem GUI, das man eigentlich nicht wirklich braucht, aber das doch immer
ganz nett ist, um das System zu starten und zu schließen. Vielleicht lerne ich ja irgendwann einmal,
wie man das so programmiert, dass es in der Taskleiste verschwindet, aber solange ist es halt ein
Fenster, welches man minimieren muss, um auf den Desktop zu schauen. In dem Fenster hat man die
Möglichkeit das Skript zu starten, stoppen, pausieren und zu beenden. Man sieht die letzten
hochgeladenen Daten, die Parameter des letzten Datensatzes (i.e. Zeit und Datum) sowie ein großes
Feld, indem alle Fehlermeldungen des Skripts auflaufen.
Die Klasse initialisiert zunächst das GUI und startet dann eine Endlosschleife in der ein Zähler
innerhalb von 5 Minuten runtergezählt wird. Ist er bei 0 angekommen, beginnt das Auslesen der
Datenbank und die Erzeugung der Plots und Grafiken. Zudem wollten wir auch noch den Zeitstempel
des letzten Datensatzes in der Titelzeile sehen, so dass zudem der HTML Code des Frames ebenfalls
neu erzeugt wird. Für das Auslesen der Datenbank ist die Methode Extraktor verantwortlich, die die
Erzeugung des notwendigen SQL-Strings beherbergt und auch die primäre Aufbereitung der Daten
steuert. Er erzeugt den Datensatz als Form der TimeSeriesCollection, also einem Datumswert wird ein
Messwert zugeordnet. Wie schon erwähnt werden bei einigen Wetterwerten sowohl kumulative als
auch differentielle Daten angeboten (Regen, Sonne). Daher werden durchgehend für jeden Wettertyp
zwei dieser Datensätze erzeugt und abgelegt.
Nachdem die Datensätze vorliegen werden die Plots und Grafiken erzeugt und gleich in das Verzeichnis
C:\Upload gespeichert. Die Plots werden in zwei unterschiedlichen Auflösungen angeboten, damit man
draufklicken kann. Zum Schluss wird noch das HTML-File erzeugt. In diesem ändert sich dabei immer
die Kopfzeile, der Rest bleibt gleich.
Nach der Aktualisierung der Daten geht der Thread wieder für 300 Sekunden schlafen, so dass das
Programm solange ruht. Als kleinen Gimmick habe ich in der GUI einen Laufbalken und in der
Titelzeile die Sekundenzahl eingebaut.
Aufgerufen wird die Klasse mittels einer kleinen Batchdatei, die den Classpath enthält. Beim JBuilder
kann man sich die entsprechende Zeile sehr einfach aus dem statusfensetr aruskopieren und erspart
sich so viel viel Tipparbeit.
Um die neuen Dateien nun ins Internet zu bekommen, müssen sie auf den 1&1 FTP-Server geladen
werden. Dieser spiegelt sozusagen die Dateiablage des TSC im Internet wider. Um den Upload zu
automatisieren, wurde das Programm FTP Watchdog installiert. Diese bemerkt, wenn es zu einer
Veränderung im vorgegebenen Verzeichnis kommt und kopiert die neuen Dateien gleich auf den
FTP-Server hoch. Ultra-praktisch, wie ich finde.
Ich betrachte das Java-Skript als ebenso OpenSource wie alle Bauteile, die ich dafür verwendet habe
und möchte jeden WS500 Benutzer gerne ermutigen, sich den Code herunterzuladen, zu modifizieren,
anzupassen und natürlich zu nutzen! Ich habe für die ganze Sache nichts weiter bezahlt, sondern habe
mich bei anderen dankenswerter Weise bedienen können, also soll es der Community nicht anders
gehen. Jeden Download fasse ich als Kompliment und jeden Kommentar als Wertschätzung auf!
Kai Jürgens
(Stand 19.07.2007)