NEWS
nodeRed - Verfügbare Leistung berechnen
-
Hallo,
eine Frage zu nodeRed. Habe den NodeRed Adapter im Einsatz und erfasse über ioBroker die Daten meiner PV-Anlage und die Daten der Wallbox. Nun möchte ich den Heizstab einer Warmwasser Wärmepumpe aktivieren/deaktivieren. Dafür habe ich folge Infos und Logik geplant.
Habe die PV-Leistung, den Verbrauch und die Leistung über die Wallbox, sowie den Ladestand meiner Batterie.Der Funktion Node soll nun 2 Ergebnisse liefern
Überschuss Wert p_Ueberschuss = p_PC-Anlage - p_Load - p_Wallobox und ein Wert if( ( v_Battery > 10% )and( p_PC-Anlage - p_Load - p_Wallobox>0 ){ b_Ueberschuss=1 }else{ b_Ueberschuss=0 }Wie kann ich dies am einfachsten umsetzten?
Danke und Gruß homeSweethome
-
@homesweethome Darf ich fragen, warum du mit function nodes und Java Script programmieren willsr, anstatt die Logik in NodeRed abzubilden?
-
@mickym,
muss kein function node sein, dachte das ist die einfachste Lösung, bin offen für jegliche Lösung. Möchte gerne als Anfänger dazulernen
Gruss -
@homesweethome Na wenn Du gerne programmierst ohne die Vorteile einer grafischen Programmierung zu nutzen - dann kannst Du natürlich jeden Flow in eine function Node packen.
Aber Du gehst in meinen Augen die Sache falsch an. Was soll denn den Flow triggern?
Ändert sich ein Wert oder soll bei jeder Änderung von allen 4 Werten getriggert werden?
Wann soll der Heizstab aktiviert oder deaktiviert werden? -
@mickym
die Werte ändern sich zu unterschiedlichen Zeitpunkten und die WP bzw. der Heizstab soll über die beschriebene Logik aktiviert werden "b_Ueberschuss=1". Die Werte kommen vom Fronius Adapter sowie Fronius-Wattpilot Adapter alle 10 Sekunden
Gruss -
@homesweethome sagte in nodeRed - Verfügbare Leistung berechnen:
@mickym
die Werte ändern sich zu unterschiedlichen Zeitpunkten und die WP bzw. der Heizstab soll über die beschriebene Logik aktiviert werden "b_Ueberschuss=1"
GrussDannn habe ich folgende Frage. Was soll denn die 1. Berechnung, wenn letztlich nur diese Berechnung
if( ( v_Battery > 10% )and( p_PC-Anlage - p_Load - p_Wallobox>0 ){ b_Ueberschuss=1 }else{ b_Ueberschuss=0 }
darüber entscheidet, ob eingeschaltet wird oder nicht, dann brauch ich das andere nicht oder? - Der p_Überschuss ist doch das was da in Klammer ist oder?
-
@mickym
der Wert p_Ueberschuss ist für die Anzeige in VIS, nicht zur Steuerung der WP/Heizstab
Gruss -
@homesweethome sagte in nodeRed - Verfügbare Leistung berechnen:
@mickym
der Wert p_Ueberschuss ist für die Anzeige in VIS, nicht zur Steuerung der WP/Heizstab
GrussAh sehr gut - nun beginnen wir das ganze schon aufzudröseln. Das heißt Du möchtest den Wert p_Überschuss in einen Datenpunkt schreiben, den Du dann über die VIS darstellen kannst. Gleichzeitig aber willst Du diesen Wert aber auch zur Steuerung Deines Heizstabes verwenden.
Das ganze soll alle 10 Sekunden erfolgen, da in diesem Intervall einer der 3 Datenpunkte aktualisiert wird.
Ich sehe aber um das Umzusetzen eher folgende Logik:
- Die Überschussrechnung folgt erst mal getrennt von der Rechnung der Steuerung des Heizstabes. Warum - weil sich, wenn sich der Ladezustand der Batterie nicht ändert, es Unsinn die Aktivierung des Heizstabes neu zu berechnen. Sprich wenn der Ladeszustand der Batterie unter 10% ist, dann ist es egal was für ein Überschuss da ist.
- Oder solange kein Überschuss da ist, ist auch der Zustand der Batterie unwichtig.
Also würde ich erst mal den Überschuss berechnen und diesen Abspeichern, dass Du ihn anzeigen kannst und die Steuerung des Heizstabes über den Ladezustand der Batterie zu triggern. Einverstanden?
Wenn ja - dann leg Dir unter 0_userdata.0 einen Datenpunkt an, in den wir den Überschuss abspeichern, den wir sowohl zur Anzeige, also auch zur Steuerung des Heizstabes verwenden.
Da Deine Anlage die anderen 3 Datenpunkte alle 10 Sekunden beschreibt, werden wir die pV-Anlage zur Berechnung des Überschusses triggern lassen.Wenn Du soweit bist oder Fragen hast, dann melde Dich halt.
-
Guten Morgen, hier fängt es schon an. Ich denke ich habe die Logik von NodeRed noch nicht verinnerlicht. NodeRed scheint strickt Event-getriggert und nicht zustandsgesteuert zu sein. Es muss wohl immer ein Wechsel einer Größe vorliegen. Sie dann die anderen Größen am selben Node noch aktuell? Gespeichert?
Zu deinem Vorschlag. "Nummern-Zustand" habe ich unter "0_userdata.0 " angelegt. Wie führe ich doch die Größen zusammen und berechne diesen einfachen Term?
Gruß -
@homesweethome sagte in nodeRed - Verfügbare Leistung berechnen:
NodeRed scheint strickt Event-getriggert und nicht zustandsgesteuert zu sein.
NodeRed, wie auch alle anderen Logikmaschinen im iobroker haben alle die gleichen Trigger. NodeRed hat sogar noch einen mehr, da Du mit Inject-Nodes manuell einen Flow an beliebigen Stellen antriggern kannst und nicht nur insgesamt Stoppen und Starten kannst.
Grundsätzlich stehen Dir also alle Möglichkeiten zur Verfügung:
- Manuell via Inject Nodes
- Aktualisierung eines Datenpunktes im iobroker (mit oder ohne Wertänderung)
- Nach dem Start von NodeRed
- Durch zeitgesteuerte Ereignisse.
Hier unterscheidet sich NodeRed nicht von allen anderen Logikmaschinen wie Blockly, JS und sonstige.
Meine Empfehlung ist immer grundsätzlicher Natur - und sollte Dir einfach helfen. Ich versuche immer durch Datenpunktaktualisierungen triggern zu lassen, als sinnlos in best. Zeitabständen zu pollen. Ausserdem versuche ich unnötige Berechnungen zu vermeiden, wenn es sich vermeiden lässt.
Grundsätzlich ist es so, dass Du wenn Du mehrere Werte in Deinem Flow verarbeiten willst, du diese zusammenführen musst, damit Du sie zum Zeitpunkt zur Verfügung hast. Dabei stehen Dir grundsätzlich 2 Methoden zur Verfügung:
- Du speicherst Werte aus den benötigten Datenpunkten in NodeRed in Variablen. Dabei steht Dir folgende Gültigkeit oder Kontext zur Verfügung:
- In Functionnodes im sogenannten Nodekontext
- In einem Flow - im Flowkontext
- Global - Überall.
Die Variablen kannst Du Dir über das Kontextfenster anschauen:
- Oder Du nimmst alle zur Berechnung benötigten Wert in Dein Nachrichtenobjekt auf. Diese Methode würde ich Dir in diesem Fall mal als Erstes zeigen.
Da bei Dir eh alles, alle 10 s getriggert wird, würde ich in diesem Fall die Leistung der PV-Anlagen mit einer iobroker-IN Node triggern lassen und dann die restlichen beiden Werte (Load und was die Wallbox zieht) auslesen und in das Nachrichtenobjekt aufnehmen. Dabei nutzt Du die iobroker Get Nodes. Darauf achten, dass Du Load und der Wallbox eigene Attribute verpasst, sonst überschreibst Du Dir die payload.
Anschließend lässt Du Dir mit einer Debug Node das GESAMTE Nachrichtenobjekt ausgeben und postest es bitte hier in CodeTags, in dem Du auf der obersten Ebene - die Schaltfläche Wert kopieren verwendest und dann hier in CodeTags einstellst.
Wenn Du dann soweit bist, werden wir
- Die Berechnung des Überschusses durchführen
- Den Überschuss in eine Flowvariable speichern
- Den Überschuss in dem von Dir erstellten Datenpunkt speichern, damit Du ihn in Deiner VIS anzeigen kannst.
Und wenn Du gelernt hast, wie man GRAFISCH mit NodeRed programmiert - können wir immer noch mal deine Methode verwenden und alles in eine Function Node packen und mit Javascript programmieren.
Entscheide DU, ob Du hier weitermachen willst, in dem Du auf dieses Posting antwortest.
-
Wenn Dir es ALLERDINGS lieber ist und DU nicht lernen willst, wie man mit den GRAFISCH mit den Nodes ein Logik aufbaut und Du lieber mit Javascript codieren willst, dann machen wir hier weiter und schreiben nur Code in die function Node, soweit es geht.
In diesem Fall brauchst Du auch nur alle iobroker-IN Nodes mit Deiner function Node verbinden und wir schreiben Code. Können wir auch machen - aber dann verzichtest Du halt auf die Vorteile einer grafischen und logischen Aufschlüsselung Deiner Logik.Als erstes musst Du dann jede payload in Deinem Nodekontext speichern, da Du ja sonst nicht alle Werte zur Verfügung hast. In diesem Fall prüfst Du also das topic und schreibst dann die payload in den entsprechenden Nodekontext.
Anschließend liest Du den Kontext wieder in Variablen und prüfst vor der Berechnung, ob auch jede Variable gültige Werte besitzt.
Entscheide DU, ob Du hier weitermachen willst, in dem Du auf dieses Posting antwortest.