• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Display für ws-2300 via Linux/KDE/Qt4

Begonnen von dieselman, 16.12.2008, 15:51:16

⏪ vorheriges - nächstes ⏩

dieselman

Da ich mich mit Multithreaded-Programmierung beschäftigen wollte, habe ich für die ws-2300 eine graphische Anwendung zusammengebastelt. Das Ergebnis heisst ws23qt und gibt die gemessenen Temperaturwerte via KDE aus.

Basis für diese Applikation war das bekannte open2300 von Kenneth Lavrsen. Für die GUI-Programmierung habe ich die Libraries von Trolltech benutzt, genauer die Qt4.

Das Programm liest nur ganz wenige Werte aus der Station, nämlich Indoor und Outdoor Temperatur. Den Hauptaugenmerk habe ich auf die Serielle Kommunikation mit der ws-2300 gelegt; deshalb wird der Status derselben auch recht ausführlich angezeigt. Wenn diese Kommunikation eines Tages stabil läuft, dann ist die Erweiterung auf andere Messwerte dank der Vorlage von open2300 kein Problem.

Bei der Programmierung bin ich recht schnell auf Probleme mit dem "Reset" gestossen. Es war nicht möglich, diesen immer fehlerfrei abzuwickeln. Auch muss ich das serielle RS-232 Interface nach jedem Lesevorgang schliessen, um einigermaßen stabile Ergebnisse zu erreichen.

Deshalb fände ich es nett, wenn "die Mutigen unter Euch" welche das Tool ausprobieren möchten mir Feedback geben, ob sie hier bessere Lösungsansätze für die ws-2300 Kommunikation sehen. Aber bitte: Ich veröffentliche den Code hier bewußt nur als Source, weil jeder selbst entscheiden muss ob er das Risiko in Kauf nimmt seinen Computer oder seine Wetterstation ins elektronische Nirvana zu schicken ;-)

Den Code habe ich angefügt. Installation sollte wie folgt laufen:
1 ) Ein Verzeichnis ws23qt erstellen und die ws23qt.tar.gz dorthinein kopieren. Alle weiteren Schritte dann in diesem Verzeichnis
2 ) Dekomprimieren: gunzip ws23qt.tar.gz
3 ) Die Source-Files auspacken: tar -xvf ws23qt.tar
4 ) Wenn nicht der /dev/ttyS0 Port benutzt wird, dann unter ws23comthread.h die Konstante SERIALINTERFACE entsprechend abändern
5 ) Den qt4-Project-Fileerstellen: qmake -project
(Wenn weitere qt-Versionen installiert sind, dann bitte qmake mit Pfad eingeben - aber dann solltet Ihr ohnehin wissen, was Ihr tut  :hehe:  )
6 ) Den Makefile erstellen: qmake
7 ) Den Makefile abarbeiten: make
8 ) Das Tool starten: ./ws23qt

Die Zeit und das Datum, die angezeigt werden, stammen aus dem PC. Nur die Temperaturwerte werden von der ws-2300 gelesen.

Wie gesagt: Verbesserungsvorschläge zu dem Ablauf der RS-232 Kommunikation sind willkommen! Diese wird vollständing vom der run()-Funktion im Thread ws23comthread.cpp abgewickelt. Die ws23qt-Klasse löst das Auslesen nur aus, siehe die Funktion ws23qt::sloTimerExpiry(). Dort kann man auch die Ausleseintervalle verändern, wenn man den Aufruf comThread.ws23getWeatherSample(5); mit einer anderen Bedingung (i.B. if ((iSeconds % 30) == 0) ) verknüpft.

Freundliche Grüße!
Tom / dieselman 8-)

dieselman

Hat schon mal jemand die Sources compiliert und ausprobiert? Welche "Success Rate" erhaltet Ihr?

Heute morgen habe ich einen Bug entdeckt: Die Temperaturanzeigen haben zuwenig Digits, so dass bei zweistelligen Temperaturen unter null das "Minus" nicht mehr angezeigt wird. Na ja, leicht zu beheben...

Ausserdem habe ich noch keine Idee, wie ich den Überlauf der int-Counter (Erfolg/Misserfolg) in den Griff kriegen werde... bisher sind die natürlich noch nicht übergelaufen und werden das auch so schnell nicht tun. Aber die Prozentberechnung kommt halt absehbar eines Tages aus dem Tritt. Eigentlich sollte es Standardroutinen für sowas geben... aber mir fällt grade keine ein.

Wie gesagt: Bin für Vorschläge dankbar!
Tom / dieselman 8-)

jusch

Zitat von: "dieselman"Ausserdem habe ich noch keine Idee, wie ich den Überlauf der int-Counter (Erfolg/Misserfolg) in den Griff kriegen werde... bisher sind die natürlich noch nicht übergelaufen und werden das auch so schnell nicht tun.

Beim Auslesen einmal pro Minute und MaxInt = 2^32/2-1 = 2147483647 auf einem 32-Bit Betriebssystem also in frühestens
2147483647 Minuten
oder /1440 = 1491308 Tagen
bzw. /365 in gut 4000 Jahren Software-Dauerlauf mit derselben Softwareinstallation.

Wenn Du sonst keine Probleme mit dem Tool hast, programmiere doch einfach einen Reset der Counter auf Null, wenn der Zählerstand des höheren Zählers bei MaxInt-1 = 2147483646 angelangt ist.
;-)
Downloads auf meiner Website: Wettervorhersage-Freeware und History.dat-Editor/Filetool

dieselman

ZitatBei ... MaxInt = 2^32/2-1 = 2147483647 auf einem 32-Bit Betriebssystem also ... in gut 4000 Jahren

Ok, Du hast gewonnen  :lol:  
Offensichtlich denke ich immer noch zu sehr in der 8-Bit-Welt des TRS-80, mit dem für mich einst die Programmiererei begann... auf diesen Kisten hätte man dann bei Zählerüberlauf einen div/0 Ausstieg erzeugt.

Also: Kein Bug, ein Feature ;-)

Freundliche Grüße!
Tom / dieselman 8-)