ich habe mir im VanPi/Node-RED einen Flow gebaut, der per MQTT einige Daten vom Victron Cerbo GX übernimmt und in VanPi-Variablen schreibt.
Grundsätzlich funktioniert die Verbindung:
Cerbo GX läuft ja als MQTT-Broker
VanPi/Node-RED verbindet sich per MQTT
Werte wie SoC, Spannung, Strom und Leistung kommen an und können per global.set(...) in VanPi-Variablen geschrieben werden. Bsp:
let soc = Number(msg.payload);
if (isNaN(soc)) {
return null;
}
soc = Math.round(soc);
global.set("MainBattSoc", soc);
msg.payload = soc;
return msg;
Trotzdem bin ich mit dem Ergebnis noch nicht glücklich. Die Werte werden im VanPi bzw. in der App/Anzeige nicht so regelmäßig aktualisiert, wie ich es erwarten würde. Dadurch entstehen teilweise größere Unterschiede zwischen Victron/Cerbo und den im VanPi angezeigten Werten.
Meine Fragen an euch:
Habe ich beim Ansatz grundsätzlich etwas falsch gemacht?
Wie würdet ihr die Cerbo-Daten sauber in den VanPi übernehmen?
Muss man nach dem Setzen der globalen Variablen noch bestehende VanPi-Flows/Widgets antriggern?
Gibt es vielleicht schon einen funktionierenden Flow von jemandem, den ich als Vorlage nutzen könnte?
Grundsätzlich ist das so wie du das gemacht hast richtig, so oft wie der Cebro die MQTT Daten schreibt, so oft werden die Daten nach global geschrieben. Die App holt sich die Daten beim öffnen und dann alle 10 Sekunden. Die Anzeige holt sich die Daten beim öffnen, und danach erst wieder bei Seiten wechsel. Eigentlich sind die Anzeigen nur eine Moment Aufnahme, aber so gravierend bzw. schnell sind die Änderungen ja auch nicht.
Und wenn ich was beobachten will, dann lege ich mir einen Trend an.
Ich glaube inzwischen, dass mein Problem eher auf der MQTT-Kommunikation zwischen Cerbo und VanPi liegt. Nach einiger Zeit kamen bei mir keine neuen MQTT-Daten mehr an, obwohl die Verbindung zunächst funktioniert hat.
Aktuell teste ich deshalb einen kleinen Keepalive-Flow in Node-RED, da es zeitweise so aussah, als würde der Cerbo irgendwann keine neuen Daten mehr senden. Ob das tatsächlich die Ursache war, beobachte ich aktuell noch.
Seitdem läuft die Datenübertragung bisher stabiler. Mich würde interessieren, ob jemand diesen Keepalive ebenfalls verwendet oder ob bei euch die MQTT-Daten auch ohne zusätzlichen Keepalive dauerhaft aktualisiert werden?
Hilfreich war auf jeden Fall der Hinweis, dass die MQTT-Daten direkt in die Globalen Variablen geschrieben werden können und andere Nutzer das genauso einsetzen. Das bestätigt mir, dass mein grundsätzlicher Ansatz richtig ist.
Ich hatte mir mit nodered einen Spiegel gebaut, der alles was im VenusOS (Cerbo über RPi3) ins mqtt geschrieben wird 1:1 auch im Vanpi ankommt… leider hatte ich dann peeformance probleme und der Load ging extrem hoch, weil es tausende von Nachrichten waren.
Danach hab ich das wieder deaktiviert und dann einen Python Skript erstellt, das läuft nun deutlich besser da er nun einen weiteren Kern benutzt vom Pi4..
Das keepalive muss man unbedingt senden, ich mach es glaub all 20-30 Sekunden.