Erste Daten von der Heizung

Ich schrieb ja letztens, dass ich mit dem Home-Server die Messwerte der Heizungsanlage auslesen wollte. Durch den Umzug des Rechners in den Heizungsraum ist sämtliches Gebastel mit RS232-nach-USB- und USB-over-Ethernet-Adaptern überflüssig geworden und ich konnte ein good old Nullmodem-Kabel nehmen (gibts tatsächlich noch direkt von Amazon). Da ich mangels passendem Betriebssystem nicht die Originalsoftware vom Hersteller nehmen kann, hab ich mit Olivers Java-Implementierung gebastelt. Beim Mitschneiden der Daten vom original Serviceprogramm hab ich aber festgestellt, dass das bei mir verbaute Steuergerät "WPCU.C" eine völlig andere Sprache spricht, als das "Resümat CD4" von Oliver. Mist.

Also hab ich die Config- und Programmdateien des Serviceprogramms nach Informationen zum Schnittstellen-Protokoll durchwühlt. "modbus/app.xml" brachte mich der Lösung näher. Dort sind alle abfragbaren Parameter mit Typ, Offset, Länge (Anzahl der Bytes) und Bezeichnung aufgelistet. Leider kann ich mit den Offset-Angaben bisher noch nichts anfangen - die Werte sind für Byte-Counts einfach viel zu groß.

Der Begriff "modbus" brachte den erhofften Knick in der Lernkurve. Das ist ein offenes Protokoll - und der Quasi-Standard bei der Kommunikation mit Mess- und Regelsystemen. Cool. Ich mag offene Standards.

Ein paar Goggle-Treffer später fand ich mit QModBus sogar eine QT-GUI dafür. Mit dessen Comboboxen kann ich bequem genau den Request zusammenklicken, den auch die Original-Software geschickt hat. Scheint also richtig zu sein. Der Function-Code lautet "Read Holding Registers (0x03)". Klick auf "Send". Es kommen tatsächlich Werte zurück. In den ersten 6 Registern kann man prima Uhrzeit und Datum (58:16:11 31.06.109 5 = 31.07.2009 11:16:58, 5. Tag der Woche) erkennen. Mich packt der Ehrgeiz, ich klick in dem Tool rum und sende hektisch das Kommando "Write Multiple Registers" mit start-address=1 und num-of-coils=100 an die Anlage. 1 Sekunde später: Scheisse! Nicht Write! Hab ich jetzt die komplette Anlagen-Config mit Nullen überschrieben? Ich renne in den Heizraum. Die Uhrzeit am Display steht auf 00:00:45. Mir läuft kalte Panik den Rücken runter. Ich klicke mit den Softkeys alle Parameter durch. Mhh. Datum ist noch korrekt. Und auch alle anderen Parameter scheinen noch richtig zu sein. Habe sie inzwischen mit den Werksvorgaben aus dem Handbuch verglichen. Alles richtig. Das Write-Kommando werde ich auf jeden Fall nie wieder verwenden.

Mit jamod habe ich nun auch eine 100%-Java-Implementierung gefunden. Die API sieht sehr komfortabel aus. Prima - keine Bit-Schieberei nötig. Wenn ich jetzt noch rausfinde, wie die Offset-Angaben in app.xml zu verstehen sind, kann ich mir eine Anwendung bauen, die alle Register einfach aus der XML-Datei liest. Ein prima Projekt für die Wintermonate. Dumm nur, dass gerade Sommer ist ;)

Trackbacks

Trackback-URL für diesen Eintrag

Dieser Link ist nicht aktiv. Er enthält die Trackback-URI zu diesem Eintrag. Sie können diese URI benutzen, um Ping- und Trackbacks von Ihrem eigenen Blog zu diesem Eintrag zu schicken. Um den Link zu kopieren, klicken Sie ihn mit der rechten Maustaste an und wählen "Verknüpfung kopieren" im Internet Explorer oder "Linkadresse kopieren" in Mozilla/Firefox.

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Sven am :

Bin gespannt was draus wird, das ist ein sehr nettes Projekt!

Jenser am :

Hallo Olaf,

vielen Dank für die vielen Informationen. Wie schon erwähnt beschäfftige ich mich gerade auch mit dem WPCU.C. Die Version 1.3.7 habe ich auch noch nicht ausprobiert, da ich lediglich die Version 1.2 gefunden habe.
Die genannte XML Datei werd ich wohl auch mal genauer unter die Lupe nehmen, viell. fällt mir ja etwas auf.
Rückinfos gibts auf jedenfall - ein schönes Wochenende

Jens

Matz am :

Hast Du Dir Adam Biens Projekt GreenFire mal angeschaut? Habe mit dem vor 2 Jahren geredet und da hat er von seiner Heizungssteuerung geredet.

Er scheint das sehr auszuschlachten:
http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-3890&yr=2009&track=embedded

Wobei ich beim Durchschauen des Codes damals nicht besonderes überzeugt war.

https://greenfire.dev.java.net/

Olaf am :

Hab mir die Seite grad mal angeschaut. Hatte ich erwaehnt, dass mir dev.java.net immer wieder auf den Sack geht, weil sie Seite so grottig langsam ist? ;)

Sieht auf den ersten Blick alles sehr interessant aus. Leider konnte ich nirgendwo eine Information finden, welche Heizung (Hersteller, Modell) er da ueberhaupt verwendet. Scheinbar soll das Projekt generisch sein und kuenftig auch andere Hardware ansteuern koennen. Dummerweise gibt es da keinen Protokollstandard. Und da er sein konkretes Modell nicht nennt, kann man auch nicht erkennen, welches Protokoll es ist - irgendwas auf nem seriellen Port halt.

Unabhaengig davon - hab mir den Code auch grad mal ausgecheckt - macht er wegen 1828 Zeilen Java-Code ("find . -type f -name '*.java' | xargs wc -l") ganz schoen viel Wind drum ;)

Raphael am :

Hallo,
hab hier auch so eine WP von Waterkotte mit dem WPCU Regler rumstehen. Ich wollte die Daten nun auchmal direkt auslesen.

Leider komm ich schon an der entscheidenden Stelle nicht so ganz weiter. Mit was für einem Kabel kann ich die Anlage denn mit meinem Seriellen Anschluss am PC verbinden?

Olaf am :

Du brauchst ein sog. serielles Nullmodemkabel. Wenn du an deinem Rechner keinen seriellen Anschluss mehr hast, brauchst du ausserdem auch noch einen RS232-USB-Adapter.

Die Kommentarfunktion wurde vom Besitzer dieses Blogs in diesem Eintrag deaktiviert.