Local Viessmann E3 Heat Pump CAN-to-MQTT Adapter (Plug & Play for Home Assistant)

Hello everyone,

Tired of the official ViCare Cloud API limits, connection drops, and internet dependency for your Viessmann heat pump? I was too.

To solve this, I developed a compact hardware adapter that reads data locally and purely passively from the CAN bus of Viessmann E3-generation heat pumps (e.g., Vitocal 250-A, 252-A, etc.) and streams it via Wi-Fi as a structured JSON payload to your MQTT broker.

Since I highly value the open-source community, I decided to go with a hybrid "Open Hardware / Premium Software" approach:

:hammer_and_wrench: For the DIY Makers (Open Hardware):
The schematics, PCB layout (featuring full galvanic isolation to protect your expensive heat pump!), and the Bill of Materials (BOM) are completely open and available on GitHub. You can order the PCBs themselves (e.g., via JLCPCB) and solder them your own. A 3D-printable STL file for the enclosure is included as well.

:package: For Convenience Buyers (Assembled Hardware):
If you don't want to solder SMD components yourself, you can buy the fully assembled and tested hardware inside its enclosure directly from me for approx. €35 (plus shipping from Germany).

:laptop: The Firmware & Native Home Assistant Auto-Discovery:
The firmware features a local web interface for easy Wi-Fi and MQTT setup. Most importantly, it supports native Home Assistant MQTT Auto-Discovery. Once connected, all sensors—including flow rates (in L/h), daily energy consumption (in kWh for the Energy Dashboard), temperatures, and binary On/Off states—pop up automatically as a ready-to-use device in your Home Assistant dashboard.

To protect the months of reverse-engineering work that went into deciphering the Viessmann CAN data points, the firmware uses a fair offline license model:

  • A basic version (allows testing the hardware connection and displays your unique ESP32 Chip ID) is completely free.
  • The full version unlocking all data points and HA Auto-Discovery requires a one-time software license of €50 per device (activated offline via a simple license file uploaded to the device's filesystem).

You can find the GitHub repository here: GitHub - chrkir/hcv: Home control modul for Viessmann Vitocal · GitHub

If you are interested in a pre-assembled hardware board or have questions about supported data points, feel free to reply here or send me a PM!

Best regards,
chrkir

:loudspeaker: Feature Update: Selective DID Upload & Custom MQTT Payloads!

Hey everyone,
I just pushed a major update to GitHub (v.0.88) that grants full control over which data points are processed and sent via MQTT.

What's new:

  • Selective DIDs: You can now upload a custom vcalobj.did file via the adapter's web interface.
  • Performance Boost: Only the DIDs specified in your file will be actively captured from the CAN bus and streamed via MQTT. No more cluttered brokers or unnecessary network traffic!
  • Custom Views: The selected DIDs will also define what is displayed on the adapter's built-in web app.

This is perfect for keeping your Home Assistant dashboard clean and focusing only on the metrics you actually care about (like flow rates, energy consumption, or core temperatures).

Head over to GitHub to grab the latest firmware build and check out the updated documentation on how to format your .did file.

Thanks for your ongoing support and feedback!

Hallo Christian,

vielen Dank für dein Projekt – klingt genau nach dem, was ich suche! Das Update mit dem Selective-DID-Upload (v0.88) finde ich super, gerade um das Dashboard schlank zu halten.

Ich habe eine Viessmann Vitocal 200-S AWB-E-AC 201.D16 (Split-Wärmepumpe, Inneneinheit mit WLAN-Modul und HMI 7 Touch-Display, OneBase-Steuerung). In deinem Beitrag listest du als getestete Modelle Vitocal 250-A und 252-A (“e3-Generation, etc.”).

Bevor ich eine fertig zusammengebaute Einheit + Lizenz bestelle, wollte ich fragen:

  1. Ist die 200-S AWB-E-AC (speziell 201.D16) bereits getestet oder bekannt kompatibel?
  2. Falls nicht explizit getestet: Unterscheiden sich die DIDs/CAN-Datenpunkte zwischen 200-S und 250-A/252-A signifikant, oder ist die Kommunikationsschicht bei allen e3/OneBase-Geräten identisch?
  3. Gibt es eine Möglichkeit, das vorher zu verifizieren (z. B. mit der kostenlosen Basisversion nur zum Verbindungstest), bevor ich die kostenpflichtige Lizenz aktiviere?

Danke dir und viele Grüße
Patrick

Hallo Patrick,

Danke für Dein Interesse.

Die 200 und 250 sind zwar mit dem CAN-Bus identisch, jedoch wird auf beiden ein unterschiedliches Protokoll genutzt, mit anderen Worten die 200-S nutzt nicht das E3 Protokoll sondern WO1C. Da die 200-S wie die 250 nicht in meinem direkten Zugriff ist habe ich über eine Variante für diesen Typ noch nicht nachgedacht.

Ich werde mir in den nächsten Tagen den Aufwand für eine Protokoll Änderung bzw. Anpassung für die 200 ansehen sobald die Version 1.0 für die Vitocal, die ein umfangreiches CAN-Logging und Schreibfunktionen beinhaltet, fertig ist.

Hast Du schon eine Vorstellung was Du für Signale der 200-S nutzen willst ? Im ersten Schritt wird wie bei der 250 nur ein passives mitlesen des CAN-Bus möglich sein.

Beste Grüße,

Christian

Titel: [UPDATE] ESP32 HCV Adapter: Vitocal-Werte jetzt per MQTT steuern & CAN-Filter

Hallo zusammen,

es gibt ein größeres Update für den ESP32 CAN-Adapter auf Release 1.01. Neben dem Auslesen könnt ihr eure Vitocal jetzt auch aktiv über Home Assistant steuern und die CAN-Analyse gezielter durchführen.

:rocket: Die wichtigsten Neuerungen auf einen Blick:

  1. Aktive Steuerung der Vitocal (Schreib-Zugriff für DIDs) Ihr könnt ab sofort Werte direkt per MQTT verändern – beispielsweise den Raumtemperatur-Sollwert für den Mischerkreis.
  • Beispiel: Um die Soll-Temperatur auf 20 °C zu setzen, schickt ihr einfach folgende MQTT-Payload an HCV/writeDid:JSON{"did": 424, "value": 200}(Hinweis: Der Wert 200 entspricht 20,0 °C wegen der Skalierung Float_10 in der DID-Definition).
  • Rückmeldung: Der Adapter sendet das Ergebnis der Steuerung direkt an HCV/writeDidResponse ({"status": "success"} oder {"status": "error"}).
  1. Neuer CAN-Bus Filter für Loggings Wer eigene MQTT-Nachrichten bauen oder unbekannte DIDs analysieren möchte, kann das Logging nun auf bestimmte CAN-IDs eingrenzen. Das spart Speicher und macht die Log-Analyse deutlich übersichtlicher.
  2. Flexibleres DID-Handling & UI-Optimierung Die DID-Strukturen wurden überarbeitet und die Hilfetexte im Web-Interface zur besseren Lesbarkeit angepasst.

:warning: Wichtiger Hinweis zum Schreiben von Werten:

Das Schreiben von Parametern greift direkt in die Steuerung ein. Bitte prüft vor dem Senden eigener DIDs die Skalierungen (z. B. Float_10) in eurer vcalobj.did.

Feedback, Fragen oder Ideen für weitere DIDs könnt ihr gerne hier im Thread oder auf GitHub hinterlassen!

:light_bulb: Beispiel: Einbindung in Home Assistant (YAML)

Hier ist ein kurzes Beispiel, wie ihr den Raumtemperatur-Sollwert (DID 424) über ein Home Assistant Skript oder eine Automation per MQTT anpasst:

script:
  set_vitocal_room_temperature:
    alias: "Vitocal Raum-Solltemperatur setzen"
    description: "Setzt den Raumtemperatur-Sollwert für Mischerkreis 1"
    fields:
      target_temp:
        description: "Zieltemperatur in °C (z. B. 20.5)"
        example: 20.5
    sequence:
      - action: mqtt.publish
        data:
          topic: "HCV/writeDid"
          payload: >
            {
              "did": 424,
              "value": {{ (states('input_number.vitocal_target_temp') | float * 10) | int }}
            }

Tipp zur Skalierung in HA: Da die Vitocal Werte im Format Float_10 erwartet, wird die Temperatur in der Template-Zeile einfach mit 10 multipliziert (aus 20.0 °C wird somit der Wert 200).

Titel: [Beta-Test] Vitocal 200 S CAN-to-MQTT Bridge: Eigenständige Lese-Software für die Vitocal (WO1C / CAN)

Hallo zusammen,

neben der bestehenden Lösung für die Vitocal 250 (E3-Serie) steht ab sofort auch eine Beta-Variante für die Vitocal 200 (WO1C / HCV-Serie) bereit. Die HCV-Hardware ist mit der V250 Variante identisch.

Da sich das Protokoll der Vitocal-200-Generation grundlegend von der E3-Serie unterscheidet, gibt es hierfür einen eigenen Software-Stand.

:warning: Wichtige Hinweise zum aktuellen Beta-Status:

  • :locked: Schreibschutz / Passiv: In dieser Beta-Phase sind keinerlei Schreiboperationen auf den CAN-Bus zugelassen. Die Software arbeitet rein lesend/passiv, um das Heizungssystem absolut zu schonen.

  • :magnifying_glass_tilted_left: Unvollständige DIDs: Es werden derzeit noch nicht alle DIDs/Messwerte erkannt oder angezeigt. Die Adress-Zuordnungen der WO1C-Plattform werden schrittweise erweitert.

  • :stopwatch: Rückmeldungen & Traces: Da aktuell völlig unklar ist, wie groß das Interesse in der Community ist, bitte ich um Verständnis, dass Auswertungen von zugesendeten CAN-Traces und Rückmeldungen evtl. zeitversetzt erfolgen.

Was die V200-Software in dieser Beta bietet:

  • :page_facing_up: Eigenes Profil-Format (vcalobj200.did): NATIVE Unterstützung für Adressen im WO1C-Hex-Format (z. B. 0x0100, 0x0371).

  • :floppy_disk: Integrierter CAN-Logger & Download: Der Bus-Traffic kann in die Datei canLog200.txt geschrieben und direkt über die Web-Oberfläche heruntergeladen werden (dank Chunked-Streaming auch über hcv.local ohne Abstürze).

  • :bar_chart: Web-UI Dashboard: Live-Anzeige der bereits dekodierten Datenpunkte direkt im Browser.

Aufruf an Interessierte mit Vitocal 200 / WO1C:
Wer Lust hat, die Firmware auf eigener Hardware zu testen oder rohe CAN-Traces zur Analyse beizusteuern, findet das Projekt und die Hardware-Dateien hier:

:backhand_index_pointing_right: GitHub Repository: https://github.com/chrkir/hcv

Über erste Tests und zugesandte CAN-Logs zur Erweiterung der DID-Datenbank freue ich mich!

Hallo Christian,
das Projekt interessiert mich sehr. Aktuell setze ich eine OptoLink Software OptiSplitter ein.
Meine Wärmepumpe ist eine Vitocal 333G-NC mit der Gerätenummer: 204b041500000449.
Das Baujahr ist 2015. Kann diese Steuerung auch per CAN-Bus ausgelesen und evtl. sogar gesteuert werden?
An dem internen BUS hängt noch eine VitoVent 300F.
Gruß
Martin

[UPDATE v1.14.0] Viessmann Vitocal 250 per Web-Interface steuern

Ab sofort müsst ihr Parameter der Vitocal 250 (wie die Warmwasser-Solltemperatur) nicht mehr zwingend per MQTT-Payload senden. Mit der v1.14.0 könnt ihr Werte direkt über das HCV Web-Interface anpassen.

  • Visueller Dialog: Klick auf den Parameter öffnet ein Eingabefenster mit Dropdown/Wertauswahl.

  • Integrierter Plausibilitäts-Schutz: Min/Max-Grenzen (Min: 10 | Max: 60) und die zugehörige DID (0x18C) werden direkt angezeigt, um Fehleingaben zu vermeiden.

  • 1-Klick-Übertragung: Ein Klick auf Senden schreibt den neuen Sollwert sofort auf den CAN-Bus der Heizung.

[UPDATE v1.19.0] ESP32 HCV Adapter: Fixes für CAN-Anzeige, MQTT HA-Discovery & WLAN-Stability

Hallo zusammen,

ein neues Update für den ESP32 HCV-Adapter ist verfügbar! Mit der Version v1.19.0 wurden wichtige Detail-Fixes an der Benutzeroberfläche vorgenommen sowie die Stabilität von MQTT und WLAN weiter erhöht.

:rocket: Die wichtigsten Neuerungen (v1.16 – v1.19):

  • :television: UI & CAN-Anzeige gefixt (v1.19):

    • Behebung eines Fehlers aus v1.18, durch den CAN-Daten im Web-UI nicht richtig dargestellt wurden.
    • Korrektur der Darstellung von Ganzzahl-DIDs (Integer Units).
  • :electric_plug: MQTT & Home Assistant Auto-Discovery (v1.18):

    • Sauberes Re-Discovery in Home Assistant nach einem MQTT-Reconnect (inkl. Berücksichtigung von Retained Messages).
    • Nach dem Systemstart wird für DIDs bis zum ersten gültigen Lese-Wert vorübergehend -- angezeigt.
    • Automatische Aktualisierung der DID-Objekte direkt nach einem Upload.
  • :satellite_antenna: WLAN & System-Stabilität (v1.16 – v1.17):

    • Verbessertes WLAN-Reconnect-Verhalten (Automatischer Kanal-Reset nach Timeout).
    • Neuer globaler System-Reset inklusive sauberm Deregistrieren des CAN-Busses (can deinit).
    • Überarbeitetes WLAN-Konfigurationsmenü mit integrierter Access-Point-Auswahl.

Das Release v1.19.0 steht ab sofort auf GitHub bereit. Ein Update von der v1.18 wird wegen der korrigierten CAN-Anzeige empfohlen!

Viele Grüße,
chrkir

Hallo zusammen,

mit dem Release v1.25 steht ein umfassendes Update für das HCV-Modul bereit!

Besonders im Bereich der Vitocharge VX3 Integration hat sich einiges getan. Die Datenpunkte wurden komplett modularisiert und die Engine kann flexibel an das jeweilige Setup angepasst werden.


:light_bulb: Neues Highlight: Dedizierte vx3obj.did & 3 Betriebsmodi

Die VX3-Datenpunkte werden ab sofort sauber in einer eigenen Objektdatei (vx3obj.did) verwaltet. Dadurch lässt sich das Modul nun in drei unterschiedlichen Betriebsmodi betreiben:

  1. Wärmepumpe (Ohne VX3): Klassischer Betrieb für reine Vitocal-Anlagen.
  2. Wärmepumpe + VX3: Kombibetrieb – liest sowohl die Heizungs- als auch die Photovoltaik-/Speicherdaten ab.
  3. VX3 (Ohne WP): Ideal für Installationen, bei denen nur der Vitocharge Stromspeicher / Inverter ohne Wärmepumpe ausgelesen werden soll.

:rocket: Highlights der aktuellen Versionen (v1.22 – v1.25):

  • Dynamische DID-Engine (v1.25 / v1.24): Kein Hardcoding mehr nötig! Egal ob 8-Bit (z. B. SOC in %), 16-Bit signed/unsigned (z. B. Lade-/Entladeleistung) oder 32-Bit Multi-Frame UDS-Antworten (z. B. Einspeise- und Bezugszähler DID 535) – alles wird dynamisch über die .did-Tabellen dekodiert.
  • Web-Interface & Stabilität (v1.23): Das Aktualisierungs-Flickern auf der Hauptseite wurde eliminiert und die Filterlogik für reine Ist-Wert-Sensoren (Read-Only) korrigiert.

Viel Spaß beim Testen! Feedback zu weiteren DIDs oder den neuen Betriebsmodi ist wie immer herzlich willkommen.

Hi @chrkir,
ich habe bisher noch nicht bei deiner/eurer Hardware zugegriffen, weil ich noch ein paar Fragen habe:

  • Ist die Integration der DIDs bereits abgeschlossen oder können da zukünftig noch weitere dazukommen? Anhand der vcalobj.did auf github kann ich (denke ich) sehen, dass nicht alle “Optionen”, die ich beispielsweise am HMI der Inneneinheit zum Steuern/für Informationen habe, auch darin enthalten sind. Als Beispiele seien hier mal genannt: Einmalige Warmwassererzeugung (starten), Einstellung von Zeitplänen für Heizung/Warmwasser/Zirkulationspumpe, Hystereseeinstellungen, Messwerte für Energieverbräuche von Heizung/Warmwasser, …
  • Wann gibt es weitere Infos zum HCV Ethernet & WLAN Edition? Wird man ein zweites LAN-Kabel benötigen (die WP ist auch bereits am LAN angeschlossen)? Was sind die weiteren Vorteile gegenüber der reinen WLAN-Ausgabe?

Viele Grüße

Michael

Hallo Michael,
Die DID-Liste ist keineswegs starr oder abgeschlossen. Über die Konfigurationsdatei (vcalobj.did) können neue DIDs und Datenpunkte jederzeit erweitert und per einfachem Update eingespielt werden. Mit anderen Worten jeder Anwender kann diese Datei nach eigenen Ansprüchen erweitern.

Verfügbarkeit: Ausführliche Infos und die Verfügbarkeit sind für Anfang Oktober geplant.

Vorteile von Ethernet: Maximale Ausfallsicherheit und Stabilität im Heizungskeller/Stahlbeton (wo WLAN oft schwächelt) sowie lückenlose, latenzfreie MQTT-Übertragung ohne Reconnects.

Gruß
Christian

Hi Christian,

okay, das mit der Konfigurationsdatei habe ich soweit verstanden. Mir stellt sich nur die Frage, wie genau ich die Datei selbst erweitern kann. Auf der Github-Seite zum Projekt open3e gibt es Dateien, die alle möglichen DIDs (oder zumindest ziemlich viele, deutlich mehr als in der vcalobj.did) auflisten, Link weiter unten.

Hier vielleicht mal ein konkretes Beispiel, das ich gerne umsetzen würde:
Die Wärmepumpe ist aktuell (ohne Automatisierung) fix eingestellt, dass sie einmal die Woche am Donnerstag um 12 Uhr das Legionellenprogramm fährt (Aufheizung auf 60 °C und 60 min Haltezeit). In den Übergangsmonaten oder im Winter kann es halt gut sein, dass donnerstags um 12 Uhr von der PV nicht genug Leistung kommt, dafür aber um 11 Uhr, um 14:30 Uhr oder am Mittwoch, Dienstag, whatever. Mein Ziel ist, den “perfekten” Zeitpunkt abhängig von PV-Ertrag (und/oder Prognose) so zu legen, dass möglichst dann Wärme erzeugt wird, wenn genügend Energie da ist. Dazu müsste ich bspw. folgende DIDs lesen/schreiben können:

Auszug aus open3e/src/open3e/Open3Edatapoints.py at ade743ba6f4bd3afa16b16ed56ccd4038e748f6d · open3e/open3e · GitHub

873 : O3EComplexType(2, "LegionellaProtectionActivation", [O3EByteVal(1, "Mode"), O3EByteVal(1, "State")], acc="ro"),
874 : LegionellaProtectionTargetTemperatureSetpoint", [O3EInt16(2, "Setpoint"), RawCodec(1, "Unknown")], acc="rw"),
875 : O3EStime(2, "LegionellaProtectionStartTime", acc="ro"),
876 : O3EByteVal(1, "LegionellaProtectionWeekday", acc="ro"),
877 : O3EStime(3, "LegionellaProtectionLastSuccessfulStartTime", acc="ro"),
878 : O3EByteVal(1, "LegionellaProtectionLastSuccessfulWeekday", acc="ro"),

Wie komme ich nun von dieser Auflistung zu einer gültigen Definition in der vcalobj.did?
Warum sind die meisten Werte nur read_only (acc=“ro”), im HMI kann ich die Werte doch auch einstellen (zumindest 875 und 876)?

DIDs wie 874 mit mehreren Unterdatenpunkten 874.0 und 874.1 sind noch zusätzlich mit eckigen Klammern “verschachtelt”.

Dann gibt es wiederum DIDs, die in der O3E-Datei verschachtelt sind, in der Viessmann-Doku aber nicht - wie passt das zusammen?

Weitere DIDs sind in O3E definiert, tauchen aber bei Viessmann nicht auf: bspw. 877 oder 878.

Dann hätte ich für heute noch eine abschließende Frage zu den Kommentaren in der vcalobj.did:

Kann es sein, dass die Kommentarbeschreibung nicht mehr zur Auflistung bzw. Reihenfolge der Auflistung passt?

#  In der ersten Position wird das E3 DID-Objekt angegeben
#  der nachfolgende Text ist die original E3-Definition
#  der zweite Text kann ein beliebiger sein, so z.B. eine Übersetzung in eine eigene Sprache
#  der vierte Wert definiert die Position in der CAN - Nachricht der zur Anzeige und MQTT
#  Nachricht übernommen wird. Es gibt E3 Nachrichten die ohne Datenlänge übertragen werden, um
#  diese anzeigen bzw. verarbeiten zu können muss der die Nacrichten Position auf 255 gesetzt werden.
#  der fünfte Wert besagt ob der Wert in der HTML Tabelle angezeigt wird und ist der einzige Wert
#  der geändert werden kann
#  der sechste Wert bestimmt die Auswertung des aus der CAN-Nachricht gelesen Daten
#  für die Anzeige und MQTT-Nachrichten und ist durch E3-Spezifikation bestimmt
#  Der siebte Wert ist das Write-Flag (0 = Nur Lesen, 1 = Schreiben erlaubt)
#  Der achte Wert ist das Minimum (wird nur bei Write-Flag = 1 geprüft)
#  Der neunte Wert ist das Maximum (wird nur bei Write-Flag = 1 geprüft)
#  Eine ID kann von der Verarbeitung per MQTT oder Anzeige durch voransetzen von '#' 
#  ausgeschlossen werden

# DID,  E3-Definition,                                  E3 Translation,                      Msg-Pos, Type,          Min,  Max, CAN-ID, Disp, Write, Payload
{ 271,  "DomesticHotWaterSensor",                       "WarmwasserTemperatur",              0,       FLOAT_TEMP_10,    0,    0, 0x680,    1,     0,       2 },

Hier mal meine Interpretation als Vergleich zur Beschreibung:
# Positionen durchnummeriert
#  1     2                                               3                                    4        5              6     7    8       9     10     11

# Positionen laut Kommentar
#  1     2                                               3                                    4        6?             8?    9?           5?    7?

Okay, dann bin ich mal noch etwas geduldig… :slight_smile:

Hallo Loenne,

danke für deine ausführliche Nachricht.

Die Übersetzung von DIDs aus Projekten wie Open3E in das interne Format der vcalobj.did ist leider nicht ganz so trivial, wie es auf den ersten Blick aussieht:

  1. Unterschiedliche Architektur: Open3E verwendet ein komplexes Python-Framework, das dynamische Datentypen (O3EComplexType, Bit-Verschachtelungen, Byte-Arrays) zur Laufzeit parsen kann. Auf dem ESP32 (Microcontroller) arbeitet HCV hingegen mit festen C+±Strukturen, um Speicher- und Rechenzeit-effizient zu bleiben. Multi-Byte-Verschachtelungen wie bei DID 874/875 erfordern ein manuelles Aufschlüsseln der genauen Byte-Offsets in der CAN-Payload.

  2. Sicherheit bei Schreibzugriffen: Viele DIDs sind in E3/Open3E vorsorglich als read_only markiert. Ein falscher Offset oder ein falscher Datentyp beim Beschreiben von komplexen DIDs (wie dem Legionellenprogramm) kann dazu führen, dass benachbarte Parameter im Speicher der Wärmepumpe überschrieben werden. In HCV sind daher bewusst nur ausführlich getestete und validierte DIDs freigegeben.

  3. Kommentar in der Datei: Die Header-Beschreibung in der .did-Datei ist im Laufe der Software-Entwicklung historisch gewachsen (unter anderem kamen CAN-ID und Payload-Länge nachträglich hinzu), weshalb die Durchnummerierung im alten Textkommentar nicht mehr exakt zu den Spalten passt.

Da die individuelle Protokoll-Analyse, das Aufschlüsseln von ro/rw-Eigenschaften und das Erstellen benutzerdefinierter DIDs ein sehr tiefes Reverse-Engineering der Viessmann-Spezifikation erfordert, kann ich dafür über den Standard-Support leider keine individuelle Hilfestellung oder Anleitung bieten – das würde schlichtweg den zeitlichen Rahmen sprengen.

Wenn du eigene DIDs dekodieren und experimentieren möchtest, empfehle ich dir, dich direkt an die Community im Open3E GitHub Repository oder die entsprechenden Entwickler-Threads im Home Assistant Forum zu wenden. Dort tauschen sich die Entwickler aktiv über die Dekodierung einzelner Byte-Strukturen aus.

Danke für dein Verständnis und weiterhin viel Erfolg bei deinem Projekt!

Viele Grüße

Christian

Hallo zusammen,

viele von euch haben nach einer festen Kabelverbindung gefragt, da Wärmepumpen und Speicher oft im Keller stehen, wo der WLAN-Empfang nicht immer optimal ist.

Es gibt ein wichtiges Hardware-Update: Den ESP32-HCV Adapter gibt es ab sofort auch als Ethernet & WLAN Edition mit integriertem RJ45-LAN-Anschluss!

:glowing_star: Was ist neu?

  • RJ45 Ethernet-Anschluss (LAN): Direkte Kabelverbindung zum Router/Switch für maximale Ausfallsicherheit und stabile Datenübertragung.

  • Dual-Option: Kann wahlweise per LAN-Kabel oder wie gewohnt über WLAN betrieben werden.

  • Ideal für den Heizungskeller: Kein Verbindungsabbruch mehr durch dicke Kellerdecken oder geschirmte Heizungsräume.

  • Voller Funktionsumfang: 100 % lokal, cloudfrei, galvanische CAN-Bus-Trennung und native Home Assistant Auto-Discovery.

:date: Lieferbarkeit & Details:

Die Ethernet-Version ist ab dem 1. Oktober lieferbar.

Bei Fragen zur Einbindung oder Hardware stehe ich wie immer hier im Forum zur Verfügung!

Firmware-Update v1.33 für HCV-Adapter (WLAN/Ethernet Fixes & Telnet-Diagnose)

Hallo zusammen,

Die neue Firmware v1.33 für den HCV-Adapter steht ab sofort auf GitHub bereit.

In dieser Version wurden vor allem Verbindungsprobleme bei der WLAN-Einrichtung an modernen Routern sowie die Cold-Boot-Stabilität bei der Ethernet-Variante behoben.

Die wichtigsten Neuerungen & Fixes:

Verbesserte WLAN-Kompatibilität:
Anpassung des Handshake-Verhaltens (PMF / WPA2/WPA3-Mixed Mode) für neuere Provider-Router und Access Points (u. a. A1, Magenta, Asus, FRITZ!Box).
Deaktivierung des WLAN-Power-Save (WIFI_PS_NONE), um Paketverluste und Verbindungsabbrüche zu verhindern.

Ethernet Boot-Fix:
Behebung eines Absturzes beim Einschalten (ESP_RST_PANIC) mit gestecktem LAN-Kabel durch eine korrigierte Initialisierungsreihenfolge des SPI-Treibers und der Event-Handler.

Erweitertes Telnet-Diagnose-Terminal:
Telnet (Port 23) steht nun auf allen Interfaces zur Verfügung (SoftAP, Station-Modus und Ethernet).
Überarbeitete State-Machine zur sauberen Filterung von Telnet-Steuerzeichen (IAC).

NTP & System-Diagnostics:
Zuverlässigere Zeitsynchronisation nach dem Verbindungsaufbau.
Neues Logging für Boot-Reset-Gründe, System-Speicher (MinFree) und MQTT-Verbindungsstatus.

Wichtiger Hinweis für die Ersteinrichtung (WLAN-AP):

Sobald der Adapter sich erfolgreich mit dem eigenen WLAN-Netzwerk verbindet, schaltet er den eigenen Access Point (HCV_AP) ab. Die IP-Adresse 192.168.3.1 ist ab diesem Moment nicht mehr erreichbar.

Das Webinterface ist danach direkt über die von eurem Router zugewiesene lokale IP-Adresse erreichbar (z. B. [http://192.168.1.](http://192.168.1.)x – einfach kurz in die DHCP-Tabelle des Routers schauen).

Bei Fragen oder Feedback schreibt einfach kurz hier im Thread!
Viele Grüße
Christian

Firmware-Update v1.38

Hallo zusammen,

ein neues Firmware-Update v1.38 für den HCV-Adapter (Viessmann Vitocal CAN-Adapter) steht bereit. Das Update adressiert vor allem die Stabilität der Netzwerkverbindungen bei nächtlichen Router-/Repeater-Neustarts sowie LwIP-Crashes beim Booten.

Changelog v1.38:

  1. WLAN Reconnect Watchdog (Auto-Recovery):

    • Der Adapter überwacht im Hintergrund kontinuierlich die WLAN-Verbindung.
    • Bricht das WLAN ab (z. B. durch nächtlichen Router-Reboot), schlägt der Reconnect alle 15 Sekunden an.
    • Ist das Netzwerk länger als 5 Minuten offline, führt das System automatisch einen Neustart durch, wodurch sich der Adapter zuverlässig wieder am Repeater/Router anmeldet.
  2. Deterministische Netzwerkauswahl:

    • Ethernet: Startet die Ethernet-Hardware und wartet strikt auf das LAN-Kabel. Kein ungewolltes Ausweichen auf WLAN. Ein nachträgliches Einstecken des Kabels (Hot-Plug) wird weiterhin unterstützt.
    • (WLAN: Nutzt gezielt die konfigurierten WLAN-Zugangsdaten.
  3. LwIP-Stabilität (Behebung von Invalid mbox Crashes):

    • Die Boot-Reihenfolge in startNetwork() wurde angepasst. Der TCP/IP-Stack wird nun zwingend vor dem Start weiterer FreeRTOS-Tasks (CAN-Task, Webserver, MQTT) initialisiert.
  4. WLAN-Vorkonfiguration im Ethernet-Betrieb:

    • Das SSID-Eingabefeld im Web-UI ist nun ein Freitextfeld mit gekoppelter Vorschlagsliste (<datalist>). WLAN-Zugangsdaten können somit auch im reinen Ethernet-Betrieb manuell eintragen und gespeichert werden.

Das Update kann wie gewohnt über das Web-UI unter Firmware update eingespielt werden. Zu finden auch unter Downloads & Support | ESP32-HCV Adapter | embdes.com

You can buy at Amazon the CANable Pro for approx 20€.
Works fine.
Ik use it on a VX3 solar inverter from Viessmann and on a heat pump Vitocal 200-S.

I’ve installed first Ubuntu on a VM, then open3E and finally a MQTT tot Home Assistant.
It gives me much more information than the ViCare for which you need to pay when large datas are needed