Victron Energy CERBO GX

Moin, LargeImage u. Node-Red schon drauf, bin aber froh das ich in IPS einiges mit PHP über MQTT lösen kann, gibts da keine Möglichkeit ?

Eigentlich ganz einfach wie bei den anderen Variablen auch.
2 MQTT Client Devices
N//system/0/Relay/0/State für den Status (Typ Integer)
und
W//system/0/Relay/0/State zum Schreiben
(Typ String, Wert entweder {„value“:0} oder {„value“:1}

Gruß Thomas

Danke für die Antwort. Da ich in letzter Zeit viele Fehler mit FlowHandler im Zusammenhang mit dem MQTT-Server habe (kann Daten zur Instanz xxx nicht weiterleiten: vector too long), die ich nicht zuweisen kann, habe ich gerade gestern die Daten aus dem Victron Cerbo über ModBus ausgelesen bzw. geschrieben. Welches das bessere,sichere Verfahren ist, bin ich mir noch nicht klar. Habe den Eindruck das die Daten über ModBus schneller und genauer sind (?). Welches Verfahren nutzt ihr ?

Ich bin von Modbus auf MQTT gewechselt.
Modbus:
Jede VRM-Instance hat ein eigenes Gateway und wenn die Verbindung weg ist kommen viele Fehlermeldungen im Log und der Reconnect ist abhängig von der Downtime. Enable/Disable ist aufwändig.
Für jedes Register muß ein Pollingintervall eingestellt werden, bei 1 Sekunde viel Traffic für Werte die sich nur einmal am Tag ändern
Die Einrichtung ist auch sehr aufwändig. Hat sich erst mit IPS 7.0 geändert (zu spät…)
Das Schreiben von Werten ist relativ einfach

MQTT:
Ein Gateway, kann leicht enabled/disabled werden, wenn die Verbindung wieder da ist kommen sofort wieder Daten.
Daten werden nur bei Änderung gesendet, sind aber da sofort in IPS verfügbar.
Alle Daten sind sofort im MQTT Konfigurator sichtbar und können übernommen werden.
Das Schreiben von Werten erfordert etwas Arbeit, kann aber automatisiert werden.

Moin @Thomas,
genau deine Beschriebenen Nachteile nerven mich auch ziemlich mit dem Cerbo.
Hatte mir die alternative MQTT auch schon mal angesehen, es aber so verstanden, dass dann ein Broker auf dem Cerbo selber läuft!?
Ich hatte jetzt keine direkte Möglichkeit gesehen Symcon als Server einzutragen.
Kannst du das evtl. etwas ausführen?

Danke dir!
Grüße, Christian

Ich bin jetzt ganz zufrieden wie es läuft.
Ich versuche mal in den nächsten 1-2 Wochen ein etwas ausführlicheres HowTo zu schreiben. Scheint mir sinnvoller als nur paar Codeschnipsel zu posten. Wenn du noch so lange Zeit hast …

Gruß Thomas

1 „Gefällt mir“

Top, danke dir. :+1:
Aktuell läuft ja auch alles aber MQTT ist schon charmanter.

Ich habe wie versprochen mal den Versuch einer Anleitung erstellt.
Manches mußte ich aus der Erinnerung aufschreiben, ich hoffe das war/ist auch so.
Falls mehr/andere Informationen gewünscht sind kann ich das sicher anpassen.
Integration Victron.pdf (652,9 KB)

Gruß Thomas

2 „Gefällt mir“

Hallo Thomas,

danke für die Anleitung. Damit bekomme ich tatsächlich Werte rein. Sind ja jetzt viele Feiertage, die ich zum Verstehen und Programmieren nutzen kann.

Jörg

Moin @Thomas
Danke für deine Doku.
Leider hänge ich bereits beim Punkt:
1.3. MQTT Client Device und MQTT Client anlegen

Kannst du das nochmals genauer ausführen? Was ist dort zu tun und wie miteinander zu verknüpfen? Wenn ich das MQTT Client Device erstelle, wird mir dort ein MQTT Client erzeugt, und eine ID angezeigt, zudem gibt es noch Benutzer Passwort!? Und was ist die Portal-ID, welche beim Client im lese und sende Topic eingetragen werden muss?
Sorry, stehe da gerade irgendwie auf dem Schlauch…

Beim MQTT Client muß eigentlich nur die Schnittstelle auf den erzeugten Client Socket verweisen.
Die ID wird wohl automatisch erzeugt, Benutzer/Passwort verwende ich nicht.
Die Portal -ID findet sich im Cerbo unter Einstellungen->VRM Online-Portal->VRM Portal ID

Ah, okay.
Also sind das keine lokalen Abfragen, sondern es geht einen Zwischenschritt über das VRM?
Das wäre dann wiederum nicht so toll und würde für die lokale Modbus Kommunikation sprechen.

Das glaube ich nicht, denn das wäre schon auch ein Wahnsinns-Datenverkehr zum und vom Internet. Ich denke, da wird einfach nur der Eintrag im Cerbo für die Identifikation genommen.

Nein, die Kommunikation erfolgt direkt mit dem Cerbo-GX.
Die Portal ID findest Du auf dem Cerbo wie beschrieben.

image

Du kannst auch mit dem mqtt explorer prüfen ob die Kommunikation klappt.
Kannst Du hier nachlesen:

MQTT local & via MQTT broker

Wichtig ist halt, das Du mindestens alle 60 Sekunden ein keepalive sendest, sonst stellt der Cerbo das Senden ein.

ich habe das mit einer eigenen Instanz gelöst:

image

image

Ich habe mittlerweile auch alles von Modbus auf mqtt umgestellt.

Gruß,
loerdy

Ok, vielen Dank an Alle, ich hab es nun auch am laufen. War doch etwas Arbeit alles von Modbus umzustellen :wink:

Zwei letzte Fragen habe ich noch @Thomas:
Obwohl ich im Keepalive Script mittels Array die Topics eingegrenzt habe, kommen hier Werte die nicht dazu passen, ist das korrekt oder liegt da evtl. ein Fehler vor? Was bewirkt der Wert „+/+/ProductId“ am Ende des Array?
Was mir noch nicht gelungen ist, ist das Setzen einer Variable. Könntest du darauf nochmal genauer eingehen? Ich erhalte hier immer einen Fehler, dass die Variable nicht existiert, tut sie aber!?

Ansonsten funktioniert das bisher top! Und bislang keine Fehlermeldung mehr im Log.
Danke nochmals!

Das mit den Topics habe ich wohl von hier:
https://github.com/victronenergy/dbus-mqtt
Ehrlich gesagt verwende ich die nicht, habe gemerkt das ich wohl eh fast alles brauche oder der Filter zu kompliziert wird um den Datenverkehr wirklich zu reduzieren. (Das einzige was ich wohl aktuell nicht brauchen würde wäre die History der MPPTs (das sind schon etliche Variablen) weil da ja das Symcon-Archiv bereits macht).
Für die Topics die ich nicht brauche lege ich halt im Konfigurator keine Variablen an, dann ist der Objektbaum einigermaßen übersichtlich.

Kannst du mal genauer beschreiben wie du das Setzen der Variablen machst und was/wo die Fehlermeldung kommt?

Aber klar doch.
Ich habe hier ein Device, für z.B. den SoC des Speichers:

Dieser ist mit dem String mit vorgesetztem W in der Variable korrekt eingetragen.
Muss ich eigentlich eine gesonderte Variable erstellen? Dafür kann man doch die Funktion „Nutze abweichendes Thema beim senden“ nutzen, oder? Habe aber auch schon beides probiert.

image

Per Script dann einfach mal einen festen Wert versucht zu schreiben:

Dann kommt jedoch immer die Fehlermeldung:

image

Das RequestAction muß auf die Variable angewandt werden, also 55523, dann kommt keine Fehlermeldung mehr, es geht aber wahrscheinlich trotzdem nicht.
Ich habe glaube ich schon mal an anderer Stelle erwähnt, das das mit einem MQTT Client Device nicht so einfach ist, mit einem MQTT Server Device würde es gehen aber das haben wir hier nicht.
Das Problem ist das die Variable von Typ Float ist und auch als solche gelesen wird.
Auch wenn das Topic zum Schreiben passt muß die Zielvariable beim Schreiben vom Typ String sein, daher kann es eigentlich nicht funktionieren.
Deshalb meine Lösung mit 2 MQTT Client Devices, die eigentlich nicht miteinander verknüpft sein müssen.
Mein Vorschlag diese zu verknüpfen (mit der 2. Instanz als Child) dient nur dazu das Schreiben per Webfront so komplett zu automatisieren, das keine manuelle Aktion nötig ist (außer der Variablen immer das gleiche Aktionsscript zuzuweisen)

1 „Gefällt mir“

… und das ganze gefrickel hier mit MQTT mit dem Victron läuft jetzt wirklich besser und stabiler als mit Modbus?
Also auch in beide Richtungen?

Beide Lösungen funktionieren. (Bei mir sind noch beide installiert, verwende aber aktiv nur MQTT)
Ich habe mal weiter oben bereits meine Meinung zu den Unterschieden kundgetan.
Ich denke es ist auch die persönliche Vorliebe.
Ich habe ganz viele MQTT-Devices und nur ein ModBus-Device.
Gerade bei Änderungen möchte ich halt nicht unzählige/undokumentierte neue Registeradressen/Gateways konfigurieren, sondern habe einfach bereits sprechende Namen im Konfigurator.
Aber jeder wie er will …

Gruß
Thomas