question

mino avatar image
mino asked

"Gesamt Solar" auslesen

Hallo zusammen,


ich möchte den Wert, welche im VRM Portal als "Gesamt Solar" (oben rechts) auslesen.

Ich arbeite mit Node-Red. Ich habe versucht das ganze über einzelnen Topics auszulesen und zu addieren, was ich leider nicht schaffe.

Ich habe auch den API Node installiert, jedoch finde ich den Wert dort auch nicht.

Konkret habe ich mehrere MPPT, sowie zwei WR, welche per ET112 eingebunden sind.

Im VRM Portal sehe ich alles, jedoch schaffe ich es nicht den Wert in Summe in Node-Red zu erhalten.



Mino

Node-REDapi
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

8 Answers
d-ferdi avatar image
d-ferdi answered ·

hallo,

wenn das gx die daten aller pv-anlagen hat, kann man mit dem victron system node die verschiedenen pv-systeme abrufen und mit einem summennode addieren. das muss man aber erst installieren.

tschuess

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

mino avatar image
mino answered ·

Danke für die Antwort. Wie gesagt, möchte ich das nicht manuell addieren (auch nicht in einem Node). Die Frage ist, wenn es im VRM online angezeigt wird, muss man es doch auch über den API Node rausholen können...ich find´s aber nicht.


Mino

1 comment
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

holger Bleckwehl avatar image holger Bleckwehl commented ·
Im Portal addieren die das auch erst online...


0 Likes 0 ·
mino avatar image
mino answered ·

Okay, dann mach ich es mal konkreter (muss dazu sagen, dass ich erst seit ein paar Wochen Node-Red mache, darum nutze ich u.a. ChatGPT zum coden in JSON)

Ich habe z.B. folgende Topics:
N/c0619ab38e6a/solarcharger/274/Yield/Power

N/c0619ab38e6a/solarcharger/289/Yield/Power

N/c0619ab38e6a/solarcharger/290/Yield/Power


Das sind z.B. die drei MPPTs. Der payload ist ein Object. Diesen hole ich raus und sende ihn als Zahl:

// Extrahiere den Zahlenwert aus dem Objekt-Payload
var value = parseFloat(msg.payload.value);

// Überprüfe, ob die Umwandlung erfolgreich war
if (!isNaN(value)) {
    // Erstelle eine neue Nachricht mit der Zahl als Payload
    var newMsg = { payload: value };

    // Gib die neue Nachricht mit der Zahl zurück
    return newMsg;
} else {
    // Wenn die Umwandlung fehlschlägt, gebe eine Fehlermeldung aus
    node.error("Ungültiger Wert im Payload");
    return null;
}

Soweit so gut...ich erhalte im debug:

7.3.2024, 10:57:38

node: debug 31msg.payload : number

372.7699890136719

Das ist ein Leistungswert in Watt eines MPPTs. Das habe ich nun 3x.


Was ich nicht hinbekomme ist, dass ich alle drei Payloads addiere. Habe das schon als Funktion versucht und auch mit dem nachinstallierten SUM node.

Entweder ich erhalte immer "0" oder der node meckert dass das Format nicht passt.

Hier hören meine Skills in Node Red echt auf...darum die Frage nach dem rausfiltern des "Gesamt Solar" Werte.

...oder hat einer noch ne Idee wir ich die Werte addieren kann?



Mino

2 comments
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

d-ferdi avatar image d-ferdi commented ·

hallo,

probier es mal mit dem topic:

N/xxxxx/system/0/Dc/Pv/Power

allerdings weiss ich jetzt nicht, ob hier auch die ac-pv-leistung dazugerechnet wird. die duerfte ein eigenes topic haben. ich kann das leider nicht pruefen, da ich die pv nur dc-seitig angeschlossen habe.

du musst das auch nicht ueber mqtt abfragen, wenn du node-red auf dem gx benutz gibt es nodes, die die daten liefern. notfalls das custom node, man muss nur den richtigen wert suchen.

tschuess

0 Likes 0 ·
d-ferdi avatar image d-ferdi commented ·
hallo,

das programm kannst du auch einfacher haben:

if ((msg.payload=msg.payload.value)==null || msg.payload="null") msg.payload=0;

oder auch eine fehlermeldung. alternativ kannst du auch einfach return schreiben, dann wird keine nachricht ausgegeben.

es gibt auch eine funktion, um festzustellen, welchen typ die payload hat, aber wie der befehl zum pruefen auf eine flieskommazahl jetzt heisst, muesste ich auch erst nachsehen.

und fuer das summennode muss jede msg ein anderes topic haben, sonst funktioniert das nicht!

tschuess

0 Likes 0 ·
mino avatar image
mino answered ·

Ich habs hinbekommen...wie gesagt, ich bin kein Node-Red Experte.

Habe den "import" Bereich den Reiter "Beispiele" gefunden. Da gibt es "Sum inputs". Den kann man umkonfigurieren....nun hab ich was ich brauche :-)

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

steffen-graap avatar image
steffen-graap answered ·

Ich denke das Problem ist, das nicht alle drei MPPT's gleichzeitig ihren Wert senden, und du so nie alle drei addieren kannst.
In solchen Fälle mache ich folgendes:
addierung.png

Hier mal ein Ausschnitt aus meinem NR. Ganz unten wird die Summe aller MPPT (vier Stück) addiert und angezeigt. Dazu wird in der Change-Node (oben, grün-gelb) mit dem Namen "Formatierung auf x" der Wert schon mal auf eine Nachkommatell gerundet und mit einem Topic (Namen) vershen. Innerhalb der Node sieht es so aus:
change.png

Durch das erste setzen wird einfach nur der Messwert auf einen Nachkommastelle gerundert in die payload geschreiben, der unnütze Rest (z.B. Datum & Zeit) wird entsorgt.
Das zweite setzen setz den Topic, hier "S2_Power".

Die vier Einzelwerte werden dann der Function-Node (ganz unten "Summierung Einzelpower") übergeben (gestricheetle Linie = Verbindung eines Links). Hierrin wird anhand des Topics geschaut, welcher Wert gerade rein kommt. Dieser wird in einer lokalen Variable gespeichert. Alle anderen Werte werden aus den schon gespeicherten Messwerten geladen. In Zeile 35 werden dann alle Werte aufsummiert und in der Payload gespeichert. Anschließend noch den Topic auf "All_Power" geändert.
Dann noch alle Werte ein mal abspeichern und die Summe weitersenden.
function-node.png

Mit contex.get und contex.set werden die Werte Nodeübergfreifend gespeichert. Die grünen Namen kannst du dabei frei auswählen.


addierung.png (189.4 KiB)
change.png (41.3 KiB)
function-node.png (146.3 KiB)
3 comments
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

d-ferdi avatar image d-ferdi commented ·
hallo,

unoetig viel aufwand.

einfach alle werte auf ein summierendes node (die topics muessen unterschiedlich sein, aber hier benutzt victron die node-namen, wenn man welche vergibt andernfalls die namen der werte) und man hat die summe. dass die werte eventuell etwas zeitversetzt kommen, spielt keine rolle, so schnell aendert sich die pv-leistung nicht!

ausserdem context ist nur der speicher des aktuellen nodes, flow der des flows und global der globale speicher und so haben dann auch nur die nodes zugriff auf die daten, die dazu berechtigt sind!

anstatt die funktion context.set/get zu benutzen geht auch einfach context.NAME=.

tschuess

0 Likes 0 ·
steffen-graap avatar image steffen-graap d-ferdi commented ·

Ja richtig, context ist nur innerhalb der Node scihtbar.

Danke für den Hinweis mit "context.NAME=", werd ich mal ausprobieren.

Prinzipiell verwende ich eher die Function-Node, da ich aus der Programmierwelt (Microcontroller) komme, und das für mich am verständlichsten ist, da es einer C/C++ Programmierung ähnelt.
Aber für ungebübte ist das verwenden einer Node wohl einfacher. Aber bevor ich mich lange auf die Suche nach der passenden Node begebe, mach ich mir einfach selbst. Vor allen Dingen weiß ich dann was genau, wann passiert. Das ist bei Nodes nicht immer ersichtlich.

0 Likes 0 ·
d-ferdi avatar image d-ferdi steffen-graap commented ·
hallo,

das problem kenne ich.

ich regele solche probleme inzwischen auf andere weise, was auch vorteile hat:

  1. die benoetigten werte im globalen speicher ablegen, damit ich die in jeder funktion benutzen kann, egal in welchem flow ich sie brauche. das ganze geht ganz einfach mit einem einzigen funktion node, an das ich alle werte von den victron-modes sende. das topic ist dann der name im globalen speicher.
  2. ein function-node, das gesteuert von einem taktsignal die werte ausliest und verarbeitet. sicherheitshalber kann man noch einen default-wert vorgeben, falls es die variable noch nicht gibt. dabei kann das taktsignal natuerlich auch ein weiterer wert sein, auf den die funktion reagieren muss. das erspart einem dieses laestige pruefen des topics und reduziert die aufruffrequenz und ausgabefrequenz des function-nodes. vorher musste ich da immer einen rate-limiter einfuegen.
  3. werden mehrere werte benoetigt, setze ich die einfach direkt in die nachricht: msg.leistung=100 oder msg.leistung=[100,50,150] bei 3 phasen als array oder msg.steuerung={ "Strom": 10, "Spannung": 50} als object. natuerlich kann man auch alle varianten gleichzeitig in einer funktion benutzen.
  4. wenn die werte nur zur anzeige kommen, wird der richtige variablennamen in das anzeige-node eingetragen, ansonsten kommt ein weiteres function-node dazu, das nur den gewuenschten wert weiterreicht. dann koennen schon mal mehr als 10 anzeigefelder direkt hinter einem node haengen.

mal abgesehen davon, dass man werte nur einmal abrufen muss und fuer die meisten dinge reicht ein intervall von 1s problemlos aus, fuer einiges benutze ich auch noch groessere intervalle.

und werteaenderungen, auf die man schnell reagieren muss, werden dann eben direkt uebergeben. aktuell musste ich allerdings mehrere verschiedene nachrichten auf dem gleichen weg an ein function-node weiterreichen, aber auch da kann man dann abfragen, ob bestimmte werte existieren oder nicht und das ganze dann entsprechend abarbeiten. das ist z.B. bei einem timeout noetig. aergerlich war nur, dass das timeout-node mir das object als string gesendet hat.

man kann sich das leben unnoetig schwer oder leicht machen und ich bevorzuge das 2., nachdem ich herrausgefunden habe, wie es geht.

so habe ich inzwischen auch eine ueberwachung verschiedener komponenten im netzwerk realisiert und das geht auch alles ueber ein einziges funktion node und anschliessen auf einen switch mit entsprechend vielen ausgaengen und 2 anzeigen je ausgang. ich haette natuerlich auch jede menge function-nodes benuetzen koennen, in den immer das gleiche programm ist.

tschuess

0 Likes 0 ·
mino avatar image
mino answered ·

Saugute Sache! Vielen Dank für die ausführliche Erklärung!


Ich werde das mal versuchen, ist dann doch etwas schwieriger als kurz mal klick-klick.


Mino

1 comment
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

d-ferdi avatar image d-ferdi commented ·
hallo,

ich habe das auch einmal mit einem sum-node gemacht, weil ein laderegler nicht dazugerechnet werden durfte. das war, als ich mit node-red anfing.

und ich habe mehr als 10 mppt angeschlossen!

also alle ladereglerleistungen auf ein sum-node und angezeigt.

einfacher waere es gewesen, die pv-gesamtleistung zu nehmen und die leistung des einen mppt einfach abzuziehen. aber ein substraktions-node gibt es nicht und mit function nodes hatte ich mich damals noch nicht geschaeftigt.

heute mache ich vieles mit funktion-nodes, obwohl es auch anders ginge, aber ein function-node kann dann auch mal gleich 5 und mehr nodes ersetzen.

inzwischen bekomme ich die daten aus meiner datenbank und das gleich fuer alle systeme. das ist noch viel einfacher, vor allem, um sie dann in einer tabelle darzustellen.

tschuess

0 Likes 0 ·
Karlheinz Gosch avatar image
Karlheinz Gosch answered ·

Ginge es nicht einfacher wenn du alle Nodes auf ein join verbindest welches ein Array bildet.

Dann einfach eine Summe des payloads.

Oder liege ich da ganz falsch?

1 comment
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

d-ferdi avatar image d-ferdi commented ·
hallo,

die gesamt-pv-leistung kann man ueber ein node-abrufen, zumindest, solange man nur angeschlossene mppt-laderegler benutzt.

wie das aussieht, wenn man weitere pv ueber zaehler oder das netzwerk angeschlossen hat, weiss ich nicht, da muss man eventuell die einzelnen anlagen selbst zusammenrechnern, aber auch dafuer gibt es nodes, die die werte liefern.

tschuess

0 Likes 0 ·
Sam Wutschke avatar image
Sam Wutschke answered ·

I think you're thinking a bit to complicated:
The total of the MPPT's are in the "System-node" - "MPPT". Then add your PV nodes.

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.