NEWS
Node Red Optimierung PV Überschuss für Anfänger
-
@harry_vlbg sagte in Node Red Optimierung PV Überschuss für Anfänger:
@mickym habe es nun so gelöst. Müsste meiner Meinung auch klappen.
wenn er sich in diesem Bereich bewegt schaltet es und morgens geht es ohnehin an bei Sonnenaufgang.
Spricht was dagegen?So was macht gar keinen Sinn - war soll eine Switch Node mit 3 Ausgängen, wenn die dann alle in einen Eingang münden.
-
@mickym ich dachte das die Funktion Tendenz das steuert ob es mehr oder weniger wird?
-
@mickym
ah - jetzt ist es mir geschossen. Macht nur mit 2 Sinn -
@harry_vlbg Hast Du Dir denn die Switch Node angeschaut? Diese Node vergleicht einfach die payload mit dem Vorgängerwert. - Da muss nichts davor geschaltet werden.
Sprich es kommt ein Wert - ist der größer (am Anfang immer der Fall) - dann geht der Wert an den oberen Ausgang, wenn kleiner an den unteren Ausgang
aber wo bekommt er denn diesen Wert her von der Batterie ?
Ja ich hab das doch mit den Inject Nodes simuliert:
Du musst also dafür sorgen, dass der Akkustand zwischen 0 und 100 einfach in die Switch NOde kommt -
Keine Ahnung ob die 77 Deine blaue Node Pytes Ah sind oder % des Akkus. Du musst halt den Akkustand zwischen 0-100 einspeisen. Du willst das bei 100% ausgeschaltet wird und bei 98% wieder eingeschaltet wird - also musst Du dafür Sorge tragen, dass der Akkustand in den Flow eingespeist wird.
-
@mickym
aber wo bekommt er denn diesen Wert her von der Batterie ? -
@harry_vlbg sagte in Node Red Optimierung PV Überschuss für Anfänger:
@mickym
aber wo bekommt er denn diesen Wert her von der Batterie ?Ja klar - woher soll denn der Akkustand kommen? Und ich weiß nicht, ob das Ah oder 0-100%. Du musst doch wissen, wie man den Akkustand berechnet, wenn Du willst, dass er bei bestimmten Zuständen ein- und ausgeschaltet wird.
Bei dem 1. Flow war es doch auch der Akkustand:
Also brauchst Du doch nur von der blauen Node noch eine Verbindung zu dem jetzigen Flow machen oder eine 2. blaue Node nehmen.
-
@mickym
also es sind %somit müsste ich wieder so einen flow. Akku setzten
und dann am switch node umstellen
-
@harry_vlbg Nein - lasss doch alles wie es ist. Es gibt keine flow.Akku. Es ist einfach die payload - da musst du doch nichts ändern.
Die payload aus der blauen Node wird untersucht und die switch Node vergleicht die payload mit dem Vorgängerwert und damit wird doch automatisch ermittelt, ob der Wert steigt oder fällt.
Hänge einfach Deine blaue Node, anstelle meiner Inject Nodes vor die Switch Node, die ich erstellt habe. Dann siehst Du anhand der Debug Nodes was geschaltet wird bzw. schaltest direkt mit den HTTP Request Nodes.
Durchgestrichen LÖSCHEN, die blaue Node mit der Switch Node verbinden - ohne was zu ändern - und gut ist.
-
@mickym
ohhh man - da habe ich wieder um die Kurve gedacht.
das kann ich machen -
@harry_vlbg sagte in Node Red Optimierung PV Überschuss für Anfänger:
@mickym
ah - jetzt ist es mir geschossen. Macht nur mit 2 SinnStimmt auch nicht - mit einer Switch Node kann man auch Filtern, wie beim Urlaub - aber dann hast Du auch nur eine Bedingung und einen Ausgang.
Aber wenn Du an einen Ausgang macht - ich bin im Urlaub - und an den anderen ich bin nicht im Urlaub - und behandelst dann beides anschließend gleich, dann kann man sich diese Abfrage auch sparen. Wenn es egal ist, ob Du im Urlaub bist oder nicht, da Du dann mit der gleichen Bearbeitung weiter verfährst, dann ist diese Abfrage sinnlos.
Logisch?
-
@mickym
logisch - jetzt jedenfalls.
Habe die Funktion definitiv falsch interpretiert -
@mickym
HI - ich bin noch etwas am optimieren für die "schlechen" Sonnentage. Aber irgendwie hat es mir gestern nicht abgeschaltet obwohl es von mir erwartet wurde.den Flow.Boiler ist hier nicht ersichtlich damit es nicht ein zu großer Durcheinander gibt. Das funktioniert ja dank dir hervorragend.
Ziel ist bei Sunset die Variable nachtabschaltung und um 23 uhr dies abfragen und umsetzten.
mit 4 wird der Victron abgeschaltet und mit 3 dann wieder eingeschalten.code:
-
@harry_vlbg Also - warum Du generell immer noch so gerne mit function Nodes "programmierst" - erschließt sich mir zwar nicht, aber das ist nicht Dein Problem. Im Grunde
Das Du, die von mir empfohlenen Chronos-Nodes verwendest ist eine gute Entscheidung.
So nun also zu Deinem Flow.
- Zu Deiner Check Conditions Node:
den Flow.Boiler ist hier nicht ersichtlich damit es nicht ein zu großer Durcheinander gibt. Das funktioniert ja dank dir hervorragend.
Die Flowvariable wird aber in diesem Flow gar nicht gesetzt.
Wenn Du Ihn in einem anderen Flow setzt, dann benötigst du GLOBALE Variablen - da Flowvariablen immer nur innerhalb EINES Flows Gültigkeit haben.
Deshalb wird bei Deiner Prüfung immer der "else" Zweig eintreten und die Nachtabschaltung auf "aktiv" setzen.
Also:
Korrektur: Entweder Du kopierst den Flow wieder in den Boiler Flow ODER Du setzt im Boilerflow - die Kontextvariable "boiler" GLOBAL. Wenn Du also im Boiler Flow die Variable "boiler" GLOBAL gesetzt hast, dann musst Du den Code natürlich auch ändern.Das Problem ist aber, dass Dein Code - bei Sonnenuntergang AUCH setzt, wenn der Boiler NICHT true war, wenn Du NodeRed oder den Flow NEU gestartet hast, da Deine Variablen nicht initialisierst.
In diesem Fall kann man der Variablen "boiler" mit einem Wert vorbelegen, wenn die Kontextvariable noch nicht belegt ist.
Also 2 Pipesymbole und ich habe mal "boiler" auf true gesetzt, wenn die Variable NICHT existiert.
Zusammenfassend:
- Die Kontextvariable "boiler" aus dem anderen Flow musst Du "global" setzen. Dann musst Du natürlich überall, wo du in diesem Flow die Variable "boiler" abfragst auch auf "global" ändern.
- Die globale Variable "boiler" solltest Du vorbelegen, da wenn diese nicht gesetzt ist, immer die Nachtabschaltung true wird, da immer der "else" Ast wahr wird.
Also hier ein Vorschlag zur Korrektur Deiner Check Conditions Node (Warum auch immer Du denkst, dass Du hier mit JS programmieren musst).
let activ_soc = flow.get('activ_soc'); let state_of_charge = flow.get('state_of_charge'); let boiler = global.get('boiler')|| true; if (boiler === true && state_of_charge >= activ_soc + 20) { flow.set('nachtabschaltung', false); } else { flow.set('nachtabschaltung', true); } return msg;
- So nun Dein 2. Problem mit dem sunset. Die Cronos Nodes sind toll - Du hast hier aber einen "Switch" genommen. Ein Switch kann aber nur bestehende Nachrichtenfiltern - aber da wird ja gar nichts getriggert, da am Eingang gar keine Nachrichten eingehen.
Wenn Du willst, das eine Chronos zum Sonnenuntergang triggert, dann musst Du den Scheduler nehmen und nicht einen Switch, der durch eine vorhandene Nachricht getriggert wird.
Der Scheduler zeigt Dir dann auch automatisch im Status, wann das nächste Ereignis eintritt.
- Wenn Du schon die Chronos Nodes installiert hast, dann kann man im selben Flow auch diese Nodes ggf. anstelle der Inject Nodes verwenden, das ergibt dann etwas mehr Übersichtlichkeit.
Wenn Dir das mit den Chronos Nodes zu komplizert ist, dann gibts noch eine weitere sehr mächtig Scheduler Node und die kann ich Dir auch wärmstens empfehlen
Hier kannst Du auch mehrere Ereignisse definieren und auch Sonnensstandsereignisse.
Diese Nodes kannst Du Dir also alternativ zu den chronos Nodes installieren:
https://flows.nodered.org/node/node-red-contrib-cron-plus
==================================================================================
So hier mal die "neuen" bzw. korrigierten Nodes zum Import:
und hier die grafische Vorlage:
Und nochmals - versuche auf function Nodes zu verzichten - Du willst doch grafisch sehen, was Dein Flow macht und Dich nicht durch Code quälen.
Hier auch nochmal mein Testflow - da ich ja keine Victron Nodes habe
-
@mickym
Danke - den Boiler habe ich jetzt mal überall auf Global. umgestellt.
Dann kann ich auf dem anderen Blatt löschen und werklen wie ich will.
Sheduler auch in Verwendung gebracht.
Jetzt kann ich mal testen was heute so geschieht