• 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ü

Conrad WS-2300 auslesen

Begonnen von ReinhardK, 25.08.2002, 18:56:00

⏪ vorheriges - nächstes ⏩

OschenLars

Guckt mal bei Kenneth Lavrsen rein. Da gibt es C-Code für die wichtigsten Funktionen.

Dort gibt es auch eine Memory Map der Ws2300.

Gruß,
Oschen Lars
Lars
47495 Rheinberg-Orsoyerberg

WetterLaie

Regendaten:
Im Memory-Map steht für die Adressen 0446 ff und 0479 ff "coding unknown".  Erstmal zum Rain 1h. Der beginnt (bei mir) bei 0478 und nicht bei 0479.
Die Kodierung ist einfach. Die 24 h area umfasst 24 Werte. Darin werden jeweils die Summen einer Stunde eingetragen. Die 1 h area umfasst 15 Werte, also je 4 Minuten der letzten Stunde. Die Werte sind 1:1 die Wippenbewegungen, also 0.518 Steps ohne weitere Umrechnung. Mit diesem Wissen kann man, wer's mag, natürlich spielen. Wenn ich früh wissen will, ob es Nachts geregnet hat (und ich nicht gießen muss ;-), kann ich den Wert der letzten x-Stunden auslesen/errechnen. Oder ich lasse mir anzeigen, vor wievielen Stunden / Minuten (bis zu 24;-) der letzte Regen war.
Allerdings wird in der Station irgnedwo noch gepuffert und gerechnet. Wenn man einen Regenalarm haben will, nutzt man besser die Adresse 0x043a (1 Byte). Verändert sich der Wert, hat sich die Wippe bewegt. Bei Beginn hat man den Alarm eine Übertragung eher als die Änderung im Rain 1 h. Allerdings ist selbst das bei leichtem Regen vielleicht etwas spät? Die Luftfeuchte halte ich aber für noch ungenauer, um den Beginn eines Regens feststellen zu können.

Das Implementieren der des Bit-Set/Unset kann man sich sparen. Beispiel Backlight -  man schaltet nicht direkt sondern legt nur fest, ob das Licht bei Tastendruck angeht. Für die Schnittstelle sicher nicht interessant.

Ein Software flow control konnte ich nicht feststellen. Wichtig ist, dass DTR passive ist, also high (+) und RTS active, also low (-). Das dient der Stromversorgung der RS232 in der WS23xx.

Noch eine Anmerkung zur Übertagung. Die Schnittstelle ist recht unzuveläsig. Man muss wirklich jede Antworte der Station auf Richtigkeit prüfen, auch die abschließende Prüfsumme. Stimmt eine der Antworten nicht, muss man von vorn beginnen. Einzig wenn ein Timeout vorliegt, also die Station auf eine Adressbyteübertragung nicht reagiert, kann man es mit Wiederholungen versuchen, meist geht es bei der ersten Wiederholung.

Gruß,
Peter

dieselman

..aus Interesse habe ich damit begonnen unter Linux mit Qt4 eine Applikation zu schreiben, welche die ws-2300 ausliest und die Ergebnisse graphisch aufbereitet.

Das hat soweit auch funktioniert, dank der Vorlage die Kenneth mit open2300 geliefert hat und auch mit der Dokumentation von Claude.

Den C++Code will ich unter GPL veröffentlichen, aber noch habe ich ein Problem mit dem Reset der Seriellen Kommunikation.

Der Reset funktioniert bei mir meistens (90%) so wie bei Claude und Kenneth beschrieben: man sendet 0x6 und empfängt 0x2. Leider gerate ich immer wieder in einen Status, bei dem die ws-2300 gar keine Antwort mehr schickt, auch nicht auf die 0x6. Bisher komme ich aus so einem "Deadlock" nur raus, wenn ich den Com-Port schliesse und wieder öffne ("harsh reset").

Eine leichte Verbesserung konnte ich erreichen, indem ich statt der von Kenneth/Claude empfohlenen 0x6 eine 0x66 oder 0x62 sende. Speziell die 0x66 ergibt auf der seriellen Leitung "zwei breite Pulse" und scheint von der ws-2300 gut erkannt und honoriert zu werden (die Adress-Befehle werden ja immer mit 0x82 so verundet, so dass im Signalbild am Anfang der schmale Puls der 0x80 steht). Aber auch mit 0x66 gerate ich irgendwann in diese Situation, dass die Station "gar nicht mehr" antwortet (das heisst bis zum nächsten ttyS0-Close/Open Zyklus).

Auch ein "Tauschen" von DTR und RTS (als DTR high und RTS low) für 0,5sec vor dem Senden der 0x6 bzw. 0x66 bringt leider kein "Wiedererwachen" der ws-2300.

Hat jemand von Euch einen Tipp?  :-?

Danke und freundliche Grüße!
Thomas

dieselman

...habe das oben beschriebene Problem jetzt mal so "gelöst", dass ich für jeden Lesezyklus den seriellen Port dediziert öffne und sofort danach wieder schliesse. Ein dauerhaftes offenhalten habe ich nicht hinbekommen.

Das Ergebnis habe ich hier zur Diskussion gestellt:
Display für ws-2300 via Linux/KDE/Qt4

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