Hinweis
Victron Hilfecenter
Node-RED · erster Flow

Cerbo-GX-Relais nach Batterie-Ladezustand schalten

Vier Knoten: Ladezustand der Batterie (SoC) auslesen, eine einfache Funktion mit Hysterese, Relais 1 im Cerbo GX und Anzeige in der Debug-Seitenleiste. Das Relais schließt bei 30% und öffnet erst bei 50%, damit es bei SoC-Schwankungen nicht ständig schaltet. Am Ende finden Sie einen fertigen Flow zum Importieren.

Bevor Sie beginnen

  • Node-RED aktiviert. Cerbo GX mit Venus OS Large und aktiviertem Node-RED; der Editor ist unter https://venus.local:1881 erreichbar. Anleitung: erste Schritte mit Node-RED.
  • Batteriecomputer im GX sichtbar. Der SoC stammt von einem Batteriecomputer oder BMS, das mit dem GX-Gerät verbunden ist, etwa SmartShunt, BMV oder Lynx Shunt. Wenn das GX-Gerät keinen Ladezustand anzeigt, erhält auch Node-RED diesen Wert nicht.
  • Relais im manuellen Modus. Laut Victron lässt sich das Relais erst über Node-RED steuern, wenn es auf manuelle Steuerung umgestellt wurde. Für die Relais des Cerbo GX: Settings → Integrations → Relays, Funktion „Manual“. Im selben Menü wird auch die Relaispolarität eingestellt (normalerweise offen oder normalerweise geschlossen).
Cerbo GX: Klemmen Relay 1 und Relay 2 (NO, COM, NC) unten neben der Stromversorgung. In Node-RED heißt Relay 1 „Venus relay 1 state“, Pfad /Relay/0/State.
Cerbo GX: Die Anschlüsse Relay 1 und Relay 2 (NO, COM, NC) befinden sich unten neben dem Stromversorgungsanschluss. In Node-RED heißt Relay 1 „Venus relay 1 state“, Pfad /Relay/0/State.

Auch andere Relais lassen sich über Node-RED steuern, müssen aber zuerst umgestellt werden: beim BMV die Relaisoption auf REM (in VictronConnect), beim Lynx Shunt VE.Can die Funktion auf „Manual control“ (im GX-Menü), bei größeren MPPT-Ladereglern und Geräten der RS-Serie auf manuellen Modus (in VictronConnect). Das Relais des Lynx Smart BMS lässt sich nicht über Node-RED steuern. Ebenso wenig lassen sich das Alarmrelais oder das Schütz für AC-out 2 im MultiPlus und Quattro steuern.

Möchten Sie einen Generator starten? Dafür bietet das GX-Gerät bereits einen automatischen Generatorstart und -stopp per Relais mit eigenen Startbedingungen (im GX-Handbuch unter „Generator auto start/stop“). Node-RED ist dafür nicht erforderlich. Das Victron-Beispiel mit Generator weiter unten steuert das Relais nicht direkt, sondern verwendet den Knoten Generator.

So funktioniert dieser Flow

SoC % 0 / 1 Battery (input) /Soc · SoC in % Hysterese function · 30 / 50% Relay (output) /Relay/0/State debug Debug-Panel Schwellen im Hysterese-Knoten (Beispiel) schließen (1) unverändert öffnen (0) 0% 30% 50% 100%
Nachrichten (msg) zwischen Knoten
Bewegen Sie den Mauszeiger über ein Element des Schaltplans oder tippen Sie darauf.
  1. Battery (input)Ladezustand vom Batteriecomputer — bei jeder Änderung, ohne „only changes“ zusätzlich alle 5 s.
  2. Hysterese (function)SoC ≤ 30% → 1, SoC ≥ 50% → 0, dazwischen unverändert. Sendet nur bei einer Zustandsänderung.
  3. Relay (output)1 schließt, 0 öffnet Relais 1 im Cerbo GX (/Relay/0/State).
  4. debugZeigt im Debug-Bereich jeden an das Relais gesendeten Wert.

Aufbau Schritt für Schritt

  1. Neue Registerkarte. Fügen Sie im Node-RED-Editor eine neue Flow-Registerkarte hinzu (Schaltfläche „+“ über der Arbeitsfläche), damit das Beispiel von anderen Flows getrennt bleibt.
  2. Battery-Knoten. Ziehen Sie aus dem Victron-Bereich der Palette den Eingangsknoten Battery auf die Arbeitsfläche. Wählen Sie in seinen Einstellungen Ihren Batteriecomputer und den Messwert „State of charge (%)“. Lassen Sie das Feld „only changes“ leer — dann sendet der Knoten den SoC bei jeder Änderung und zusätzlich alle 5 Sekunden. So erhält die Funktion auch nach einem Neustart schnell einen Wert.
  3. function-Knoten. Fügen Sie einen normalen function-Knoten hinzu, nennen Sie ihn „Hysterese“ und fügen Sie den Code aus dem Abschnitt „Hysterese-Code“ ein. Verbinden Sie den Ausgang des Battery-Knotens mit dem Eingang der Funktion.
  4. Relay-Knoten. Fügen Sie den Ausgangsknoten Relay hinzu und wählen Sie „Venus device“ und „Venus relay 1 state“ (Pfad /Relay/0/State — die Nummerierung im Pfad beginnt bei 0, daher entspricht Index 0 dem Relais 1). Der Knoten setzt den Zustand entsprechend dem Wert in msg.payload: 0 — Open, 1 — Closed. Verbinden Sie den Ausgang der Funktion mit diesem Knoten.
  5. debug-Knoten. Schließen Sie auch einen debug-Knoten an den Ausgang der Funktion an. Die Werte sehen Sie im Debug-Bereich rechts im Editor; unter dem Knoten „Hysterese“ werden der aktuelle SoC und der Relaiszustand angezeigt.
  6. Deploy und Test. Klicken Sie auf Deploy. Damit Sie nicht auf die Entladung der Batterie warten müssen, fügen Sie vorübergehend einen inject-Knoten mit einem Zahlenwert hinzu (Typ „number“, z. B. 25 und danach 55), verbinden ihn mit der Funktion und prüfen, ob das Relais im Menü Relays umschaltet. Entfernen Sie anschließend den inject-Knoten und klicken Sie erneut auf Deploy.

Hysterese-Code

Würde das Relais bei einem einzigen Schwellenwert, z. B. 40%, ein- und ausschalten, würde es bei einem um diesen Wert schwankenden SoC ständig umschalten. Die Hysterese trennt diese Schwellen: Das Relais schließt bei 30% oder weniger und öffnet erst bei 50% oder mehr. Dazwischen bleibt es im bisherigen Zustand. Die Funktion speichert diesen Zustand im Knotenkontext und sendet nur bei einer Änderung eine Nachricht. So erhält das Relais nicht alle 5 Sekunden denselben Wert.

// Hysterese: Relais bei SoC <= 30 % schließen, bei SoC >= 50 % öffnen.
// Beispielschwellen - stellen Sie eigene Werte ein.
const PROG_ZAL = 30;
const PROG_WYL = 50;

const soc = msg.payload;
if (typeof soc !== 'number' || isNaN(soc)) return null;  // kein Messwert: nichts tun

const poprzedni = context.get('stan');
let stan = (poprzedni === undefined) ? 0 : poprzedni;
if (soc <= PROG_ZAL) stan = 1;       // 1 = Closed
else if (soc >= PROG_WYL) stan = 0;  // 0 = Open
// zwischen den Schwellen bleibt der Zustand unverändert

node.status({fill: stan ? 'green' : 'grey', shape: 'dot',
             text: 'SoC ' + soc.toFixed(1) + ' %, Relais ' + (stan ? 'geschlossen' : 'offen')});

if (stan === poprzedni) return null;  // nur Änderungen senden
context.set('stan', stan);
msg.payload = stan;
return msg;
SoCVerhalten der FunktionRelais
60%erster Messwert, 50% oder mehr → sendet 0offen
40%zwischen den Schwellen — sendet nichtsoffen
30%30% oder weniger → sendet 1geschlossen
45%zwischen den Schwellen — sendet nichtsgeschlossen
50%50% oder mehr → sendet 0offen
  • Umgekehrte Logik. Möchten Sie den Verbraucher bei niedrigem SoC abschalten statt einschalten? Tauschen Sie im Code 1 und 0 in den beiden Zeilen mit den Schwellenwerten oder schließen Sie den Stromkreis an den anderen Relaiskontakt an — NC statt NO.
  • Kein Messwert. Wenn msg.payload keine Zahl ist (z. B. weil der Batteriecomputer nicht mehr verfügbar ist), sendet die Funktion nichts und das Relais bleibt im bisherigen Zustand.
  • Nach einem Neustart. Der Knotenkontext liegt standardmäßig im RAM des GX-Geräts und geht bei einem Neustart oder Stromausfall verloren. Der erste Messwert nach dem Neustart setzt immer den Relaiszustand: Bei einem SoC zwischen den Schwellen auf 0 (offen) — auch wenn das Relais vor dem Neustart geschlossen war. Wie Sie den Kontext erhalten, beschreibt der Abschnitt „Worauf Sie achten sollten“.

Fertiger Flow zum Importieren

Derselbe Flow im JSON-Format. Die Victron-Knoten sind wie in den Beispielen der Dokumentation zur Palette node-red-contrib-victron aufgebaut.

  1. Kopieren Sie den gesamten folgenden Block einschließlich der Klammern [ und ].
  2. Import. Öffnen Sie im Editor das Menü (Schaltfläche oben rechts) → Import oder drücken Sie Ctrl-I, fügen Sie den Text ein und klicken Sie auf Import. Der Flow erscheint in einer neuen Registerkarte „Relais nach SoC“.
  3. Wählen Sie Ihren Batteriecomputer. Öffnen Sie den Knoten „Batterie-SoC“ und wählen Sie aus der Liste Ihren Batteriecomputer sowie „State of charge (%)“.
  4. Prüfen Sie das Relais im Knoten „GX-Relais 1“, ändern Sie bei Bedarf die Schwellenwerte in der Funktion und klicken Sie auf Deploy.
Nach dem Import das eigene Gerät auswählen

Der Battery-Knoten verweist auf einen beispielhaften SmartShunt aus der Victron-Dokumentation (com.victronenergy.battery/277). Die Nummer am Ende ist in jeder Anlage anders — sie hängt vom Gerät und der Anschlussart ab. Solange Sie im Knoten nicht Ihren eigenen Batteriecomputer auswählen, erhält die Funktion keinen SoC und das Relais schaltet nicht um.

[
{"id":"c24a5c0f10000001","type":"tab","label":"Relais nach SoC","disabled":false,"info":"Hysterese 30/50 % - Beispiel von cpv24.pl"},
{"id":"c24a5c0f10000002","type":"victron-input-battery","z":"c24a5c0f10000001","service":"com.victronenergy.battery/277","path":"/Soc","serviceObj":{"service":"com.victronenergy.battery/277","name":"SmartShunt (Beispiel - eigenes Gerät auswählen)"},"pathObj":{"path":"/Soc","type":"float","name":"State of charge (%)"},"initial":"","name":"Batterie-SoC","onlyChanges":false,"x":150,"y":120,"wires":[["c24a5c0f10000003"]]},
{"id":"c24a5c0f10000003","type":"function","z":"c24a5c0f10000001","name":"Hysterese","func":"// Hysterese: Relais bei SoC <= 30 % schließen, bei SoC >= 50 % öffnen.\n// Beispielschwellen - stellen Sie eigene Werte ein.\nconst PROG_ZAL = 30;\nconst PROG_WYL = 50;\n\nconst soc = msg.payload;\nif (typeof soc !== 'number' || isNaN(soc)) return null;  // kein Messwert: nichts tun\n\nconst poprzedni = context.get('stan');\nlet stan = (poprzedni === undefined) ? 0 : poprzedni;\nif (soc <= PROG_ZAL) stan = 1;       // 1 = Closed\nelse if (soc >= PROG_WYL) stan = 0;  // 0 = Open\n// zwischen den Schwellen bleibt der Zustand unverändert\n\nnode.status({fill: stan ? 'green' : 'grey', shape: 'dot',\n             text: 'SoC ' + soc.toFixed(1) + ' %, Relais ' + (stan ? 'geschlossen' : 'offen')});\n\nif (stan === poprzedni) return null;  // nur Änderungen senden\ncontext.set('stan', stan);\nmsg.payload = stan;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":120,"wires":[["c24a5c0f10000004","c24a5c0f10000005"]]},
{"id":"c24a5c0f10000004","type":"victron-output-relay","z":"c24a5c0f10000001","service":"com.victronenergy.system/0","path":"/Relay/0/State","serviceObj":{"service":"com.victronenergy.system/0","name":"Venus device"},"pathObj":{"path":"/Relay/0/State","type":"enum","name":"Venus relay 1 state","enum":{"0":"Open","1":"Closed"},"writable":true},"initial":"","name":"GX-Relais 1","onlyChanges":true,"x":600,"y":120,"wires":[]},
{"id":"c24a5c0f10000005","type":"debug","z":"c24a5c0f10000001","name":"Relaiszustand","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":610,"y":180,"wires":[]}
]

Integrierte Victron-Beispiele

Die Victron-Palette enthält eine integrierte Beispielbibliothek: Menü (oben rechts) → Import → Examples → node-red-contrib-victron. Dieselben Flows finden Sie auch auf der Wiki-Seite der Palette, sodass Sie sie ohne Editor ansehen können. Drei davon ähneln diesem Beispiel besonders:

BeispielFunktionUnterschied zum Flow auf dieser Seite
Threshold ControlDer Ausgang schaltet ein, wenn der Eingangswert die ON-Schwelle überschreitet, und aus, wenn er unter die OFF-Schwelle fällt. Vor jedem Umschalten wartet er die eingestellte Verzögerung ab (ON/OFF delay). Schwellen und manuelle Steuerung befinden sich auf dem Dashboard.Steuert dasselbe Relais 1 (/Relay/0/State), verwendet aber die Batteriespannung des System-Nodes (/Dc/Battery/Voltage) statt des SoC als Eingang. Hinzu kommen Verzögerungen. Erfordert zusätzliche Module: node-red-dashboard, node-red-contrib-ui-led und node-red-contrib-countdown.
Run generator at certain time when SOC is below 50%Prüft täglich um 18.00 den gespeicherten SoC. Ist er niedrig, startet der Generator für 45 Minuten: Der trigger-Node sendet 1 und nach 45 Minuten 0. Der SoC wird über einen change-Node im Kontext flow.SOC gespeichert.Steuert den Generator-Node (Manual Start), nicht das Relais. Hinweis: Die Beschreibung sagt „unter 50%“, aber der switch-Node in diesem Flow prüft „kleiner oder gleich 50“ (Name „Start if SOC is <= 50%“).
Only messages at regular intervalsDer change-Node speichert den letzten Wert im Kontext, der inject-Node liest ihn in festen Abständen aus.Nützlich, wenn Sie den letzten Wert in einem festen Takt benötigen, unabhängig davon, wann der Eingangs-Node ihn sendet.

Beschreibung aller Victron-Eingangs- und Ausgangs-Nodes: Victron-Nodes in Node-RED.

Worauf Sie achten sollten

  • Kontext nach einem Neustart. Damit der Kontext einen Neustart übersteht, beschreibt Victron in den FAQ die Datei /data/home/nodered/.node-red/settings-user.js mit der Einstellung contextStorage (Modul localfilesystem, Speicherung alle 300 s, also alle 5 Minuten). Ist dies der Standard-Kontextspeicher, funktioniert der Funktionscode unverändert. Victron warnt vor zu häufigem Schreiben, da dies den Flash-Speicher verschleißt.
  • Abgesicherter Modus. Wenn der Flow nach Änderungen das GX-Gerät überlastet oder fehlerhaft arbeitet, aktivieren Sie Node-RED im GX-Menü im abgesicherten Modus (safe mode). Node-RED startet, ohne die Flows auszuführen. Sie können diese korrigieren; nach einem Klick auf Deploy werden sie gestartet.
  • Node-RED neu starten. Im GX-Menü: Node-RED unter Venus OS Large Features → Node-RED aus- und wieder einschalten.
  • Uhrzeit im Flow. In zeitgesteuerten Beispielen, etwa mit Generatorstart um 18.00, verwendet Node-RED die in der Remote Console eingestellte Zeitzone. Nach deren Änderung müssen Sie Node-RED neu starten.
Automatisierung, keine Schutzeinrichtung

Ein Node-RED-Flow ersetzt weder BMS noch Sicherungen oder Schutzschalter — bei einem GX-Neustart oder einem Fehler im Flow kann das Relais in einem unerwarteten Zustand bleiben. Der am Relais angeschlossene Stromkreis muss in beiden Zuständen sicher sein. Victron bietet keinen Support für Anlagen, die Node-RED für erweiterte Lösungen verwenden.

Betroffene Geräte

Quellen

Weiter: Node-RED auf dem Cerbo GX — alle Artikel · Erste Inbetriebnahme · Victron-Nodes · Cerbo GX

Inhalt mit der Dokumentation von Victron Energy (Datenblätter und Handbücher) abgeglichen — Stand: 22.09.2026. Fehler im Inhalt melden · Korrekturprotokoll