NEWS
IOBroker Anbindung an einen Kostal Plenticore
-
@StrathCole Nachdem ich bisher den ModBus Adapter erfolgreich eingesetzt habe, bin ich gestern auf deinen Kostal Plenticore API Adapter gestoßen. Ich habe ihn installiert und es hat alles problemlos geklappt. Danke für den tollen Adapter !!! Die Daten stelle ich mit der iQontrol Vis und Graphana dar.
Mit dem Wetter habe ich eine Schwierigkeit: Unter forecast / city bekomme ich "sophienhoehe" angezeigt.
Wie kann ich meinen Standort " Bad Harzburg" eingeben? -
@homeuser sagte in IOBroker Anbindung an einen Kostal Plenticore:
Habe die Info doch gefunden im Wechselrichter. Die Info dort ist Batteriestatus Normal
Ja, der aktuelle Status sagt nicht (mehr) viel aus, wie der Status die Tage davor war.
@homeuser sagte in IOBroker Anbindung an einen Kostal Plenticore:
Kann der Speicher überhaupt in Ruhemodus gewesen sein, wenn der Verlauf am Tag davor so war?
Ja. Kann sein, denn der Ruhemodus wird nach bestimmten (unbekannten) Regeln ein- und ausgeschaltet. Es gibt zwar grobe Regeln, die man in der Anleitung vom WR lesen kann, aber wann genau welcher Ruhemodus aktiv wird, ist schwer zu sagen. Es kann aber durchaus sein, dass es je nach Wetter mehrere Tage mit etwas Sonne braucht, bis er wieder aus ist.
-
@garbracht sagte in IOBroker Anbindung an einen Kostal Plenticore:
@StrathCole Nachdem ich bisher den ModBus Adapter erfolgreich eingesetzt habe, bin ich gestern auf deinen Kostal Plenticore API Adapter gestoßen. Ich habe ihn installiert und es hat alles problemlos geklappt. Danke für den tollen Adapter !!!
Freut mich
Mit dem Wetter habe ich eine Schwierigkeit: Unter forecast / city bekomme ich "sophienhoehe" angezeigt.
Wie kann ich meinen Standort " Bad Harzburg" eingeben?Leider gar nicht. Dieser Standort wird nur informationshalber ausgegeben und ist der, der anhand der Webseite Kachelmannwetter und deiner Koordinaten, die du im ioBroker hinterlegt hast, als Basis genommen wird. Du kannst das auch prüfen, indem du direkt auf die Kachelmann Seite gehst und dort deinen Ort angibst.
Diese Info wird aber nur für Kachelmann genutzt und nicht für die Übrigen Forecast-Quellen. Dort wird dein Standort nach Länge und Breite genutzt. -
@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.