Seit der nun beendeten Saison nutzen wir
in unserer Mosterei eine Hackschnitzelheizung zur Pasteurisierung. Diese Heizungsanlage ist zudem auch mit den Wohngebäuden verbunden. Dabei kommt bei uns eine Hargassner WTH-110 zum Einsatz.
Sowohl in der Mosterei als auch für die Wohnungen ist es elementar wichtig, dass man umgehend über mögliche Störungen informiert ist. Leider bietet Hargassner hier nur proprietäre und zudem unflexible Möglichkeiten (SMS via eigenem GSM-Modul, digitale Fernbedienung im Wohnraum installieren, ...). Diese Möglichkeiten sind für mich inakzeptabel. Daher muss man sich selbst behelfen.
Die Heizung hat zwei Schnittstellen zur Außenwelt: 1. eine serielle Schnittstelle RS-232 und 2. eine CAN-Bus-Verbindung zwischen Heizung und Heizkreisregler in den Wohngebäuden.
Da ich nicht wusste wo welche Daten übertragen werden und die Hardware nicht allzu teuer ist, habe ich beschlossen beide Verfahren parallel zu nutzen.
Für mein Vorhaben kaufte ich folglich einen USB-CAN-Bus-Adapter. Als preiswert und bisher ausreichend hat sich
der USBtin von Thomas Fischl herausgestellt. Ich kaufte das
Evaluation Board for USBtin / SMD assembled and programmed. With Mini-USB connector. für 34,90 €. Die Platine kommt wie abgebildet ohne Gehäuse und mit Lötaugen für den CAN-Bus. Da ich weder Fertigkeit noch Gerät für Platinen-Lötoperationen habe, habe ich mich entschlossen das non-destruktiv anzugehen und habe ein Kabel mit Aderendhülsen versehen, die ich mit einer Zange so rund gepresst habe dass die Aderendhülsen sich genau in die Lötaugen stecken lassen. Dann das überstehende Ende wieder flach gequetscht, so dass der Stecker nicht raus rutscht. Als Kabel habe ich ein altes TAE-Verlängerungskabel genommen und von beiden Seiten ca. 50 cm abgeschnitten. Die Stecker-Seite habe ich wie beschrieben an den USBtin angebracht, die Buchsenseite habe ich im CAN-Bus-Schutzmodul auf die CAN-Leitung geklemmt. Ich habe sowieso direkt neben dem CAN-Bus-Schutzmodul einen 10-Zoll-Verteiler stehen, dort drin steht nun mein Raspberry Pi mit wie beschrieben angeschlossenem USBtin. Da der USBtin kein Gehäuse hat, habe ich eines aus Karton gemacht (Verpackung einer Netzwerkdose).
Erste Tests habe ich mit der Software USBtinMonitor von Thomas Fischl auf meinem Laptop gemacht. Dabei kamen zwar sofort Daten aus dem Bus aber der Inhalt hatte mich ernüchtert: Ca. 10 Telegramme pro Sekunde und ich habe nach mehreren Minuten Aufzeichnung keinerlei Regelmäßigkeiten erkennen können. Erst nach einiger Zeit bin ich auf die Idee gekommen, dass man es ja mal mit abweichender CAN-Bus-Geschwindigkeit versuchen könnte. Nach mehreren Versuchen bin ich auf 50.000 baud als korrekte Bus-Geschwindigkeit gekommen. Mit dieser Einstellung kommen nun Telegramme in schöner Regelmäßigkeit an, die verwendeten CAN-IDs sind nur noch eine Hand voll.
Es kommen nun Telegramme in dieser Form (Format: ID;DLC;RTR;EXT;DATA):
00a;8;0;0;00 00 00 00 00 00 00 00
161;8;0;0;40 03 04 95 15 DC 15 DC
14e;8;0;0;01 00 64 00 09 0A 0B 00
014;8;0;0;00 00 97 02 41 CC 1F 82
D.h. es kommen nur nicht-erweiterte Pakete, keine RTR-Pakete und alle schön 8 Bytes lang. Das verspricht mit genügend Energie einige Informationen preiszugeben.
Ein erster Erfolg war die Deutung des halben Werts in der letzten oben genannten Zeile: Hier wird in den letzten 4 Bytes ein Timestamp übertragen. Da 32-Bit-Unix-Timestamps ein Jahr-2038-Problem haben, hat Hargassner hier offenbar einfach eine neue Zeitmessung erfunden und überträgt einfach Sekunden seit 1.1.1980. Et voilà, wir haben ein Jahr-2048-Problem. :)
Der Durchbruch kam dann durch ein Experiment einige Tage später. In der Zeile
014;8;0;0;00 01 3f 00 00 00 01 59
steht das zweitletzte Byte für "Störung". Ist das auf 1 gesetzt, liegt eine Störung vor. Wird die Störung behoben und quittiert, fällt es auf 0 zurück.
Das Byte davor steht übrigens für "Rauchfangkehrer-Betrieb" und teilt den Heizkreisen mit, dass sie bitte Wärme abnehmen möchten damit der Kessel auf volle Leistung gehen kann.
Auf Seiten des CAN-Bus war dies die komplette Erkenntnis der letzten Tage. Allerdings habe ich nach dem Fund des Störungs-Bit nicht mehr weiter gesucht sondern mich dran gemacht, das so zu programmieren dass ich eine SMS-Alarmierung erhalten kann. Dies war ja die wichtigste Zielsetzung des ganzen Projekts.
Meine bisherigen Erkenntnisse habe ich dann also in Python-Code gegossen, der auf dem Raspberry-Pi laufen kann. Ein aktueller Stand ist in meinem nagelneuen Github-Profil zu finden:
https://github.com/bwurst/hargassner-monitor.
Die RS232-Verbindung habe ich bereits via Laptop ausprobiert und Daten erhalten. Ich bin noch nicht ganz fertig geworden mit der Verkabelung aber in den nächsten Tagen kommt auch im Heizraum dann ein zweiter Raspberry-Pi zum Einsatz der die serielle Schnittstelle überwacht. Natürlich wäre es naheliegend beide Überwachungen auf einem Gerät zu bündeln. Damit ich beim Test des einen aber nicht die Alarmierung des anderen störe, entwickle ich nun zunächst auf zwei Geräten. Kann man später immer noch zusammen bauen.