Hallo zusammen,
ich möchte eine Open-Source Arduino/PlatformIO-Bibliothek teilen, die ich für die direkte Kommunikation mit einem Victron Multiplus über VE.Bus RS485 per ESP32 geschrieben habe.
GitHub: https://github.com/mkrasselt1/ve.bus-library
PlatformIO Registry: nach “VEBus” suchen — Installation mit pio pkg install -l VEBus
Warum ich das gebaut habe
Wir haben einen Multiplus im Wohnmobil und ich wollte mir bewusst kein Cerbo GX einbauen. Für unseren Anwendungsfall ist das Cerbo schlicht oversized — zu groß, zu komplex, zu teuer. Alles was ich brauche ist:
-
Eine eigene, kompakte Bedienoberfläche — ein kleines E-Ink-Display mit Tasten, verbaut im Wohnmobil. Zeigt Batteriespannung, AC-Leistung, Inverter-Status an und steuert Sleep / Wake. Kein Touchscreen, keine App, kein GX-Gerät nötig.
-
Einbindung als Heimspeicher — wenn das Wohnmobil zu Hause steht, wird der Multiplus mit seiner Batterie zum zusätzlichen Speicher in unserem Heim-ESS. Der ESP32 empfängt Sollwerte per MQTT und steuert den Multiplus entsprechend.
Ein ESP32-Board für ~12 EUR ersetzt für diesen Zweck ein Cerbo GX für mehrere hundert Euro — bei einem Bruchteil der Baugröße.
Bestehende Projekte (insbesondere PepeTheFroggies hervorragende ESS-Firmware) haben mir den Einstieg ermöglicht, aber ich brauchte etwas, das ich als Bibliothek in meine eigene Anwendung einbinden kann, statt eine komplette Firmware zu forken. Deshalb habe ich die Protokollschicht in eine saubere, wiederverwendbare PlatformIO-Bibliothek extrahiert.
Was die Bibliothek kann
-
Interner FreeRTOS-Task übernimmt das gesamte RS485-Timing und die Synchronisation — der eigene Code ruft nur einfache Funktionen auf
-
ESS-Leistungsvorgabe — Multiplus auf einen bestimmten Watt-Wert zum Einspeisen oder Laden setzen
-
Sleep / Wake-Befehle
-
Rückmeldung: Batteriespannung, AC-Leistung, DC-Strom, Temperatur, LED-Status, Ladezustand, AC-Eingangsstrom-Limits
-
Thread-sichere Queue-Architektur —
setESSPower()kann von jedem Core oder Task aufgerufen werden -
Auto-Direction-Unterstützung für den MAX13487E-Transceiver (LilyGo T-CAN485 — kein DE-Pin nötig)
Hardware
Ich nutze ein LilyGo T-CAN485-Board (~12 EUR), das ESP32 + RS485-Transceiver on-board hat. Drei Drähte zum VE.Bus RJ45-Port des Multiplus (Data+, Data-, GND) und man spricht VE.Bus.
Ein Hinweis: Das T-CAN485 hat Filterkondensatoren und eine Gleichtaktdrossel auf den RS485-Leitungen, die für typische Modbus-Geschwindigkeiten ausgelegt sind. VE.Bus läuft mit 256000 Baud, daher müssen die drei Widerstände nach dem Transciever entfernet werden.
Mitgelieferte Beispiele
-
Basic ESS — Serielle Konsole mit ESS-Setpoint-Steuerung, automatischem Wakeup bei Sync-Verlust und Statusausgabe. Guter Ausgangspunkt für eigene UIs.
-
MQTT + Home Assistant — Veröffentlicht alle Multiplus-Daten als HA-Sensoren mit Auto-Discovery und stellt ESS-Leistung als steuerbares Number-Entity sowie Sleep/Wake-Buttons bereit. Das nutze ich für die Heim-ESS-Einbindung.
Code-Beispiel
#include <VEBus.h>
VEBus vebus;
void setup() {
pinMode(19, OUTPUT);
digitalWrite(19, HIGH); // Transceiver aktivieren
vebus.begin(21, 22, 17); // RX, TX, /RE
}
void loop() {
vebus.setESSPower(300); // 300 W aus Batterie Richtung Netz einspeisen
vebus.requestReadRAM();
if (vebus.hasNewData()) {
vebus.clearNewData();
Serial.printf("Bat: %.2f V AC: %d W\n",
vebus.getBatVolt(), vebus.getACPower());
}
delay(5000);
}
Credits
Die Protokoll-Implementierung basiert auf PepeTheFroggies Victron-VE.Bus—esp32. Wer eine komplette, fertige ESS-Steuerung mit WiFi-Dashboard und Shelly-Anbindung braucht, sollte sich das anschauen. Diese Bibliothek hier ist für Leute, die ihre eigene Anwendung darauf aufbauen wollen.
Fragen und Feature Requests gerne hier oder auf GitHub. Pull Requests willkommen!