Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. IOBroker Anbindung an einen Kostal Plenticore

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    18
    1
    681

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

IOBroker Anbindung an einen Kostal Plenticore

Geplant Angeheftet Gesperrt Verschoben Hardware
1.3k Beiträge 83 Kommentatoren 458.3k Aufrufe 72 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • H HomeUser

    @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.

    StrathColeS Offline
    StrathColeS Offline
    StrathCole
    schrieb am zuletzt editiert von
    #1185

    @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.

    SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

    1 Antwort Letzte Antwort
    0
    • StrathColeS StrathCole

      Ich habe die Steuerung auch einmal testweise aktiviert. Es funktioniert tatsächlich. Ich hatte noch 40% Ladung in der Batterie und eine Entladung von 700W. Habe dann die externe Steuerung aktiviert und via Modbus das Register 1040 auf 50W gesetzt. Wenige Sekunden später sank die Batterieentladung auf 48W und der Rest wurde aus dem Netz bezogen.

      Ich habe dann mit dem o.g. Trick wieder auf interne Steuerung gestellt und schon hat der Kostal den Registerwert wieder auf ~4750W gesetzt.

      Wichtig ist wohl: Auch wenn man die Steuerung aktiviert und den Wert setzt, schwankt dieser etwas. Habe im Test auf 100W gesetzt und der ModBus Wert schwankte anschließend um ein paar W nach oben und unten.

      B Offline
      B Offline
      Bock.Johannes
      schrieb am zuletzt editiert von
      #1186

      @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?

      DiginixD StrathColeS 2 Antworten Letzte Antwort
      0
      • B Bock.Johannes

        @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?

        DiginixD Offline
        DiginixD Offline
        Diginix
        schrieb am zuletzt editiert von
        #1187

        @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.

        ..:: So long! Tom ::..

        NUC7i3 (Ubuntu Proxmox VM) | Echo Dots 2+3. Gen | Xiaomi Sensoren | Mi Robot 1S | Yeelight | Sonoff | Shelly | H801 RGB | Gosund SP1 | NodeMCU+ESP32 | Kostal Plenticore PV+BYD | openWB

        B 2 Antworten Letzte Antwort
        0
        • DiginixD Diginix

          @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.

          B Offline
          B Offline
          Bock.Johannes
          schrieb am zuletzt editiert von
          #1188

          @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...

          1 Antwort Letzte Antwort
          0
          • DiginixD Diginix

            @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.

            B Offline
            B Offline
            Bock.Johannes
            schrieb am zuletzt editiert von
            #1189

            @diginix die Lösung habe ich schon etabliert und funktioniert super bisher

            1 Antwort Letzte Antwort
            0
            • B Bock.Johannes

              @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?

              StrathColeS Offline
              StrathColeS Offline
              StrathCole
              schrieb am zuletzt editiert von
              #1190

              @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, also 1078 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

              1. mit openWB-Adapter ausliest, ob der Lademodus "Sofortladen" ist und das Auto eingesteckt ist
              2. wenn ja, entsprechend alle paar Sekunden das Register 1078 auf 1000 setzen
              3. wenn nein, Wert wieder auf Standard zurücksetzen

              SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

              J 1 Antwort Letzte Antwort
              0
              • N Offline
                N Offline
                Neo77
                schrieb am zuletzt editiert von
                #1191

                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?

                1 Antwort Letzte Antwort
                0
                • D Offline
                  D Offline
                  Deven2k
                  schrieb am zuletzt editiert von
                  #1192

                  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 - warn: 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.

                  1 Antwort Letzte Antwort
                  0
                  • StrathColeS StrathCole

                    @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, also 1078 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

                    1. mit openWB-Adapter ausliest, ob der Lademodus "Sofortladen" ist und das Auto eingesteckt ist
                    2. wenn ja, entsprechend alle paar Sekunden das Register 1078 auf 1000 setzen
                    3. wenn nein, Wert wieder auf Standard zurücksetzen
                    J Offline
                    J Offline
                    Jost 1
                    schrieb am zuletzt editiert von
                    #1193

                    @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.

                    Kostal Plenticore 10 / BYD HVS 12.8 / Victron EMS / energybase / 15.8 kWp

                    StrathColeS 1 Antwort Letzte Antwort
                    0
                    • J Jost 1

                      @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.

                      StrathColeS Offline
                      StrathColeS Offline
                      StrathCole
                      schrieb am zuletzt editiert von
                      #1194

                      @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.

                      SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

                      J 1 Antwort Letzte Antwort
                      0
                      • StrathColeS StrathCole

                        @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.

                        J Offline
                        J Offline
                        Jost 1
                        schrieb am zuletzt editiert von
                        #1195

                        @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 :man-shrugging:

                        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?

                        Kostal Plenticore 10 / BYD HVS 12.8 / Victron EMS / energybase / 15.8 kWp

                        StrathColeS 1 Antwort Letzte Antwort
                        0
                        • J Jost 1

                          @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 :man-shrugging:

                          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?

                          StrathColeS Offline
                          StrathColeS Offline
                          StrathCole
                          schrieb am zuletzt editiert von
                          #1196

                          @jost-1 Ich denke die Register sind falsch. Schau mal bei Register 1078.

                          SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

                          J 1 Antwort Letzte Antwort
                          0
                          • StrathColeS StrathCole

                            @jost-1 Ich denke die Register sind falsch. Schau mal bei Register 1078.

                            J Offline
                            J Offline
                            Jost 1
                            schrieb am zuletzt editiert von
                            #1197

                            @strathcole Ja, die Register ab 1078 sind Readonly und geben Auskunft über die aktuell verfügbare Lade/Entlade-Leistung. Steuern kann ich ja darüber nichts. Ich habe parallel mal in den FHEM-Adapter geschaut, da sind die Adressen ab 1024 auch für die Setpoints reserviert.

                            attr WR_1 obj-h1024-len 1
                            attr WR_1 obj-h1024-reading Battery_Charge_AC_P_Setpoint
                            attr WR_1 obj-h1024-set 1
                            attr WR_1 obj-h1025-len 1
                            attr WR_1 obj-h1025-reading Battery_P_ScaleFactor
                            attr WR_1 obj-h1026-reading Battery_Charge_AC_P_SetpointAbs
                            attr WR_1 obj-h1026-set 1
                            attr WR_1 obj-h1028-reading Battery_Charge_DC_I_SetpointRel
                            attr WR_1 obj-h1028-set 1
                            attr WR_1 obj-h1030-reading Battery_Charge_AC_P_SetpointRel
                            attr WR_1 obj-h1030-set 1
                            attr WR_1 obj-h1032-reading Battery_Charge_DC_I_SetpointAbs
                            attr WR_1 obj-h1032-set 1
                            attr WR_1 obj-h1034-reading Battery_Charge_DC_P_SetpointAbs
                            attr WR_1 obj-h1034-set 1
                            attr WR_1 obj-h1036-reading Battery_Charge_DC_P_SetpointRel
                            attr WR_1 obj-h1036-set 1
                            attr WR_1 obj-h1038-reading Battery_MaxChargePowerLimitAbs
                            attr WR_1 obj-h1038-set 1

                            Ich bin nun am Überlegen, ob man zum 1034 auch den 1038 setzen muss...

                            Kostal Plenticore 10 / BYD HVS 12.8 / Victron EMS / energybase / 15.8 kWp

                            StrathColeS 1 Antwort Letzte Antwort
                            0
                            • J Jost 1

                              @strathcole Ja, die Register ab 1078 sind Readonly und geben Auskunft über die aktuell verfügbare Lade/Entlade-Leistung. Steuern kann ich ja darüber nichts. Ich habe parallel mal in den FHEM-Adapter geschaut, da sind die Adressen ab 1024 auch für die Setpoints reserviert.

                              attr WR_1 obj-h1024-len 1
                              attr WR_1 obj-h1024-reading Battery_Charge_AC_P_Setpoint
                              attr WR_1 obj-h1024-set 1
                              attr WR_1 obj-h1025-len 1
                              attr WR_1 obj-h1025-reading Battery_P_ScaleFactor
                              attr WR_1 obj-h1026-reading Battery_Charge_AC_P_SetpointAbs
                              attr WR_1 obj-h1026-set 1
                              attr WR_1 obj-h1028-reading Battery_Charge_DC_I_SetpointRel
                              attr WR_1 obj-h1028-set 1
                              attr WR_1 obj-h1030-reading Battery_Charge_AC_P_SetpointRel
                              attr WR_1 obj-h1030-set 1
                              attr WR_1 obj-h1032-reading Battery_Charge_DC_I_SetpointAbs
                              attr WR_1 obj-h1032-set 1
                              attr WR_1 obj-h1034-reading Battery_Charge_DC_P_SetpointAbs
                              attr WR_1 obj-h1034-set 1
                              attr WR_1 obj-h1036-reading Battery_Charge_DC_P_SetpointRel
                              attr WR_1 obj-h1036-set 1
                              attr WR_1 obj-h1038-reading Battery_MaxChargePowerLimitAbs
                              attr WR_1 obj-h1038-set 1

                              Ich bin nun am Überlegen, ob man zum 1034 auch den 1038 setzen muss...

                              StrathColeS Offline
                              StrathColeS Offline
                              StrathCole
                              schrieb am zuletzt editiert von
                              #1198

                              @jost-1 Wäre zumindest nicht unlogisch.

                              SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

                              1 Antwort Letzte Antwort
                              0
                              • H HomeUser

                                @gjo said in IOBroker Anbindung an einen Kostal Plenticore:

                                @homeuser
                                Genau sowas habe ich mir vorgestellt. Wenn du das teilen könntest …
                                Vielen Dank
                                Gruß

                                Disclaimer und Erklärung:
                                Ich bin kein Javascript-Entwickler. Vielleicht sind manche Dinge daher sehr unschön gelöst. Außerdem ist es geschrieben nach dem Motto: Hauptsache es klappt.
                                UpdateJson(): Der erste Teil der Schleife erstellt ein Json aus den Forecast-Daten. Der zweite konsolidiert das etwas, um eine leicht verständliche Ansicht für den Rest der Familie zu haben.
                                UpdateFreeEnergy(): Berechnet wie viel Strom im Moment gerade übrig ist. Der "Moment" sind die letzten 10 Minuten, wobei die letzten drei doppelt gewichtet werden.

                                Ich habe mal alles drin gelassen, falls es nützlich ist. Wenn nicht, ist es ja einfach zu löschen :-)

                                schedule ("*/1 * * * *", UpdatePlenticore)
                                
                                function UpdatePlenticore() {
                                    // free energy must be updated first because it is used by UpdateJson()
                                    UpdateFreeEnergy();
                                    UpdateJson();
                                }
                                
                                
                                function UpdateJson() {
                                    let data = [];
                                    let consolidatedData = [];
                                    let time2;
                                    let power;
                                    let generated;
                                    let c = 0; // used to group always 3 hours in one
                                    let timeNow = new Date(Date.now());
                                    let consolidatedPower = 0;
                                    let consolidatedStars = 0;
                                    let consolidatedTimeEnd = timeNow.getHours(); // default: if no full period is consolidated, start with now
                                
                                    // set value for now (based on the calculated currently free energy)
                                    let freeEnergy = getState('0_userdata.0.Plenticore.FreeEnergy').val;
                                    consolidatedData.push({'time' : 'jetzt','power' : Math.round(freeEnergy) + " Wh", 'stars' : ((freeEnergy-200)/500)}); 
                                
                                    // Day 1
                                    data.length = 0;
                                    for (let i = 1; i <= 20; i++) {
                                        let forecastHour = "plenticore.0.forecast.day1.power." + i + "h"
                                
                                        // Day 1
                                        if (existsState(forecastHour + '.time')) {
                                            let time  = new Date(getState(forecastHour + '.time').val);
                                
                                            // convert hourly forecast to JSON
                                            time2 = time.toLocaleTimeString();
                                            power = getState(forecastHour + '.power').val;
                                            if (existsState(forecastHour + '.generated')) {
                                                generated = getState(forecastHour + '.generated').val;
                                            } else {
                                                generated = 0;
                                            }
                                            data.push({'time' : time2,'power' : Math.round(power), 'generated' : Math.round(generated)});
                                
                                            // consolidate to timespan and quality (JSON)
                                            //
                                            // check if the period is in the future (don't show forecast for past hours)
                                            if (time.getHours() > timeNow.getHours()) {
                                
                                                consolidatedPower += power;
                                                if ( (c % 3) == 2) {
                                                    consolidatedTimeEnd = time.getHours();
                                                    time2 = (time.getHours()-2) + " - " + consolidatedTimeEnd + " Uhr";
                                                    consolidatedStars = Math.round(consolidatedPower / 2000); // translate power in stars
                                                    consolidatedData.push({'time' : time2,'power' : Math.round(consolidatedPower) + " Wh", 'stars' : consolidatedStars}); 
                                                    consolidatedPower = 0; // rest fo next timespan
                                                }
                                                c++;
                                            }
                                        }
                                    }
                                
                                    // check if there a partially consolidated period pending
                                    if ( (c % 3) == 1) { 
                                        time2 = (consolidatedTimeEnd + 1) + " Uhr";
                                
                                        consolidatedStars = Math.round(consolidatedPower / (2000/3)); // translate power in stars; use number of remaining items as factor
                                        consolidatedData.push({'time' : time2,'power' : Math.round(consolidatedPower) + " Wh", 'stars' : consolidatedStars}); 
                                    } else if ( (c % 3) == 2) { 
                                        time2 = (consolidatedTimeEnd + 1) + " - " + (consolidatedTimeEnd + 2) + " Uhr";
                                
                                        consolidatedStars = Math.round(consolidatedPower / ((2000*2)/3)); // translate power in stars; use number of remaining items as factor
                                        consolidatedData.push({'time' : time2,'power' : Math.round(consolidatedPower) + " Wh", 'stars' : consolidatedStars}); 
                                    }
                                
                                    setState('0_userdata.0.Plenticore.ForecastDay1', JSON.stringify(data), true);
                                    setState('0_userdata.0.Plenticore.ConsolidatedDay1', JSON.stringify(consolidatedData), true);
                                
                                    // Day 2
                                    c = 0; // used to group always 3 hours in one
                                    consolidatedPower = 0;
                                    consolidatedStars = 0;
                                    consolidatedTimeEnd = 0;
                                
                                    data.length = 0;
                                    consolidatedData.length = 0;
                                
                                    for (let i = 1; i <= 20; i++) {
                                        let forecastHour = "plenticore.0.forecast.day2.power." + i + "h"
                                
                                        // Day 1
                                        if (existsState(forecastHour + '.time')) {
                                            let time  = new Date(getState(forecastHour + '.time').val);
                                
                                            // convert hourly forecast to JSON
                                            time2 = time.toLocaleTimeString();
                                            power = getState(forecastHour + '.power').val;
                                            data.push({'time' : time2,'power' : Math.round(power)})
                                
                                            // consolidate to timespan and quality (JSON)
                                            consolidatedPower += power;
                                            if ( (c % 3) == 2) {
                                                consolidatedTimeEnd = time.getHours();
                                                time2 = (time.getHours()-2) + " - " + consolidatedTimeEnd + " Uhr";
                                                consolidatedStars = Math.round(consolidatedPower / 2000); // translate power in stars
                                                consolidatedData.push({'time' : time2,'power' : Math.round(consolidatedPower) + " Wh", 'stars' : consolidatedStars}); 
                                                consolidatedPower = 0; // rest fo next timespan
                                            }
                                            c++;
                                        }
                                    }
                                    if ( (c % 3) != 0) { // not all hours are pushed to the consolidation
                                        time2 = (consolidatedTimeEnd + 1) + " - " + (consolidatedTimeEnd + 1 + (c % 3) ) + " Uhr";
                                
                                        consolidatedStars = Math.round(consolidatedPower / 2000); // translate power in stars
                                        consolidatedData.push({'time' : time2,'power' : Math.round(consolidatedPower) + " Wh", 'stars' : consolidatedStars}); 
                                        consolidatedPower = 0; // rest fo next timespan
                                    }
                                
                                    setState('0_userdata.0.Plenticore.ForecastDay2', JSON.stringify(data), true);
                                    setState('0_userdata.0.Plenticore.ConsolidatedDay2', JSON.stringify(consolidatedData), true);
                                
                                }
                                
                                // Save free watt of past N minutes; calc average
                                function UpdateFreeEnergy() {
                                    let freeEnergy = 0;
                                    let batterySoc = 0;
                                    const pastMinutes = 10;
                                
                                    // with forst call, create the array are set values to 0
                                    if ( typeof UpdateFreeEnergy.pastValues == 'undefined' ) {
                                            UpdateFreeEnergy.pastIndex = 0;
                                            UpdateFreeEnergy.pastValues= [];    
                                
                                        for (let i = 0; i < pastMinutes; i++) {
                                            UpdateFreeEnergy.pastValues[i] = 0;
                                        }
                                    }
                                
                                    // calculate the current free value
                                    freeEnergy = getState('plenticore.0.devices.local.Pv_P').val;
                                    freeEnergy -= getState('plenticore.0.devices.local.Home_P').val;
                                
                                    if (freeEnergy < 0) {
                                        freeEnergy = 0;
                                    }
                                    // put into array
                                    UpdateFreeEnergy.pastValues[UpdateFreeEnergy.pastIndex] = freeEnergy;
                                
                                    // calc average of past values
                                    for (let i = 0; i < pastMinutes; i++) {
                                        //for the 3 most current values double the impact
                                        if ( (i == UpdateFreeEnergy.pastIndex) || (i == (UpdateFreeEnergy.pastIndex + pastMinutes - 1) % pastMinutes)  || (i == (UpdateFreeEnergy.pastIndex + pastMinutes - 2) % pastMinutes) ){
                                            freeEnergy = freeEnergy + 2 * UpdateFreeEnergy.pastValues[i];
                                        } else {
                                            freeEnergy = freeEnergy + UpdateFreeEnergy.pastValues[i];
                                        }
                                    }
                                    freeEnergy = freeEnergy / (pastMinutes + 3);  // +3 for the doubled impact of the the 3 most current values
                                
                                    // if the battery is below the defined minimum, the battery has priority; so there is no free energy
                                    // recommendation: 
                                    //    Use same value as in the settings of the plenticore adapter for "minimaler SoC zur Aktivierung des Batteriemanagements".
                                    //    The plenticore adapter stops charging a little before the limit. So the value should be 2-3% lower.
                                    batterySoc = getState('plenticore.0.devices.local.battery.SoC').val;
                                    if (batterySoc <= 12) {
                                        freeEnergy = 0;
                                    }
                                
                                    // save calculated average 
                                    setState('0_userdata.0.Plenticore.FreeEnergy', freeEnergy, true);
                                
                                    // inc counter for cyclic buffer
                                    UpdateFreeEnergy.pastIndex = (UpdateFreeEnergy.pastIndex + 1) % pastMinutes;
                                }
                                
                                G Offline
                                G Offline
                                gjo
                                schrieb am zuletzt editiert von
                                #1199

                                @homeuser bei mir wird schin ein paar tage nun kein forecast mehr dargestellt.

                                Ich nutze den
                                yr.no Adapter in V5.00 (wobei es vor dem Update auf die letzte Verson schon nicht mehr ging
                                Plenticore Adapter V2.2.1

                                Funktioniert es be dir noch bzw. hast du Änderunge machen müssen damit es weiterhin funktioneirt?

                                Gruß

                                H 1 Antwort Letzte Antwort
                                0
                                • G gjo

                                  @homeuser bei mir wird schin ein paar tage nun kein forecast mehr dargestellt.

                                  Ich nutze den
                                  yr.no Adapter in V5.00 (wobei es vor dem Update auf die letzte Verson schon nicht mehr ging
                                  Plenticore Adapter V2.2.1

                                  Funktioniert es be dir noch bzw. hast du Änderunge machen müssen damit es weiterhin funktioneirt?

                                  Gruß

                                  H Offline
                                  H Offline
                                  HomeUser
                                  schrieb am zuletzt editiert von
                                  #1200

                                  @gjo Beim mir geht es ohne Probleme. Auch keine vorübergehenden Probleme in den vergangene Tagen.

                                  G 1 Antwort Letzte Antwort
                                  0
                                  • Bernd 0B Offline
                                    Bernd 0B Offline
                                    Bernd 0
                                    schrieb am zuletzt editiert von
                                    #1201

                                    Hallo,
                                    wenn ich den DynamicSoc Wert auf true oder auch false setzen möchte, bekomme ich die folgende Meldung:

                                    	PUT to settings devices:local / Battery:DynamicSoc:Enable (true) resulted in code 500: {"message":"Internal Server Error"}
                                    

                                    Ich habe den Datenpunkt
                                    plenticore.0.devices.local.battery.DynamicSoc und
                                    plenticore.0.devices.local.battery.SmartBatteryControl
                                    so verstanden, wie in den Settings. Habe ich hier einen Denkfehler?

                                    6eb59eb6-1ff8-4e10-986c-1c8b80284b31-image.png

                                    StrathColeS 1 Antwort Letzte Antwort
                                    0
                                    • H HomeUser

                                      @gjo Beim mir geht es ohne Probleme. Auch keine vorübergehenden Probleme in den vergangene Tagen.

                                      G Offline
                                      G Offline
                                      gjo
                                      schrieb am zuletzt editiert von
                                      #1202

                                      @homeuser ok, bei mir sind alle forecast Werte aus dem Plenticore Adapter verschwunden.
                                      Sprich die Verhersagewerte tauchen nicht mehr auf.

                                      plenticre forecast.JPG

                                      192d5445-a91c-4ccf-b0d3-e33229f3d495-grafik.png

                                      Im Log kann ich leider keine Fehler finden:

                                      2022-02-15 00:00:08.277 - info: plenticore.0 (940) Delete object forecast.day1.power.1h.generated
                                      2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.2h.generated
                                      2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.3h.generated
                                      2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.4h.generated
                                      2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.5h.generated
                                      2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.6h.generated
                                      2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.7h.generated
                                      2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.8h.generated
                                      2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.9h.generated
                                      2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.10h.generated
                                      2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.11h.generated
                                      2022-02-15 00:00:08.324 - info: plenticore.0 (940) Forecast data file written to disk.
                                      2022-02-15 00:00:08.325 - info: plenticore.0 (940) Power generation statistics written to disk.
                                      2022-02-15 00:00:08.325 - info: plenticore.0 (940) Power consumption statistics written to disk.
                                      2022-02-15 00:00:08.325 - info: plenticore.0 (940) JSON states written to disk.
                                      2022-02-15 00:03:14.185 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                      2022-02-15 00:03:14.195 - info: plenticore.0 (940) calcMinSoC for day 1.
                                      2022-02-15 00:03:14.196 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                      2022-02-15 00:03:14.280 - info: plenticore.0 (940) calcMinSoC for day 2.
                                      2022-02-15 00:18:14.186 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                      2022-02-15 00:18:14.194 - info: plenticore.0 (940) calcMinSoC for day 1.
                                      2022-02-15 00:18:14.195 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                      2022-02-15 00:18:14.283 - info: plenticore.0 (940) calcMinSoC for day 2.
                                      2022-02-15 00:33:14.187 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                      2022-02-15 00:33:14.198 - info: plenticore.0 (940) calcMinSoC for day 1.
                                      2022-02-15 00:33:14.199 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                      2022-02-15 00:33:14.289 - info: plenticore.0 (940) calcMinSoC for day 2.
                                      2022-02-15 00:48:14.187 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                      2022-02-15 00:48:14.205 - info: plenticore.0 (940) calcMinSoC for day 1.
                                      2022-02-15 00:48:14.206 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                      2022-02-15 00:48:14.303 - info: plenticore.0 (940) calcMinSoC for day 2.

                                      Was läuft da wohl schief???

                                      H StrathColeS 2 Antworten Letzte Antwort
                                      0
                                      • G gjo

                                        @homeuser ok, bei mir sind alle forecast Werte aus dem Plenticore Adapter verschwunden.
                                        Sprich die Verhersagewerte tauchen nicht mehr auf.

                                        plenticre forecast.JPG

                                        192d5445-a91c-4ccf-b0d3-e33229f3d495-grafik.png

                                        Im Log kann ich leider keine Fehler finden:

                                        2022-02-15 00:00:08.277 - info: plenticore.0 (940) Delete object forecast.day1.power.1h.generated
                                        2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.2h.generated
                                        2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.3h.generated
                                        2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.4h.generated
                                        2022-02-15 00:00:08.293 - info: plenticore.0 (940) Delete object forecast.day1.power.5h.generated
                                        2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.6h.generated
                                        2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.7h.generated
                                        2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.8h.generated
                                        2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.9h.generated
                                        2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.10h.generated
                                        2022-02-15 00:00:08.294 - info: plenticore.0 (940) Delete object forecast.day1.power.11h.generated
                                        2022-02-15 00:00:08.324 - info: plenticore.0 (940) Forecast data file written to disk.
                                        2022-02-15 00:00:08.325 - info: plenticore.0 (940) Power generation statistics written to disk.
                                        2022-02-15 00:00:08.325 - info: plenticore.0 (940) Power consumption statistics written to disk.
                                        2022-02-15 00:00:08.325 - info: plenticore.0 (940) JSON states written to disk.
                                        2022-02-15 00:03:14.185 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                        2022-02-15 00:03:14.195 - info: plenticore.0 (940) calcMinSoC for day 1.
                                        2022-02-15 00:03:14.196 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                        2022-02-15 00:03:14.280 - info: plenticore.0 (940) calcMinSoC for day 2.
                                        2022-02-15 00:18:14.186 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                        2022-02-15 00:18:14.194 - info: plenticore.0 (940) calcMinSoC for day 1.
                                        2022-02-15 00:18:14.195 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                        2022-02-15 00:18:14.283 - info: plenticore.0 (940) calcMinSoC for day 2.
                                        2022-02-15 00:33:14.187 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                        2022-02-15 00:33:14.198 - info: plenticore.0 (940) calcMinSoC for day 1.
                                        2022-02-15 00:33:14.199 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                        2022-02-15 00:33:14.289 - info: plenticore.0 (940) calcMinSoC for day 2.
                                        2022-02-15 00:48:14.187 - info: plenticore.0 (940) Read forecast data before calcMinSoC.
                                        2022-02-15 00:48:14.205 - info: plenticore.0 (940) calcMinSoC for day 1.
                                        2022-02-15 00:48:14.206 - info: plenticore.0 (940) Using forecast of day 1 for MinSoC calculation.
                                        2022-02-15 00:48:14.303 - info: plenticore.0 (940) calcMinSoC for day 2.

                                        Was läuft da wohl schief???

                                        H Offline
                                        H Offline
                                        HomeUser
                                        schrieb am zuletzt editiert von
                                        #1203

                                        @gjo Habe ich aus dem Bauch heraus auch keine Idee. @StrathCole : Eine Idee, wie sich das aus der Ferne am leichtesten eingrenzen lässt?

                                        1 Antwort Letzte Antwort
                                        0
                                        • Bernd 0B Bernd 0

                                          Hallo,
                                          wenn ich den DynamicSoc Wert auf true oder auch false setzen möchte, bekomme ich die folgende Meldung:

                                          	PUT to settings devices:local / Battery:DynamicSoc:Enable (true) resulted in code 500: {"message":"Internal Server Error"}
                                          

                                          Ich habe den Datenpunkt
                                          plenticore.0.devices.local.battery.DynamicSoc und
                                          plenticore.0.devices.local.battery.SmartBatteryControl
                                          so verstanden, wie in den Settings. Habe ich hier einen Denkfehler?

                                          6eb59eb6-1ff8-4e10-986c-1c8b80284b31-image.png

                                          StrathColeS Offline
                                          StrathColeS Offline
                                          StrathCole
                                          schrieb am zuletzt editiert von
                                          #1204

                                          @bernd-0 Ist es denn ein normeler Plenticore und kein Piko Wechselrichter? Gibt es in der Oberfläche des Wechselrichters die entsprechenden Einstellungen?

                                          SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

                                          Bernd 0B 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          712

                                          Online

                                          32.5k

                                          Benutzer

                                          81.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe