Dieser Adapter verbindet ioBroker direkt und lokal mit Victron Energy GX-Geräten ( Cerbo GX, Venus GX, Ekrano GX ) – ohne Umweg über Home Assistant oder die VRM Cloud.
Wozu dient dieser Adapter?
Verbindet ioBroker direkt und lokal über das lokale MQTT-Protokoll mit Victron GX-Geräten. Unterstützt das Auslesen aller Gerätedaten und die vollständige Steuerung von Energiespeichersystemen und Wechselrichtern über Modbus TCP.
- Alle Gerätedatenpunkte werden automatisch erkannt und als ioBroker-Zustände erstellt.
- Beschreibbare Datenpunkte befinden sich direkt darunter
devices.*–common.writeZeigt an, ob der entsprechende Steuerungsschalter (Modbus / MQTT) aktuell aktiviert ist. - Funktioniert mit Einphasen- und Dreiphasensystemen
- Automatische Modbus-Geräte-ID-Erkennung
- Geringer RAM-Bedarf : ~130 MB stabil
- Virtuelle Geräte über Node-RED (
dbus-victron-virtualwerden vollständig unterstützt
Anforderungen
Auf dem GX-Gerät:
- MQTT aktivieren:
Settings → Integrations → MQTT access → On - Für Modbus-Steuerung:
Settings → Integrations → Modbus TCP Server → Enabled - Schreibzugriff:
Access level → Write access allowed
In ioBroker:
- Node.js >= 22
- Admin >= 7.7.28
Installation
Über ioBroker Admin (empfohlen)
Da dieser Adapter noch nicht im offiziellen ioBroker-Repository enthalten ist, installieren Sie ihn über die Registerkarte „npm“ in der Admin-Oberfläche:
- ioBroker-Admin öffnen
- Gehe zu Adapter
- Klicken Sie auf das GitHub/Cat-Symbol (oben rechts).
- Wählen Sie den npm- Tab aus.
- Eingeben
iobroker.victron-gxund klicken Sie auf Installieren
Nach der Installation
- Konfigurieren Sie die Instanz:
- Geben Sie die IP-Adresse des GX-Geräts ein.
- MQTT-Port:
1883(Standard) - Optional: Modbus-Steuerung (ESS-/Wechselrichterregister werden über Modbus TCP beschreibbar)
- Optional: MQTT-Steuerung (Schalter, EV-Ladegerät, Temperatur-Sollwerte werden über MQTT beschreibbar)
Hinweis: Node.js >= 22 ist erforderlich. Falls Ihr ioBroker unter Node.js 20 läuft, führen Sie bitte zuerst ein Update durch.
Konfiguration

| Feld | Beschreibung |
|---|---|
| IP-Adresse des GX-Geräts | Lokale IP von Cerbo/Venus/Ekrano GX |
| MQTT-Port | Standardwert: 1883 |
| MQTT-Benutzername / Passwort | Nur wenn die MQTT-Authentifizierung auf dem GX konfiguriert ist. |
| Modbus-Steuerung | Ermöglicht das Beschreiben von ESS/Wechselrichter-Datenpunkten (vebus, system) über Modbus TCP. |
| Modbus-Anschluss | Standardwert: 502 |
| MQTT-Steuerung | Ermöglicht das Beschreiben von Schaltern, Ladestationen für Elektrofahrzeuge und Temperatur-Sollwerten über MQTT. |
Unterstützte Geräte
Der Adapter erkennt automatisch alle mit dem GX-Gerät verbundenen Geräte:

| Gerätetyp | Beschreibung |
|---|---|
battery | Batteriesysteme (z. B. SerialBattery/LLT/JBD) |
vebus | MultiPlus/Quattro Wechselrichter |
grid | Netzzähler (z. B. Shelly 3EM, Carlo Gavazzi) |
pvinverter | PV-Wechselrichter |
acload | Wechselstromlasten (inkl. Shelly 1PM, mit umschaltbarem Ausgang) |
switch | Umschaltbare Ausgänge (Node-RED virtuelle Schalter, Shelly Pro3/Pro4/1PM, GX internes Relais) |
evcharger | EV-Ladegeräte (Lesen + Steuern) |
temperature | Temperatursensoren |
meteo | Wetterstationen |
tank | Tankfüllstandssensoren |
system | Systemübersicht |
Objektstruktur

victron-gx.0
├── devices.* → All discovered devices - common.write on the individual datapoint tells
│ │ you whether it's currently writable (see "Writable Data Points" below)
│ ├── battery.*
│ ├── vebus.* → Mode, Ac.In1.CurrentLimit, Hub4.* writable (Modbus control)
│ ├── grid.*
│ ├── pvinverter.*
│ ├── acload.<Group>.<Serial>.
│ │ ├── Ac.* → measurements (unchanged)
│ │ └── outputs.<N>. → switchable output, if the device has one (e.g. Shelly 1PM)
│ │ ├── State bool, writable (MQTT control)
│ │ ├── Status bool, read-only
│ │ ├── Name / CustomName string
│ │ └── Group string
│ ├── switch.<Group>.<Serial>.
│ │ └── outputs.<N>. → one sub-channel per output (Node-RED: one, Shelly Pro3/4: up to four)
│ │ ├── State / Status / Name / CustomName / Group (same as above)
│ ├── evcharger.<Serial>. → SetCurrent, StartStop, Mode writable (MQTT control)
│ ├── temperature.<Serial>. → Offset, Scale, FilterLength writable (MQTT control)
│ ├── meteo.*
│ ├── tank.*
│ └── system.<Serial>. → GridSetpoint, EssMode, MinimumSoc, ... writable (Modbus control);
│ also carries outputs.0.* for the GX internal relay (MQTT control)
├── overview.* → System overview (from system/0), read-only
└── info.* → Connection status
<Group> Dies ist ein optionaler Zwischenordner, der nur vorhanden ist, wenn für diesen Kanal/dieses Gerät ein Gruppenname konfiguriert ist. Weitere Informationen finden Sie unten unter „Shelly-Integration & Unterstützung mehrerer Kanäle“ .
Geräteliste (Admin)

Der Tab „Geräte“ zeigt alle gefundenen Geräte mit Typ, Seriennummer, Name und Anzahl der Datenpunkte an. Die Liste kann als JSON-Datei heruntergeladen werden – nützlich für Supportanfragen.
Themenkatalog (Admin)

Der Tab „Alle Themen“ zeigt alle MQTT-Themen an, die das GX-Gerät seit dem letzten Start des Adapters gesendet hat. Vom Adapter verarbeitete Themen sind mit einem ✓ markiert. Der Katalog kann als JSON-Datei heruntergeladen werden.
Beschreibbare Datenpunkte
Seit Version 0.10.0 gibt es keine separatecontrol.* Nicht mehr auf dem Baum. Jeder beschreibbare Datenpunkt befindet sich direkt darunter.devices.* direkt neben seinen schreibgeschützten Geschwistern –common.write Die Anzeige am Objekt selbst gibt Ihnen (und der Admin-Benutzeroberfläche/VIS) Auskunft darüber, ob es aktuell beschreibbar ist. Zwei unabhängige Konfigurationsschalter steuern dies:
- Modbus-Steuerung – ESS/Wechselrichterregister an
devices.vebus.*Unddevices.system.* - MQTT-Steuerung – Schalter (
devices.switch.*/devices.acload.*/devices.system.*Ausgänge), das Ladegerät für Elektrofahrzeuge und die Sollwerte für die Kalibrierung des Temperatursensors
Wenn ein Schalter deaktiviert ist, existiert der Datenpunkt weiterhin (sodass History/Vis-Bindungen und Skripte weiterhin funktionieren), abercommon.write Istfalse Schreibvorgänge werden ignoriert und mit einer Warnung im Protokoll versehen – keine stillschweigend verschluckten Schreibvorgänge mehr in einem Datenpunkt, der zwar beschreibbar aussah, es aber nicht war.
Vorher → nachher (Upgrade von 0.9.x)
| Alt (control.*, entfernt in Version 0.10.0) | Neue (Geräte.*) |
|---|---|
control.inverter.Mode | devices.vebus.<Serial>.Mode |
control.inverter.AcPowerSetpoint | devices.vebus.<Serial>.Hub4.L1.AcPowerSetpoint |
control.inverter.AcIn1CurrentLimit | devices.vebus.<Serial>.Ac.In1.CurrentLimit |
control.inverter.DisableCharge | devices.vebus.<Serial>.Hub4.DisableCharge |
control.inverter.DisableFeedIn | devices.vebus.<Serial>.Hub4.DisableFeedIn |
control.system.GridSetpoint | devices.system.<Serial>.GridSetpoint |
control.system.EssMode | devices.system.<Serial>.EssMode |
control.system.MinimumSoc | devices.system.<Serial>.MinimumSoc |
control.system.BatteryLifeState | devices.system.<Serial>.BatteryLifeState |
control.system.MaxFeedInPower | devices.system.<Serial>.MaxFeedInPower |
control.system.AcFeedInEnabled | devices.system.<Serial>.AcFeedInEnabled |
control.system.DcFeedInEnabled | devices.system.<Serial>.DcFeedInEnabled |
control.system.DvccMaxChargeCurrent | devices.system.<Serial>.DvccMaxChargeCurrent |
control.system.MaxDischargePower | devices.system.<Serial>.MaxDischargePower |
control.evcharger.<Instance>.SetCurrent | devices.evcharger.<Serial>.SetCurrent |
control.evcharger.<Instance>.StartStop | devices.evcharger.<Serial>.StartStop |
control.evcharger.<Instance>.Mode | devices.evcharger.<Serial>.Mode |
Vorgehensweise: Aktualisieren Sie alle Skripte, Vis-Widgets oder Blockly-Regeln, die darauf verweisen.control.* Stellen Sie sicher, dass der entsprechende Schalter (Modbus-Steuerung/MQTT-Steuerung) in den Instanzeinstellungen aktiviert ist, wenn Sie auf einen dieser Dienste zugreifen. Der Adapter benennt den Konfigurationsschlüssel um.controlEnabled ZumodbusControlEnabled automatisch beim ersten Start von Version 0.10.0 (Ihre Einstellungen bleiben erhalten) –mqttControlEnabled bleibt unverändert. Eine einmalige Bereinigung entfernt alle verbleibenden Daten.control.* Objekte, und in den Versionen 0.10.x/0.11.x wird bei jedem Start eine Warnung als Erinnerung protokolliert (in Version 0.12.0 entfernt).
Auch die Schalter sind jetzt mit Toren versehen:outputs.<N>.State Früher war es bedingungslos beschreibbar; jetzt muss die MQTT-Steuerung aktiviert sein, genau wie bei allen anderen Funktionen dieser Option.
Beispiele
ESS Grid Sollwert (einfachster Ansatz) – schreibendevices.system.<Serial>.GridSetpoint [W]:
0→ Null-Einspeisung (Der Victron ESS-Algorithmus hält das Netz bei 0 W)-3000→ 3000 W ins Netz einspeisen (Batterieentladungen)+500→ 500 W aus dem Netz beziehen (Batterie wird geladen)
Kein Keepalive erforderlich – der Wert wird dauerhaft gespeichert.
ESS Live-Sollwert (direkte Steuerung) – schreibendevices.vebus.<Serial>.Hub4.L1.AcPowerSetpoint [W]:
- Erfordert
devices.system.<Serial>.EssMode = 3(Externe Steuerung) - Der Adapter sendet den Wert alle 800 ms erneut, solange er ungleich 0 ist (Victron-Watchdog).
- Auf einstellen
0um die Kontrolle an den Victron ESS-Algorithmus zurückzugeben
Ladevorgang/Einspeisung deaktivieren:
devices.vebus.<Serial>.Hub4.DisableCharge = 1→ Der Akku lädt nicht.devices.vebus.<Serial>.Hub4.DisableFeedIn = 1→ Der Wechselrichter speist nicht ins Netz ein.
DVCC-Grenzwerte (erfordert aktiviertes DVCC auf dem GX):
devices.system.<Serial>.DvccMaxChargeCurrent[A]: Systemweite Ladestrombegrenzung (-1 = deaktiviert)devices.system.<Serial>.MaxDischargePower[W]: Entladeleistungsgrenze
Virtuelle Switches (Node-RED) – einstellenoutputs.<N>.State Zutrue /false → MQTT schreiben → GX → Node-RED → Relais
EV-Ladegerät – schreibendevices.evcharger.<Serial>.SetCurrent [A] /StartStop [bool] /Mode (0=Manuell, 1=Automatisch, 2=Geplant)
Temperatursensorkalibrierung – schreibendevices.temperature.<Serial>.Offset [°C] /Scale /FilterLength
Virtuelle Geräte (Node-RED)
Der Adapter unterstützt virtuelle Geräte, die über Node-RED erstellt wurden, vollständig.dbus-victron-virtual Paket:
- Virtuelle PV-Wechselrichter
- Virtuelle AC-Lasten
- Virtuelle Switches (mit Gruppen- und Einzelnamen)
- Virtuelle Temperatursensoren
- Virtuelle Wetterstationen
- Virtuelle Panzersensoren
Shelly-Integration & Mehrkanalunterstützung
Shelly-Geräte, die mit der GX-Integration (Cerbo/Venus/Ekrano) verbunden sind, werden nun zusammen mit virtuellen Node-RED-Switches vollständig unterstützt:
- Shelly Pro3 / Pro4 : Jedes physische Gerät meldet seine Kanäle als separate MQTT-Geräteinstanzen mit derselben Seriennummer. Der Adapter führt sie automatisch zu einem einzigen Objektbaum zusammen (
devices.switch.<Group>.<Serial>.outputs.<0..3>.*). - Shelly 13:00 Uhr : Messwerte (
Ac.*) und der schaltbare Ausgang (outputs.0.*) befinden sich im selben Gerätebaum unterdevices.acload.<Group>.<Serial>Die - GX-internes Relais : das im GX-Gerät selbst eingebaute Relais (
system/0) ist umschaltbar unterdevices.system.<Serial>.outputs.0.State, sobald die MQTT-Steuerung aktiviert ist (siehe Beschreibbare Datenpunkte ).
Alle schaltbaren Ausgänge – unabhängig vom Gerätetyp – teilen sich die gleiche Unterstruktur, sodass Platzhalterselektoren in Ihrer gesamten Installation funktionieren:
// Every switchable output, any device type, any group
'victron-gx.0.devices.*.*.*.outputs.*.State'
// Just the custom names, for a device overview
'victron-gx.0.devices.*.*.*.outputs.*.CustomName'
⚠️ Breaking Change (v0.9.x)
Früher befanden sich die Schaltausgänge direkt unter dem Gerätekanal; jetzt befinden sie sich unter einemoutputs.<N> Unterkanal. Node-REDsoutput_1 wird normalisiert aufoutputs.1 :
| Alt (v0.8.x) | Neu (v0.9.x) |
|---|---|
devices.switch.<Group>.<Serial>.State | devices.switch.<Group>.<Serial>.outputs.1.State |
devices.switch.<Group>.<Serial>.Status | devices.switch.<Group>.<Serial>.outputs.1.Status |
Aktualisieren Sie alle Skripte, Vis-Widgets oder Blockly-Regeln, die direkt auf die alten Pfade verweisen.
Wenn Sie die verbliebenen alten Objekte entfernen möchten, führen Sie diesen Befehl in der ioBroker-CLI aus (die abschließende Schleife umgeht den bekannten Fehler "Ungültige ID: undefiniert", der beim Löschen über die Admin-Benutzeroberfläche auftritt):
iobroker object list | grep -oP 'victron-gx\.0\.devices\.switch\.[^.]+\.[^.]+\.(State|Status)