NEWS
IOBroker Anbindung an einen Kostal Plenticore
-
@strathcole said in IOBroker Anbindung an einen Kostal Plenticore:
@homeuser Kannst du denn vielleicht mal den Datenpunkt
plenticore.0.devices.local.battery.SmartBatteryControl
in den History- oder Influx-Adapter packen und schauen, wie er vom Adapter gesteuert wird?
Wenn ich es recht im Kopf habe, sollte der Adapter den bei schlechter Prognose eigentlich auffalse
setzen, was wiederum (eigentlich!) dazu führt, dass auch der WR die Batterie immer bei Überschuss lädt und nicht einspeist.Heute war ein Tag mit anfangs Sonne, so dass ich Infos sammeln konnte.
Das Chart mit SmartBatteryControl
Außerdem habe ich zwischendurch aufgeschrieben wieder das Ladzustand des Speicher war und ob geladen wurde, verbraucht oder eingespeist (war blöd, dass ich es nicht im History aktiviert hatte; mache ich für morgen).
Um 12:10 Uhr habe ich den Batteriestatus angeschaut. Der stand auf "Normal".
Morgen ist wieder Sonne. Dann kann ich weiter aufzeichnen was wann wo passiert. Ich würde jetzt mal noch den Stand Speicherladung, Verbrauch, Ladung und Einspeisung aufzeichnen. Weitere Ideen, was nützlich sein könnte, um das Verhalten zu prüfen/verstehen?
-
@StrathCole Ich habe gerade doch mal in den Code geschaut, ob ich eine Idee habe, was passiert. Da es nicht viele Stellen gibt bzgl. SmartBatteryControl, habe ich mich von dort rückwärts durchgehangelt.
In plenticore.js sind die Zeilen 2329-2333 auskommentiert. Den auskommenierten Code habe so verstanden, dass das SmartBatteryControl auf false gesetzt wird, wenn die noch "freie" Energie (Energie des Tages minus erwarteter Verbrauch minus noch fehlende Ladung im Speicher) kleiner ist als 70% der Peakleistung. Oder wenn SoC kleiner ist als die Schwelle, die man in der Adapter-Konfig eingestellt hat.
Statt der auskommentierten Zeilen werden jetzt die darunter stehenden verwendet. Diese sind mir unklar (nicht der Code, sondern die Gedanken dahinter).
Und weil ich es dabei gerade gesehen habe: Ist der Faktor 0,7 drin wegen der Kappung bei 70% der Peakleistung? Wäre es möglich das konfigurierbar zu machen für Leute, die - so wie ich - wegen der Förderung des Speichers eine Kappung bei 50% haben? (Bitte keine Kommentare, ob das sinnvoll war. Man lerne ja einiges erst bei der ersten PV-Anlage und nicht davor....)
-
@strathcole Danke für deine schnelle Antwort. Die Sache hat sich inzwischen geklärt: ich habe nochmal auf der ioBroker Seite mit den Systemeinstellungen / Ortskoordinaten nachgeschaut. Da wird auch eine Karte angezeigt. In der Nähe meines Hauses ist eine Bushaltestelle mit der Bezeichnung "Sophienhöhe". Der Text wurde wohl übernommen ??? Also alles i.O.
Ich rechne damit, daß ich im Sommer Strom übrig haben werde. Ich möchte den nicht ins Netz einspeisen, sondern dazu benutzen, mein Brauchwasser aufzuwärmen. Dazu plane ich, entweder eine Heizstab oder eine Brauchwasserwärmepumpe einzusetzen. Wenn du deinen Adapter in diese Richtung erweiterst, wäre ich interessiert. Soweit ich weiß hat der Plenticore auch eine Schaltausgang, den man ggf. benutzen kann. Dazu ist aber wohl eine Freischaltung durch Kostal notwendig.
Noch eine schönen Abend.
-
@garbracht sagte in IOBroker Anbindung an einen Kostal Plenticore:
Wenn du deinen Adapter in diese Richtung erweiterst, wäre ich interessiert. Soweit ich weiß hat der Plenticore auch eine Schaltausgang, den man ggf. benutzen kann. Dazu ist aber wohl eine Freischaltung durch Kostal notwendig.
Das wird schwierig für mich, da ich so etwas nicht habe und ansehen / testen kann.
-
@homeuser sagte in IOBroker Anbindung an einen Kostal Plenticore:
Statt der auskommentierten Zeilen werden jetzt die darunter stehenden verwendet. Diese sind mir unklar (nicht der Code, sondern die Gedanken dahinter).
Das kann ich dir anhand der Zeilen erklären:
if(parseInt(curSoCPercentage) < parseInt(curMinSoC) + 8) { adapter.log.info('Disabling battery management because ' + curMinSoC + ' is too high for current SoC ' + curSoCPercentage); fc_above_70 = false; } else if(power_plus >= 2 * adapter.config.battery_capacity) { fc_above_70 = true; } else { fc_above_70 = false; }
Die erste Abfrage deaktiviert die Steuerung, wenn die aktuelle SoC des Speichers kleiner ist als die eingestellten minSoC + 8%. KOSTAL hat nämlich die Eigenart, dass das Management im Sommer sonst sofort greift und man mit Pech dann einen Verbrauchspeak hat, der aus dem Netz zieht. Daher 8% Puffer.
Die zweite Abfrage prüft, ob die Prognose für die verbleibende Tagesleistung mind. das Doppelte der Batteriekapazität ist. Wenn nicht, wird die Steuerung auch deaktiviert. In allen übrigen Fällen ebenso.
Bei dir müsste also die verbleibende Prognose > 2xSpeicherkapazität gewesen sein. -
@garbracht Da ich auch meine Wärmpumpe gerne dann laden will, wenn Strom verfügbar (oder sogar übrig) ist, habe ich etwas in der Richtung in Blockly aufgesetzt (Da ich zu lange selbst nicht mehr wirklich SW entwickelt habe, ist Blockly zufriedenstellender).
Es ist vorgesehen, dass die Wärmepumpe lädt, wenn das Wasser zu kalt wird (egal ob Strom da ist) oder wenn Strom da ist oder wenn Strom zu viel ist oder der Raum zu warm wird (weil unser uralter Trockner drin stehlt).Das geht recht problemlos mit Hilfe dies Adapters aber außerhalb vom Adapter selbst.
Bei Interesse kann ich es Dir schicken. -
@strathcole said in [IOBroker Anbindung an einen Kostal Plenticore](/post/73446
Die zweite Abfrage prüft, ob die Prognose für die verbleibende Tagesleistung mind. das Doppelte der Batteriekapazität ist. Wenn nicht, wird die Steuerung auch deaktiviert. In allen übrigen Fällen ebenso.
Bei dir müsste also die verbleibende Prognose > 2xSpeicherkapazität gewesen sein.Vom Code her verstanden, aber was ist der technische Gedanke dahinter? Den verstehe ich bislang nicht.
-
@homeuser sagte in IOBroker Anbindung an einen Kostal Plenticore:
@strathcole said in [IOBroker Anbindung an einen Kostal Plenticore](/post/73446
Die zweite Abfrage prüft, ob die Prognose für die verbleibende Tagesleistung mind. das Doppelte der Batteriekapazität ist. Wenn nicht, wird die Steuerung auch deaktiviert. In allen übrigen Fällen ebenso.
Bei dir müsste also die verbleibende Prognose > 2xSpeicherkapazität gewesen sein.Vom Code her verstanden, aber was ist der technische Gedanke dahinter? Den verstehe ich bislang nicht.
Also:
Kostal hat die Eigenheit, dass die Steuerung in beide Richtungen versagt. Nehmen wir an, du hast ein paar Tage Sonne und dann einen Tag mit mieser Prognose. Dann würde KOSTAL die Batterie erst einmal nicht laden, weil ja die vergangenen Tage gut waren.
Also schaue ich, dass die KOSTAL-Steuerung deaktiviert wird, wenn die Prognose (restlicher Tag) weniger ist als 2x die Batteriekapazität. Damit wollte ich sicherstellen, dass die Batterie nicht zu spät geladen wird.
Die andere Richtung kann ich nicht beeinflussen, also dass KOSTAL die Batterie nach mehreren Tagen schlechter Leistung bei einem Sonnentag sofort lädt.Optimieren könnte man sicherlich, dass man die Abschaltschwelle der Steuerung selbst festlegen kann, entweder als Faktor der Batteriekapazität oder als absoluten Wh Wert. Aber dazu werde ich erst einmal nicht kommen.
Warum es bei dir nicht gut funktioniert, verstehe ich aber bisher noch nicht. -
@strathcole said in IOBroker Anbindung an einen Kostal Plenticore:
Warum es bei dir nicht gut funktioniert, verstehe ich aber bisher noch nicht.
Ich habe gerade den Debugoutput eingeschaltet und bin Code und Output durchgegangen. Und siehe, die Ursache ich vermutlich simpel: Ich habe meine Speicherkapazität in kWh (5,12) anstatt Wh (5120) angegeben. Dadurch sind natürlich alle Vergleiche etc. Quatsch.
Mal schauen, was jetzt so in den nächsten Tagen passiert. Vielleicht lese ich mich auch weiter in den Code ein. Falls ich Vorschläge habe, melde ich mich. -
@homeuser sagte in IOBroker Anbindung an einen Kostal Plenticore:
@strathcole said in IOBroker Anbindung an einen Kostal Plenticore:
Warum es bei dir nicht gut funktioniert, verstehe ich aber bisher noch nicht.
Ich habe meine Speicherkapazität in kWh (5,12) anstatt Wh (5120) angegeben. Dadurch sind natürlich alle Vergleiche etc. Quatsch.
Das erklärt natürlich einiges.
-
@strathcole Hey, ich glaube das ist genau das was ich such
Habe eine OpenWB bzw. zwei und möchte wenn dort der Ladevorgang beginnt den Batteriespeicher auf z.B. Max 800W Erzeugung für die Dauer des Ladevorgangs drosseln sofern nicht PV-Laden aktiv ist. Die Holdingregister habe ich glaube ich alle soweit drin und mache auch schon eine Menge damit, aber das Thema Sofort Laden ohne den Speicher leerzusaugen ist aktuell meine Herausforderung. Kannst Du mir hier vielleicht mehr Infos geben? -
@bock-johannes sagte in IOBroker Anbindung an einen Kostal Plenticore:
Thema Sofort Laden ohne den Speicher leerzusaugen ist aktuell meine Herausforderung. Kannst Du mir hier vielleicht mehr Infos geben?
Damit der Akku nicht verwendet wird, reicht es idR dessen minSOC >= dem istSOC zu setzen.
Wenn dein Akku also z.B. 65% hat und der minSOC 5% ist und du das Auto laden willst, dann setzt du den minSOC auf 65% und der PV Akku sollte dann nicht entladen werden. -
@diginix Das ist die einfachste Variante ja. Dafür habe ich mir schon den Plenticore Adapter eingerichtet. Worauf ich aber eigentlich hinaus möchte ist, das wenn Sofort geladen wird für die Dauer des Ladevorgangs die Leistung aus dem Speicher auf 1000W z.B. begrenzt wird, ich denke dann hält der auch länger und umladen aus dem Speicher ist ja auch mit vielen Verlusten verbunden...
-
@diginix die Lösung habe ich schon etabliert und funktioniert super bisher
-
@bock-johannes Also, möglich ist das mit einem Skript.
Dafür muss aber im Wechselrichter die externe Batteriesteuerung via ModBus erlaubt und aktiviert sein (das kann nur der Installateur-Zugang).
Wenn das aktiv ist, kann man im Register
modbus.0.holdingRegisters.1078_Max_Discharge Pwr Lim
, also1078
die Entladebegrenzung in W setzen. Wichtig ist dann nur, dass man sie mindestens alle ~10 Sekunden neu setzt, da der WR einen Timeout hat und die Steuerung dann automatisch wieder deaktiviert (auf intern umstellt).Vorgehen wäre also:
Javascript schreiben, das- mit openWB-Adapter ausliest, ob der Lademodus "Sofortladen" ist und das Auto eingesteckt ist
- wenn ja, entsprechend alle paar Sekunden das Register
1078
auf1000
setzen - wenn nein, Wert wieder auf Standard zurücksetzen
-
Hallo, vielen Dank für diesen tollen Adapter. Ich habe seit Januar ebenfalls eine Anlage mit dem Kostal Plenticore plus 10. BYD Batterie ist auch geordert, kommt aber wohl erst Mitte des Jahres. Deinen Adpater habe ich schon miteingebunden und sehe Unmengen an Werten. Hier habe ich gerade auch schon eine Frage:
Unter den Objekten Forecast bei generated plant power today wird mir ein Wert von 2,2 KW angezeigt, in der Statistik im Wechselrichter stehen für heute aber nur 1,7 KW. Wird dort vielleicht schon der Verbrauch vom Wechselrichter abgezogen?
-
Hallo,
ich habe diesen post hier gefunden und habe die selben Warnmeldungen bei mir auch.
Konnte aber die Lösung nicht erlesen, darauf wurde nicht genau geantwortet oder ich hab es nicht verstanden.
Liegt das an der Modbus Einstellung?von burnit
@strathcole mit einem 20s polling interval sehe ich im log alle 20s eine Warnung vom Adapter
2021-04-15 17:16:39.187 - [33mwarn[39m: plenticore.0 (9754) Requesting settings - [{"moduleid":"devices:local","processdataids":["Dc_P","DigitalIn","EM_State","HomeBat_P","HomeGrid_P","HomeOwn_P","HomePv_P","Home_P","Inverter:State","LimitEvuAbs"]},{"moduleid":"devices:local:ac","processdataids":["CosPhi","Frequency","L1_I","L1_P","L1_U","L2_I","L2_P","L2_U","L3_I","L3_P","L3_U","P","Q","S"]},{"moduleid":"devices:local:battery","processdataids":["Cycles","SoC","I","U","P"]},{"moduleid":"devices:local:pv1","processdataids":["I","U","P"]},{"moduleid":"devices:local:pv2","processdataids":["I","U","P"]},{"moduleid":"scb:export","processdataids":["PortalConActive"]},{"moduleid":"scb:statistic:EnergyFlow","processdataids":["Statistic:Autarky:Day","Statistic:Autarky:Month","Statistic:Autarky:Total","Statistic:Autarky:Year","Statistic:EnergyHome:Day","Statistic:EnergyHome:Month","Statistic:EnergyHome:Total","Statistic:EnergyHome:Year","Statistic:EnergyHomeBat:Day","Statistic:EnergyHomeBat:Month","Statistic:EnergyHomeBat:Total","Statistic:EnergyHomeBat:Year","Statistic:EnergyHomeGrid:Day","Statistic:EnergyHomeGrid:Month","Statistic:EnergyHomeGrid:Total","Statistic:EnergyHomeGrid:Year","Statistic:EnergyHomePv:Day","Statistic:EnergyHomePv:Month","Statistic:EnergyHomePv:Total","Statistic:EnergyHomePv:Year","Statistic:OwnConsumptionRate:Day","Statistic:OwnConsumptionRate:Month","Statistic:OwnConsumptionRate:Total","Statistic:OwnConsumptionRate:Year","Statistic:Yield:Day","Statistic:Yield:Month","Statistic:Yield:Total","Statistic:Yield:Year","Statistic:CO2Saving:Day","Statistic:CO2Saving:Month","Statistic:CO2Saving:Year","Statistic:CO2Saving:Total"]}]) failed with code 503: {"message":"internal communication error, try again later"}
Liegt das evtl. an meiner alten Firmware-Version oder ist das normal? Ich kann nicht erkennen, dass es irgendwelche Fehler in den Datenpunkten gäbe.
-
@strathcole Erstmal vielen Dank für den Adapter, habe deswegen gleich mal wieder iobroker aktiviert.
Da man aktuell leider weder den KSEM noch TQEM kaufen kann, lasse ich den Plenticore mit der baugleichen energybase laufen. Entladen des HVS hat via energybase geklappt, nur das Laden nicht. Deswegen will ich via Modbus das Laden selber steuern. Leider sind meine Versuche über Register 1026 oder 1034 nicht erfolgreich gewesen, jegliche Werte werden sofort wieder genullt. Muss ich weitere Register setzen, damit man die Ladung über Modbus "erzwingen" kann? Über die Digitaleingänge konnte ich laden mit 25% und 50% erzwingen, mehr ging nicht.
UI-Version 01.18.05255 / MC-Version 01.47 / IOC-Version 01.45 / HW-Version 0200
Installateurscode habe ich und kann dementsprechend die Einstellungen im Plenticore ändern. Würde mich über Erfahrungen mit Modbus-Steuerung freuen.
-
@jost-1 Du musst via Installateurscode in den Einstellungen die "Externe Steuerung" via Modbus aktivieren. Sobald diese aktiviert ist, musst du mindestens alle 10-30 Sekunden den entsprechenden Modbus Wert setzen, sonst setzt der Kostal wieder auf interne Steuerung zurück.
-
@strathcole Hm, so habe ich das auch probiert.
Also FC 16, UID 71, ab Adresse 1034 2 Register mit 0;49992 (-200[W]) beschrieben, wurde ohne Fehler quittiert aber praktisch sofort genullt. Parallel habe ich sekündlich 1026-1036 gepollt, die waren alle 0
Das Register 1080 wurde vorher abgefragt, das steht auf 2 für externe Modbus-Steuerung.
Wenn ich ab Adresse 1044 2 Register mit 0;17086 beschreibe, bleibt der max.SoC wie gewollt einige Zeit bei 95% stehen.
Was mich wundert: Als die Entladung via energybase lief, waren die Register ab 1032 alle gefüllt. Daher meine Vermutung ob man evtl. weitere Register setzen muss?