NEWS
ecoflow-connector-Script zur dynamischen Leistungsanpassung
-
@accu hm... das ist blöd. Bei der Überschussladung wird die gemessene Ladeleistung von Real power abgezogen, damit man auch weiterhin den echten Überschuss sehen kann.
Damit in deinem Fall jetzt richtig gerechnet wird, müsste die Leistung, die am AC Ausgang des DP angeschlossen ist, also dem Realpower wieder zugerechnet werden.
Die folgenden Lösungsmöglichkeiten fallen mir ein:
1.) finde einen Datenpunkt deines DP, der ausschließlich die Lade Leistung der Batterie ohne den Abgriff am AC Port repräsentiert und setzte diesen bei: "ExcessActualPowerID" ein. Dann wird das was in den Trockner geht wieder ganz normal als Verbrauch gewertet und die Regulierung sollte funktionieren.2.) finde einen Datenpunkt deines DP, der ausschließlich die Leistung an die am AC Port abgegriffen wird. Alternativ kannst du auch eine Messsteckdose in den AC Port stecken und dessen Messergebnis verwenden.
Unter AdditionalPower gibst du dann an:AdditionalPower: [ { name: "Dein Messwert", id: "die.0.messwert.id", factor: -1, offset:0, NoFeedIn: false, // True setzen, wenn die enthaltene Leistung nicht ins Hausnetz fließt. (Nur in PVTotal aufnehmen) NoPV: true, // true setzen, wenn die enthaltene Leistung nicht in TotalPV einfließen soll. (Nur in Realpower aufnehmen) },
Dadurch wird dann dein Messwert wieder vom errechneten Überschuss abgezogen.
Hilft dir das?
-
@matz75 Es freut mich, dass ich dir helfen konnte!
battPozOn: 99, battPozOff: 92
Stammen aus einer Zeit, als der PS noch stur seine komplette Arbeit eingestellt hat, wenn die Batterie voll war. D.h. dass unter Umständen noch zur Verfügung stehende Solarenergie einfach nicht abgerufen wurde. Ich hielt es aber für richtiger in diesem Fall einfach alles einzuspeisen, auch wenn dadurch etwas ins Netz zurückfließt… Kostet ja nichts. Inzwischen kann der PS das auch mit Hausmitteln.
Zu der Funktion der Parameter:
Hat die Batterie einen Ladestand von 99 % erreicht, wird die Einspeiseleistung des PS fest auf Max Power also meistens 600 W eingestellt, bis die Batterie auf 92 % entladen wurde . dann wird wieder ganz normal geregelt.(null Einspeisung) dabei spielt es dann keine Rolle, ob genügend PV Energie zur Verfügung steht.
Alternativ kann man mit battOnSwitchPrio noch festlegen, dass nicht voll eingespeist wird, sondern dass der PS in den Batterie Prioritätsmodus schaltet. dabei, sollte dann die Batterie auf dem entsprechenden Ladestand gehalten werden, und überschüssige PV Energie automatisch eingespeist werden. Eine Regelung durch das Skript erfolgt dann nicht mehr.Alles soweit klar?
-
@ub35bo sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
@waly_de Die Idee des Scripts, die Powerstream-Leistung dynamisch an die Leistung am Smartmeter anzupassen, finde ich toll.
Nach einigem Hin und Her habe ich das Skript auch zum Laufen gebracht, so dass nur noch beim Starten keine Fehler- und nur noch zwei Warnmeldungen (
warn javascript.0 (2173) at getStateCr (script.js.common.EcoFlow-Connector:2612:16
bzw.
warn javascript.0 (2173) at script.js.common.EcoFlow-Connector:2073:37
) auftauchen. Leider bleibt der gewünschte Erfolg aus.
Die Verbindung zu meinem Discovergy-Smartmeter scheint zu funktionieren. Zumindest kommt es zu Fehlermeldungen, wenn ich die Login-Daten von Smartmeter und Powerstream verfälsche.
Die SmartmeterID in W - allerdings mit zwei Nachkommastellen - habe ich als "discovergy.0.12345678.Power_Consumption" gefunden. Leider führt eine Veränderung des Wertes nicht zur Anpassung der Powerstreamleistung.
Hat jemand eine Idee, wo der Fehler liegen könnte?Mit den Fragmenten deiner Fehlermeldungen und Warnmeldung kann ich leider nicht so viel anfangen. Um dazu was sagen zu können, geh bitte in die Protokollansicht von iobroker und kopiere dort die Fehlermeldungen und die Zeilen davor und danach und setze sie hier im Forum als Code ein. Dazu dient der Schalter oben "</>"
Bitte sieh dir unter Objects "0_userdata.0.ecoflow.RealPower" an.
Wenn sich dieser Wert entsprechend deines Verbrauchs regelmäßig aktualisiert ist das schon mal ein gutes Zeichen.
Wird dann nicht reguliert, liegt es in 90 % der Fälle daran, dass der History Adapter entweder nicht installiert oder nicht aktiviert ist. -
@waly_de ahh. ok. das macht es durchsichtiger. Danke dir recht herzlich und weiter so. find ich echt klasse.
-
@waly_de said in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
@thomas-weller sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Hallo @Waly_de
hab bei mir seit gestern auch das Eproom-Schutz Skript laufen. Funktioniert so perfekt wie das alte.
Danke!!
Für mich wäre noch folgende Funktionen wichtig:
- Habe am AC Ausgang der DeltaPro die Heizung der Wasserbetten da diese immer ~300Watt ganz kurz ziehen. Das Skript regelt das natürlich nicht raus in dieser Geschwindigkeit und es kommt zu 0,5-1kWh Netzbezug über Nacht..
Nun besteht aber die Gefahr dass die Delta Pro leer läuft im Winter (Lade nur über ShellySchalter per AC auf).
Von daher wäre eine Funktion gut die sagt "IMMER bei <5% SOC Laden bis 10% das die AC-Versorgung immer gewährleistet ist.
Das würde ich auch extern über ein blocky lösen. Hat ja nicht direkt mit der Regelung zu tun und ist sehr einfach und schnell zusammengeklickt
- Vorbereitend für eine WallboxSteuerung wäre es Super wenn ich in IOBroker einen Wert hätte der nach deinem Skript den weiterhin vorhandenen Überschuss im Hause darstellt.
Zum Beispiel: 12.000Watt Überschuss abzgl. 1.200Watt AC-Ladeleistung = 10.800Watt weithin Überschuss für z.B.: Wallbox
Reicht Dir dafür nicht der Wert deines Smartmeters ? Der wird ja dann negativ und zeigt genau das an was du möchtest…
Blocky schaue ich mir mal an.
Damit schalte ich dann dein Skript aus wenn die Ladund der DP zu gering wird?Der Wert vom Smartmeter reicht deshalb nicht weil die WallboxREGELUNG dann wohl außerhalb von deinem Skript sitzt.
Zwei Regelungen mit der gleichen Datenbasis funktioniert nicht wirklich.Deshalb:
- SmartMeter Wert
- SmartMeter Wert inkl./abzgl. WalySkript
- Neuer SmartMeterWert für die Wallbox
Hoffe ich konnte mein Vorhaben richtig rüber bringen.
- Habe am AC Ausgang der DeltaPro die Heizung der Wasserbetten da diese immer ~300Watt ganz kurz ziehen. Das Skript regelt das natürlich nicht raus in dieser Geschwindigkeit und es kommt zu 0,5-1kWh Netzbezug über Nacht..
-
Das Blockly sollte dann für meine nicht vorhandenen Programmierkenntnisse so aussehen:
Wenn SOC der DeltaPro <5%
= Skript zur dynamischen Leistungsregelung stoppen
= Shelly SmartPlug (AC-Ladung der Delta Pro bei mir) auf AN
= Excees Power z.b.: 500Watt
Wenn SOC der DeltaPro wieder >10%
= Skript zur dynamischen Leistungsregelung startenJetzt muss ich das nur irgendwie zusammenklicken
-
@waly_de said in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
0_userdata.0.ecoflow.RealPower
Herzlichen Dank für deine schnelle Rückmeldung, die ich versucht habe umzusetzen.
Zunächst das Positive:- der in "0_userdata.0.ecoflow.RealPower" als ganze Zahl enthaltene Wert stimmt weitgehend bis auf einen kleinen Zeitversatz mit den Werten überein, die ich der Discovergy-App entnehmen kann.
- Der History-Adapter ist in der Version 3.0.1 und es laufen 2 Instanzen ohne Fehlermeldung.
history.0
2024-03-17 17:07:02.443 info starting. Version 3.0.1 in /opt/iobroker/node_modules/iobroker.history, node: v18.19.1, js-controller: 5.0.19history.0
2024-03-17 17:07:02.507 info enabled logging of 0_userdata.0.ecoflow.RealPower (Count=1), Alias=false
host.Raspberry-Pi5-8GB
2024-03-17 17:07:03.417 info instance system.adapter.history.1 started with pid 77473history.1
2024-03-17 17:07:04.128 info starting. Version 3.0.1 in /opt/iobroker/node_modules/iobroker.history, node: v18.19.1, js-controller: 5.0.19Die Warnmeldungen, die einmalig beim Start bzw. Neustart zwischen zwei Browseranmeldungen auftauchen, habe ich folgend hineinkopiert. Dabei handelt es sich um alle Befehle,
javascript.0
2024-03-17 17:00:44.111 info Stop script script.js.common.EcoFlow-Connectorjavascript.0
2024-03-17 17:00:44.115 info script.js.common.EcoFlow-Connector: Ecoflow MQTT-Client beendetjavascript.0
2024-03-17 17:00:44.221 info Start javascript script.js.common.EcoFlow-Connectorjavascript.0
2024-03-17 17:00:44.242 info script.js.common.EcoFlow-Connector: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptionsjavascript.0
2024-03-17 17:00:44.503 warn getState "0_userdata.0.ecoflow.Regulate" not found (3) states[id]=nulljavascript.0
2024-03-17 17:00:44.505 warn at getStateCr (script.js.common.EcoFlow-Connector:2612:16)javascript.0
2024-03-17 17:00:44.505 warn at script.js.common.EcoFlow-Connector:2073:37javascript.0
2024-03-17 17:00:44.599 info script.js.common.EcoFlow-Connector: Verbunden mit dem Ecoflow MQTT-BrokerIch hoffe, dass ich die für dein Verständnis notwendigen Meldungen erwischt habe.
Für mich sieht es so aus, dass das Problem auf der EcoFlow-Seite liegt. Muss ich neben den Seriennummern im Script vielleicht auch noch einen zusätzlichen Adapter installieren? -
@thomas-weller said in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Das Blockly sollte dann für meine nicht vorhandenen Programmierkenntnisse so aussehen:
Wenn SOC der DeltaPro <5%
= Skript zur dynamischen Leistungsregelung stoppen
= Shelly SmartPlug (AC-Ladung der Delta Pro bei mir) auf AN
= Excees Power z.b.: 500Watt
Wenn SOC der DeltaPro wieder >10%
= Skript zur dynamischen Leistungsregelung startenJetzt muss ich das nur irgendwie zusammenklicken
Hier übrigens das funktionierende Ergebnis für diesen Anwendungsfall (Keine PV an Delta oder PS da lAdung nur über AC-Schaltsteckdose und Speicher darf nicht leer werden weil z.B. Kühlschrank am AC-Ausgang hängt):
-
@waly_de
Frage 1:
Ich habe noch mal ein Problem mit battPozOn.
Ich habe zwei Powerstreams, die im Modus serial arbeiten.
Wenn der Zweite jetzt bei den eingestellten 96% ankommt, wird wie gewünscht auf volle Leistung gestellt. Leider geht der Einspeisesollwert (SetAC) irgendwann auf 0. Dann wird nur noch Überschuss vom Powerstream eingespeist (Einspeisekontrolle ist deaktiviert).Woran kann das lieg? Laut den Protokollen "denkt" das Script weiterhin der Powerstream steht weiterhin auf 600 W.
In Folge dessen wird auch zu viel eingespeist und ich gebe ca. die Leistung ins Netz ab, die vom PS2 gerade anstelle der gewünschten 600W eingespeist werden.Starte ich das Script neu, greift wieder battPozOn, aber nur für begrenzte Zeit.
Frage 2:
Ich habe zwei Powerstreams mit angeschlossener Powerstation und an jeder Powerstation sind ebenfalls Paneele angeschlossen.
Ist es für die Regelung erforderlich diese zu berücksichtigen? Sämtliche Steuerung erfolgt in ioBroker. Die Auswertung und Visualisierung erledige ich komplett extern in Home Assistant. -
@waly_de
Super und vielen Dank. Ich habe es jetzt auf -2 Prio Speicher gestellt. Das war genau das was ich gesucht habe so langsam komme ich dahinter was die ganzen Optionen bedeuten.
Des Weiteren habe ich mir jetzt per Blockly ein simples Script erstellt das auf einen Schalter in Home Assistant reagiert. So kann ich per Home Assistant die dynamische Steuerung ein und aus stellen in Home Assistant kann ich nun auch ganz simpel alles per Zeitschaltuhr steuern. Für mich ist das die beste Lösung da ich im Home Assistant zu Hause bin. Ich habe auch schon überlegt wie ich das ganze ohne mein Zutun automatisieren könnte aber da bin ich selber noch auf keine Lösung gekommen. Das ganze müsstest abhängig vom Akkustand des Speichers geschehen. Hab ich mehr Strom kann ich mehr teure Tibber Stunden ausgleichen. Ist der Akkustand niedriger muss ich mich auf die teuersten konzentrieren. Momentan mache ich das per Zeitschaltuhr ihn Home Assistant. Automatisieren wird da schwer da zu viele Faktoren eine Rolle spielen.
Das Script funktioniert jetzt aber genauso wie ich es mir vorgestellt habe. Dafür und für deine Hilfe vielen Dank. -
@maik1007
Ich glaube das was du suchst habe ich in Home Assistant bereits umgesetzt.
schau mal hier rein: https://www.photovoltaikforum.com/thread/208943-ecoflow-powerstream-bastelecke-plug-nachbau-zur-messwerte-übergabe-eines-energie/?postID=3653326#post3653326Ich speise automatisiert in den möglichst teuersten Stunden ein. Wie viele das sind ermittle ich am Akkustand und der PV Prognose.
An ioBroker wird nur ein Schalter übergeben, der Regulation true oder false setzt.
-
Hallo
was muss ich bei der Delta Pro eintragen in dem Script unter :Bezeichnungen für Typen: PowerStream:"PS"; DeltaMax:"DM"; Delta2: "D2" ; Delta2 Max: "D2M"; SmartPlug: "SM"; Andere: "NA"
//#######################################################################
{
seriennummer: "XXXXXXXXXXXXX",
name: "DELTA Max",
typ: "DM",
subscribe: false, // "true": Alle Daten für dieses Gerät werden angefragt. "false": Es werden keine Statusdaten abgefragt
},Delta Pro sehe da nicht.
Habe schon gesucht, aber nichts gefunden oder übersehen.
-
@Waly_de
Eine Frage zu den WertenMaxPower
undZusatzpower_Offset
bzw. generell zur Zusatzpower.
Mein Powerstream wurde nun durch irgendein Update auf 800W erhöht und wenn ich nun den WertMaxPower
auf 800W setze, dann stimmt die Berechnung zur Zusatzpower weiter unten im Skript nicht mehr.Außerdem würde ich den Wert
MaxPower
aufspalten in die wirkliche maximale Power des Powerstreams (600W/800W) und die Leistung, die man einspeisen will. Z.b. wenn man mehrere PS hat, dann beide auf 300W/400W einstellt, um nicht generell zu hoch einzuspeisen.Wenn ich jetzt aber die
MaxPower
bei mir auf 400W stelle, dann regelt das SKript die Zusatzpower schon ab diesem Wert und resultiert dann in einem komischen Verhalten.Darüber hinaus wird die Zusatzpower ja nur benötigt, wenn die Einspeiseleistung < 200W beträgt, da die Batterie maximal mit 600W geladen werden kann.
Ich würde den Wert für die Zusatzpower nicht abhöngig von der
MaxPower
machen, sondern fix auf 600W Ladeleistung bzw. 200W Einspeiseleistung setzen, damit das sauber funktioniert. -
@waly_de
Ich habe den Fehler versucht einzukreisen. Irgendwie kam ich zu der Erkenntnis, das Regulate nicht definiert ist und habe es durch "" ersetzt, wie ich es in älteren Scripten gefunden habe.
// RegulationState: "Regulate", // Wenn angegeben, kann mit diesem State die Regulation ein- und ausgeschaltet werden (Wird automatisch unter 0_userdata.0.ecoflow angelegt)
RegulationState: "", // Wenn angegeben, kann mit diesem State die Regulation ein- und ausgeschaltet werden (Wird automatisch unter 0_userdata.0.ecoflow angelegt)
Jetzt läuft mein System wie gewünscht.Jetzt stellt sich mir die Frage, ob bzw. wie ich die dynamische Leistungsanpassung zeitgesteuert laufen lassen kann.
Hintergrund: Ich bin Tibberkunde und es macht für mich vor allem in den Morgen- und Abendstunden, die besonders teuer sind, einzuspeisen. Leider bin ich noch nicht in Scripten firm und würde mich über Hilfe freuen. -
@dreffi sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Woran kann das lieg? Laut den Protokollen "denkt" das Script weiterhin der Powerstream steht weiterhin auf 600 W.
Wie meinst du das mit "denkt"? Was genau steht denn in dem Objekt "0_userdata.0.ecoflow.app_1XXXXX_thing_property_set.writeables.SetAC" ?
Wird da null eingesetzt? Oder siehst du das nur in der App?
Du sagst, das geht nur eine gewisse Zeit sind das Sekunden Minuten Stunden?@dreffi sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Frage 2:
Ich habe zwei Powerstreams mit angeschlossener Powerstation und an jeder Powerstation sind ebenfalls Paneele angeschlossen.
Ist es für die Regelung erforderlich diese zu berücksichtigen? Sämtliche Steuerung erfolgt in ioBroker. Die Auswertung und Visualisierung erledige ich komplett extern in Home Assistant.Nein. Es ist nicht nötig diese Paneele zu berücksichtigen. Die Angabe ist nur dann sinnvoll, wenn die Gesamtsolarleistung im iobroker erfasst werden soll. (0_userdata.0.ecoflow.totalPV)
-
@ponti92 sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Mein Powerstream wurde nun durch irgendein Update auf 800W erhöht
Das ist mir neu. Wann gab es dieses Update? Der Powerstream ist ja von Haus aus in der Lage, 800 W zu liefern, ist aber im Moment aufgrund der Regelungen in Deutschland noch auf 600 W begrenzt. Solange das so ist, würde ich MaxPower auf 600 W stehen stehen lassen.
Zum begrenzen der Einspeiseleistung würde ich mit diesen Parametern arbeiten:
lowBatLimitPozOn: 100, lowBatLimitPozOff: 101, // Bei Unterschreiten der Batterieladung von "lowBatLimitPozOn" % ist die maximale Einspeiseleistung auf lowBatLimit: 400, // "lowBatLimit" limitiert, bis der Ladezustand wieder bei "lowBatLimitPozOff" ist
Mit dieser Einstellung sollst das Limit immer greifen, und der entsprechende powerStream maximal 400 W einspeisen.
-
@ub35bo sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Jetzt stellt sich mir die Frage, ob bzw. wie ich die dynamische Leistungsanpassung zeitgesteuert laufen lassen kann.
Hintergrund: Ich bin Tibberkunde und es macht für mich vor allem in den Morgen- und Abendstunden, die besonders teuer sind, einzuspeisen. Leider bin ich noch nicht in Scripten firm und würde mich über Hilfe freuen.Das geht grundsätzlich auch einfach mit einem Blocky oder 2 "Rules"
Schau mal dieses Video an. Das erklärt die Grundlagen von Blockys ganz gut.
https://youtu.be/Of2C8F_n11U?si=vjXG24y1lTdlaScFDu musst also zwei Zeitpläne erstellen, die Regulate jeweils ein und ausschalten.
Alternativ kannst du auch mit dem Tibber Adapter arbeiten, und auf den aktuellen Preis direkt reagieren. Sprich bei Änderung auf "TEUER" das Script aktivieren. -
@waly_de Da könnte man doch auch Dein Tibber Script nehmen oder? Also das folgende auskommentieren und dann sollte es doch gehen.... ?
//BatMax: 99, //Bei diesem Ladestand stoppt die AC-Ladung und das Script wird wieder eingeschaltet //BatMin: 50, //Der Ladestand der Batterie muss kleiner sein als BatMin , damit der Akku per AC-Ladung geladen wird // SwitchID: "shelly.0.shellyplusplugs#b0b21c19ff40#1.Relay0.Switch", //ID des Schalters, der die AC-Ladung einschaltet. "true" und "false" werden gesetzt
und das hier muss dann auch noch angepasst werden:
function checkTibber() { if (tibberID && batSocID) { const RegulateID = ConfigData.statesPrefix + "." + ConfigData.RegulationState let priceLevel = getState(tibberID).val; let batsoc = Number(getState(batSocID).val) let OldRegulate = toBoolean(getState(RegulateID).val) //log("Tibber Preislevel: " + priceLevel + " OldRegulate: " + OldRegulate + " batsoc: " + (batsoc)) if ((tibberConfig.LevelToSwitch.includes(priceLevel))) { if (OldRegulate) { // if (batsoc <= tibberConfig.BatMin) { setState(RegulateID, false); // Regulierung aus // setState(tibberConfig.SwitchID, true) //Schalter einschalten log("Script abgeschaltet AC-Ladung Ein, weil priceLevel:" + priceLevel + " batsoc:" + batsoc + "%") } } else { // if (batsoc >= tibberConfig.BatMax) { setState(RegulateID, true); // Regulierung an //setState(tibberConfig.SwitchID, false) //Schalter ausschalten log(" Batterie bei BatMax. Script eingeschaltet AC-Ladung Aus. priceLevel:" + priceLevel + " batsoc:" + batsoc + "%") } } };
Dann wird bei CHEAP und VERY_CHEAP "Regulate" ausgeschaltet, und wenn das nicht ist, ist "Regulate" an. Verstehe ich das so richtig?
-
@waly_de ich wollte nochmal das Thema: "AC Laden", wenn an der DP vorne ein Verbraucher eingesteckt ist, ansprechen.
Wie beschrieben: ist es für mich ungünstig, wenn die DP z.B. gerade mit 500W über den AC Eingang lädt und vorne an den Steckdosen ein Verbraucher mit 500W angesteckt wird. In diesem Falle würden dann in Summe 1.000W aus dem Netz gezogen. Daher würde ich gerne eine Option haben, die beim Einschalten der DP Steckdosen das AC Laden abstellt.
Mir wurde hier gerade, dass via einem separaten Skript zu machen. Was ich auch tun könnte ABER dann würde der Shelly der den AC Ladeeingang schaltet ping-pong spielen. D.h. das Skript schaltet den AC Ladeeingang der DP ab. Das Leistungsanpassungsskript wieder an.Kann man das nicht als Option mit hier im Skript einbauen?
-
@karo2204 klasse Idee!
es müsste auch reichen die Config so anzupassen:
var tibberConfig = { BatMax: 101, //Bei diesem Ladestand stoppt die AC-Ladung und das Script wird wieder eingeschaltet BatMin: 100, //Der Ladestand der Batterie muss kleiner sein als BatMin , damit der Akku per AC-Ladung geladen wird //SwitchID: "", //ID des Schalters, der die AC-Ladung einschaltet. "true" und "false" werden gesetzt LevelToSwitch: [ //Hier die Werte definieren, bei denen die AC-Ladung eingeschaltet werden soll "NORMAL", "CHEAP", //Einkommentieren falls gewüscht "VERY_CHEAP" ], }
In diesem Fall wird das Skript nur aktiviert, wenn der Preis Level expensive ist.