Hanazeder FP-10 Heizungssteuerung automatisiert auslesen

(In German only, sorry).

Beim Nachbarn habe ich mit Neugier die Hanazeder FP-10 Heizungssteuerung gesehen welche die Solarthermie, den Kessel und die Therme verbindet. Da dachte ich mir, die kriegt man doch sicher automatisiert ausgelesen :)

Dank der Vorarbeit von von Benedikt Merz und einem Nachmittag starren auf Protokoll-Dumps und dem Vergleich von CRC-Algorithmen konnte ich den großteil des Protokolls entschlüsseln. Angesprochen wird die Steuerung packetbasiert per UART. Pakete sind wie folgt aufgebaut:

  • Header-Byte (0xEE)
  • Byte: Sequenznummer des Requests (von 0x00 bis 0xFF, aber 0xEE auslassen)
  • Byte: Request-ID, also welche Art von Daten angefragt werden
  • Byte: Länge des Payloads in Bytes
  • Optional Payload
  • Byte: CRC8-Maxim-Prüfsumme über alles ab Byte 2 (also ohne Header).

Sollte nach dem Header das Header-Byte vorkommen (etwa in der Payload) so wird es mit 0xEE escaped - die Länge des Payloads und die Prüfsumme ändern sich dadurch nicht, da das Unescaping vor dem Parsen bzw. Checksumming stattfindet.

Antworten sind identisch kodiert und beziehen sich in der Sequenznummer immer auf den Response. Das ganze habe ich als Python-Bibliothek unter https://github.com/unverbraucht/hanazeder_python veröffentlicht.

MQTT / REST API Server

Darauf aufbauend gibt es eine Python-Anwendung, die über eine serielle Schnittstelle (RS232 direkt, oder USB-auf-RS232) oder über TCP (z. B. über einen RS232-auf-Ethernet-Konverter) mit der Hanazeder spricht, die Daten ausliest und per REST-API und/oder MQTT zur Verfügung stellt.

Der Code ist auf Github unter https://github.com/unverbraucht/hanazeder_server oder als Docker-Image auf https://hub.docker.com/repository/docker/unverbraucht/hanazeder-server verfügbar. Aussehen würde das ganze in Home Assistant dann z. B. so:

Verlauf Kollektor-Temperatur an einem wolkigen Tag