NEWS
goto in node red
-
@bynight Das ist ja auch verkehrt - du sollst ja nicht den Shellyausgabe in die cron node stecken.
Dir cron node triggert Dir zu bestimmten Zeitpunkten und da musst Du den Verbrauch ablesen und die Differenz bilden.
Du musst also den Verbrauch in einen Kontext schreiben und dann aus den verschiedenen Zählerständen den Verbrauch errechnen. Die Cron Node triggert also nur die Berechnung musst Du schon selbst machen.
Also als erstes speicherst Du die den Zählerstand und berechnest aus dem vorangegangenen den Verbrauch.
Also speichere den aktuellen Zählerstand im Kontext. Am Besten unter Shellyname.Aktuell
-
@bynight So hier mal ein Flow - in dem ich für einen Zähler viertelstündlich und stündlich checke.
Hier der Flow zum Import - anstelle der Inject Node musst halt die Shelly Node setzen.
-
Puh... fällt mir echt schwer das zu verstehen... wieso liefert der cron-plus den "Shelly3EM#01.aktuell" Wert? Wo kriegt der den her?
Was wird in Shelly3EM#01.aktuell gespeichert? Der Anfangswert oder der Endwert?
Ich hab das noch bissel erweitert auf Minuten und Mitternacht, aber so richtig klar ist mir das alles nicht. Vor allem denke ich, daß der mir dann um Mitternacht den Tagesverbrauch ausgibt. Das ist aber nicht das was ich haben möchte. Ich brauche wie bei einem Verbrauchszähler den ganzen Tag über den den aktuellen Wert, nur daß der Zähler um Mitternacht wieder bei 0 beginnen soll... Mein erster Versuch mit dem Spoiler hier...
-
@bynight pack mal den Text im Spoiler noch in code tags </>, dann kann den vielleicht sogar jemand lesen.
A.
-
@bynight sagte in goto in node red:
Puh... fällt mir echt schwer das zu verstehen... wieso liefert der cron-plus den "Shelly3EM#01.aktuell" Wert? Wo kriegt der den her?
Ja Dir fehlen halt noch eine Menge Grundlagen.
Was wird in Shelly3EM#01.aktuell gespeichert? Der Anfangswert oder der Endwert?
Da speicherst Du den Wert, den der Shelly gerade liefert. Die Inject Nodes dienen nur zum Testen. Du speicherst im Kontext, den aktuellen Zählerstand aus dem Shelly, den Dir diese Node liefert:
Die Inject Nodes brauchst Du dann nicht mehr:
Ich hab das noch bissel erweitert auf Minuten und Mitternacht, aber so richtig klar ist mir das alles nicht.
Vor allem denke ich, daß der mir dann um Mitternacht den Tagesverbrauch ausgibt. ^Ja es gibt Dir den Tagesverbrauch aus. Aber den aktuellen Verbrauch seit Tagesanbruch kannst Du ebenfalls so leicht berechnen. Siehe Erklärungen zum Schluss und wir haben diese Berechnung an den Minutenverbrauch gehängt.
Was wird den gemacht:
Ob minütlich Sinn macht bezweifle ich, weil ich nicht wei? ob der Shelly sooft liefert.
Jedenfalls steht dann in Deinem Flowkontext immer der aktuelle Zählerstand, den Dir die Shelly Node ja über den oberen Teil liefert.In der cronplus Node wird folgendes gemacht:
Zum jeweiligen Event wird die payload auf die Flowvariable gesetzt, die dem letzten aktuellen Zählerstand entsprach, also VOR einer Minute, VOR einer Stunde oder beim letzten Tageswechsel.
In der nächsten Change Node wird nun der aktuelle Zählerstand geholt, der ja im Flowkontext steht und permanent von der Shelly Node gespeist wird.Und in die Eigenschaft msg.aktuell geschickt. Existiert die payload nicht, weil es diese Kontextvariable noch nicht gab, dann wird der Verbrauch auf 0 gesetzt.
Über das topic wissen wir, in dem Nachrichtenobjekt, welcher Scheduler aktiv war. Über die switch Node schicken wir also die Nachricht an die entsprechende ChangeNode.
Dort machen wir nichts weiter, als das wir den aktuellen Zählerstand nun dem jeweiligen Schedulerereignis zuordnen:
So baut sich nach und nach im Objekt die letzten Zählerstände des jeweiligen Objektes auf. Ich hätte es lieber daily genannt.
Sprich aber Du hast Recht in dem Objekt hast Du immer den letzten Zählerstand um Mitternacht.
Das ist aber nicht das was ich haben möchte. Ich brauche wie bei einem Verbrauchszähler den ganzen Tag über den den aktuellen Wert, nur daß der Zähler um Mitternacht wieder bei 0 beginnen soll..
Das bekommst Du doch quasi als Abfallproodukt. Du kannst ja zum Beispiel jede Minute (und im Objekt steht ja immer der Zähler um Mitternacht vom aktuellen Zähler abziehen).
Sprich - wenn du jede Minute den aktuellen Verbrauch seit Tagesanfang haben willst, dann hängst Du deine Berechnung an den Minutenast an und nicht um Mitternacht.
Diese Node schiebst Du dann nach oben:
dann bekommst Du minütlich den aktuellen Tagesverbrauch.
In dieser ChangeNode holst Du Dir in die payload einfach den Zählerstand um Mitternacht und ziehst diesen vom aktuellen Zählerstand ab, der ja noch in dem Nachrichtenobjekt vorhanden ist.
Also hier einfach die geänderten Nodes zum Import:
Wenn Du aller Scheduler pausieren möchtest, kannst Du Kommandos in die Scheduler Node geben:
Mit Pause - werden alle Trigger pausiert, mit start gestartet.
Wenn Du aber nur minütlich den Tagesverbrauch haben willst, kannst auch nur den daily und den minütlichen Scheduler verwenden.
-
@asgothian Danke für den Tip! Hatte vorher schon gesucht wie das geht, aber nicht gefunden.
-
@mickym erstmal vielen, vielen Dank für Deine Mühe und Geduld!
Mein Gedanke war auch den Energie Wert um Mitternacht zu speichern und dann 24 Stunden lang minütlich die Differenz zu dem gespeicherten Wert auszu geben. Um Mitternacht dann neuen Wert speichern und wieder von vorn...
Allerdings habe ich keinen Plan wie das in Node Red zu bewerkstelligen wäre...Ich habe das jetzt mit Deinen Nodes so zusammengebastelt und hoffe daß ich morgen minütlich den Tagesverbrauch angezeigt bekomme... :-)))
Also vielen Dank nochmal,
Ronald -
@bynight sagte in goto in node red:
Na dann kannst aber die beiden Trigger rausschmeissen:
Und ich weiß nicht warum den aktuellen Verbrauch über eine Link-In Node machst.
Du musst für jedes Gerät ein eigenen Flow machen bzw. dann machst halt einen Subflow. Aber testen nur mit 1 Shelly. -
@mickym oh, die hatte ich vergessen zu entfernen, hatte nur im Switch gelöscht. Hab ich jetzt gelöscht.
Brauch ich in dem Switch den Mitternachtszweig oder kann ich den auch entfernen?Link In habe ich hier das erste Mal verwendet, weil ich den Shelly auf einem anderen Blatt hatte... Soll ich den Shelly (eingebunden in und ausgelesen von Cerbo GX als Victron Node) statt des Link In nochmal an den Anfang setzen oder was meinst Du?
also so hier?
-
@bynight Nein den Mitternachtszweig der ist doch das wichtigste, damit Du den minütlichen aktuellen Zählerstand gegen den von um Mitternacht abgleichen kannst. - Versuche mal die Logik zu verstehen.
Ja ich würde einen Shelly mit dem total energy zum Aktualisieren des aktuellen Zählerstands setzen. Und nicht diese sondern die BLAUE - die ich doch gepostet hatte und die Du am Anfang benutzt hast.
-
@mickym ja, hatte ich im leztzten, etwas verspätet angehefteten, Spoiler schon so eingebaut...
ja ok, um Mitternacht wird der aktuelle Wert in "Shelly3EM#01.Mitternacht" geschrieben, wenn ich das richtig verstehe. Klappt natürlich nicht wenn ich den lösche... müßte ja in 10 Minuten passieren...
-
@bynight sagte in goto in node red:
ja ok, um Mitternacht wird der aktuelle Wert in "Shelly3EM#01.Mitternacht" geschrieben, wenn ich das richtig verstehe. Klappt natürlich nicht wenn ich den lösche...
Genau - versuche halt einfach mal zu formulieren, was in jeder Node passiert, dann beginnt man es zu verstehen. Kannst Du im Übrigen auch in jede Node als Notiz schreiben, damit Du es dann auch später noch nachvollziehen kannst.
-
@bynight sagte in goto in node red:
ja ok, um Mitternacht wird der aktuelle Wert in "Shelly3EM#01.Mitternacht" geschrieben, wenn ich das richtig verstehe. Klappt natürlich nicht wenn ich den lösche... müßte ja in 10 Minuten passieren...
Schau einfach im Kontext nach dann siehst Du ja wie die Flowvariablen aussehen. Jedenfalls sollte ja in aktuell - nun immer der aktuelle Zählerstand auftauchen.
-
@mickym sehr schön! Nun habe ich endlich meine kWh Tagesanzeige! :-)))
-
@bynight Hallo Micky, langsam erschließt sich mir der Unterschied zwischen flow und msg ...
Hab mal noch ne Frage... hab den Tages Ertrag/Verbrauch nun auf die 7 letzten Tage erweitert...
Funktioniert wohl auch...
Ich frag mich nun: triggere ich die Auswertung mit einem extra con-plus Trigger, z.B. minütlich oder hänge ich die Auswertung an den Mitternachtszeig, wo es dann wohl einmal alle 24 Std getriggert wird. Ist das egal oder ist eine Variante unbedingt zu bevorzugen?Danke und Gruß,
Ronald
-
@bynight sagte in goto in node red:
Hallo Micky, langsam erschließt sich mir der Unterschied zwischen flow und msg ...
Na da hast Du ja schon Einigen was voraus.
Im Grunde sollte man so wenig wie möglich trigger nehmen, da jeder zusätzliche Trigger das System selbst belastet.
Wenn ein Flow getriggert ist, dann sollte man den trigger möglichst (gut thematisch sollte es zusammenpassen) für alles nutzen, was man zu dem Zeitpunkt erledigen will. Also auch für mehrere Geräte.Im Ergebnis macht es zwar keinen Unterschied - aber es ist halt für das System ein Unterschied, ob ein Wecker klingelt der alle aufweckt - oder 50 Wecker zur gleichen Zeit klingeln.
-
@mickym Danke! Das deckt sich mit meiner Annahme. Also hänge ich die an den Mitternachts-Zweig an und entferne den zusätzlichen Trigger.
-
@bynight Hallo Micky, ich hab schon wieder ne Frage:
ich bekomme von dem Shelly die 3 Phasen korrekt angezeigt.
Aber sobald ich den SummenNode für die Gesamtleistung anhänge bekomme ich TypeError: Cannot read properties of undefined (reading 'toString'). Hinter den Victron Nodes funktioniert der SummenNode aber.
Lese ich den Shelly falsch aus oder fehlt weiter hinten noch was oder passt der Summen Node nicht?Danke und Gruß,
Ronald -
@bynight Mit Summennodes oder so einem Schmarn arbeite ich nicht. Ich benutze für einfache Berechnungen immer nur die Standardnodes. Ausserdem vermeide ich function Nodes wo immer es geht. Wenn Du aber Summen periodisch zusammenzählen willst, dann benötigst du wohl den Kontext der function Nodes - insofern kann Deine Summennode eine Vereinfachung darstellen.
Wenn die Summennode hinter der Shelly Node funktioniert, hinter der function Node nicht, dann hast du mit der function Node das Nachrichtenobjekt so verändert, dass diese nicht mehr funktioniert.
Dazu müsstest Du über eine Debug ausgabe - die Nachrichtenobjekte, sowie den Fehler aus der Summennode sowie deren Definition zeigen.
Ich kann mir leider nicht jede Node installieren, die sich irgendjemand mal installiert hat.
-
@mickym wie komme ich an den Kontext einzelner Nodes, speziell der Funktion Node?
Der Summennode funktioniert hinter den Victrons, nicht hinter dem Shelly!
Im Debug hinter den Function Nodes wird jeweils ordentlich der Leistungswert ausgegeben.
Nur die Summe aller drei bekomme ich nicht hin. Sobald ich den Summen Node an einen der Function Nodes hänge, bekomme ich rote Fernster.Bei Victron funzt es, bei Shelly nicht:
vllt passt ja der Text in den function Nodes nicht:
var newmsg = {payload: msg.payload.emeters[1].power};
return newmsg;