RDDZ EIGENENTWICKLUNG · ESP32 · MODBUS · MQTT

Heidelberg-to-MQTT: eigene ESP32-Firmware von RDDZ für die Heidelberg Wallbox

Community-Lösungen für die Heidelberg Energy Control gibt es genug. Wir wollten trotzdem eine eigene: eine schlanke ESP32-Firmware, komplett von RDDZ entwickelt und im eigenen Betrieb getestet, die die Wallbox per Modbus RTU ausliest und per MQTT steuerbar macht – mit Web-Update, Konfigportal und Fernzugriff auf die Logs.

HEIDELBERG-TO-MQTT · VON RDDZ
● v1.4.0 auf GitHub veröffentlicht
5
Firmware-Versionen (v1.0–v1.4)
19200
Baud, Modbus RTU
MIT
Lizenz auf GitHub
31.7.2026v1.0.0 Erstversion
1.8.2026v1.1–1.3 Config/Log/NTP
2.8.2026v1.4.0 WiFi-Diagnose

Eigenes Projekt, komplett ohne Community-Codebasis.

✓ Von RDDZ komplett selbst entwickelt und im eigenen Betrieb getestet
✓ Web-Updates & Konfiguration ganz ohne Ausbau am Einbauort
✓ Hardware-Watchdog mit 30-Sekunden-Timeout
✓ Fernzugriff auf Logs per Browser
✓ MIT-lizenziert, offen auf GitHub
ESP32-Firmware Heidelberg-to-MQTT von RDDZ – Modbus RTU und MQTT Anbindung für die Heidelberg Wallbox

WARUM EIGENBAU

Schlank statt überladen

HeidelBridge und wbec funktionieren grundsätzlich – für eine Heidelberg Energy Control, die man nicht täglich im Blick hat, war beides aber zu funktionsreich und nicht zuverlässig genug. Deshalb hat RDDZ eine eigene Firmware entwickelt. Das Ziel: einschalten, einmal konfigurieren, dann läuft es.

⚙

Minimal by design

Nur was für Modbus-Lesen/Schreiben und MQTT wirklich nötig ist – kein Ballast.

↻

OTA-Updates

Neue Firmware-Versionen per Browser einspielen, ohne den ESP32 am Einbauort ausbauen zu müssen.

🔐

Eigenes Konfigportal

WiFiManager scheiterte an einem Sonderzeichen im WLAN-Passwort – ein eigenes DNS/Webserver-Portal löst das zuverlässig.

📄

Fernzugriff auf Logs

Eine /log-Route mit RAM-Puffer und NTP-Zeitstempeln zeigt den Status auch ganz ohne USB-Kabel.

Der Bug, der am längsten Kopfzerbrechen bereitet hat

Der ESP32-Hardware-Watchdog schlug während der blockierenden WLAN-Verbindung zu und schickte das Gerät in eine Neustart-Schleife. Nicht einmal der Konfigurations-Access-Point tauchte noch auf. Die Lösung: Wir bauten die Watchdog-Fütterung sauber in die Verbindungslogik ein, statt sie während langer Blockierzeiten zu vergessen.

AUFBAU

Warum der ESP32 direkt an der Heidelberg Energy Control sitzt

Die Heidelberg Energy Control selbst spricht kein WLAN, sondern nur Modbus RTU über eine feste RS-485-Leitung. Der ESP32 sitzt deshalb bewusst nah an der Wallbox und übernimmt dort die Übersetzung ins Heimnetz.

🔌

Modbus braucht kurze Leitungswege

RS-485 ist robust, aber am zuverlässigsten mit kurzen, direkten Kabelwegen zwischen Heidelberg Energy Control und Transceiver.

📡

Nur der ESP32 braucht WLAN

Die Heidelberg Energy Control selbst hat gar kein WLAN eingebaut und kann sich auch nicht von sich aus mit dem Internet oder dem Heimnetz verbinden. Diese Aufgabe übernimmt komplett der ESP32: Er stellt die WLAN-Verbindung her und reicht die Werte weiter. An der Wallbox selbst ändern und bauen wir dabei nichts um – sie bleibt technisch genau so, wie sie ab Werk ausgeliefert wird.

🎯

Ein Gerät, ein Zweck

Auslesen, steuern, per MQTT bereitstellen – mehr macht die Firmware bewusst nicht.

WALLBOX KONFIGURIEREN

DIP-Schalter und Drehschalter richtig stellen

Die Heidelberg Energy Control hat selbst kein WLAN und keine Cloud-Anbindung – sie spricht ausschließlich über ihre interne RS-485-Schnittstelle. Damit sie brav auf die Modbus-Anfragen des ESP32 antwortet, stellen Sie vor der Erstinbetriebnahme ein paar kleine Schalter im Gerät passend.

Vorsicht: Schalten Sie die Heidelberg Energy Control vor dem Öffnen unbedingt spannungsfrei (Sicherung im Verteiler) – im Inneren liegt Netzspannung an. Im Zweifel übernimmt das der Elektriker.

Für genau diesen Aufbau – eine einzelne Wallbox, gesteuert von einem externen Modbus-Master (dem ESP32), ohne Heidelbergs eigenes Lastmanagement zwischen mehreren Wallboxen:

Schalterblock S4 (Bus-ID der Heidelberg Energy Control)
  S4/1  OFF
  S4/2  OFF
  S4/3  OFF
  S4/4  ON     -> Bus-ID = 1

Schalterblock S5 (Betriebsart)
  S5/1  ON     -> Status-LED leuchtet dauerhaft
  S5/2  OFF
  S5/3  OFF
  S5/4  OFF    -> Wallbox arbeitet als "Follower"
                  (reagiert nur auf externe Modbus-Anfragen,
                   führt selbst kein Lastmanagement)

Schalterblock S6 (Busabschluss / Terminierung)
  S6/1  OFF
  S6/2  ON     -> 120-Ohm-Abschlusswiderstand aktiv
  S6/3  OFF
  S6/4  OFF

Die Heidelberg Energy Control bildet in diesem Aufbau ein Ende der RS-485-Leitung, deshalb bleibt ihr interner Busabschluss (S6/2) aktiv. Setzen Sie am anderen Ende – direkt am MAX485-Modul – zusätzlich einen 120-Ohm-Widerstand zwischen A und B. Baudrate und Datenformat (19200 Baud, 8 Datenbits, gerade Parität, 1 Stoppbit) sind fest vorgegeben; über Schalter stellen Sie die nicht ein.

Hinweis: Diese Einstellungen gelten für eine einzelne, extern per Modbus gesteuerte Wallbox. Sind mehrere Wallboxen über Heidelbergs eigenes lokales Lastmanagement verkettet, gelten andere Bus-IDs und Master/Follower-Rollen – maßgeblich ist dann die Betriebsanleitung von Heidelberg.

TECHNIK

Verkabelung und MQTT-Topics

Die Firmware verbindet ESP32 und Heidelberg Energy Control über ein MAX485-Modul und veröffentlicht alle Werte strukturiert per MQTT.

Pinbelegung und Modbus-Parameter:

Das vollständige Verkabelungsschema (ESP32 ↔ MAX485 ↔ Heidelberg Energy Control, inkl. DE/RE-Brückung) gibt es als eigene Grafik weiter unten im Beitrag. MQTT-Topics (Prefix heidelberg-to-mqtt/<chip-id>/):

RO      -> GPIO18
DI      -> GPIO19
DE+RE   -> GPIO21 (gemeinsam)
MAX485 VCC -> 3.3V

Modbus: 19200 Baud, 8E1, Slave-ID 1

Alle Werte laufen unter einem gemeinsamen Prefix zusammen (die vollständige Liste aller Topics folgt weiter unten):

status/current       Ladestrom (A)
status/voltage       Spannung (V)
status/temperature   Temperatur (°C)
status/energy        Energiezähler (kWh)
wifi/rssi, wifi/ssid, wifi/uptime   Diagnose
control/current_limit   Sollstrom setzen (A)
Verkabelungsschema ESP32 mit MAX485-Modul und Heidelberg Energy Control – RO, DI, DE/RE auf GPIO18, GPIO19, GPIO21

MQTT-REFERENZ

Alle MQTT-Topics im Überblick

Alle Topics laufen unter dem Prefix heidelberg-to-mqtt/<chip-id>/. Die meisten sind als retained markiert – ein neu verbundener Client bekommt den letzten bekannten Wert sofort, ohne auf die nächste Änderung warten zu müssen.

info/… – einmalig beim Boot veröffentlicht (retained):

info/layout_version           Modbus-Register-Layout-Version
info/hardware_variante        Hardware-Variante der Wallbox
info/software_revision        Software-Revision der Wallbox
info/hw_min_ampere            Minimal mögliche Stromstärke (A)
info/hw_max_ampere            Maximal mögliche Stromstärke (A)

status/… – laufend aktualisiert (retained):

status/ladezustand            Ladezustand (Rohwert Register 5)
status/strom_l1 / _l2 / _l3   Ladestrom je Phase (A)
status/spannung_l1 / _l2 / _l3  Spannung je Phase (V)
status/leistung_va            Scheinleistung (VA)
status/energie_gesamt_wh      Energiezähler gesamt (Wh)
status/temperatur             Platinentemperatur (°C)
status/extern_gesperrt        Externe Sperre aktiv (1 = gesperrt)
status/modbus_fehler          Zähler für Modbus-Fehler

wifi/… – Diagnosedaten des ESP32 selbst (retained):

wifi/ssid                     Verbundenes WLAN
wifi/bssid                    MAC-Adresse des Access Points
wifi/rssi_dbm                 Signalstärke (dBm)
wifi/rssi_prozent             Signalstärke (%)
wifi/ip                       Aktuelle IP-Adresse
wifi/uptime_s                 Laufzeit seit dem letzten Boot (s)
wifi/freier_speicher_bytes    Freier Heap-Speicher (Byte)

set/… – einzige Steuermöglichkeit, die Firmware abonniert dieses Topic:

set/strom                     Gewünschter Ladestrom in Ampere (0-max)
                               0 = Ladevorgang unterbrechen

VERSIONSVERLAUF

Von der ersten Version zum stabilen Betrieb

Fünf Versionen innerhalb weniger Tage – jede hat ein konkretes Problem aus dem echten Betrieb gelöst.

🚀

v1.0 – v1.1

Erste lauffähige Version, dann eigenes Konfigportal statt WiFiManager, Watchdog-Schutz und Mindeststrom-Absicherung.

⚙

v1.2 – v1.3

Konfiguration zur Laufzeit über den Browser, dazu NTP-Zeitstempel in den Logs für nachvollziehbare Fehlersuche.

📡

v1.4

Eigenes WiFi-Diagnose-Topic mit Signalstärke, IP, Uptime und freiem Speicher – für Monitoring ganz ohne Zugriff vor Ort.

Woran lag der Blinkcode 6x weiß / 3x blau?

Der Fehlercode deutete zunächst auf einen Kommunikationsfehler hin, obwohl die Logs keine Modbus-Fehler zeigten. Der eigentliche Grund: eine Leader/Follower-Einstellung an der Heidelberg Energy Control selbst, die den Ladezustand bewusst auf „gesperrt“ hielt – kein Firmware-Bug, sondern ein Konfigurationsdetail der Wallbox.

EINSATZ

Vom Prototyp zum Dauerbetrieb

Software: beliebiges MQTT-System

Die Firmware liest die Heidelberg Energy Control per Modbus aus und veröffentlicht alle Werte über einen MQTT-Broker im Netzwerk, zum Beispiel Mosquitto. Mehr braucht es nicht. Jedes MQTT-fähige System kann die Werte abonnieren und Sollstrom-Vorgaben zurücksenden. Bei mir übernimmt das IP-Symcon für PV-Überschussladen. Genauso gut laufen Home Assistant, openHAB oder ein eigenes Skript – ganz ohne evcc als Vermittler.

Hardware: 3D-gedrucktes Gehäuse

Passend zur Firmware gibt es ein eigenes, selbst gedrucktes Gehäuse für ESP32 und MAX485-Modul: geschlossen, mit sauberer Kabeldurchführung für das Cat7-Anschlusskabel und Zugentlastung per Kabelbinder.

NACHBAUEN

Eigenes Setup in 7 Schritten

Der Quellcode liegt MIT-lizenziert auf GitHub. Wer selbst eine laufende Anbindung an die Heidelberg Energy Control will, findet dort alles Nötige.

1

Hardware besorgen

ESP32-WROOM-32D + MAX485-Modul, verkabelt nach RO/DI/DE+RE-Schema.

2

Firmware flashen

Mit PlatformIO bauen und per pio run -t upload aufspielen.

3

Access Point verbinden

Beim ersten Start erscheint „Heidelberg-to-MQTT-Setup-XXXXXXXX“.

4

WLAN & MQTT eintragen

Zugangsdaten und Broker-Adresse im Captive-Portal hinterlegen.

5

Werte prüfen

Ladezustand, Strom und Spannung der Heidelberg Energy Control erscheinen im MQTT-Broker.

6

Updates & Logs per Browser

/update für neue Firmware-Versionen, /log für den Live-Status.

7

In beliebiges MQTT-System einbinden

Voraussetzung ist ein MQTT-Broker im Netzwerk (z. B. Mosquitto) – darüber lässt sich die Firmware z. B. per eigenem Modul in IP-Symcon, Home Assistant oder jedem anderen MQTT-fähigen System einbinden.

FAZIT

Manchmal ist die kleinste Lösung die stabilste

Heidelberg-to-MQTT ist kein Feature-Monster, sondern bewusst minimal gehalten: Modbus lesen, MQTT senden, stabil laufen. Genau das macht den Unterschied im Alltag – gerade wenn der ESP32 direkt an der Wallbox verbaut ist und niemand ständig nach dem Rechten sehen will.

Heidelberg-to-MQTT ist eine Eigenentwicklung von RDDZ – vom Firmware-Code über die Modbus-Anbindung bis zur Gehäusekonstruktion. Der Quellcode ist MIT-lizenziert auf GitHub verfügbar – Pull Requests und Nachbauten sind ausdrücklich willkommen.

Hinweis: Die Firmware ersetzt keine geprüfte Herstellersoftware – wir haben sie für unseren eigenen Betrieb entwickelt. Wer eine Heidelberg Wallbox in Betrieb nimmt, sollte die Modbus-Parameter der eigenen Anlage vorher prüfen.

FAQ

Häufige Fragen zur NIS2-Registrierung

Beide funktionieren grundsätzlich, waren für den täglichen Betrieb aber zu funktionsreich und in der Praxis nicht stabil genug. RDDZ hat Heidelberg-to-MQTT deshalb von Grund auf selbst entwickelt und bewusst minimal gehalten: nur Modbus-Auslesen, MQTT-Anbindung und die Funktionen, die für einen unbeaufsichtigten Betrieb direkt an der Wallbox wirklich nötig sind.
Ein ESP32-WROOM-32D und ein MAX485-RS485-Modul, verkabelt über RO, DI sowie ein gemeinsames DE/RE-Signal. Die Heidelberg Energy Control muss Modbus RTU mit 19200 Baud, 8 Datenbits, gerader Parität und Slave-ID 1 unterstützen.
Beim ersten Start öffnet der ESP32 einen eigenen WLAN-Access-Point mit Captive Portal. Dort tragen Sie WLAN-Zugangsdaten und MQTT-Broker ein. Über die integrierte /config-Route ändern Sie das später jederzeit, ohne den ESP32 zurückzusetzen.
Über die Browser-Route /update spielen Sie neue Firmware-Versionen direkt übers Netzwerk ein – ein Ausbau aus dem Gehäuse am Einbauort entfällt.
Unter dem Prefix heidelberg-to-mqtt/<chip-id>/ veröffentlicht die Firmware unter anderem Ladestrom, Spannung, Temperatur und Energiezähler, dazu WLAN-Diagnosedaten (SSID, Signalstärke, Uptime) und ein Topic zum Setzen des gewünschten Ladestroms.
Ja, das Projekt steht unter MIT-Lizenz auf GitHub. Kopieren, verändern, für eigene Wallbox-Projekte weiterverwenden – alles erlaubt.
Nein. IP-Symcon ist in diesem Beitrag nur das Beispiel, weil es bei mir im Einsatz ist. Die Firmware selbst kennt gar kein bestimmtes Smart-Home-System – sie veröffentlicht die Werte ausschließlich per MQTT. Einzige Voraussetzung ist ein MQTT-Broker im Netzwerk, zum Beispiel das quelloffene Mosquitto. Darauf aufsetzend kann genauso gut Home Assistant, openHAB oder ein eigenes Skript die Werte abonnieren und Ladestrom-Vorgaben zurücksenden.

QUELLEN

Quellen und Links

  • GitHub-Repository: RDDZ-DE/heidelberg-to-mqtt (README, Changelog, Releases)
  • Heidelberg Wallbox Energy Control – Modbus-RTU-Dokumentation des Herstellers
  • PlatformIO-Dokumentation (ESP32-Build-Toolchain)

Eigenes Smart-Home- oder IoT-Projekt geplant?

Ob ESP32-Firmware, Modbus/MQTT-Anbindung oder passendes 3D-gedrucktes Gehäuse dazu – sprechen Sie uns an.