Nulleinspeisung PV mit Node-Red

Moin soulreaver und Willkommen an Bord.

Was verstehst du denn an der function node nicht?
Wenn du Werte in Prozent umrechnen willst geht das ganz gut mit der range node (Skalierung). Als Beispiel verlinke ich dir mal meinen Flow von oben.
Beispiel

GrĂŒĂŸe
LL

1 „GefĂ€llt mir“

folgendes scheint fĂŒr mich mit meinem zĂ€hler und meinem growatt WR zu funktionieren:

var maxPV = 2000;

if (msg.topic === "pv") context.set("pv", msg.payload);
if (msg.topic === "verbrauch") context.set("verbrauch", msg.payload);
if (msg.topic === "produktion") context.set("produktion", msg.payload);

var solar = Number(context.get("pv") || 0);
var verbrauch = Number(context.get("verbrauch") || 0);
var produktion = Number(context.get("produktion") || 0);

//wenn ĂŒberschuss verzeichnet wird, solarleistung abzĂŒglich ĂŒberschuss anpassen
if(produktion != 0){
    var setSolarLeistung = solar - produktion;
    msg.payload = setSolarLeistung;
//ansonsten das höchstmögliche bestehen lassen
} else {
    msg.payload = maxPV;   
}



return msg;

noch verbesserungsbedarf?

1 „GefĂ€llt mir“

Wie macht ihr das eigentlich, daß die Einspeisung aus der Batterie nicht mit dem Saldo vom Shelly3EM immer hin und her pendelt? Die DTU regelt ja dann stĂ€ndig nach, auch wenn sich die eigentliche Grundlast nicht Ă€ndert. Benutzt man da als Ausgangswert einen Template-Sensor, wo die aktuelle Einspeisung aus der Batterie vom Saldo des Shelly gleich abgezogen wird?

LG Pit

Moin soulreafer,
so richtig schlau werde ich aus deiner Funktion nicht.
Ich kann mich tÀuschen was den Ablauf betrifft aber aus meiner Sicht sieht das so aus:
Als erstes prĂŒfst du den Topic des Eingangswertes, legst eine context-Variable an und weist ihr den Inhalt vom payload zu. Da 3 EingĂ€nge definiert sind und diese zeitgleich eintreffen ist es Zufall welche Variable den payload bekommt.
Dann werden 3 Variablen festgelegt die entweder den Wert der entsprechenden context-Variablen erhalten oder, falls undefined, 0 zugewiesen bekommen.
In der eigentlichen Berechnung wird dann, falls die produktion ungleich 0 ist, die produktion vom solar abgezogen, andernfalls ist die msg.payload = maxPV die zu Anfang den Wert 2000 bekommen hat. Der Verbrauch bleibt bei der Berechnung unberĂŒcksichtigt.
Wie gesagt, ich kann mich tÀuschen da ich auch nicht der Experte bin aber nach meinem VerstÀndnis lÀuft das so ab.
Wenn das so gewollt ist dann soll es so sein hat dann aber nichts mit dem Betreff dieses Threads “Nulleinspeisung” zu tun.

GrĂŒĂŸe
LL

wie gesagt lese ich meinen zÀhler anders aus, bzw erhalte ich andere werte von meinem zÀhler. ihr rechnet damit, dass euer zÀhler negative werte angibt sobald ihr weniger verbraucht als ihr produziert. ich habe einen zweirichtungszÀhler und bekomme entsprechend 2 verschiedene werte.

wert1: bezug vom netz. fÀngt bei 0 an und geht halt entsprechend hoch wenn bezug vorhanden ist.
wert2: einspeisung. fÀngt bei null an und ersetzt wert1 sobald ich mehr produziere als ich verbrauche.

also geht dann wert1 auf 0 und wert 2 entsprechend hoch

also ist wert2 meine berechnungsgrundlage fĂŒr die nulleinspeisung. nehmen wir an der wert gibt mir 250W an, dann muss ich meine anlage um diese 250W drosseln. also “solar - produktion”

https://www.youtube.com/watch?v=jEP6egybqgk

1 „GefĂ€llt mir“

Der Aufbau sieht ja nun wieder anders aus, hast du die Funktion nochmal angepasst?

GrĂŒĂŸe
LL

ne hat sich nix geĂ€ndert. die berechnung ist die selbe. habe nur eine idee von weiter oben mit ĂŒbernommen mit dem entprellen damit nur daten an den wechselrichter verschickt werden wenn sie sich um mehr als 10% Ă€ndern. der rest sind nur debugging ausgaben

1 „GefĂ€llt mir“

Moin,

ich habe derzeit folgende ‘Function’ mit einem Tasmota Lesekopf, OpenDTU & einem Hoymiles Wechselrichter laufen:

// MAX generation of the inverter Watts
var maxPower = 1300;

// Get current power limit or default
var power = context.get('power') || maxPower;
power += msg.payload;

// clamp power between 0 and max
if (power > maxPower) power = maxPower;
if (power > 0) power = power + 200;
//if (power < 0) power = 250;

// Wenn keine Werte vom ZĂ€hler kommen dann 600 W
//if (power == 0) power = 600;

// store current powerlimit and update message
context.set('power', power);
msg.payload = power;

return msg;

Es ist ein HM-1500 und ich möchte maximal 200 Watt einspeisen. Es funktioniert so auch alles ohne Probleme.
Außer es kommt kein Wert vom Tasmota
 Dieser schickt dann nĂ€mlich ‘Nan’ und damit kann die Funktion nichts anfangen. Der Wechselrichter schaltet dann aus, weil er mit dem Werrt nichts anfangen kann.

Wie Ă€ndere ich die Funktion ab, sodass beim Wert ‘NaN’ einfach der letzte oder ein vorgegebener Wert verwendet wird?

MfG Dennis

Screenshot 2023-07-30 194726

Wenn ich ĂŒber ‘inject’ eine Zahl ‘NaN’ reinpacke und vor und nach dem Filter einen debug mache kommt folgendes. Als String funktioniert es, aber der ZĂ€hler gibt ja eine Nummer aus


Hallo Zusammen,

Danke erstmal fĂŒr euren Ideen und Lösungen.

Jedoch habe ich zwei Fragen, ich habe einen Hoymiles HM-800 und einen Tasmota Lesekopf, aber die Regelung klappt leider nicht so, wie ich es mir vorstelle.

  1. Was bedrutet das + in der Zeile: power += msg.payload
    Bei mir wird nur geregelt, wenn ich das + entferne

  2. Die Regelung berĂŒcksichtigt nur den aktuellen Wert von der aktuellen Leistung, nicht den Wert, den der WR schon liefert.
    Bsp. Aktuelle Leistung 500W-> WR regelt auf 500 ok. Aktuelle Leistung steigt auf zusÀtzliche 100 W-> jetzt regelt der WR nicht auf 600W, sondern zuerst wieder auf 100W und danach auf 600W. Ist das so gewollt bzw. kann man die schon geregelte Leistung mit in der Berechnung einbeziehen? Sonst regelt der WR ja immer zwischen min und max.

Danke und Gruß
Neo

Hallo, bin kein NodeRed spezialist aber habe dieses Problem auch so gesehen. Ich habe es fĂŒr mich so gelöst : Hilfs Sensor in Homeassistant, welcher die aktuell benötigte Leistung und die aktuell von 2 Wechselrichtern bereitgestellte Leistung addiert
 Diese neue aktuell benötigte Leistung verwende ich dann in meinem Flow um den grĂ¶ĂŸereren meiner beiden Wechselrichter zu regeln. (Den Flow habe ich mir aus den hier geposteten Flows zusammengestellt, einschl. Zeitsteuerung und Mindestwert WR. In einem weiteren Flow (Aufbau wie Flow1) verwende ich nur den sensor aktuell benötigte Leistung und regle den 2ten Wechselrichter . Funktioniert ganz gut . Speise /Tag zwischen 50 und 100W ein.

Ah super. Könntest du die beiden Flows hier mal posten. Dann probiere ich das mal bei mir aus.

Danke und Gruß
Neo

HilfsentitÀt: (Formatierung im screenshot/ eigene EntitÀten verwenden)
sensor:

  • platform: template
    sensors:
    einspeisung:
    friendly_name: ‘Einspeisung +Netzbezug’
    unique_id: energy_total
    value_template: “{{ (states(‘sensor.hoy_600_power’)|float(0) + states(‘sensor.hmt2250_power’)|float(0) + states(‘sensor.tasmota_mt681_power_curr’)|float(0))|float(0) |round(3) }}”
    grafik
    grafik

Hi Neo und Willkommen im Forum,

ohne viel Prosa stelle ich hier mal 2 Links zu der Funktion von Node-RED ein die deine Fragen eigentlich beantworten sollten. Zum einen der Beitrag in Wikipedia zum Ursprung der Software und zum anderen die Rechenoperatoren basierend auf JavaScript die dann auch die Funktion der Operation += erklÀrt.
Wikipedia:

JavaScript Rechenoperatoren

GrĂŒĂŸe
LL

Danke Euch beiden fĂŒr die Hilfe und die Tipps. Hab es hinbekommen. Das einzige, was ich noch geĂ€ndert habe, dass ich einen zusĂ€tzlichen Functions Code genommen habe fĂŒr das WR Limit. Das hatte bei mir irgendwie nicht funktioniert.

Noch eine Frage, wie habt ihr mit dem functions Node die Zeitsteuerung realisiert? Das klappt bei mir nicht.

Gruß
Neo

Die Zeitsteuerung ĂŒber eine function node zu realisieren habe ich hier noch nicht gesehen, normalerweise lĂ€uft das ĂŒber eine time range. Oder meintest du was anderes?
Hier mal mein Flow weiter oben in diesem Thread als Beispiel:
Flow Nulleinspeisung

Mir ist durchaus bewusst das es mĂŒĂŸig ist sich durch diesen Thread zu lesen aber es kann durchaus helfen sich diese Zeit zu nehmen.

GrĂŒĂŸe
LL

Super, danke euch. Probiere ich gleich mal aus.

Hallo, danke das du dein Wissen mit uns teilst.
ich bin in HA und node red absolut verloren. Ich habe dein Flow kopiert und alle relevanten Dinge geĂ€ndert. Die “Leistung” wird vo Shelly Pro 3EM erkannt und zeigt diese auch an (Sensor ist sensor.shellypro3em_0cb815fd3820_total_active_power). bei MQTT zeigt er auch verbunden an aber er regelt nicht. kannst du mir bitte helfen?

Hardware ist : OPENDTU, Hoymiles hm-1500, shelly Pro 3em, Raspberry pi 4 mit HA.

MQTT Ist eingerichtet und lĂ€uft auch. Kann die dtu ĂŒber mqtt steuern.

kannst du deinen flow posten