Heizungssteuerung auslesen

Vor zwei Jahren wurde die Zentralheizung im Haus meiner Eltern komplett erneuert. Sie besteht jetzt aus einem Ölkessel, einem Stückholzkessel der Firma KWB und Solarkollektoren.

Die Steuerung der Anlage erfolgt über eine FP10 der Firma Hanazeder, die über eine RS232-Schnittstelle programmiert und ausgelesen werden kann. Leider liefert der Hersteller hierfür nur ein Windows-Programm mit. Um die Daten auf einem Raspberry Pi zu loggen, ist das natürlich nicht geeignet. 🙁

Leider findet sich weder in der Doku noch in Foren ein Hinweis auf das Protokoll, das zum Auslesen notwendig ist. Ein ausgeliehener Windows-Rechner, ein RS232-Datenlogger und etwas Zeit am Wochenende haben weiter geholfen.

Hier ein Auszug aus dem Mitschnitt:

Windows sendet Steuerung antwortet Inhalt
EE000100C4 EE00F0050000020106F9 Allg. Daten
EE01040100D5 EE01F0023800A8 Sensor 1
EE0204010103 EE02F002FF7F85 Sensor 2
EE030401026E EE03F0025501A6 Sensor 3
EE04040103B6 EE04F0026C0168 Sensor 4
EE05040104BA EE05F002790254 Sensor 5
EE060401056C EE06F0026A02A3 Sensor 6
EE0704010601 EE07F0026E01B7 Sensor 7
EE08040107C5 EE08F0026C0149 Sensor 8
EE090401080B EE09F002FF7FF5 Sensor 9
EE0A040109DD EE0AF002FF7FBB Sensor 10
EE0B04010AB0 EE0BF002FF7F76 Sensor 11
EE0C04010B68 EE0CF0026F0103 Sensor 12
EE0D04010C64 EE0DF0025000A5 Sensor 13
EE0E04010DB2 EE0EF002FF7FA4 Sensor 14
EE0F04010EDF EE0FF002FF7F69 Sensor 15
EE1020033F01038C EE10F00300000075 Leistung/Wärmemenge
EE112003D3000A9F EE11F00A000000000001000000005B Ausgänge
EE122003390104B0 EE12F00400000000EC Leistung/Wärmemenge

Mit scharfem Hinschauen™ lässt sich das Protokoll erahnen:

  • Jede Nachricht beginnt mit einem EE. (Byte 0)
  • Byte 1 ist ein Nachrichtenzähler.
  • Das letzte Byte enthält die Checksumme.

Der Wert für Sensor 3 berechnet sich wie folgt (für positive Werte):

  • Byte 4 und Byte 5 enthält die Nutzdaten, hier 0x55 und 0x01.
  • Byte 5 ist das Highbyte.
  • Ist der Wert größer als 127, dann ist die Temperatur negativ. In diesem Fall vom Highbyte und vom Lowbyte 255 abziehen.
  • Wert[°C]=(Dez(Byte 5)*256+Dez(Byte 4))/10=(255+85)/10=Dez(0x0155)=34.1
  • Ist ein Sensor deaktiviert, wird 0x7FFF gesendet.

Die Ansteuerung der Ausgänge erhält man aus der vorletzten Nachricht:

  • Byte 4 bis Byte 13 ist der Status der Ausgänge.
  • Im Beispiel ist also der Ausgang 6 der Anlage angesteuert.

Eine Besonderheit gibt es noch:
Kommt in einer Nachricht der Wert EE vor, so wird dieses Byte wiederholt. Das muss man bei der Auswertung der Sensoren beachten.

Damit lassen sich die aktuellen Werte der Anlage auslesen. Ich sende vom Raspi alle 5 Minuten obige Botschaften und speichere die Werte der Sensoren und Ausgänge in einer MySQL-Datenbank.

Die Visualisierung habe ich über einen CSV-Export und das WordPress-Plugin „Visualizer: Charts and Graphs“ realisiert.

50 Gedanken zu „Heizungssteuerung auslesen“

  1. Hallo Herr Merz,

    In meinem Häuschen wurde die gleiche Heizungssteuerung wie bei Ihren Eltern verbaut. Ich bin Ihrem Vorbild gefolgt und habe die Sensordaten meiner Steuerung ausgelesen. Auf einem alten Debian Pc mit serieller Schnittstelle habe ich mit java rxtx ein kleines Programm, dass mit der FP-10 kommuniziert, erstellt :). Den raspi habe ich über die UART Schnittstelle mit einer seriellen Schnittstelle erweitert. Die Verbindung zwischen meinem alten Debian Pc und dem Raspi über die serielle Schnittstelle funktioniert. An der Kommunikation zwischen Raspi und FP-10 scheitere ich im Moment :(.

    Würden Sie mir verraten wie sie den raspi mit der Heizung verbunden haben und welche Software Sie verwenden?

    Gruß,
    Ralf

    1. Hallo Ralf,
      am Raspi habe ich einen USB zu RS232-Konverter angeschlossen. Der ist dann über ein Nullmodemkabel an die Steuerung angeschlossen.
      Auf Softwareseite verwende ich für die serielle Verbindung das Perl-Modul Device::SerialPort. Das kann man auf dem Raspi über apt-get install libdevice-serialport-perl installieren.
      Verwenden sie für die UART-Schnittstelle einen Pegelwandler?
      Das Perl-Skript schicke ich ihnen später per Mail zu. Das hilft vielleicht beim Debuggen.

      Gruß,
      Benedikt

  2. Hi Ralf,

    nice digging. Besteht die Chance, dass du mir dein Script zur Verfügung stellst? Dann kann ich mir davon für meine Steuerungsanbindung ggf. etwas abschauen.

    Danke und Gruß
    Michael

  3. Hallo Benedikt,

    Ich habe am Wochenende einen USB2RS232-Konverter (von Digitus) in Betrieb genommen. Nachdem ich den Port Identifier von ttyAMA0 zurück auf ttyUSB0 gesetzt habe, habe ich Ihr Perl Skript gestartet. Und siehe da … für alle Sensoren unter /tmp wurden von der Heizung Werte übermittelt. 🙂 🙂

    Meine Java (rxtx) Progrämmchen habe ich dann in kurzer Zeit ebenfalls zur Kommunikation mit der FP-10 überreden können, und die ersten Sensor-Adressen meinen Heizungssensoren zugeordnet.

    Nochmals vielen vielen Dank!

    Gruß,

    Ralf

    Ich hatte leider auch noch keine Minus-Grade um das Vorzeichenbit zu prüfen.

    1. Hallo Ralf,
      das freut mich, dass es funktioniert hat! 🙂
      In Bühl hat es im November Minusgrade gehabt, da musste ich mein Programm etwas anpassen.
      Ich schicke in den nächsten Tagen noch das aktualisierte Skript, damit kann dann der Winter kommen 😉
      Gruß,
      Benedikt

  4. Hallo Benedikt,

    ich wäre ebenfalls an dem Skript interessiert. Habe seit 01.11. die FP10 mit einem 5000 Liter Tank, Solar und Holzvergaser am laufen.
    Das ständige „in den Keller rennen und die Temperatur checken“ nervt langsam und einen PI habe ich auch noch untätig rumliegen.

    Kann meine Erkenntnisse dann gerne auch weiter teilen.

    Danke im Voraus und Grüße
    Tobias

  5. Hallo Benedikt,

    ich habe zwar die HLC 20 (mehr Eingänge), aber das Protokoll scheint dasselbe zu sein – kannst Du mir bitte auch Dein Skript zur Verfügung stellen? Wäre klasse!

    Gruß,
    Thomas.

  6. Hallo Benedikt,
    Respekt, tolle Arbeit! Ich bastel gerade an einer Openwrt Lösung für den HLC10, wäre es möglich auch mir das Skript zur Verfügung zu stellen.

    Gruß
    Markus

  7. Hi Benedikt,

    super danke!
    Habe seit Jahren mit embedded Systems zu tun, aber weniger mit raspberry, orange und banana deshalb möchte ich das Ganze mal mit Openwrt realisieren.

    Gruß und Danke
    Markus

  8. Hallo Benedikt,

    ich habe das ganze mal in PHP für die Hausautomation mit IP Symcon nachgestellt. Klappt soweit auch, bis auf eine Sache.
    Die Abfrage der Ausgänge endet bei mir leider nach 4 Byte. Hast Du eine Idee woran das liegt bzw. das auch schon mal gehabt?

    Grüße,
    Michael

    Debug Output:
    Initialisierung ee00f0050000020106
    sensor1 = ee01f0024c0025
    sensor2 = ee02f00236003a
    sensor3 = ee03f002d3007d
    sensor4 = ee04f002d00079
    sensor5 = ee05f0028602d5
    sensor6 = ee06f0025a028e
    sensor7 = ee07f0022d0179
    sensor8 = ee08f002070130
    sensor9 = ee09f002ec00f5
    sensor10 = ee0a
    sensor11 = ee0bf002ff7f76
    sensor12 = ee0cf0020901f3
    sensor13 = ee0df0023400c4
    sensor14 = ee0ef002ff7fa4
    sensor15 = ee0ff002ff7f69
    Aktuelle Leistung = ee10f00300000075
    Ausgänge = ee11f00a

    1. Hallo Michael,
      auf den ersten Blick würde ich sagen, dass die Anlage noch nicht vollständig geantwortet hast, wenn Du den Buffer ausliest. Ich würde die Wartezeit nach dem Schreiben der Werte etwas erhöhen. Bei mir ist das ein sleep (0.6) bzw. sleep (0.8) für die Initialisierung. Damit kommen die Werte stabil zurück. Am Anfang hatte ich eine kürze Wartezeit, da gab es manchmal ähnliche Probleme.

      1. Hi Benedikt,

        danke für Dein Feedback. Daran hatte ich auch schon gedacht. Hab die Wartezeit von 0,6 Sekunden sukzessiv auf 2 Sekunden erhöht, aber auch damit kam nicht mehr zurück. Ich habe ebenfalls die FP-10, sollte also eigentlich der gleiche Befehlssatz sein.
        Wie bist Du denn bei „reverse engineering“ vorgegangen? Sprich, wie genau hast Du die Kommunikation mitgeloggt, um an die Befehle zu kommen? Ggf. müsste ich mir das auch nochmal ansehen.

        Grüße,
        Michael

        1. Hi Michael,
          ich habe eine Testversion von einem RS232-Monitor gehabt. Der hat sich in den Treiber von Windows gehängt und dann alles auf der RS232-Schnittstelle mitgeschnitten. Mit dem Hanazeder-Programm habe ich die dann die Anzeigen der Sensoren aktualisieren lassen.
          Gruß,
          Benedikt

  9. Sehe gerade in Deinem Debug File, bei dem Test mit Deinem Script vor ein paar Wochen waren die Ausgänge auch komplette dabei:
    238:17:240:10:0:0:0:0:1:1:0:0:0:0:108:

    strange… must ich wohl nochmal weiter debuggen…

  10. Hallo Benedikt,

    Endlich hat sich da mal jemand mit der FP10 Beschäftigt.
    Würde auch gern meine Heizung in den Fhem Server integrieren und würde mich sehr freuen wenn auch du mir dein Script zukommen lassen würdest.
    Danke schon mal im Voraus 🙂

  11. Hallo Benedikt,

    da wir jetzt auch eine FP10 haben, bin ich sehr an deinem Script interessiert. Du scheinst ja schon sehr viel Vorarbeit investiert zu haben. Vielen Dank schon mal im Vorraus
    Dirk

  12. Hi Benedikt,

    vielen Dank für Deine Mühe und die Beschreibung des Protokolls.

    Ich würde mich sehr über die Zusendung Deines Skriptes freuen, da ich hier eine FP2 am Laufen habe, die vermutlich dasselbe Protokoll verwendet.

    Ich würde das ganze auch gerne auf einem 3er RPi laufen lassen und die Daten mitloggen.

    Vielen Dank schon mal!
    Christian

  13. Hallo Benedikt,

    ich besitze die FP-1 und habe auch versucht, diese Steuerung auszulesen. Nachdem die Anleitung mehr als dürftig ist, habe ich mich auch rangetastet. Die Kommunikation mit FP-Line funktioniert schon mal. Auch die von Dir aufgelisteten Kommandos sehe ich bei mir ebenso. Eine serielle Kommunikation mittels Terminalprogramm und diesen Kommandos funktioniert auch.
    Nun hab ich google gefragt wie wohl das Protokoll dazu ist, in der Hoffnung dass ich nicht der einzige bin, der diese Steuerung auslesen möchte. So bin ich auf deine Seite gekommen.
    Letztendlich möchte ich die Steuerung ebenfalls mittels Raspi auslesen. Daher wollte ich fragen, ob Du mir hier dein Skript zur Verfügung stellen möchtest. Das wäre toll!
    Viele Grüße,
    Stefan

  14. Hallo Benedikt,

    wir haben auch die Hanazeder FP10 an unserer Solaranlage hängen. Wäre daher sehr an deinem Skript interessiert, um die Steuerung mit einem Raspberry auszulesen.

    Vielen Dank im Voraus

  15. Hallo Benedikt,

    ich freue mich, dass Du das alles schon rausgefunden hast, denn ich wollte (nachdem ich mit Hanazeder telefoniert hatte) gerade damit beginnen. Bin aber Gott sei Dank auf Deine Seite gestoßen. Kannst Du mir das Script auch zukommen lassen?

    Vielen lieben Dank schon mal,

    Gruß Anton

  16. Hallo Benedikt,
    wie cool ist das denn! Ich habe auch seit 2 Jahren eine FP-10 die unsere Heizungsanlage steuert. Ich hatte mal versucht unsere Loxone Steuerung mit der Hanazeder über RS232 zu verheiraten. Bin daran aber gescheitert. Erst jetzt bin ich auf die Idee gekommen, den Umweg über einen Raspberry zu nehmen und bin damit bei dir gelandet. Kannst du mir dein Skript mal zuschicken?
    Viele Grüße,
    Torsten

  17. Hallo Benedikt.

    wir haben eine HLC-10, die die Steuerung für unsere Heizung übernimmt. Über Ethernet habe ich eine Verbindung, bisher aber nur über die HLC Programme.

    Wäre super, wenn du mir dein Skript auch zur Verfügung stellen könntest. Vielen Dank im Voraus!
    Viele Grüße
    Christian

  18. Hallo Benedikt,

    bin bei der Suche nach einer Lösung für das Auslesen meiner Hanazeder SH-8 auf Deiner Seite gelandet. Bin mir nicht sicher, ob Deine Erkenntnisse zur FP10 dort gelten, aber ein Start dürfte es sein.
    Die SH-8 hat eine 4-pinnige, innenliegende RS232-Schnittstelle, wie es scheint – die FP10 scheint ja einen „richtigen“ RS232-Stecker zu haben, wie man ihn von alten PCs kennt.
    Wie dem auch sei: Würdest Du Dein Skript mit mir teilen?

    Viele Grüße aus dem nahen Sasbachwalden!

    Christoph

    1. Hi Christoph,

      ich habe, parallel zum Auslesen mit Benedikts Skript der FP10 bei einem Bekannten den Versuch gestartet, bei mir meine SH-8 auszulesen. Bisher habe ich die SH-8 über meine Entwicklungsumgebung, einem ubuntu-Linux dazu gebracht, die aktuellen Werte über ein Perl-Skript zu senden und ungefiltert in eine .csv zu schreiben. Ich habe mir das Seriell-Adapter-Modul zur SH-8 geholt (gibts / gabs bei Hanazeder) und das an einen W&T Seriell2Eth gesteckt.

      Gruß Anton

  19. Hallo Benedikt,
    finde dein Projekt mit der HLC-Steuerung klasse.
    Würdest du mir bitte auch dein Script zukommen lassen.
    Vielen Dank
    Grüße aus Bayern
    Christian

  20. Hallo Benedikt,

    4 Jahre später gibt es scheinbar immer noch Leute die diese Steuerung einbauen….so wie ich 🙂

    Leider habe ich genau das gleiche Problem.

    Wäre es möglich, dass du mir dein Script zukommen lassen könntest?

    VG und danke,
    Korbinian

  21. Hallo,

    habe mir vor kurzem ein Haus gekauft mit einer SH-8 Steuerung.
    Würde diese gerne per Rasp anzapfen.

    Dein Script würde natürlich ungemein helfen.

    Vielen Dank,
    Peter

  22. Hallo Benedikt,
    habe auch eine Hanazeder FP10, die ich bisher umständlich per Windows-Notebook auslese. Plane auf Raspi-Basis eine Netzwerklösung.
    Wäre klasse, wenn Du mir das Skript zukommen lassen könntest
    Beste Grüße, Rene

  23. Hallo Benedikt,
    würdest du.mir.bitte.auch das.Script zusenden, denn ich würde. auch gerne die HLC Daten über MQTT loggen.
    Besten Dank
    Grüße
    Christian

  24. Hallo Benedikt,
    es sind zwar mittlerweile einige Jahre seit deinem ersten Eintrag vergangen, doch er ist wie ich sehe immer noch recht gefragt. Ich stehe aktuell auch vor der Herausforderung meine Heizungssteuerung mit einem Raspberry auszulesen. Könntest du mir bitte auch dein Skript zukommen lassen?
    Beste Grüße, Enrico

  25. Hallo Benedikt,
    nachdem ich die letzten Jahre leider nicht dazu gekommen bin, möchte ich mir nun gerne eine komfortablere Alternative zum händischen Aufzeichnen der Heizungsdaten programmieren. Mithilfe des NetIO-Microcontroller-Boards von Pollin, auf welchem nun eine Arduino Firmware läuft, habe ich schon meinen Wechselrichter erfolgreich geloggt. Nun würde ich auch gerne meine Heizungssteuerung fp-10 damit loggen. Da dein Skript bei der Übertragung auf das „NetIOduino“ sicherlich hilfreich sein wird, würde ich mich sehr freuen, wenn du auch mir dein Skript zukommen lassen könntest.
    Viele Grüße,
    Jonathan

    1. Hallo Ronald,
      die Standard-Software ist nur für Windows verfügbar und kann die Werte lediglich in eine csv-Datei schreiben. Für das dauerhafte Loggen der Werte wollte ich keinen separaten Rechner verwenden, sondern auf einen Raspi zurückgreifen, der als Server in Betrieb ist. Die Daten kann ich dann direkt in eine MySQL-Datenbank schreiben.
      Gruß,
      Benedikt

  26. Hallo Benedikt,
    ich bin jetzt bei meiner Suche die FP10 seriell anzubinden glücklicherweise auf deinen Blog gestoßen, ich habe bei mir im Haus eine Beckhoffsteuerung im Einsatz und möchte die Daten der FP10 über diese einlesen. Das sollte auch mit einer seriellen Schnittstelle von Beckhoff möglich sein. Zum ausprogrammieren der Abfrage würde mir jetzt natürlich dein Script sehr weiter helfen.
    Könntest du mir dieses bitte auch zukommen lassen. Das würde mir den Einstieg deutlich erleichtern.
    Besten Dank im Voraus.
    Beste Grüße Christoph

  27. Hallo Banedikt,

    Dein Blog nimmt wohl kein Ende. Bin gerade dabei über Loxone RS232 Schnittstelle die Daten auszulesen. Dein Skript würde mir sehr helfen m könntest du es mir bitte zusenden?

    Vielen Dank Dominik

  28. Hallo Benedikt,
    ich bin bei meiner Suche die HLC10 seriell anzubinden auf deinen Blog gestoßen. Für meine Haus nutze ich einen CX9010 von Beckhoff und möchte die Daten über diesen einlesen.
    Könntest du mir dein Script bitte auch zukommen lassen. Das würde mir den Einstieg deutlich erleichtern.
    Besten Dank im Voraus.
    Schöne Grüße Makrus

  29. Hallo Herr Benedikt,
    ich habe eine Hanazeder SH-5(8) seit vielen Jahren in Verwendung. Zum Datenloggen habe ich eine Windows Access Lösung mit rsapi.dll erstellt. Die Anwendung loggt alle 10 Sekunden und speichert alle 5 Minuten den Durchschnittswert der 30 Messungen . Ein Diagramm über den Schaltzustand für 5 Ausgänge, ein weiteres Diagramm meiner 10 verwendeten Fühler, alle Schaltzustände werden bunt, sowie Messwerte der Fühler in Grad angezeigt. Seit ich ihren Blog gelesen habe, bin ich von Ihrer Idee das Problem mit einem Raspberry zu lösen begeistert. Ich bin ebenfalls an Ihren Skript interessiert, da es mich als Linux Anfänger sicher weiterhilft.
    Beste Grüße, Richard

  30. Hallo zusammen,

    ich hab einen Server in Python geschrieben der die Daten ausliest und entweder als HTTP REST-API zur Verfügung stellt oder zu einem MQTT-Broken published (optional auch mit Home Assistant Autodiscovery). Das Skript und die Arbeit von Benedikt waren sehr gute Grundlagen dafür – danke nochmal für die tollen Detektivarbeit.

    Das Projekt findet sich unter https://github.com/unverbraucht/hanazeder_server

    Viele Grüße,
    Kevin

  31. Hallo Zusammen,
    vielen Dank für eure Vorarbeit.
    Wo ich aktuell noch häng, ist die Entschlüsselung der Abfrage EE122003390104B0, das ist ein Leistungs-/Mengenwert mit vier Variablen, die ich noch nicht wirklich zuordnen kann.
    Des Weiteren fehlen mir noch Werte zu meinem Durchflussmesser. Weis jemand wie ich diese Abfragen kann? Bzw. den Momentanertrag?
    Ach, auch die gesamte erzeugte Menge auszulesen habe ich noch nicht geschafft.
    Vielleicht kann mir noch jemand helfen.
    Beste Grüße
    Enrico

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.