Node Red Nulleinspeisung mit Akku abfrage

Hallo zusammen,

bin seit einiger Zeit schon stiller Mitleser und konnte mir dadurch meine eigenen Nulleispeisung zusammenbasteln. Das ganz läuft auch schon echt ganz gut.

Nun zu meinem kleinen Problem, bei dem ich leider nicht weiterkomme.
Besitze zwei Akkus von Zendure und möchte wenn der Akku 100% erreicht hat und nicht mehr geladen wird (Sensoren sind vorhanden), das Limit des WR auf 100% gesetzt wird.

Wie und wo baue ich das ein?
Hat jemand eine Idee oder kann mir dabei Helfen ?

Danke schon mal

Moin HarryDieEule und Willkommen in unserer Cummunity.

Vorab: ich habe eine solche Konstellation nicht daher kann ich dir nur meine mögliche Vorgehensweise mitgeben bzw. zur Diskussion stellen.
Zur Abfrage des Ladezustands würde ich vor dem “mqtt out” die Node “events: state” mit der Abfrage nach Erreichen der 100% Akku-Ladung setzen. Bei “is not” 100 geht es weiter wie bisher ansonsten bekommt der WR mit einer neuen “mqtt out” 100%.

Grüße
LL

Hi LuckyLuke,

Danke danke.

Die Node habe ich eingefügt. Aber wie genau einbinden?

Danke für deine Unterstützung

kannst du deinen Flow hier einstellen? Dann wird’s auch einfacher für mich das nachzuvollziehen was ich mir da überlegt habe. Wie das geht hatte ich in diesem Beitrag mal beschrieben:

Grüße
LL

Hier der flow:

[{"id":"b44e5929af086b6f","type":"tab","label":"Test","disabled":false,"info":"","env":[]},{"id":"ab625dbbb21aef9d","type":"mqtt out","z":"b44e5929af086b6f","name":"WR MQTT","topic":"ahoy/ctrl/limit/0","qos":"2","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"87b2d138566ff5cc","x":1290,"y":160,"wires":[]},{"id":"ca660ffaa90da772","type":"function","z":"b44e5929af086b6f","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 < 10) power = 100;\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":530,"y":240,"wires":[["8207edf9d601ec9c","bb018a8cce37f807"]]},{"id":"16100a47464cb6e0","type":"rbe","z":"b44e5929af086b6f","name":"entprellen","func":"deadband","gap":"2","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":300,"y":200,"wires":[["ca660ffaa90da772","b77ad86bc376d125"]]},{"id":"48451fd06f370ee5","type":"debug","z":"b44e5929af086b6f","name":"Check Ausgang","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1260,"y":340,"wires":[]},{"id":"fe100fc070f0da9c","type":"function","z":"b44e5929af086b6f","name":"zwischen 5% bis 100% (+0%)","func":"let eingangswert = msg.payload; // Eingangswert aus der msg.payload extrahieren\nlet mindestwert = 5;\n\nif (eingangswert < mindestwert) {\n    eingangswert = mindestwert;\n} else if (eingangswert > 100) {\n    eingangswert = 100;\n}\n\nif (eingangswert < 100) {\n    eingangswert += 0;\n}\n\n// Hier kann der bereinigte Wert weiterverwendet werden\nmsg.payload = eingangswert;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1050,"y":240,"wires":[["ab625dbbb21aef9d","48451fd06f370ee5"]]},{"id":"a0fdf2e80aec3066","type":"rbe","z":"b44e5929af086b6f","name":"entprellen","func":"deadband","gap":"0","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":1040,"y":340,"wires":[[]]},{"id":"bb018a8cce37f807","type":"range","z":"b44e5929af086b6f","minin":"1","maxin":"800","minout":"1","maxout":"100","action":"scale","round":true,"property":"payload","name":"Umrechnen in %","x":790,"y":240,"wires":[["fe100fc070f0da9c"]]},{"id":"8207edf9d601ec9c","type":"debug","z":"b44e5929af086b6f","name":"Check 2","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":640,"y":140,"wires":[]},{"id":"de62d4ed573c6e61","type":"server-state-changed","z":"b44e5929af086b6f","name":"Verbrauch > 0","server":"545f9309.a49cdc","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.total_power_3","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"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":110,"y":240,"wires":[["16100a47464cb6e0"],["35442c2604c86bd3"]]},{"id":"35442c2604c86bd3","type":"rbe","z":"b44e5929af086b6f","name":"entprellen","func":"deadband","gap":"5","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":300,"y":280,"wires":[["ca660ffaa90da772","161ad9056bddf96c"]]},{"id":"161ad9056bddf96c","type":"debug","z":"b44e5929af086b6f","name":"Check 1","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":400,"y":360,"wires":[]},{"id":"b77ad86bc376d125","type":"debug","z":"b44e5929af086b6f","name":"Check 3","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":460,"y":140,"wires":[]},{"id":"a1924a07253cce02","type":"server-state-changed","z":"b44e5929af086b6f","name":"Akku voll?","server":"545f9309.a49cdc","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.solarflow_electric_level_2","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"100","halt_if_type":"num","halt_if_compare":"is_not","outputs":2,"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":1060,"y":140,"wires":[[],[]]},{"id":"87b2d138566ff5cc","type":"mqtt-broker","name":"","broker":"192.168.178.35","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":"545f9309.a49cdc","type":"server","name":"Home Assistant","addon":true}]

Danke

Moin HarryDieEule,

das ging dann doch nicht so wie oben beschrieben.
Ich habe aus deinem “events: state” Verbrauch > 0 mal einen “current state” gemacht und den Akku voll? davor gesetzt:


Verbrauch > 0 sieht dann so aus:

und Akku voll? so:

Keine Ahnung ob das so funktioniert aber du kannst es ja mal probieren.

Grüße
LL

Danke, die Idee is super.
Werde es die Tage testen und berichten

Hallo LuckyLuke,

mit deinen Vorgaben konnte ich mir nun einen funktionieren Flow zusammenstellen.

Vielen Dank

Eine letzte Frage noch…

Die Akkuabfrage kommt über MQTT rein und leider kommt es ab und zu mal vor, dass keine Werte reinkommen. Falls das passiert, läuft der Flow leider garnicht.

Kann ich irgendwie einstellen das die Nulleinspeisung weiterläuft, falls der Akku unter 100% ist oder kein Wert vorhanden ist ?

Danke

Moin HarryDieEule,

der Flow ist natürlich abhängig von dem was der Akku Sensor liefert, wenn nichts kommt kann auch nichts verarbeitet werden und dann passiert halt nichts.
Ist es möglich dafür zu sorgen dass der Sensor evtl. zeitgesteuert (z.B. alle 10 Sek.) Daten liefert?

Ansonsten könntest du aus dem “events: state” Akku voll? ebenfalls ein “current state” machen und davor eine inject node setzen der alle z.B. 10 Sek. den flow initiert. Hier mal ein Link mit Beispiel:
Flow mit Zeitsteuerung

Grüße
LL