Seite 1 von 2

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: So 26. Jul 2020, 11:08
von Bogeyof
Hallo @Ulrich,
ich habe für den Kostal Plenticore noch 4 weitere Datenfelder ausgelesen bzw. errechnet, die durchaus auch für andere interessant sein könnten:

Code: Alles auswählen

  $rc = $funktionen->kostal_register_lesen($COM1,"0064","0002","Float");
  $aktuelleDaten["Total_DC_Power"] = $rc["Wert"];
  $rc = $funktionen->kostal_register_lesen($COM1,"0246","0001","U16-1");
  $aktuelleDaten["Bat_Charge_Power"] = $rc["Wert"];
  if ($aktuelleDaten["Bat_Charge_Power"] > 32767) {
     $aktuelleDaten["Bat_Charge_Power"] = (65535 - $aktuelleDaten["Bat_Charge_Power"]) * -1;
  }
  $rc = $funktionen->kostal_register_lesen($COM1,"0090","0002","Float");
  $aktuelleDaten["Laufzeit"] = $rc["Wert"];

  $aktuelleDaten["WirkungsgradWR"] = ($aktuelleDaten["Verbrauch"] + $aktuelleDaten["Ueberschuss"]) / $aktuelleDaten["Total_DC_Power"];
"Total_DC_Power" ist die Gesamtleistung des Wechselrichters [DC], nur die Leistung welche für eine Umwandlung in [AC] verwendet wird, also ohne z.B. Batterie Laden DC-seitig. (in W)
"Bat_Charge_Power" ist die Ent-/Ladeleistung der Batterie, könnte man natürlich auch aus Strom * Spannung errechnen, aber wozu? Ist eigentlich ein S16-Field mit Länge 1, es funktioniert aber die Umwandlung in funktionen.inc.php nicht, daher U16-1 und eigene Vorzeichen-Behandlung (in W).
"Laufzeit" ist die Nutzungszeit des WR (in Sekunden).
"WirkungsgradWR" errechnet den aktuellen Wirkungsgrad des Wechselrichters in allen Situationen, also auch während Einspeisen oder Bezug / Laden Batterie. Ein sehr interessanter Wert wie ich finde.

Ich habe die Werte bei mir in die Datenbank eingefügt, evtl. willst Du dies ja auch anderen Kostal-Nutzern zur Verfügung stellen...

Gruß Christian

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: So 26. Jul 2020, 11:28
von Ulrich
Hallo Christian,

vielen Dank für die Inforamtionen. Die Daten werde ich mit aufnehmen. Spätestens in der Image Version 4.6.6 werden sie enthalten sein. Die Version 4.6.6 wird Anfang August heraus kommen.

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Di 4. Aug 2020, 16:28
von Bogeyof
Hallo Ulrich, ich habe mal die aktuelle Version verglichen und habe noch 2 kleine Anpassungen für den Kostal Plenticore, welche 2 kleine Fehler beheben:

1. Die Total_DC_Power kann in der Nacht Null werden und damit kommt es zu einer Division durch Null:

Code: Alles auswählen

  if ($aktuelleDaten["Total_DC_Power"] > 0) {
  $aktuelleDaten["WirkungsgradWR"] = ($aktuelleDaten["Verbrauch"] + $aktuelleDaten["Ueberschuss"]) / $aktuelleDaten["Total_DC_Power"];
Fehlermeldung findet sich dann in der php.log...

2. Die AC_Solarleistung hat vereinzelt Werte > 32767 (anscheinend wenn der Wert negativ wird, z.B. -1), deswegen habe ich einen Test eingebaut der hilft unsinnige Werte (typisch > 65000) und damit unschöne Grafiken zu vermeiden:

Code: Alles auswählen

  if ($aktuelleDaten["AC_Solarleistung"] > 32767) {
    $aktuelleDaten["AC_Solarleistung"] = 0;
Ich habe hier im Forum auch schon öfter Meldungen zu Extremwerten mit z.B. > 65000 gesehen, ich denke das sind ebenfalls Berechnungsprobleme wenn der Wert (unerwartet?) negativ wird.

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Di 4. Aug 2020, 16:47
von Ulrich
Hallo Bogeyof,

vielen Dank für die Informationen. Die Änderungen habe ich übernommen.

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Fr 7. Aug 2020, 14:34
von Bogeyof
Hallo Ulrich, schon wieder gäbe es weitere, evtl. interessante Daten. Es können über die Sunspec-Register auch diverse Temperaturwerte des Wechselrichters ausgelesen werden.

Code: Alles auswählen

  $rc = $funktionen->kostal_register_lesen($COM1,"9CA7","0001","U16-1");
  $aktuelleDaten["Temp_WR_Cab"] = $rc["Wert"] / 10;
  $rc = $funktionen->kostal_register_lesen($COM1,"9CA8","0001","U16-1");
  $aktuelleDaten["Temp_WR_Sink"] = $rc["Wert"] / 10;
  $rc = $funktionen->kostal_register_lesen($COM1,"9CA9","0001","U16-1");
  $aktuelleDaten["Temp_WR_Trans"] = $rc["Wert"] / 10;
In der Datenbank habe ich die Werte unter Service abgelegt:

Code: Alles auswählen

          $query .= "Service ";
          $query .= "Status=".$daten["Status"];
          $query .= ",Laufzeit=".$daten["Laufzeit"];
          $query .= ",Temp_WR_Cab=".$daten["Temp_WR_Cab"];
          $query .= ",Temp_WR_Sink=".$daten["Temp_WR_Sink"];
          $query .= ",Temp_WR_Trans=".$daten["Temp_WR_Trans"];
          $query .= ",Seriennummer=\"".$daten["Seriennummer"]."\"";

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Fr 7. Aug 2020, 16:32
von Ulrich
Diese Änderungen habe ich auch übernommen. Vielen Dank.

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Sa 19. Sep 2020, 21:17
von Stefan_E
Bogeyof hat geschrieben:
Di 4. Aug 2020, 16:28
2. Die AC_Solarleistung hat vereinzelt Werte > 32767 (anscheinend wenn der Wert negativ wird, z.B. -1), deswegen habe ich einen Test eingebaut der hilft unsinnige Werte (typisch > 65000) und damit unschöne Grafiken zu vermeiden:

Code: Alles auswählen

  if ($aktuelleDaten["AC_Solarleistung"] > 32767) {
    $aktuelleDaten["AC_Solarleistung"] = 0;
Ich habe hier im Forum auch schon öfter Meldungen zu Extremwerten mit z.B. > 65000 gesehen, ich denke das sind ebenfalls Berechnungsprobleme wenn der Wert (unerwartet?) negativ wird.
Die Konversion in funktionen.inc.php für S16 und U16 ist identisch, das heisst S16 berücksichtigt signed nicht. Man sollte deshalb dort schreiben:

Code: Alles auswählen

        case "S16":
          $Daten["Wert"] = hexdec(substr($rc,18,$Daten["DatenLaenge"]));
          if ($Daten["Wert"] > 32767) {
          	$Datem["Wert"] = $Daten["Wert"] - 65536;
          }
Das würde dann auch die Verrenkungen bei der Berechnung von "Bat_Charge_Power" überflüssig machen.

Ich habe bei mir noch folgende Werte hinzugefügt (kostal_plenticore.php):

Code: Alles auswählen

  $rc = $funktionen->kostal_register_lesen($COM1,"00FC","0002","Float");
  $aktuelleDaten["KSEM_Leistung"] = $rc["Wert"];
  $rc = $funktionen->kostal_register_lesen($COM1,"00FE","0002","Float");
  $aktuelleDaten["KSEM_Wirkleistung"] = $rc["Wert"];
  $rc = $funktionen->kostal_register_lesen($COM1,"0100","0002","Float");
  $aktuelleDaten["KSEM_Scheinleistung"] = $rc["Wert"];

  $rc = $funktionen->kostal_register_lesen($COM1,"0068","0002","U32");
  $aktuelleDaten["Energiemanager_Status"] = $rc["Wert"];
Von den ersten drei braucht man eigentlich nur die Leistung, aber die sagt dann genau, was man am Gebäudeeingang einspeist:
Screenshot 2020-09-19 211115.png
Der vierte Eintrag erzaehlt, was genau der Kostal mit der Batterie zu tun gedenkt:
Screenshot 2020-09-19 211233.png
Screenshot 2020-09-19 211233.png (10.58 KiB) 4606 mal betrachtet

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Mo 21. Sep 2020, 22:08
von Stefan_E
Stefan_E hat geschrieben:
Sa 19. Sep 2020, 21:17

Code: Alles auswählen

        case "S16":
          $Daten["Wert"] = hexdec(substr($rc,18,$Daten["DatenLaenge"]));
          if ($Daten["Wert"] > 32767) {
          	$Datem["Wert"] = $Daten["Wert"] - 65536;
          }
Datem--> Daten ... ich liebe Sprachen, die nichts checken :-(

Stefan

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Sa 24. Okt 2020, 23:34
von Stefan_E
Noch was...:

Code: Alles auswählen

  $rc = $funktionen->kostal_register_lesen($COM1,"00AE","0002","Float");
  $aktuelleDaten["AC_Wirkleistung"] = $rc["Wert"];

  $rc = $funktionen->kostal_register_lesen($COM1,"00FE","0002","Float");
  $aktuelleDaten["KSEM_Wirkleistung"] = $rc["Wert"];
Die Register 0xAE (in Original Solaranzeige) und 0xFE (von mir hinzugefügt) sind im Kostal Manual als reactive power beschrieben, was sich mit Blindleistung übersetzt, nicht Wirkleistung.

Re: Kostal Wechselrichter, zusätzliche Daten

Verfasst: Fr 12. Feb 2021, 08:06
von Gerd
Bogeyof hat geschrieben:
Fr 7. Aug 2020, 14:34
Hallo Ulrich, schon wieder gäbe es weitere, evtl. interessante Daten. Es können über die Sunspec-Register auch diverse Temperaturwerte des Wechselrichters ausgelesen werden.

Code: Alles auswählen

  $rc = $funktionen->kostal_register_lesen($COM1,"9CA7","0001","U16-1");
  $aktuelleDaten["Temp_WR_Cab"] = $rc["Wert"] / 10;
  $rc = $funktionen->kostal_register_lesen($COM1,"9CA8","0001","U16-1");
  $aktuelleDaten["Temp_WR_Sink"] = $rc["Wert"] / 10;
  $rc = $funktionen->kostal_register_lesen($COM1,"9CA9","0001","U16-1");
  $aktuelleDaten["Temp_WR_Trans"] = $rc["Wert"] / 10;
In der Datenbank habe ich die Werte unter Service abgelegt:

Code: Alles auswählen

          $query .= "Service ";
          $query .= "Status=".$daten["Status"];
          $query .= ",Laufzeit=".$daten["Laufzeit"];
          $query .= ",Temp_WR_Cab=".$daten["Temp_WR_Cab"];
          $query .= ",Temp_WR_Sink=".$daten["Temp_WR_Sink"];
          $query .= ",Temp_WR_Trans=".$daten["Temp_WR_Trans"];
          $query .= ",Seriennummer=\"".$daten["Seriennummer"]."\"";
Hi, was sind das denn für Temperaturwerte?