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

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

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

IOBroker Anbindung an einen Kostal Plenticore

Geplant Angeheftet Gesperrt Verschoben Hardware
1.3k Beiträge 83 Kommentatoren 452.7k 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.
  • StrathColeS Offline
    StrathColeS Offline
    StrathCole
    schrieb am zuletzt editiert von StrathCole
    #22

    Hallo zusammen,

    ich bin noch neu hier, habe aber einige Threads durchgelesen.
    Da ich selbst gerade dabei bin, meine Haussteuerung mit ioBroker aufzumöbeln und wir kürzlich eine PV-Anlage mit BYD-Speicher und Plenticore WR bekommen haben, habe ich nach einer vernünftigen Lösung gesucht.

    Wir in anderen Foren auch zu lesen ist, funktioniert z. B. die "Dynamische SoC-Regelung" nur mäßig und es fehlt die Möglichkeit, via ModBus Werte zu setzen.
    Also habe ich mich dran gesetzt, meinen ersten Adapter zu entwickeln, der die interne Web-API (kein Screenscraping) des Plenticore nutzt.

    Ich selbst habe einen Plenticore Plus 10, weiß also nicht, ob die API bei allen Modellen der Reihe identisch ist und somit der Adapter überhaupt funktioniert. Für Rückmeldungen wär ich daher dankbar :-)

    Falls jemand Interesse hat, hier das Ergebnis:
    https://github.com/StrathCole/iobroker.plenticore

    Liebe Grüße
    Marius aka StrathCole

    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

    DiginixD Marco LaserM 2 Antworten Letzte Antwort
    2
    • StrathColeS Offline
      StrathColeS Offline
      StrathCole
      schrieb am zuletzt editiert von StrathCole
      #23

      Da ich mit der Einstellung "dynamisch" für den MinSoC im Plenticore für die BYD Box absolut nicht zufrieden war (teilweise auf 50% gesetzt, obwohl es sonnig wurde und die Batterie hätte auch bei einem Startwert von 0% voll geladen werden können), habe ich in Verbindung mit dem o. g. Plenticore-Adapter und Weatherunderground-Adapter ein Skript geschrieben, das den MinSoC je nach vergangenem Stromverbrauch (tagsüber), prognostizierter PV-Leistung und Wolkenprognose anpasst und zwischen 0 und 50% setzt.
      Ich habe es noch nicht lang im Einsatz, aber vielleicht hat jemand hier ja Bedarf oder hat Anmerkungen / Verbesserungsvorschläge.

      const plant_power = 9600; // kWp
      const battery_capacity = 8960; // Wh
      const sun_low_power_hours = 2; // this is about the time of very low sun power, may differ due to local environment (hills, buildings etc.)
      
      let daynight = ['day', 'night'];
      
      //* prepare state objects
      for(let idx in daynight) {
          let dn = daynight[idx];
          for(let d = 0; d < 4; d++) {
              let id = 'javascript.0.power.optimize.' + dn + '' + d;
              if(!existsState(id + '.samples')) {
                  createState(id + '.samples', '', {
                      name: 'Number of samples',
                      type: 'number'
                  });
              }
              if(!existsState(id + '.average')) {
                  createState(id + '.average', '', {
                      name: 'Average W over samples',
                      type: 'number',
                      unit: 'W'
                  });
              }
              if(!existsState(id + '.consumption')) {
                  createState(id + '.consumption', '', {
                      name: 'Consumption',
                      type: 'number',
                      unit: 'Wh'
                  });
              }
          }
      }
      if(!existsState('javascript.0.power.optimize.daily')) {
          createState('power.optimize.daily', '', {
              name: 'Average daily consumption',
              type: 'number',
              unit: 'Wh'
          });
      }
      if(!existsState('javascript.0.power.optimize.nightly')) {
          createState('power.optimize.nightly', '', {
              name: 'Average nightly consumption',
              type: 'number',
              unit: 'Wh'
          });
      }
      if(!existsState('javascript.0.power.optimize.cloudavg')) {
          createState('power.optimize.cloudavg', '', {
              name: 'Average cloud coverage',
              type: 'number',
              unit: '%'
          });
      }
      if(!existsState('javascript.0.power.optimize.cloudsamples')) {
          createState('power.optimize.cloudsamples', '', {
              name: 'Number of hours for calculated average cloud coverage',
              type: 'number',
              unit: 'h'
          });
      }
      
      //* END prepare state objects
      
      //* Calculate average power consumption and estimate total power consumption for either day or night (current astrotime)
      function calcPowerAverages(rotate) {
          let avg = {
              day: 0,
              night: 0
          };
      
          for(let idx in daynight) {
              let dn = daynight[idx];
              let cnt = 0;
              let sum = 0;
              for(let d = 0; d < 4; d++) {
                  let val = getState('javascript.0.power.optimize.' + dn + '' + d + '.consumption').val;
                  if(val) {
                      cnt++;
                      sum += val;
                  }
              }
              avg[dn] = (cnt > 0 ? sum / cnt : 0);
          }
      
          setState('javascript.0.power.optimize.daily', avg.day, true);
          setState('javascript.0.power.optimize.nightly', avg.night, true);
      
          if(rotate) {
              for(let idx in daynight) {
                  setState('javascript.0.power.optimize.' + daynight[idx] + '3.samples', getState('javascript.0.power.optimize.' + daynight[idx] + '2.samples').val, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '3.average', getState('javascript.0.power.optimize.' + daynight[idx] + '2.average').val, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '3.consumption', getState('javascript.0.power.optimize.' + daynight[idx] + '2.consumption').val, true);
      
                  setState('javascript.0.power.optimize.' + daynight[idx] + '2.samples', getState('javascript.0.power.optimize.' + daynight[idx] + '1.samples').val, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '2.average', getState('javascript.0.power.optimize.' + daynight[idx] + '1.average').val, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '2.consumption', getState('javascript.0.power.optimize.' + daynight[idx] + '1.consumption').val, true);
      
                  setState('javascript.0.power.optimize.' + daynight[idx] + '1.samples', getState('javascript.0.power.optimize.' + daynight[idx] + '0.samples').val, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '1.average', getState('javascript.0.power.optimize.' + daynight[idx] + '0.average').val, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '1.consumption', getState('javascript.0.power.optimize.' + daynight[idx] + '0.consumption').val, true);
      
                  setState('javascript.0.power.optimize.' + daynight[idx] + '0.samples', 0, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '0.average', 0, true);
                  setState('javascript.0.power.optimize.' + daynight[idx] + '0.consumption', 0, true);
              }
          }
      }
      //* END Calculate average power
      
      //* Create scedule for power consumption calc and rotate days at 12 am
      schedule('0 0 * * *', function() {
          calcPowerAverages(true);
      });
      
      //* Listen on power consumption state of plenticore adapter
      let subscribeConsumptionId;
      
      if(existsState('modbus.0.holdingRegisters.252_Hausverbrauch')) {
          subscribeConsumptionId = 'modbus.0.holdingRegisters.252_Hausverbrauch';
      } else if(existsState('plenticore.0.devices.local.Home_P')) {
          subscribeConsumptionId = 'plenticore.0.devices.local.Home_P';
      } else {
          log('NO EXISTING POWER CONSUMPTION STATE FOUND!');
          stopScript(null);
      }
      
      log('Subscribing to ' + subscribeConsumptionId + ' for home consumption values.');
      on(subscribeConsumptionId, function(obj) {
          let dn;
          if(isAstroDay()) {
              dn = 'day';
          } else {
              dn = 'night';
          }
      
          let curavg = getState('javascript.0.power.optimize.' + dn + '0.average').val;
          let curcnt = getState('javascript.0.power.optimize.' + dn + '0.samples').val;
      
          let newavg = ((curavg * curcnt) + obj.state.val) / (curcnt + 1);
          curcnt++;
      
          setState('javascript.0.power.optimize.' + dn + '0.average', newavg, true);
          setState('javascript.0.power.optimize.' + dn + '0.samples', curcnt, true);
      
          //* calc consumption
          let now = new Date();
          let sunrise = getAstroDate('sunrise', now.getTime());
          let sunset = getAstroDate('sunset', now.getTime());
          if(sunrise > sunset) {
              let prevDay = new Date(now.getTime());
              prevDay.setDate(prevDay.getDate() - 1);
              sunrise = getAstroDate('sunrise', prevDay.getTime());
          }
      
          //* calc hours of (possible) sunshine - daylight
          let sun_hours = (sunset - sunrise) / 1000 / 60 / 60;
          sun_hours -= sun_low_power_hours;
      
          //* power sum during sun_hours
          let power_sum;
          if(dn === 'day') {
              power_sum = newavg * sun_hours;
          } else {
              power_sum = newavg * (24 - sun_hours);
          }
          setState('javascript.0.power.optimize.' + dn + '0.consumption', power_sum, true);
      });
      
      //* Calculate the minimum SoC for the battery that matches the estimated power generation and consumption values
      function calcMinSoC() {
          let tomorrow = new Date();
      
          let sunset = getAstroDate('sunset', tomorrow.getTime());
          if(tomorrow > sunset) {
              tomorrow.setDate(tomorrow.getDate() + 1);
              sunset = getAstroDate('sunset', tomorrow.getTime());
          }
      
          let sunrise = getAstroDate('sunrise', tomorrow.getTime());
          if(sunrise > sunset) {
              //* We need to get the sunrise from 24h before
              let prevDay = new Date(tomorrow.getTime());
              prevDay.setDate(prevDay.getDate() - 1);
              sunrise = getAstroDate('sunrise', prevDay.getTime());
          }
      
          let mid_summer = new Date(tomorrow.getFullYear(), 5, 21);
          let mid_winter = new Date(tomorrow.getFullYear(), 11, 21);
      
          //* how many days we are from the longest day of the year (21st of June)
          let days = Math.round((mid_summer - tomorrow) / 1000 / 60 / 60 / 24);
          days = Math.abs(days);
          if(days > 182) {
          days = 364 - days;
          }
          if(days > 182) {
              //* might occur on leep years
              days = 182;
          }
      
          let sun_power_factor = 1 - (0.45 * days / 182); // I experienced about 55% of the summer's maximum power at most when sky is clear
      
          //* calc hours of daylight
          let sun_hours = (sunset - sunrise) / 1000 / 60 / 60;
          sun_hours -= sun_low_power_hours;
      
          let curTime = new Date();
          let sky = [];
      
          //* when will the sun rise (or since how many hours it is already)
          let sunrise_in = Math.round((sunrise - curTime) / 1000 / 60 / 60);
          let start = sunrise_in;
          let end = start;
          if(sunrise_in < 0) {
              start = 0;
              end = sunrise_in;
          }
          end = Math.round(end + sun_hours - 1);
          if(end < start) {
              end = start;
          }
      
          let hours = 0;
          let cloudsum = 0;
          //* get cloud coverage forecast for the daylight hours
          for(let h = start; h <= end; h++) {
              let clouds = getState('weatherunderground.0.forecastHourly.' + h + 'h.sky').val;
              cloudsum += clouds;
              hours++;
          }
      
          //* reduce estimated sun power by cloud coverage
          let cloud_avg = cloudsum / hours;
      
          let prev_cloud_avg = getState('javascript.0.power.optimize.cloudavg').val;
          let prevhours = getState('javascript.0.power.optimize.cloudsamples').val;
          if(prev_cloud_avg) {
              if(prevhours >= hours) {
                  let cur_cloud_avg = cloud_avg;
                  cloud_avg = Math.round(((2 * prev_cloud_avg) + cloud_avg) / 3);
                  log('Corrected cloudavg from ' + cur_cloud_avg + ' to ' + cloud_avg + ' (prev was ' + prev_cloud_avg + ').');
              }
          }
          setState('javascript.0.power.optimize.cloudavg', cloud_avg, true);
          if(prevhours != hours || !prevhours) {
              setState('javascript.0.power.optimize.cloudsamples', hours, true);
          }
      
          let sun_power = plant_power * sun_power_factor * sun_hours * (1 - (cloud_avg / 100));
      
          let max_minSoC = 40;
          let min_minSoC = 0;
          let minSoC = 40;
      
          let daily_cons = getState('javascript.0.power.optimize.daily').val;
          //* we need at least one daily consumption value otherwise we cannot calc the needed power
          if(daily_cons) {
              //* how many power is left after our estimated home consumption is substracted
              let sun_power_left = sun_power - daily_cons;
              let possibleCharge;
              if(sun_power_left < 0) {
                  sun_power_left = 0;
              }
      
              //* percentage of battery that will possibly be charged tomorrow (or today if we are in astroday time)
              possibleCharge = sun_power_left / battery_capacity;
              minSoC = Math.round(max_minSoC - (100 * possibleCharge));
              //* minSoC must not be below 0
              if(minSoC < 0) {
                  minSoC = 0;
              }
      
              log('Avg cloud coverage from ' + (curTime > sunrise ? curTime : sunrise) + ' to ' + sunset + ' is expected to be ' + Math.round(cloud_avg) + '%', 'debug');
              log('WU data from ' + start + 'h to ' + end + 'h', 'debug');
              log('As possible charge for generated power (' + sun_power + ') reduced by daily consumption (' + daily_cons + ') leads to a max. charge of ' + sun_power_left + 'Wh (' + Math.round(possibleCharge * 100) + '% of ' + battery_capacity + 'Wh) I will set minSoC to ' + minSoC + ' (min ' + min_minSoC + ', max ' + max_minSoC + ').');
      
              let msgadd = '';
              let curSoC;
              if(existsState('modbus.0.holdingRegisters.514_Battery_SOC')) {
                  curSoC = getState('modbus.0.holdingRegisters.514_Battery_SOC').val;
               } else {
                  curSoC = getState('plenticore.0.devices.local.battery.SoC').val;
              }
              //* minSoC to set should not (highly) exceed the current SoC as this would possibly lead to the battery being charged from grid
              if(minSoC > curSoC) {
                  msgadd = ' (von ' + minSoC + ' auf ' + curSoC + ' reduziert)';
                  minSoC = curSoC;
                  log('Current SoC of battery is at ' + curSoC + ' so reducing minSoC to this value.');
              }
      
              let msg;
              let curMinSoC = getState('plenticore.0.devices.local.battery.MinSoc').val;
              //* Set new minSoC value if it differs from current
              if(curMinSoC != minSoC) {
                  setState('plenticore.0.devices.local.battery.MinSoc', minSoC);
                  msg = 'Batterie-MinSoC wurde auf ' + minSoC + ' gesetzt';
                  msg += msgadd + '.' + "\n";
                  msg += "Leistung PV: " + Math.round(sun_power) + "Wh\n";
                  msg += "Verbrauchsprognose: " + Math.round(daily_cons) + "Wh\n";
                  msg += "Verbleibend: " + Math.round(sun_power_left) + "Wh\n";
                  msg += "Mögl. Batterieladung: " + Math.round(possibleCharge * 100) + "%\n";
                  msg += "Bewölkungsprognose: " + Math.round(cloud_avg) + "%\n";
                  msg += "Sonnenaufgang: " + (new Date(sunrise.getTime())).toGermanTime().toLocaleString() + "\n";
                  msg += "Sonnenuntergang: " + (new Date(sunset.getTime())).toGermanTime().toLocaleString() + "\n";
                  sendTo("telegram", {user: "Marius", text: msg});
              }
          }
      }
      
      //* subscribe on weather forecast changes
      on({id: 'weatherunderground.0.forecastHourly.0h.sky', change: 'any'}, function(obj) {
          calcMinSoC();
      });
      
      //* Calc on script start (might give javascript errors on first run due to race condition with state object creation)
      calcPowerAverages(false);
      
      //* Calc minimum SoC to set
      calcMinSoC();
      

      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
      1
      • O olfi13

        Hallo nochmal,

        ich führe hier zwar ein Selbstgespräch, möchte aber für andere Verzweifelte mal zeigen, wie ich es nun gelöst habe:
        In der Konfiguration des Adapters habe ich den Haken gesetzt bei "Aliases benutzen", ebenso bei "Direkte Adressen benutzen" (Eine andere Konfiguration will nicht funktionieren).

        Unter "Holding Registers" wird als Start-Adresse 40001 automatisch gesetzt (rechts oben). Alle Adressen der Holding Register musste ich um eins verschieben, also 40101 ist DC-Power-Total anstatt 40100.
        Alle Register lassen sich so auslesen, so wie im Kostal Datenblatt angegeben.

        Weder mit anderer manuell eingegebener Start-Adresse noch mit anderer Konfiguration geht es. Warum das so ist, dass erschliesst sich mir nicht.

        Gruß, Olfi

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

        @olfi13 Bei mir geht es, indem ich folgende Einstellungen mache:

        Bildschirmfoto von 2019-12-22 13-52-56.png

        Die Holding Register habe ich wie folgt angelegt, also mit ihrer normalen Adresse laut Beschreibung von Kostal.

        Bildschirmfoto von 2019-12-22 13-53-08.png

        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

          Hallo zusammen,

          ich bin noch neu hier, habe aber einige Threads durchgelesen.
          Da ich selbst gerade dabei bin, meine Haussteuerung mit ioBroker aufzumöbeln und wir kürzlich eine PV-Anlage mit BYD-Speicher und Plenticore WR bekommen haben, habe ich nach einer vernünftigen Lösung gesucht.

          Wir in anderen Foren auch zu lesen ist, funktioniert z. B. die "Dynamische SoC-Regelung" nur mäßig und es fehlt die Möglichkeit, via ModBus Werte zu setzen.
          Also habe ich mich dran gesetzt, meinen ersten Adapter zu entwickeln, der die interne Web-API (kein Screenscraping) des Plenticore nutzt.

          Ich selbst habe einen Plenticore Plus 10, weiß also nicht, ob die API bei allen Modellen der Reihe identisch ist und somit der Adapter überhaupt funktioniert. Für Rückmeldungen wär ich daher dankbar :-)

          Falls jemand Interesse hat, hier das Ergebnis:
          https://github.com/StrathCole/iobroker.plenticore

          Liebe Grüße
          Marius aka StrathCole

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

          @StrathCole Kannst du noch etwas konkreter werden was dein Adapter genau macht.
          Werden damit nur die im Screenshot gezeigten SoC Einstellungen angepasst oder bekommt man auch alle modbus Werte über deinen Adapter?

          db979796-e74b-4234-b319-eeaa7694c87f-image.png

          Ich habe mich bisher noch nie mit den SoC Einstellungen befasst und was ich damit optimieren kann.
          In der Regel lädt mein Akku voll wenn genug Leistung anliegt. Verstehe ich es richtig dass deiner nur bis 50% geladen wird und der Überschuss eingespeist wird und nicht im Akku landet?

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

          StrathColeS 1 Antwort Letzte Antwort
          0
          • DiginixD Diginix

            @StrathCole Kannst du noch etwas konkreter werden was dein Adapter genau macht.
            Werden damit nur die im Screenshot gezeigten SoC Einstellungen angepasst oder bekommt man auch alle modbus Werte über deinen Adapter?

            db979796-e74b-4234-b319-eeaa7694c87f-image.png

            Ich habe mich bisher noch nie mit den SoC Einstellungen befasst und was ich damit optimieren kann.
            In der Regel lädt mein Akku voll wenn genug Leistung anliegt. Verstehe ich es richtig dass deiner nur bis 50% geladen wird und der Überschuss eingespeist wird und nicht im Akku landet?

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

            @Diginix
            Also, der Adapter holt sich alle Werte, die es auch im Interface zu sehen gibt (Momentanwerte, Einstellungen …), aktuell lese ich die Statistikdaten (Tag, Monat, Jahr) noch nicht aus, das kommt aber dann noch.
            Vorteil ist halt, dass man die Werte auch setzen kann.

            Der minSoC bedeutet, wie weit die Batterie entladen wird. Wenn man die intelligente Batteriesteuerung aktiv hat, kann man dort auf "Dynamisch" stellen. Dann passt KOSTAL den Wert automatisch an. Diese Automatik war mir aber zu blöd.

            Mein Installateur hat mir geraten, den MinSoC nicht die ganze Zeit zu niedrig zu haben, sondern im Winter Richtung 20 anzupassen. Ich wollte den Wert aber nicht fix für Winter und Sommer setzen, sondern anhand der Wetterprognose und Verbrauchsdaten anpassen.

            Nehmen wir an, dass eine Woche lang kaum Sonne scheint, dann wäre ein MinSoC von 5 ungünstig, weil die Batterie die ganze Zeit am unteren Ende rumkrebst. Ist wohl nicht förderlich für die Lebensdauer. Genauso ist es unsinnig, wenn der MinSoc auf 30 oder sogar 50 steht, wenn die Sonne voraussichtlich viel scheint, denn dann entlädt er die Batterie nicht unter diesen %-Wert und somit verschwendet man Leistung.

            Es ist also nicht wie du schreibst, die maximale Ladung, sondern die maximale Entladung.

            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
            1
            • StrathColeS Offline
              StrathColeS Offline
              StrathCole
              schrieb am zuletzt editiert von
              #27

              Hier ein Screenshot des aktuellen Objekt-Baums (wie gesagt, ist noch frühes Stadium und nicht alles implementiert).

              Bildschirmfoto von 2019-12-22 16-10-14.png
              Bildschirmfoto von 2019-12-22 16-10-27.png

              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

                Hallo zusammen,

                ich bin noch neu hier, habe aber einige Threads durchgelesen.
                Da ich selbst gerade dabei bin, meine Haussteuerung mit ioBroker aufzumöbeln und wir kürzlich eine PV-Anlage mit BYD-Speicher und Plenticore WR bekommen haben, habe ich nach einer vernünftigen Lösung gesucht.

                Wir in anderen Foren auch zu lesen ist, funktioniert z. B. die "Dynamische SoC-Regelung" nur mäßig und es fehlt die Möglichkeit, via ModBus Werte zu setzen.
                Also habe ich mich dran gesetzt, meinen ersten Adapter zu entwickeln, der die interne Web-API (kein Screenscraping) des Plenticore nutzt.

                Ich selbst habe einen Plenticore Plus 10, weiß also nicht, ob die API bei allen Modellen der Reihe identisch ist und somit der Adapter überhaupt funktioniert. Für Rückmeldungen wär ich daher dankbar :-)

                Falls jemand Interesse hat, hier das Ergebnis:
                https://github.com/StrathCole/iobroker.plenticore

                Liebe Grüße
                Marius aka StrathCole

                Marco LaserM Offline
                Marco LaserM Offline
                Marco Laser
                schrieb am zuletzt editiert von
                #28

                @StrathCole Moin, erstmal cool dass du dir die Arbeit gemacht hast, ich wollte es gerade mal testen, Allerdings bekomme ich auf meinem Slave nur die Meldung : "startInstance system.adapter.plenticore.0: required adapter "admin" not found!".
                Kann er ja auch nicht finden da die auf dem Master ist. Wäre cool wenn du das ändern könntest :)

                StrathColeS 1 Antwort Letzte Antwort
                0
                • Marco LaserM Marco Laser

                  @StrathCole Moin, erstmal cool dass du dir die Arbeit gemacht hast, ich wollte es gerade mal testen, Allerdings bekomme ich auf meinem Slave nur die Meldung : "startInstance system.adapter.plenticore.0: required adapter "admin" not found!".
                  Kann er ja auch nicht finden da die auf dem Master ist. Wäre cool wenn du das ändern könntest :)

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

                  @Marco-Laser oje. Kannst du mir auf die Sprünge helfen?
                  Bin komplett neu bei ioBroker und weiß gar nicht, wie master und slave funktionieren. Habe das Adapter-Template als Ausgangspunkt genutzt inkl. der angegebenen Dependencys.

                  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

                  Marco LaserM 1 Antwort Letzte Antwort
                  0
                  • StrathColeS StrathCole

                    @Marco-Laser oje. Kannst du mir auf die Sprünge helfen?
                    Bin komplett neu bei ioBroker und weiß gar nicht, wie master und slave funktionieren. Habe das Adapter-Template als Ausgangspunkt genutzt inkl. der angegebenen Dependencys.

                    Marco LaserM Offline
                    Marco LaserM Offline
                    Marco Laser
                    schrieb am zuletzt editiert von
                    #30

                    @StrathCole habe leider keine Ahnung von der Programmierung von Adaptern aber kannst du vielleicht einfach die Admin Instanz aus den Dependencys raus nehmen?

                    StrathColeS 2 Antworten Letzte Antwort
                    0
                    • Marco LaserM Marco Laser

                      @StrathCole habe leider keine Ahnung von der Programmierung von Adaptern aber kannst du vielleicht einfach die Admin Instanz aus den Dependencys raus nehmen?

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

                      @Marco-Laser Hab das nun mal gemacht. Die Abhängigkeit sollte nicht mehr existieren.

                      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
                      • Marco LaserM Marco Laser

                        @StrathCole habe leider keine Ahnung von der Programmierung von Adaptern aber kannst du vielleicht einfach die Admin Instanz aus den Dependencys raus nehmen?

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

                        @Marco-Laser was mich irritiert ist, dass laut Anleitung auch auf einem Slave der Admin-Adapter installiert sein soll.

                        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

                        Marco LaserM 1 Antwort Letzte Antwort
                        0
                        • StrathColeS StrathCole

                          @Marco-Laser was mich irritiert ist, dass laut Anleitung auch auf einem Slave der Admin-Adapter installiert sein soll.

                          Marco LaserM Offline
                          Marco LaserM Offline
                          Marco Laser
                          schrieb am zuletzt editiert von Marco Laser
                          #33

                          @StrathCole so hab's gerade mal probiert klappt jetzt ohne Probleme aufm Plenticore 8.5. Wenn jetzt noch mehr Werte ausgelesen werden können wäre es perfekt 👍

                          StrathColeS 1 Antwort Letzte Antwort
                          0
                          • Marco LaserM Marco Laser

                            @StrathCole so hab's gerade mal probiert klappt jetzt ohne Probleme aufm Plenticore 8.5. Wenn jetzt noch mehr Werte ausgelesen werden können wäre es perfekt 👍

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

                            @Marco-Laser welche Werte sind denn vor allem interessant? Dann schaue ich mal, ob die über die API gesendet werden.

                            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

                            Marco LaserM 1 Antwort Letzte Antwort
                            0
                            • StrathColeS StrathCole

                              @Marco-Laser welche Werte sind denn vor allem interessant? Dann schaue ich mal, ob die über die API gesendet werden.

                              Marco LaserM Offline
                              Marco LaserM Offline
                              Marco Laser
                              schrieb am zuletzt editiert von
                              #35

                              @StrathCole ich find vor allem die Statistiken interessant.

                              StrathColeS Jerôme RoyJ 3 Antworten Letzte Antwort
                              0
                              • Marco LaserM Marco Laser

                                @StrathCole ich find vor allem die Statistiken interessant.

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

                                @Marco-Laser da bin ich grad dran.

                                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
                                • Marco LaserM Marco Laser

                                  @StrathCole ich find vor allem die Statistiken interessant.

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

                                  @Marco-Laser Die Statistik-Objekte habe ich nun auch eingebunden.

                                  Wichtig: Vor dem Aktualisieren auf den neuen Stand bitte die Instanz deaktivieren und nach dem Aktualisieren in der Instanz das Passwort neu eintragen. Es wird jetzt verschlüsselt gespeichert, dadurch könnte er das alte nicht mehr lesen.

                                  Die Datenpunkte sind übrigens unter scb.statistic zu finden.

                                  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
                                  2
                                  • StrathColeS Offline
                                    StrathColeS Offline
                                    StrathCole
                                    schrieb am zuletzt editiert von StrathCole
                                    #38

                                    In Verbindung mit den neuen Statistik-States habe ich nun auch die Statistik-Seite der Plenticore-Oberfläche in einem Vis nachgebaut (nur HTML-Widgets mit Object-Bindings):

                                    Bildschirmfoto von 2019-12-25 14-03-11.png
                                    (CO2 gesamt fehlt wegen eines Tippfehlers im Datenpunktnamen).

                                    Endlich nicht mehr dauernd das Passwort eingeben und auf eine separate Oberfläche gehen ;-)

                                    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

                                    Marco LaserM 1 Antwort Letzte Antwort
                                    0
                                    • StrathColeS StrathCole

                                      In Verbindung mit den neuen Statistik-States habe ich nun auch die Statistik-Seite der Plenticore-Oberfläche in einem Vis nachgebaut (nur HTML-Widgets mit Object-Bindings):

                                      Bildschirmfoto von 2019-12-25 14-03-11.png
                                      (CO2 gesamt fehlt wegen eines Tippfehlers im Datenpunktnamen).

                                      Endlich nicht mehr dauernd das Passwort eingeben und auf eine separate Oberfläche gehen ;-)

                                      Marco LaserM Offline
                                      Marco LaserM Offline
                                      Marco Laser
                                      schrieb am zuletzt editiert von
                                      #39

                                      @StrathCole Magste das sharen ? sieht echt gut aus :)

                                      1 Antwort Letzte Antwort
                                      0
                                      • StrathColeS Offline
                                        StrathColeS Offline
                                        StrathCole
                                        schrieb am zuletzt editiert von
                                        #40

                                        Hab ich noch nie gemacht, aber ich versuch es mal. Hab das folgende JSON via "Widgets Exportieren" geholt, müsste also in ein View als "Widgets Importieren" funktionieren:

                                        widgets.txt

                                        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

                                        Marco LaserM J 2 Antworten Letzte Antwort
                                        0
                                        • StrathColeS StrathCole

                                          Hab ich noch nie gemacht, aber ich versuch es mal. Hab das folgende JSON via "Widgets Exportieren" geholt, müsste also in ein View als "Widgets Importieren" funktionieren:

                                          widgets.txt

                                          Marco LaserM Offline
                                          Marco LaserM Offline
                                          Marco Laser
                                          schrieb am zuletzt editiert von
                                          #41

                                          @StrathCole Danke, klappt soweit. Zwei Sachen hätte ich auf jeden Fall, Der DP CO2 Total klappt bei mir nicht... also nicht nur in der Vis nicht sondern gar nicht. Und

                                          Requesting settings - [{"moduleid":"devices:local","settingids":["Battery:DynamicSoc:Enable","Battery:MinHomeComsumption","Battery:MinSoc","Battery:SmartBatteryControl:Enable","Battery:Strategy 
                                          

                                          Kommt bei mir jedes mal weil ich keine Batterie hab :sweat_smile:

                                          StrathColeS 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          383

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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