Nulleinspeisung PV mit Node-Red

Hallo Gemeinde.

FĂŒr manch einen PV Freak ist es vielleicht ganz Interessant eine Nulleinspeisung einzusetzen (warum auch immer, das lassen wir mal offen 😉 ). Ich fĂŒr meinen Teil wollte diese mit Node-RED Umsetzen, da es eh lĂ€uft, und ich keine Lust auf Tausend Programme habe.

Voraussetzungen:

- Node-RED

- Ihr Lest euren ZĂ€hler aus, sodass ihr die Live Werte vom Verbrauch habt.

- Euer Wechselrichter kann Limitiert werden, und dies auch von "Ausserhalb". Beispielsweise per MQTT.

Ich fĂŒr meinen Teil habe einen Hoymiles HM-600 Wechselrichter, und Überwache den Mit der Software OpenDTU, sodass ich diesen per MQTT ansagen kann, wieviel Leistung gerade durchgehen darf.

Alles in allem ist die Umsetzung Super Easy.

110-grafik

so sieht der Flow bei mir aus. Alle 10 Sekunden lÀuft die Funktion, und Schaut, ob "Leistung alle Phasen" Positiv oder Negativ ist. (Mein StromzÀhler gibt diese Werte so aus, Kein EinspeisezÀhler!)

Wenn Positiv, dann lÀuft der Wechselrichter mit voller Power (in meinem Fall 600W).

Wenn die Leistung Negativ ist, wird mittels der Funktion so lange heruntergeregelt, bis Quasi "Leistung alle Phasen" auf 0 ist.

NatĂŒrlich funktioniert dies nur in der Theorie, da der normale Stromverbrauch, genauso wie die Erzeugte Energie Schwankt. Somit ist immer ein Minimaler bezug, bzw eine Minimale Einspeisung vorhanden.

Beim Testen vorhin (es gab endlich mal etwas Sonne...) Schwankten die Werte bei mir zwischen +10 Watt und -10 Watt Verbrauch. FĂŒr mich Absolut ausreichend.

Wenn das ganze jemand nutzen möchte, hier der Code der funktion.

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

// 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 = 1;

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

return msg;

Falls jemand den kompletten Flow von mir nutzen möchte:

[{"id":"da8ec46371f0db9b","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"ef6c3ce925d406a5","type":"mqtt out","z":"da8ec46371f0db9b","name":"WR MQTT","topic":"solar/114182973131/cmd/limit_nonpersistent_absolute","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"87b2d138566ff5cc","x":910,"y":160,"wires":[]},{"id":"dd099805a5d7f908","type":"inject","z":"da8ec46371f0db9b","name":"alle 10 sekunden","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":160,"wires":[["2d07ac7c28d9b2a5"]]},{"id":"bc06481a7c421b2c","type":"function","z":"da8ec46371f0db9b","name":"Berechnung fĂŒr WR Limit","func":"// MAX generation of the inverter Watts\nvar maxPower = 600;\n\n// Get current power limit or default\nvar power = context.get('power') || maxPower;\npower += msg.payload;\n\n// clamp power between 0 and max\nif (power > maxPower) power = maxPower;\nif (power < 0) power = 1;\n\n\n// store current powerlimit and update message\ncontext.set('power', power);\nmsg.payload = power;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":160,"wires":[["ef6c3ce925d406a5"]]},{"id":"2d07ac7c28d9b2a5","type":"api-current-state","z":"da8ec46371f0db9b","name":"Leistung alle Phasen","server":"864f5cad6b0c1ce0","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.stromzahler_sm_leistung_alle_phasen_w","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":380,"y":160,"wires":[["bc06481a7c421b2c"]]},{"id":"87b2d138566ff5cc","type":"mqtt-broker","name":"","broker":"192.168.178.60","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"864f5cad6b0c1ce0","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"5","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":": ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"default","statusTimeFormat":"h:m","enableGlobalContextStore":false}]

NatĂŒrlich mĂŒsst ihr dann den Flow soweit anpassen, dass er eure Daten ausließt, sprich:

- Leistung alle Phasen: Euren Sensor einsetzen

- WR MQTT: Euren WR ansprechen

Wie immer, bei Fragen gerne Fragen.

Falls das ganze jemand Umbaut, um bsp. mehrere WR gleichzeitig nutzen zu können o.Ä. wĂŒrde ich mich freuen, wenn dies dann auch fĂŒr die Allgemeinheit veröffentlicht wird :)

So sah das ganze vorhin Live aus. In GrĂŒn dargestellt mein Verbrauch, in Gelb meine Erzeugung und die Rote Linie ist das Limit des Wechselrichters.

111-rnimagepickerlibtempb523c357-f823-4df1-8146-bef571db30ca

11 „GefĂ€llt mir“

Einfach Genial, danke @usekevin fĂŒr deinen Flow und den tollen Beitrag 💙

Genau danach habe ich lange gesucht 😍

Vielen dank @usekevin fĂŒr deine Arbeit. Und danke nochmal fĂŒr deine UnterstĂŒtzung auf github 😊.

@lj920110 gerne doch, und wilkommen :slight_smile:

Hallo zusammen,
irgendwie brÀuchte ich hier eine kleine Hilfe.
Ich habe mir den Flow zur Nulleinspeisung "geklaut" und auf meine Anlage angepasst.
Hab den ShellyEM3 eingefĂŒgt und die Leistung wird mir am Node "Leistung alle Phasen" angezeigt. Das klappt.
Hab die Leistung des WR (Hoymiles 800) in der Funktion geĂ€ndert und die Einstellungen im Bereich MQTT geĂ€ndert. Der Wechselrichter ist ĂŒber OpenDTU mit Home Assistant verbunden.
Leider wird aber die Leistung am WR nicht angepasst. Vielleicht liegts am Topic. Werde ich am Wochenende auch nochmal prĂŒfen.
Wenn ich den Code vergleiche dann ist bis auf die Werte die ich angepasst habe alles gleich mit dem der hier zur VerfĂŒgung gestellt wird. Sollte doch auch so sein?
Kann ich den Wechselrichter nicht anders ansprechen als ĂŒber das Node MQTT?
Bin leider erst am Anfang und muss noch viele Stunden investieren aber in Homes Assistant gibt es die EntitÀt "number.wr1_limit_nonpersistent_absolute" und wenn ich Werte vorgebe dann werden die auch an den WR gesendet und die Leistung begrenzt. Solange bis ich den Wert wieder Àndere.
Nur welche Node verwende ich da und was muss ich noch beachten.
Bin um jeden Tipp dankbar.
Gruß und Danke
Niederbayer
Hier noch der Code. Ich habe hier mal zur besseren Lesbarkeit aufgeteilt.

[{"id":"da8ec46371f0db9b","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"ef6c3ce925d406a5","type":"mqtt out","z":"da8ec46371f0db9b","name":"WR MQTT","topic":"solar/cmd/114181815123/limit_nonpersistent_absolute","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"87b2d138566ff5cc","x":910,"y":160,"wires":[]},

{"id":"dd099805a5d7f908","type":"inject","z":"da8ec46371f0db9b","name":"alle 10 sekunden","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":160,"wires":[["2d07ac7c28d9b2a5"]]},

{"id":"bc06481a7c421b2c","type":"function","z":"da8ec46371f0db9b","name":"Berechnung fĂŒr WR Limit","func":"// MAX generation of the inverter Watts\nvar maxPower = 800;\n\n// Get current power limit or default\nvar power = context.get('power') || maxPower;\npower += msg.payload;\n\n// clamp power between 0 and max\nif (power > maxPower) power = maxPower;\nif (power < 0) power = 1;\n\n// store current powerlimit and update message\ncontext.set('power', power);\nmsg.payload = power;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":160,"wires":[["ef6c3ce925d406a5"]]},

{"id":"2d07ac7c28d9b2a5","type":"api-current-state","z":"da8ec46371f0db9b","name":"Leistung alle Phasen","server":"864f5cad6b0c1ce0","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shellyem3_power_sum","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":380,"y":160,"wires":[["bc06481a7c421b2c"]]},

{"id":"87b2d138566ff5cc","type":"mqtt-broker","name":"","broker":"192.168.178.190","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},

{"id":"864f5cad6b0c1ce0","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"5","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":": ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"default","statusTimeFormat":"h:m","enableGlobalContextStore":false}]

Hallo,

jetzt lÀufts. Konnte leider Eintrag davor nicht mehr löschen.

Der Fehler lag im Topic:

Falsch: solar/cmd/114181815123/limit_nonpersistent_absolute

Richtig: solar/114181815123/cmd/limit_nonpersistent_absolute

Das cmd war an der falschen Position.

Danke fĂŒr den Anleitung und die Hinweise und @Simon42, Danke fĂŒr die tollen Videos. Hab daraus schon einiges aufnehmen können.

Gruß Niederbayer

Moin Moin,

genau sowas habe ich gesucht.
Noch fehlt mir der Shelly 3Em und ein paar weitere Bestandteile fĂŒr mein Projekt.
Kannst du mir bzw. uns deine Funktion Node erklÀren? Ich bin absoluter Laie und Kopiere solche Flows sehr sehr gerne :sweat_smile:
Damit ich aber auch selbstĂ€ndiger damit werde, wĂŒrde ich das auch gerne verstehen, was ich dort einfach kopiere.

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

Verstehe ich richtig, das dies eine vordefinierter Grenze fĂŒr den Maximalen Ausgang aus der Node raus ist?

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

das schaut nach, was der Shelly 3Em gerade als Payload hat, bis maxPower wert und gibt danach keine höheren werte an?

// clamp power between 0 and max
if (power > maxPower) power = maxPower;
if (power < 0) power = 1;

Wenn power grösser wie maxPower ist der Payload maxPower wert ?
Wenn Power kleiner wie 0 ist der Payload 1?

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

Was bewirkt genau context.set(‘power’, power);?
Der payload ist gleich power ?

Wenn ich jetzt z.B. möchte, das ich immer Strom beziehe, mĂŒsste dann in der funktion node bei reihe
10 if (power < 0) power = 1;
in
10 if (power < 10) power = 1;
sodass ich immer mindestens 9 W beziehe?

Eventuell sind das doofe fragen, nur fĂŒr mich zum verstehen, sehr hilfreich.

Schöne GrĂŒĂŸe
Sebastian

Ja, die 600 Ersetzt du durch deinen Maximalen Wert der durch die funktion gesetzt werden darf. In meinem Fall waren es 600W, da es ein 600W Wechselrichter war.

default wĂ€re quasi 600W (in dem beispiel). Also es wird der Wert des shellys genommen (in deinem fall dann natĂŒrlich). Höher als 600W gehts nicht, weil maxPower = 600 ist. Ausser du Änderst es oben natĂŒrlich.

korrekt. Die 1 habe ich gewÀhlt, weil der Wechselrichter von mir wenn er auf 0 gesetzt wird ewig Zeit benötigt, um wieder hochzufahren. Mit der 1 umgehe ich dieses Problem.

context.set(‘power’, power); Speichert den Aktuellen Wert der Variable “Power”. Also den Wert den dein Shelly dann liefert.

das sollte in der theorie so funktionieren. In der praxis liefert der Wechselrichter dann aber auch bei 1-8W Verbrauch 1W.

Gibt keine doofen Fragen :slight_smile:

1 „GefĂ€llt mir“

Stimmt natĂŒrlich macht er dann immer 1W bei unter 10W bezug.

Habe jetzt heute ein wenig mit der Funktion Node herumgespielt und egal was ich ĂŒbern Payload als simulierten Wert schicke, es kommt immer 600 am Debug Node an.
Ganz simpel mit einem Injekt Node der ĂŒber einem Change Node den Payload setzt, durch die Funktion Node zum Debug.

Wenn die Funktion in

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

// 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 = 600;
if (power <= maxPower) power = msg.payload;
if (power < 10) power = 1;


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

return msg;

Ă€ndere, sind alle Werte unter 10 am Debug = 1
und alle Werte Über 10 werden auch weiter gegeben.
Leider auch ĂŒber 600.

Das bekomme ich dann nur mit einer Switch Node Korrigiert die schaut, ob der wert <= oder >= 600 ist und jenachdem diesen dann mit 600 Überschreibt.

Wo Habe ich denn hier den Fehler ?
hab ihn gefunden ^^

Ganz oben in deinem ersten Post, hast du EingefĂŒgt was bei dir in der Funktion Node drinn steht.

inder letzten Zeile
power += msg.payload; da musste ich bei mir das + weg nehmen. seit dem kann ich alles schön senden an Zahlen und es wird fleißig so ausgegeben wie ich es möchte.

Hy ich bins wieder,

Seit meinem Letztem erfolg habe ich noch etwas mehr das Internet durchkramt und deine Funktion verĂ€ndert :innocent: Hoffe das ist Okay fĂŒr dich.
Ich wollte, das in der Funktion noch andere Parameter berĂŒcksichtig werden.

  1. Maximalwerte des Wechselrichters
  2. Nur mit einer Abweichung von mindestens 10% wird die Funktion durchlaufen, sonst Stop
  3. Alle Werte unter 10 werden auf 1 geschrieben, um eine Einspeisung zu vermeiden
  4. Wenn der vorherige Wert gleich, wie der Aktuelle Wert, Stopt der Flow
  5. Bei Überschreitung des Maximalwerts, wird der Wert auf Maximalwert geschrieben

Mit meinem Simuliertem Injekt Werten klappt das alles auch. Nur kann ich es immer noch net Live bei mir testen und wĂŒrde daher euch fragen ob das ganze so dann auch Funktioniert, da sich der Wert beim gegenregeln des Wechselrichters Ă€ndern. Wie wĂŒrde das ganze dann Live aussehen. Springt der Wert immer hin und her?

[{"id":"6afba80f712934bd","type":"function","z":"a2caaef1c7b6540d","name":"Berechnung fĂŒr WR Limit","func":"// Maximale Leistung des Wchselrichters in Watts\nvar maxPower = 600;\n\n// \n// Die aktuelle Leistung oder den Maximalleistung\nvar power = context.get('power') || maxPower;\n\n// Berechnet die prozentuale Differenz zwischen aktuellem und vorherigem Wert\nvar percentageDiff = Math.abs((msg.payload - power) / power) * 100;\n\n// Vorherige Wert muss 10% grĂ¶ĂŸer oder kleiner sein gleich vorherigen Wert\nif (percentageDiff > 10) {\n    if (msg.payload > maxPower) {\n        if (msg.payload > 599) {\n            power = maxPower;\n        } else {\n            power = msg.payload;\n        }\n    } else if (msg.payload < 10) {\n        power = 1;\n    } else {\n        power = msg.payload;\n    }\n}\n\n// Aktuelle Leistungsgrenze speichern und Nachricht aktualisieren\ncontext.set('power', power);\nmsg.payload = power;\n\n// ÜberprĂŒfen Sie, ob der aktuelle Wert mit dem vorherigen ĂŒbereinstimmt\nif (msg.payload === context.get('previousPower')) {\n    return null; // Verlassen Sie die Funktion, ohne etwas zurĂŒckzugeben, bei gleichem Wert\n}\n\n// Speichern Sie den aktuellen Leistungswert wie zuvor fĂŒr die nĂ€chste Berechnung\ncontext.set('previousPower', msg.payload);\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":520,"wires":[["693303c91351c1fd"]]},{"id":"693303c91351c1fd","type":"mqtt out","z":"a2caaef1c7b6540d","name":"WR MQTT Ahoy DTU","topic":"inverter/ctrl/limit_nonpersistent_absolute/0","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"87b2d138566ff5cc","x":920,"y":520,"wires":[]},{"id":"bc1b2c0bf7a628f8","type":"server-state-changed","z":"a2caaef1c7b6540d","name":"Momentan Verbrauch in Watt","server":"64eac69f.fe1218","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":320,"y":520,"wires":[["6afba80f712934bd"]]},{"id":"63973ad8b6f5ab12","type":"comment","z":"a2caaef1c7b6540d","name":"Leistungseingang","info":"Hier kommt der Sensor rein, von dem die \nWatt angabe stammt, auf das der Wechselrichter\neingestllt werden soll.\n","x":280,"y":460,"wires":[]},{"id":"2d40fc9ef793d84d","type":"comment","z":"a2caaef1c7b6540d","name":"Funktion Node zur Berechnung","info":"Hier wird mit der Maxpower eingerstellt,\nwas die Höchstleistung des Wechselrichter \nist.\n\nAuserdem wird darauf geachtet, das bei \nMindestens 10 oder weniger Watt, nur noch \nmit 1 Watt eingespeist wird, im zu \nvermeiden, zu viel Leistung zu verschenken.\n\n1 Watt deswegen, da die Wechselrichter nach \nirgendeiner Norm, bei Abschaltung und oder \nNull Leistung, sehr langsam wieder \nHochfahren.\n\nEs wird auch darauf geachtet, das der neue \nLeistungswert, Mindestens 10 % grĂ¶ĂŸer oder \nkleiner sein muss, damit der Wechselrichter \neine neue Leistungsgrenze setzt. Dies habe \nich gemacht, um zu vermeiden, das der \nWechselrichter alle Paar Secunden \nz.B 123,4 und 123,5 und dann 123,3 Watt \neinstellen muss. (Habe da noch keine \nErfahrung sammeln können, habe mir nur \ngedacht, das dass bestimmt GerĂ€te \nschonender sein wird.)","x":630,"y":460,"wires":[]},{"id":"f52927657ff7711c","type":"comment","z":"a2caaef1c7b6540d","name":"MQTT an Ahoy","info":"Wichtig ist das hier dein MQTT Broker \neingestellt wird und auch deine \nZugangsdaten.\n\nDer Topic kann so ĂŒbernommen werde, \nledigleich wenn du im Ahoy Setting unter \nMQTT ein anderes Topic angegeben hast \nmuss hier der Anfang (inverter) durch \ndeins ersetzt werden.","x":900,"y":460,"wires":[]},{"id":"87b2d138566ff5cc","type":"mqtt-broker","name":"","broker":"192.168.178.132","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"64eac69f.fe1218","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]
// Maximale Leistung des Wchselrichters in Watts
var maxPower = 600;

// 
// Die aktuelle Leistung oder den Maximalleistung
var power = context.get('power') || maxPower;

// Berechnet die prozentuale Differenz zwischen aktuellem und vorherigem Wert
var percentageDiff = Math.abs((msg.payload - power) / power) * 100;

// Vorherige Wert muss 10% grĂ¶ĂŸer oder kleiner sein gleich vorherigen Wert
if (percentageDiff > 10) {
    if (msg.payload > maxPower) {
        if (msg.payload > 599) {
            power = maxPower;
        } else {
            power = msg.payload;
        }
    } else if (msg.payload < 10) {
        power = 1;
    } else {
        power = msg.payload;
    }
}

// Aktuelle Leistungsgrenze speichern und Nachricht aktualisieren
context.set('power', power);
msg.payload = power;

// ÜberprĂŒfen Sie, ob der aktuelle Wert mit dem vorherigen ĂŒbereinstimmt
if (msg.payload === context.get('previousPower')) {
    return null; // Verlassen Sie die Funktion, ohne etwas zurĂŒckzugeben, bei gleichem Wert
}

// Speichern Sie den aktuellen Leistungswert wie zuvor fĂŒr die nĂ€chste Berechnung
context.set('previousPower', msg.payload);

return msg;

Hallo das ganze hört sich ja Top an, habe es auch als Blockly realisiert nun wollte ich mal testen was besser lÀuft. nur bekomme ich keine Werte vom Shelly 3EM oder von meinen Smartmeter in NodeRED.

Es liegt mit Sicherheit an dem das ich da Neuling bin.

Ich weis nicht welchen Pfad ( Entity ID) ich benötige oder wie sich diese zusammensetzt.
kann mir da jemand einen kleinen Anstoss geben.

Funktioniert das bei dir? Bei mir will die Funktion nicht laufen irgendwie werden keine Ergebnisse weitergeleitet

Naja ich bekommen weder von meinen Shelly noch vom Smartmeter die Daten angezeigt

Ich kann das noch nicht genau sagen. Momentan habe ich nur einen Virtuellen Sensor, da noch kein Shell 3Em verbaut.
Der Virtuelle Sensorwert lÀuft bei mir allerdings durch die Funktion und kommt auch dementsprechend geregelt raus.

Ich bin allerdings dabei die Funktion wieder zu verÀndern da:

Mich dieser Gedanke nicht mehr losgelassen hat.

// Die aktuelle Leistung oder den Maximalleistung
var power = context.get('power') || 0;

// Funktion zum Begrenzen des Werts zwischen 0 und maxPower
function clamp(value, min, max) {
    return Math.min(Math.max(value, min), max);
}

// Wenn der aktuelle Wert zwischen -10 und 10 liegt, wird er einfach weitergegeben
if (msg.payload >= -10 && msg.payload <= 10) {
    return null;
}

// Wenn der aktuelle Wert kleiner als -10 ist
if (msg.payload < -10) {
    var newPower = clamp(power - Math.abs(msg.payload), 0, 600); // HinzufĂŒgen des positiven Werts zum aktuellen Wert
    context.set('power', newPower); // Speichern des neuen Werts
    msg.payload = newPower; // Aktualisieren der Nachricht
    return msg;
}

// Wenn der aktuelle Wert grĂ¶ĂŸer als 10 ist
if (msg.payload > 10) {
    var newPower = clamp(power + Math.abs(msg.payload), 0, 600); // Subtrahieren des Werts vom aktuellen Wert
    context.set('power', newPower); // Speichern des neuen Werts
    msg.payload = newPower; // Aktualisieren der Nachricht
    return msg;
}

Das ist meine neuste Funktion. Allerdings scheitere ich daran, ihr noch beizubringen, dass, wenn der neue Wert, kleiner als die Differenz von 10 % ist, kein neuer Wert gesendet wird.
Problem dabei ist, wenn sich der Virtuelle Sensor Àndert, weil ich z.B. 3 Alexa GerÀte ausschalte, kommt der neue Wert gleich 3 mal. und wird dann durch die Funktion addiert.
Alexa GerÀte aus = Virtueller Sensor 100W 3 mal gesendet, neue Wert 300W.

Die Funktion versucht jetzt immer alles auf ± 10 zu setzen, alle werte darunter werden aufaddiert, alle darĂŒber subtrahiert. Das alles in einer maximal Spanne bis 600.
Vll kann jemand hier noch das passende einfĂŒgen, das wenn der Wert in einer Differenz von 10% ist, dieser nicht passieren kann.

Bin selber nur ein Laie, der so gar nicht aus dieser Materie kommt :sweat_smile: und erst seit einem Jahr mit dabei ist. Alles eigentlich aus anderen Nodes gemopst und aus Schnipseln zusammengefĂŒgt. Also kein wirkliches Wissen. :sweat_smile:

@Lucky51179 Ich kenn mich mit Blockly nicht aus.
Über Homeassistant Node Red muss ich nur den Namen des Sensors im Entity Feld eingeben und er wird mir dann vorgeschlagen. Ich kann mir sonst auch die Entity ID im HA Kopieren und dort einfĂŒgen.

Moin, ich bin super froh ĂŒber diesen Chat, da das genau mein Thema ist. Habe selbst hardwaremĂ€ĂŸig nun alles fertig. Die wesentlichen Bausteine sind:

  • 2x 370Wp Module
  • DIY LiFePo4 mit 2,5 kWh
  • Hoymiles HM 600 mit Ahoy-Dtu
  • Raspberry Pi mit Mosquitto, Node Red, influxdb und Grafana
  • Shelly 3EM

Nun geht es um die Nulleinspeisung. Eine Funktion um aus den 3 Phasen einen Summenwert zu machen habe ich durch Recherche schon hingekriegt (habe sowas noch nie programmiert!).

Nun wollte ich den Flow hier ausprobieren, aber mein Node Red sagt beim Import “api current state” unbekannt. Was muss ich denn importieren damit der Flow klappt?

Hmm es sind eigentlich Standard Nodes, die hier verwendet werden.

1x ein events state Node
1x eine funktion Node
1x eine MQTT Out Node

Versuch den Flow sonst selber bei dir zu erstellen.

Die MQTT Node muss du dann im

  1. Reiter Eigenschaften bei Server die IP adresse deines MQTT Brokers angeben dazu
  2. Über den Stift am Ende der Zeile die Node bearbeiten dafĂŒr
  3. Die IP Adresse bei Server eingeben
  4. Den Port
  5. Dann unter dem NĂ€chstem Reiter Sicherheit dein
  6. Dein Benutzer und Passwort fĂŒr MQTT eingeben

Dann mĂŒsstest du nur noch den Text fĂŒr die Funktion Node mit rein kopieren und schon mĂŒsste das alles auch bei dir klappen.

Die Funktion die du dir gebaut hast, ist das ein Template in HA oder hast du einen anderen weg genommen? Könnntest du den zeigen ?

Hallo Sebastian,
vielen Dank fĂŒr Deine Antwort. Offensichtlich kennt mein Node Red die “events state node” nicht. Nach dem Import sieht das so aus:

Daher ist mir Deine Beschreibung nicht ganz klar. Es reicht doch nicht die Punkte 1. - 5. nur in der “mqtt out” einzupflegen, oder?

1.Nachtrag:

Die gebaute Funktion habe ich mir zusammen gesammelt, da ich eigentlich nicht programmieren kann. Es werden die 3 Phasen der Shelly 3EM addiert. Da die Daten sehr hĂ€ufig gesendet werden habe ich eine Mittelwertbildung ĂŒber 10 sec gemacht. Es funktioniert grundsĂ€tzlich gut, allerdings werden alle 10 sec drei Werte ausgegeben. Ich weiß noch nicht woran das liegt:


[
    {
        "id": "67ca179e71ce76ce",
        "type": "mqtt in",
        "z": "f6f2187d.f17ca8",
        "name": "L1",
        "topic": "shellies/shellyem3-34945478AB74/emeter/0/power",
        "qos": "0",
        "datatype": "auto-detect",
        "broker": "4456b99c55c38cfe",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 170,
        "y": 340,
        "wires": [
            [
                "2d7a47e269b08bde",
                "8e5add960ec0ee49"
            ]
        ]
    },
    {
        "id": "2d7a47e269b08bde",
        "type": "debug",
        "z": "f6f2187d.f17ca8",
        "name": "debug 3",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 300,
        "y": 380,
        "wires": []
    },
    {
        "id": "961a3935b03a7538",
        "type": "mqtt in",
        "z": "f6f2187d.f17ca8",
        "name": "L2",
        "topic": "shellies/shellyem3-34945478AB74/emeter/1/power",
        "qos": "0",
        "datatype": "auto-detect",
        "broker": "4456b99c55c38cfe",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 170,
        "y": 420,
        "wires": [
            [
                "3e2934079e4355e2",
                "2785f8f7cc83be14"
            ]
        ]
    },
    {
        "id": "b1fce239a737115a",
        "type": "mqtt in",
        "z": "f6f2187d.f17ca8",
        "name": "L3",
        "topic": "shellies/shellyem3-34945478AB74/emeter/2/power",
        "qos": "0",
        "datatype": "auto-detect",
        "broker": "4456b99c55c38cfe",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 170,
        "y": 500,
        "wires": [
            [
                "5c1fc5fa1663bd3c",
                "9e68cc4631327efe"
            ]
        ]
    },
    {
        "id": "3e2934079e4355e2",
        "type": "debug",
        "z": "f6f2187d.f17ca8",
        "name": "debug 4",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 300,
        "y": 460,
        "wires": []
    },
    {
        "id": "5c1fc5fa1663bd3c",
        "type": "debug",
        "z": "f6f2187d.f17ca8",
        "name": "debug 5",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 300,
        "y": 540,
        "wires": []
    },
    {
        "id": "85bb5be90494379a",
        "type": "function",
        "z": "f6f2187d.f17ca8",
        "name": "function 1",
        "func": "if (msg.topic === \"shellies/shellyem3-34945478AB74/emeter/0/power\") context.set(\"L1\", msg.payload);\nif (msg.topic === \"shellies/shellyem3-34945478AB74/emeter/1/power\") context.set(\"L2\", msg.payload);\nif (msg.topic === \"shellies/shellyem3-34945478AB74/emeter/2/power\") context.set(\"L3\", msg.payload);\n\nvar L1 = context.get(\"L1\") || 0;\nvar L2 = context.get(\"L2\") || 0;\nvar L3 = context.get(\"L3\") || 0;\nmsg.payload = L1 + L2 + L3;\nmsg.payload = parseFloat((msg.payload).toFixed(2));\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 420,
        "wires": [
            [
                "ba9c1ad471b2a101",
                "300e72a0151b3322"
            ]
        ]
    },
    {
        "id": "ba9c1ad471b2a101",
        "type": "debug",
        "z": "f6f2187d.f17ca8",
        "name": "debug 6",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 480,
        "wires": []
    },
    {
        "id": "8e5add960ec0ee49",
        "type": "aggregator",
        "z": "f6f2187d.f17ca8",
        "name": "L1 Mean",
        "topic": "shellies/shellyem3-34945478AB74/emeter/0/power",
        "intervalCount": "10",
        "intervalUnits": "s",
        "submitIncompleteInterval": true,
        "submitPerTopic": false,
        "aggregationType": "mean",
        "x": 460,
        "y": 340,
        "wires": [
            [
                "85bb5be90494379a"
            ]
        ]
    },
    {
        "id": "9e68cc4631327efe",
        "type": "aggregator",
        "z": "f6f2187d.f17ca8",
        "name": "L3 Mean",
        "topic": "shellies/shellyem3-34945478AB74/emeter/2/power",
        "intervalCount": "10",
        "intervalUnits": "s",
        "submitIncompleteInterval": true,
        "submitPerTopic": false,
        "aggregationType": "mean",
        "x": 460,
        "y": 500,
        "wires": [
            [
                "85bb5be90494379a"
            ]
        ]
    },
    {
        "id": "2785f8f7cc83be14",
        "type": "aggregator",
        "z": "f6f2187d.f17ca8",
        "name": "L2 Mean",
        "topic": "shellies/shellyem3-34945478AB74/emeter/1/power",
        "intervalCount": "10",
        "intervalUnits": "s",
        "submitIncompleteInterval": true,
        "submitPerTopic": false,
        "aggregationType": "mean",
        "x": 460,
        "y": 420,
        "wires": [
            [
                "85bb5be90494379a"
            ]
        ]
    },
    {
        "id": "300e72a0151b3322",
        "type": "influxdb out",
        "z": "f6f2187d.f17ca8",
        "influxdb": "e840b95d15d8b227",
        "name": "AhoyDB",
        "measurement": "Power_Consumption",
        "precision": "",
        "retentionPolicy": "",
        "database": "database",
        "precisionV18FluxV20": "ms",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 980,
        "y": 420,
        "wires": []
    },
    {
        "id": "4456b99c55c38cfe",
        "type": "mqtt-broker",
        "name": "",
        "broker": "192.168.2.104",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    },
    {
        "id": "e840b95d15d8b227",
        "type": "influxdb",
        "hostname": "192.168.2.104",
        "port": "8086",
        "protocol": "http",
        "database": "PVDB",
        "name": "AhoyDB",
        "usetls": false,
        "tls": "",
        "influxdbVersion": "1.x",
        "url": "http://localhost:8086",
        "rejectUnauthorized": true
    }
]

2.Nachtrag:
Wie kann ich denn den Flow in nur einer Zeile abbilden?

:crayon:by HarryP: Inhalt in „Code“-Format ĂŒberfĂŒhrt und Mehrfachpostinghs zusammengefĂŒhrt.
@Bjoernix
Bitte „Code“-Zeilen im Code-Format posten (liest sich besser) und NachtrĂ€ge/Korrekturen gem. Forenregeln ĂŒber die „bearbeiten“-Funktion durchfĂŒhren. Danke!

Das glaube ich nicht, denn die „Event-State-Node“ ist Standard.

Weil die Function Node dreimal von den jeweiligen Mittelwertbildungen angesprochen wird. Wenn du testweise mal L2 und L3 von der Function Node löst, wirst du nur einmal ein Ergebnis bekommen.

Mega :handshake:. Genau so sieht das bei mir auch aus. Habe bei mir alles irgendiwe zusammengeschustert bis es lÀuft :grinning:, aber nicht wirklich Ahnung davon.

Das stimmt, war bei mir in Gedanken, das der Fehler von dem MQTT Node kommt und nicht vom current-state. Irgendwie meckert er bei dir deswegen rum. Weis aber nicht so genau warum, da ich der selben Meinung wie @harryp bin, das ist ein Standard Node und mĂŒsste demnach funktionieren.
Hast du die mal bei dir aus deinen Bordmitteln selber in den Flow erstellt?
Ahhh grad gelesen, dein System lÀuft nicht auf HA, das wird wohl der Grunde sein, ist einen Standard Node von HA. dann klappt das bei dir so wohl nicht.

Allerdings kannst du dann ja den Anfang mit dem Injekt Node und dem current-state weglassen und dafĂŒr den Anfang deines Flows bis zu deiner Funktion hĂ€ngen. Mit dem Korrekturvorschlag von @AndyWo, sollte nur einmal der Wert kommen gleich in die NĂ€chste Funktion und von dort zum Ahoy DTU.

Ich teste und tĂŒftle bei mir immer noch stĂ€ndig herum. Dabei ist mir aufgefallen, dass ich es irgendwie nicht hinbekomme, in der Funktion, die Werte 1 und 600, in der jeweiligen Situation, nur einmal ausgeben zu lassen, und erst, wenn der Wert sich wieder soweit geĂ€ndert hat, das er Drosseln bzw. Einspeisen soll, einen neuen Wert sendet. Momentan ist es so, dass diese Endwerte stĂ€ndig und immer neu gesendet werden. Trotz Kondensator, kommt es dann relativ hĂ€ufig und schnell zu Verbindungsproblemen. Bei mir konnte ich das mit einer Switch und 2 zusĂ€tzlichen current-state Nodes beheben.

Bei deinem Weg ohne HA muss das geÀndert werden.

Kannst du den mal bei dir Testen ob das so funktionieren wĂŒrde?

[{"id":"61d143d03d777520","type":"function","z":"a2caaef1c7b6540d","name":"Berechnung fĂŒr WR Limit v4 26.03","func":"// Die aktuelle Leistung oder den Maximalleistung\nvar power = context.get('power') || 1;\n\n// Funktion zum Begrenzen des Werts zwischen 1 und maxPower\nfunction clamp(value, min, max) {\n    return Math.min(Math.max(value, min), max);\n}\n\n// Wenn der aktuelle Wert zwischen -10 und 10 liegt, wird er einfach weitergegeben\nif (msg.payload >= -10 && msg.payload <= 10) {\n    return null;\n}\n\n// Calculate percentage difference between current and previous value\nvar percentageDiff = Math.abs((msg.payload - power) / power) * 100;\n\n// Clamp power between 1 and max if percentage difference is greater than 10%\nif (percentageDiff > 10) {\n    // Wenn der aktuelle Wert kleiner als -10 ist\n    if (msg.payload < -10) {\n        var newPower = clamp(power - Math.abs(msg.payload), 1, 600); // HinzufĂŒgen des positiven Werts zum aktuellen Wert\n        context.set('power', newPower); // Speichern des neuen Werts\n        msg.payload = newPower; // Aktualisieren der Nachricht\n        return msg;\n    }\n\n    // Wenn der aktuelle Wert grĂ¶ĂŸer als 10 ist\n    if (msg.payload > 10) {\n        var newPower = clamp(power + Math.abs(msg.payload), 1, 600); // Subtrahieren des Werts vom aktuellen Wert\n        context.set('power', newPower); // Speichern des neuen Werts\n        msg.payload = newPower; // Aktualisieren der Nachricht\n        return msg;\n    }\n}\n\n// Wenn die Abweichung kleiner als 10% ist, wird null zurĂŒckgegeben\nreturn null;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1020,"y":1160,"wires":[["0509a804e427f487"]]},{"id":"5bfe5eb4832c453d","type":"mqtt out","z":"a2caaef1c7b6540d","name":"WR MQTT","topic":"inverter/ctrl/limit_nonpersistent_absolute/0","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"87b2d138566ff5cc","x":1910,"y":1160,"wires":[]},{"id":"0509a804e427f487","type":"switch","z":"a2caaef1c7b6540d","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"btwn","v":"2","vt":"num","v2":"599","v2t":"num"},{"t":"eq","v":"600","vt":"num"}],"checkall":"true","repair":false,"outputs":3,"x":1270,"y":1160,"wires":[["5a09ad75e5cd58d3"],["8e86e667ea51129b","677fef3cee704e31","5bfe5eb4832c453d"],["5a2a9a4463b0eebd"]]},{"id":"5a2a9a4463b0eebd","type":"trigger","z":"a2caaef1c7b6540d","name":"Powerlimit 600 W","op1":"","op2":"0","op1type":"pay","op2type":"str","duration":"0","extend":false,"overrideDelay":false,"units":"ms","reset":"reset","bytopic":"all","topic":"topic","outputs":1,"x":1530,"y":1260,"wires":[["5bfe5eb4832c453d"]]},{"id":"5a09ad75e5cd58d3","type":"trigger","z":"a2caaef1c7b6540d","name":"Powerlimit 1 W","op1":"","op2":"0","op1type":"pay","op2type":"str","duration":"0","extend":false,"overrideDelay":false,"units":"ms","reset":"reset","bytopic":"all","topic":"topic","outputs":1,"x":1520,"y":1060,"wires":[["5bfe5eb4832c453d"]]},{"id":"8e86e667ea51129b","type":"change","z":"a2caaef1c7b6540d","name":"reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"reset","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1490,"y":1200,"wires":[["5a2a9a4463b0eebd"]]},{"id":"677fef3cee704e31","type":"change","z":"a2caaef1c7b6540d","name":"reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"reset","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1490,"y":1120,"wires":[["5a09ad75e5cd58d3"]]},{"id":"27463a298ff21331","type":"mqtt in","z":"a2caaef1c7b6540d","name":"L1","topic":"shellies/shellyem3-34945478AB74/emeter/0/power","qos":"0","datatype":"auto-detect","broker":"4456b99c55c38cfe","nl":false,"rap":true,"rh":0,"inputs":0,"x":150,"y":1080,"wires":[["718ddf2d28e69d06","54ff5a1d6c6baf59"]]},{"id":"718ddf2d28e69d06","type":"debug","z":"a2caaef1c7b6540d","name":"debug 3","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":280,"y":1120,"wires":[]},{"id":"4963fbb2c73cdc53","type":"mqtt in","z":"a2caaef1c7b6540d","name":"L2","topic":"shellies/shellyem3-34945478AB74/emeter/1/power","qos":"0","datatype":"auto-detect","broker":"4456b99c55c38cfe","nl":false,"rap":true,"rh":0,"inputs":0,"x":150,"y":1160,"wires":[["12fadee294cd874c","4dc71cc5aeb70a8b"]]},{"id":"5f19dcf645effb81","type":"mqtt in","z":"a2caaef1c7b6540d","name":"L3","topic":"shellies/shellyem3-34945478AB74/emeter/2/power","qos":"0","datatype":"auto-detect","broker":"4456b99c55c38cfe","nl":false,"rap":true,"rh":0,"inputs":0,"x":150,"y":1240,"wires":[["a214ed8b1b8f161e","1628a34cade83f2d"]]},{"id":"12fadee294cd874c","type":"debug","z":"a2caaef1c7b6540d","name":"debug 4","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":280,"y":1200,"wires":[]},{"id":"a214ed8b1b8f161e","type":"debug","z":"a2caaef1c7b6540d","name":"debug 5","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":280,"y":1280,"wires":[]},{"id":"e9793de67dfe9abb","type":"function","z":"a2caaef1c7b6540d","name":"function 1","func":"if (msg.topic === \"shellies/shellyem3-34945478AB74/emeter/0/power\") context.set(\"L1\", msg.payload);\nif (msg.topic === \"shellies/shellyem3-34945478AB74/emeter/1/power\") context.set(\"L2\", msg.payload);\nif (msg.topic === \"shellies/shellyem3-34945478AB74/emeter/2/power\") context.set(\"L3\", msg.payload);\n\nvar L1 = context.get(\"L1\") || 0;\nvar L2 = context.get(\"L2\") || 0;\nvar L3 = context.get(\"L3\") || 0;\nmsg.payload = L1 + L2 + L3;\nmsg.payload = parseFloat((msg.payload).toFixed(2));\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":1160,"wires":[["eadaeb9ff50d05a8","24a3fd1902a5f5ae","61d143d03d777520"]]},{"id":"eadaeb9ff50d05a8","type":"debug","z":"a2caaef1c7b6540d","name":"debug 6","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":900,"y":1220,"wires":[]},{"id":"54ff5a1d6c6baf59","type":"aggregator","z":"a2caaef1c7b6540d","name":"L1 Mean","topic":"shellies/shellyem3-34945478AB74/emeter/0/power","intervalCount":"10","intervalUnits":"s","submitIncompleteInterval":true,"submitPerTopic":false,"aggregationType":"mean","x":440,"y":1080,"wires":[["e9793de67dfe9abb"]]},{"id":"1628a34cade83f2d","type":"aggregator","z":"a2caaef1c7b6540d","name":"L3 Mean","topic":"shellies/shellyem3-34945478AB74/emeter/2/power","intervalCount":"10","intervalUnits":"s","submitIncompleteInterval":true,"submitPerTopic":false,"aggregationType":"mean","x":440,"y":1240,"wires":[["e9793de67dfe9abb"]]},{"id":"4dc71cc5aeb70a8b","type":"aggregator","z":"a2caaef1c7b6540d","name":"L2 Mean","topic":"shellies/shellyem3-34945478AB74/emeter/1/power","intervalCount":"10","intervalUnits":"s","submitIncompleteInterval":true,"submitPerTopic":false,"aggregationType":"mean","x":440,"y":1160,"wires":[["e9793de67dfe9abb"]]},{"id":"24a3fd1902a5f5ae","type":"influxdb out","z":"a2caaef1c7b6540d","influxdb":"e840b95d15d8b227","name":"AhoyDB","measurement":"Power_Consumption","precision":"","retentionPolicy":"","database":"database","precisionV18FluxV20":"ms","retentionPolicyV18Flux":"","org":"organisation","bucket":"bucket","x":900,"y":1100,"wires":[]},{"id":"87b2d138566ff5cc","type":"mqtt-broker","name":"","broker":"192.168.178.132","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"4456b99c55c38cfe","type":"mqtt-broker","name":"","broker":"192.168.2.104","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"e840b95d15d8b227","type":"influxdb","hostname":"192.168.2.104","port":"8086","protocol":"http","database":"PVDB","name":"AhoyDB","usetls":false,"tls":"","influxdbVersion":"1.x","url":"http://localhost:8086","rejectUnauthorized":true}]

Gib bitte mal eine RĂŒckmeldung, wie Stabil das bei dir lĂ€uft, gerade mit dem Anpassen der Leistung. Vorher solltest du aber definitiv Ă€ndern, das du immer 3 Werte von deinem Shelly bekommst.

Schöne GrĂŒĂŸe
Sebastian