Bei Geräten im Smart Home ist es immer wieder das gleiche Thema. Die Hardware steht im eigenen Keller, die Daten entstehen im eigenen Haus, aber ohne Cloudzugang sieht man oft nur einen Bruchteil davon. So war es auch bei meiner Viessmann Vitocal 262-A Brauchwasserwärmepumpe.
Die Wärmepumpe lässt sich grundsätzlich ohne Cloud betreiben. Das ist mir wichtig, weil ich nicht möchte, dass ein essentielles Gerät im Haus zwingend mit einem Herstellerdienst verbunden sein muss. Der Nachteil ist aber schnell sichtbar. Ohne Cloud gibt es auch keinen komfortablen Zugriff aus Home Assistant auf die Werte und die Steuerung.
Da ich in den letzten Artikeln bereits einige Geräte lokal in Home Assistant integriert habe, unter anderem den Wärmezähler via ESPHome, war klar, dass ich auch hier eine lokale Lösung haben möchte.
open3e als Ausgangspunkt
Zum Glück musste ich nicht bei null anfangen. Es gibt bereits das Projekt open3e, das bei verschiedenen Viessmann Geräten über den CAN Bus Daten auslesen kann. Die Werte können anschliessend unter anderem via MQTT bereitgestellt werden.
Ich habe open3e zuerst auf einem Raspberry Pi 3 eingerichtet. Das war erfreulich unspektakulär. Installation, Verbindung zur Wärmepumpe und der erste Zugriff auf die Daten haben direkt funktioniert. Für einen ersten Test war das perfekt.
Trotzdem hat mich die Lösung nicht ganz überzeugt. Nicht weil open3e schlecht wäre, im Gegenteil. Aber ein Raspberry Pi mit einem vollständigen Linux System erschien mir für diesen Zweck etwas überdimensioniert. Ich wollte keine weitere kleine Linux Installation betreiben, nur um ein paar Werte von einer Wärmepumpe auszulesen.
Für so etwas sollte ein Mikrocontroller reichen.
Vom Raspberry Pi zum ESP32-S3
Der ESP32-S3 bringt bereits CAN Unterstützung mit. Was noch fehlt, ist ein passender CAN Transceiver. In meinem Fall habe ich ein kleines SN65HVD230 Board verwendet. Das kostet nur wenige Franken und übernimmt die elektrische Umsetzung zwischen dem ESP32 und dem CAN Bus der Wärmepumpe.
Die Vitocal 262-A hat im Gerät CAN Anschlüsse. Bei meinem Gerät sind zwei Anschlüsse mit X91 beschriftet. Dort liegen CAN High und CAN Low an. An dieser Stelle der übliche Hinweis: Wer an internen Anschlüssen einer Wärmepumpe arbeitet, sollte wissen, was er tut. Ich beschreibe hier nur meinen Aufbau und übernehme natürlich keine Garantie, dass das bei anderen Geräten gleich funktioniert.
ESPHome war für mich naheliegend. Ich nutze es bereits für andere Geräte, die Integration in Home Assistant ist sauber gelöst und die Firmware kann sehr gut auf einen konkreten Zweck reduziert werden.
DIDs aus open3e
Bevor man eine eigene ESPHome Konfiguration schreiben kann, muss man wissen, welche Werte die Wärmepumpe überhaupt bereitstellt. Bei open3e gibt es dafür einen Scan. Dieser dauert ein paar Minuten und liefert anschliessend eine Liste der gefundenen DIDs.
DID steht für Data Identifier. Der Begriff stammt aus dem UDS Protokoll. Vereinfacht gesagt ist eine DID eine Adresse für einen bestimmten Datenpunkt. Über diese Adresse kann man beispielsweise Temperaturen, Betriebszustände oder Zählerstände abfragen.
Der Scan war meine Grundlage. Ich wollte nicht einfach irgendwelche Werte aus einer fremden Konfiguration übernehmen, sondern genau die Daten verwenden, die meine Wärmepumpe tatsächlich anbietet.
Für den ersten Ausbau habe ich mich auf wenige sinnvolle Werte beschränkt. Dazu gehören die Temperaturen im Brauchwasserspeicher, der Status der Warmwasserbereitung, elektrische und thermische Leistung, Tagesenergie, Kompressorstatus, Betriebsstunden und die Solltemperatur für das Warmwasser. Mehr kann man später immer noch ergänzen.
Die ESPHome Konfiguration
Die eigentliche Konfiguration besteht im Kern aus drei Teilen. Erstens muss der ESP32 über CAN mit der Wärmepumpe sprechen. Zweitens müssen die gewünschten DIDs zyklisch abgefragt werden. Drittens müssen die Antworten korrekt interpretiert und als Sensoren, Binärsensoren oder Eingabewerte in Home Assistant bereitgestellt werden.
Die Konfiguration fragt die DIDs sequenziell ab. Nach jeder Anfrage wird die Antwort verarbeitet, bevor die nächste DID gelesen wird. Zusätzlich gibt es Timeouts, damit der Ablauf nicht hängen bleibt, falls einmal keine Antwort kommt.
Unterstützung durch ein LLM
Wie heutzutage üblich, habe ich mir bei der Erstellung der Konfiguration von einem LLM helfen lassen. Das war aber kein magischer Knopfdruck.
Ich habe lokal ein Git Repository angelegt und dort alles gesammelt, was für das Projekt relevant war. Dazu gehörten die DID Listen aus dem open3e Scan, die Anleitungen der Wärmepumpe, eine bestehende ESPHome Konfiguration mit CAN Bus als Muster und das open3e Projekt selbst. Zusätzlich habe ich ein Python venv erstellt und darin ESPHome installiert.
Der Grund dafür war einfach. Der Code Helfer sollte nicht raten müssen. Er sollte die vorhandenen Informationen durchsuchen können und auch selbst prüfen, ob die erzeugte YAML Datei überhaupt kompiliert.
Der grösste Teil der Arbeit bestand danach nicht aus Programmieren, sondern aus Spezifizieren. Ich musste sehr genau beschreiben, welche DIDs ich haben wollte, wie die Namen in Home Assistant aussehen sollen, wie der Polling Mechanismus funktionieren soll und wie mit Schreibzugriffen umzugehen ist.
Nach ein paar Iterationen war das Ergebnis brauchbar. Ich habe die Hardware mit der Wärmepumpe verbunden und die Firmware auf den ESP32 gespielt. Zu meiner Überraschung hat es auf Anhieb funktioniert.
Home Assistant ohne Herstellercloud
Nach der Einbindung erscheinen die Werte direkt in Home Assistant, sofern die ESPHome Integration dort bereits eingerichtet ist. Die Wärmepumpe kann damit lokal überwacht werden, ohne dass die Viessmann Cloud oder die ViCare App nötig ist.
Damit lässt sich die Brauchwasserwärmepumpe sauber in die bestehende lokale Hausautomation einbinden. Gerade im Zusammenspiel mit PV, Wärmezähler und den anderen Energiedaten im Haus ist das deutlich nützlicher als eine isolierte App des Herstellers.
KI als Werkzeug, nicht als Ersatz
Ich bin beim aktuellen KI Hype weiterhin skeptisch. Viele Versprechen sind überzogen und sind mehr Marketing als technische Realität.
Trotzdem hat dieses Projekt für mich wieder gezeigt, dass LLMs in den richtigen Händen sehr nützlich sein können. Nicht als Ersatz für Verständnis, sondern als Werkzeug. Man muss wissen, was man bauen will, man muss die Eingaben kontrollieren und man muss das Ergebnis testen und verstehen können.
Genau dann entsteht ein Mehrwert. In meinem Fall hat das LLM geholfen, aus vorhandener Dokumentation, Scan Daten und Beispielen eine funktionierende ESPHome Konfiguration zu entwickeln. Ohne Kontext und ohne klare Vorgaben wäre das Ergebnis vermutlich unbrauchbar gewesen.
Fazit
Die Vitocal 262-A läuft bei mir weiterhin ohne Cloud. Die wichtigsten Daten sind nun trotzdem lokal in Home Assistant sichtbar. Die Solltemperatur lässt sich dort ebenfalls setzen.
open3e war der wichtige Türöffner, um die DIDs und das Verhalten der Wärmepumpe zu verstehen. Für den Dauerbetrieb reicht mir nun aber ein ESP32-S3 mit einem günstigen CAN Transceiver.
Ich habe die gesammelten Informationen und die ESPHome Konfiguration in einem Git Repository veröffentlicht. Das Ganze ist auf meine Vitocal 262-A mit OneBase Steuerung ausgelegt und sollte nicht blind auf andere Geräte übertragen werden. Wer eine ähnliche Wärmepumpe hat, findet dort aber eine gute Grundlage für eigene Experimente.
Am Ende ist das Ergebnis für mich ziemlich befriedigend. Ein weiteres Gerät ist aus dem Cloudzwang befreit und arbeitet nun lokal mit dem Rest meiner Hausautomation zusammen.




Wünschenswert wäre wenn die Hersteller von Wechselrichtern, Wallboxen und Heizungen sich zusammensetzen würden und am Matter Standard weiter entwickeln. Dann hätte man die notwendigen Details in einem gemeinsamen Standard.