Guerilla alternativ Projekt.

Micro Wechselrichter, die direkt an die 230V Steckdose angeschlossen werden können. ( Balkonkraftwerk )

Moderator: Ulrich

mattze96
Beiträge: 3
Registriert: So 3. Jul 2022, 16:53
Hat sich bedankt: 2 Mal

Re: Guerilla alternativ Projekt.

Beitrag von mattze96 »

SolarHeli hat geschrieben:
Mi 23. Feb 2022, 19:23
Hallo zusammen,
nach einiger Inbetriebnahmearbeiten (Incl. Montage der PV auf dem Dach) hier ein kurzer Statusbericht:

Der Growatt Wechselrichter MIC600TL-X arbeitet perfekt!
- lässt sich ferngesteuert (per App = RS485 Protokoll) ein- / ausschalten
- lässt sich die Wirkleistung einstellen (1-100%)
- lässt sich in eine DC-Engangsmodus (MPP off) setzen
- liefert alle Werte an die Solaranzeige
- springt gut bei 50V an (laut Berschreibung erst ab 70V)
Hallo Helmut,

ich plane mir aktuell auch einen Growatt 600 anzuschaffen. Anfangs möchte ich ihn für eine Direkteinspeisung ohne Akku nutzen. Später dann über Akku anstatt den PV Modulen, sodass ich eine variable Leistung auch Nachts einspeisen kann. Der Akku wird dann über einen normalen MPPT Laderegler geladen.

Ich habe mir schon die "Growatt Inverter Modbus RTU Protocol_II" PDF angeschaut und nach den entsprechenden Befehlen gesucht:

Active P Rate => 0..100%, Wirkleistung begrenzen. 255 (ohne Regelung)

TrakerModel => DC Source für den Batteriebetrieb, Independent wäre dann der normale MPPT Betrieb, oder?

Kann man den Growatt auch so einstellen, dass er sich ab einer bestimmten Akkuspannung selbst abschaltet?

Leider finde ich übers Internet nicht viele/keine Infos bzgl. der Steuerung, deswegen wäre es super wenn du mir die Punkte bestätigen könntest oder auf weitere Quellen verweisen kannst.
Gerne auch mehr Details zu deinem Aufbau! ;)

Grüße,
Matthias

SolarHeli
Beiträge: 10
Registriert: Mi 5. Jan 2022, 22:31
Danksagung erhalten: 4 Mal

Re: Guerilla alternativ Projekt.

Beitrag von SolarHeli »

Hallo Matthias,
genau so habe ich es auch gemacht. Schritt für Schritt die Teile in Betrieb genommen.

Ich habe "Growatt PV Inverter Modbus RS485 RTU Protocol v120.pdf" verwendet.
- Deine Befehle sind ok.
- Ja, independent ist der normale MPPT Betrieb (Default).

Ich hatte auch die automatische Regelung (Zähler-Growatt) versucht, aber die funktioniert (nach Rückfrage bei Growatt) leider nur mit einem einphasigem Zähler. Wir wollen aber ja die Summe allenr 3 Phasen zu 0 regeln (Nulleinspeisung).

Leider kann man den Growatt nicht so einstellen, dass er sich ab einer bestimmten Akkuspannung selbst abschaltet.
Nur ab welcher PV-Mindestspannung er sich einschaltet.
Das habe ich allerdings im PV-Modus gebraucht, da die Leistung der Solarmodule bei 50V (Default) zu gering war und er dauernd einzuschalten versucht hat und dann wieder ausgeschaltet hat, bis genügend Leistung vorhanden war.

Wenn ich es richtig im Kopf habe, hat er so ab 48V angefangen abzuregeln.

Zur Regelung habe ich keine Info gefunden (es ist bis jetzt keine Regelung vorhanden). Es blieb mir nichts übrig, als die Skripte selbst anzupassen.
Ich habe bei dem Skript für den Zähler einen Befehl an den Growatt eingebaut, der die bezogene Gesamtleistung an den Growatt sendet und bei dem Skript für den Growatt den Befehl ausgewertet, der dann die neue Sollleistung des Inverters berechnet und an den Inverter sendet.
Wenn man die PV-Spannung ausliest (ist ja jetzt die Batteriespannung) kann man eine Grenze einbauen (problematisch wegen der schwankenden Spannung unter Last).

So sieht das Ergebnis aus:
Leistungsregelung Growatt.png
Im oberen Diagramm sieht man, wie die Gesamtleistung der 3 Phasen (roter Graph) um die Nulllinie liegt -> Nulleinspeisung.
Im unteren Diagramm sieht man die entsprechende Leistung des Growatt, wie er die Schwankungen (im Minutentakt) ausregelt.

So sieht meine Anlage aktuell aus:
Anlage V2.png
Um den BMS anzuschließen hatte ich leider noch keine Zeit (der JK BMS wird leider noch nicht von Solaranzeige unterstützt)

Hoffe, das hilft schon mal weiter.

Grüße,
Helmut

Lehmann
Beiträge: 1
Registriert: Fr 8. Jul 2022, 16:16

Re: Guerilla alternativ Projekt.

Beitrag von Lehmann »

Hallo,
ein sehr interessantes Thema... Ich stelle auch gerade vom Growatt 3000mtl-s auf den 3000SPH um. Natürlich möchte ich auch da wieder meine eigenen Wünsche bei der Installation unterbringen. Derzeit lese ich den Zweirichtungszähler Holley DTZ541 bereits über die optische Schnittstelle aus. Mittel MQTT gehen die Daten zu openhab.

Nun wäre mein Ziel die vorhandenen Daten auch direkt für die Steuerung des SPH3000 zu verwenden. Leider habe ich bislang im Modus protocol 1.20 die richtigen Parameter noch nicht gefunden. Eure genannten register scheinen da nicht zutreffend. Für Anregungen bin ich da jederzeit offen.

herzliche Grüße
Volker

Drift
Beiträge: 1
Registriert: Mo 18. Jul 2022, 00:27
Hat sich bedankt: 1 Mal

Re: Guerilla alternativ Projekt.

Beitrag von Drift »

Hallo,

ein interessantes Projekt, dem ich mich auch gerne anschließen würde – weniger aus ökonomischer Sicht als an einer solchen Kleinstanlage zur PV-Eigenverbrauchsoptimierung zu lernen.

Wenn ich mir jetzt die Komponenten auswähle ... scheint der growatt mic 600tl-x als einer der wenigen WR mit Zertifizierung (neben vlt. dem AEConversion) zu sein, der das MPPT zur Batteriekopplung ausschalten kann. Der gezeigte Test sieht auf jeden Fall sehr gut aus. Ich frage mich dabei nur wie die 48 V Batteriespannung mit den >50 V Einschaltgrenze des growatt zusammenpassen, gibt es dort Probleme? Die Ladespannung bei LiFePo4 ist ja ~52 V, ist die Batterie dann auch im unteren SOC Bereich nutzbar?

Besten Dank,
Lion

SolarHeli
Beiträge: 10
Registriert: Mi 5. Jan 2022, 22:31
Danksagung erhalten: 4 Mal

Re: Guerilla alternativ Projekt.

Beitrag von SolarHeli »

Hallo Lion,
bei mir ist es so, dass der Growatt erst ab 50V einschaltet, aber er schaltet unter 50V nicht gleich wieder aus. Ich glaube es waren so 46V ab der er in der Leistung zurückgegangen ist.
Unter 50V einschalten würde bei mir auch gar keinen Sinn machen, da der Akku da eh leer ist. Ist also kein Problem.
Meine Ladespannung liegt bei max. bei 58,4 V (16 Zellen x 3,65 V/Zelle Ladeschlussspannung LiFePo4).
Eingestellt habe ich aktuell 56V und als untere Spannung 49V.
Damit nutze ich über ca. 90% der Kapazität.
Viele Grüße,
Helmut

mattze96
Beiträge: 3
Registriert: So 3. Jul 2022, 16:53
Hat sich bedankt: 2 Mal

Re: Guerilla alternativ Projekt.

Beitrag von mattze96 »

Hallo zusammen,

habe endlich meinen Growatt 600 bekommen und konnte ihn über Modbus programmieren. Anfangs hatte ich mit einem TTL zu RS485 Wandler Probleme und keine Verbindung bekommen, mit dem zweiten funktionierte es. Es war auch etwas umständlich, dass der Growatt nur anspringt wenn ausreichend Leistung am DC Eingang zur Verfügung steht.

Folgendes ist mir bei Akkubetrieb aufgefallen:
1. Den Growatt kann man nicht auf weniger als 10% regeln, bei ~60 Watt Ausgangsleistung liegt das Minimum. 1-10% liefern das gleiche Ergebnis.
2. Bei 0% springt der Growatt auf ~160 Watt Ausgangsleistung.
3. 100% entspricht 560 Watt Ausgangsleistung.
4. Manchmal regelt der Growatt schnell auf den Zielwert den ich eingebe, manchmal eher langsam. Ich bin noch nicht wirklich dahinter gekommen wieso und wann er es so macht.

Habt ihr ähnliches beobachtet? (Die Watt-Angaben beziehen sich auf die Anzeige im Growatt Display.)

Ich plane übrigens auch den Holley DTZ 541 für die Messung zu nutzen, dann brauche ich keine zusätzlichen Komponenten.

Liebe Grüße,
Matthias

PVSol
Beiträge: 3
Registriert: So 7. Aug 2022, 19:58

Re: Guerilla alternativ Projekt.

Beitrag von PVSol »

SolarHeli hat geschrieben:
Mi 23. Feb 2022, 19:23
Hallo zusammen,
nach einiger Inbetriebnahmearbeiten (Incl. Montage der PV auf dem Dach) hier ein kurzer Statusbericht:

Der Growatt Wechselrichter MIC600TL-X arbeitet perfekt!
- lässt sich ferngesteuert (per App = RS485 Protokoll) ein- / ausschalten
- lässt sich die Wirkleistung einstellen (1-100%)
- lässt sich in eine DC-Engangsmodus (MPP off) setzen
- liefert alle Werte an die Solaranzeige
- springt gut bei 50V an (laut Berschreibung erst ab 70V)

Der Victron SmartSolar Laderegler funktioniert einwandfrei
- einzige Änderung: der Wechselrichter kann im 48V Modus nicht an den Load-Ausgang angeschlossen werden sondern muss direkt an den Akkku angeschlossen werden (im 48V Modus ist der Victron-Load-Ausgang nur als Schaltausgang einsetzbar)
- läuft einwandfrei mit der Solaranzeige (Ausnahme Anzeige String Strom funktioniert nicht, String Leistung, Akkuspannung, Temperatur sind ok)



Grüße
Helmut

Hallo Helmut,
Ich habe auch einen Growatt Wechselrichter den ich an eine Batteriebank angeschlossen habe. Der WR arbeitet leider im MPPT Modus und geht immer fast aus 0W runter und im Anschluss wieder auf den eingestellten Wert. Du hast geschrieben, dass Du den Growatt in einen DC Eingangsmodus gestellt hast. Könntest Du mir das vielleicht genauer beschreiben, wie Du das hinbekommen hast?
Vielen Dank im Voraus!
Viele Grüße,
Martin

mattze96
Beiträge: 3
Registriert: So 3. Jul 2022, 16:53
Hat sich bedankt: 2 Mal

Re: Guerilla alternativ Projekt.

Beitrag von mattze96 »

Moin Martin,

ich hatte QModBus unter Linux genutzt um die entsprechenden Register auszulesen und umzuprogrammieren. (http://qmodbus.sourceforge.net/) Für Archlinux kann man das einfach über AUR installieren.

Bei meinem Growatt 600 sind es folgende Holding-Register Adressen:
Adresse: 03: --> Active P rate Inverter Max output active power percent (0-100)
Adresse: 124: --> 2 Traker Model (0 MPPT, 1 DC)

D.h. du musst den wert 1 in das Holding Register 124 schreiben um den DC Betrieb zu aktivieren.
Nach jedem Schreibvorgang gab es unten in der Leiste eine grüne Meldung.

Viele Grüße,
Matthias

PVSol
Beiträge: 3
Registriert: So 7. Aug 2022, 19:58

Re: Guerilla alternativ Projekt.

Beitrag von PVSol »

Hallo Matthias,

Vielen Dank für deine Antwort! Ich werde mich da mal versuchen reinzufuchsen...Toll dass es hier so hilfsbereite Leute gibt!
Ich berichte, sobald ich es ausprobiert habe...

Viele Grüße,
Martin

SolarHeli
Beiträge: 10
Registriert: Mi 5. Jan 2022, 22:31
Danksagung erhalten: 4 Mal

Re: Guerilla alternativ Projekt.

Beitrag von SolarHeli »

Hallo Martin,
im DC-Modus sollte die Leistung dann stabil bleiben (habe die gleiche Beobachtung gemacht).
Das mit den 60W "Minimalleistung" ist bei mir genauso.
Bei < 10% mache ich es aktuell (noch manuell) so, dass ich den Growatt dann in den Standby schalte (Standby: Kommando 06 00 00 = Adresse 00 -> 00 wieder ein: 06 00 01 = Adresse 00 -> 01)
Kann es erst automatisieren, wenn ich meinen BMS angeschlossen und in Betrieb habe.
Als Leistung zeigt die Solaranzeige mir bei 100% immer so zwischen 598 und 603W an (im DC-Eingangsmodus).

Um den Growatt (=Regler48) über den Browser / vom Zähler aus steuern zu können habe ich 4 Befehle eingebaut:
  • active / standby setzt den Growatt in den jeweiligen Status
  • leistung_### setzt die Ausgangsleistung des Growatt [1-100%]
  • gridPower_###### ist die aktuell bezogene Leistung aus dem Grid in [W]
Um ein Aufschwingen zu verhindern (die Leistungsanpassung des Growatt ist sehr gedämpft) wird die Ausgangsleistung nur um die Hälfte der Gridleistung angepasst und der Zähler unmittelbar als Gerät vor dem Growatt ausgelesen (= nahezu 1 min bis zur nächsten Messung nach dem neuen Stellwert für den Growatt).
Als Übergangslösung wird aktuell die Leistung bei geringer Akkuspannung reduziert, später besser über den SOC des BMS (mein JK BMS wird aber noch nicht unterstützt) auch hier eine Reduzierung um 5% / 0.1 V um ein Schwingen zu verhindern (Akkuspannung steigt bei Reduzierung der Last wieder an)

befehle.ini.php:

Code: Alles auswählen

[Regler48]
  1 = active
  2 = standby
  3 = leistung_###
  4 = gridPower_######


Hier die Ergänzungen in meinem Growatt.php (ohne Gewähr)

Code: Alles auswählen

/***************************************************************************
//  Einen Befehl an den Wechselrichter senden.
//
//
//  Ist noch nicht implementiert! 01/2022
//
***************************************************************************/

if (file_exists($Pfad."/../pipe/".$GeraeteNummer.".befehl.steuerung")) {

    $funktionen->log_schreiben("Steuerdatei '".$GeraeteNummer.".befehl.steuerung' vorhanden----","|- ",7);
    $Inhalt = file_get_contents($Pfad."/../pipe/".$GeraeteNummer.".befehl.steuerung");
    $Befehle = explode("\n",trim($Inhalt));
    $funktionen->log_schreiben("Befehle: ".print_r($Befehle,1),"|- ",7);

    for ($i = 0; $i < count($Befehle); $i++) {

      if ($i >= 6) {
        //  Es werden nur maximal 5 Befehle pro Datei verarbeitet!
        break;
      }
      /*********************************************************************************
      //  In der Datei "befehle.ini.php" müssen alle gültigen Befehle aufgelistet
      //  werden, die man benutzen möchte.
      //  Achtung! Genau darauf achten, dass der Befehl richtig geschrieben wird,
      //  damit das Gerät keinen Schaden nimmt.
      //  curr_6000 ist nur zum Testen ...
      //  Siehe Dokument:  Befehle_senden.pdf
      *********************************************************************************/
      if (file_exists($Pfad."/befehle.ini.php")) {

        $funktionen->log_schreiben("Die Befehlsliste 'befehle.ini.php' ist vorhanden----","|- ",9);
        $INI_File =  parse_ini_file($Pfad.'/befehle.ini.php', true);
        $Regler48 = $INI_File["Regler48"];
        $funktionen->log_schreiben("Befehlsliste: ".print_r($Regler48,1),"|- ",9);

        foreach ($Regler48 as $Template) {
          $Subst = $Befehle[$i];
          $l = strlen($Template);
          for ($p = 1; $p < $l; ++$p) {
            $funktionen->log_schreiben("Template: ".$Template." Subst: ".$Subst." l: ".$l,"|- ",10);
            if ($Template[$p] == "#") {
              $Subst[$p] = "#";
            }
          }
          if ($Template == $Subst) {
            break;
          }
        }
        if ($Template != $Subst) {
          $funktionen->log_schreiben("Dieser Befehl ist nicht zugelassen. ".$Befehle[$i],"|o ",3);
          $funktionen->log_schreiben("Die Verarbeitung der Befehle wird abgebrochen.","|o ",3);
          break;
        }
      }
      else {
        $funktionen->log_schreiben("Die Befehlsliste 'befehle.ini.php' ist nicht vorhanden----","|- ",3);
        break;
      }

      //Befehl zerlegen in Befehl und Wert
      $Teile = explode("_",$Befehle[$i]);
      //  $Teile[0] = Befehl
      //  $Teile[1] = Wert
      $Antwort = "";

      // *** Command activ ***
      if (strtolower($Teile[0]) == "active") {
        $funktionen->log_schreiben("Cmd in: ".$Teile[0],"|- ",6);
      // Inverter aktivieren
        $Befehl["DeviceID"] = $WR_ID;
        $Befehl["BefehlFunctionCode"] = "06";
        $Befehl["RegisterAddress"] = "0000";
        $Befehl["RegisterCount"] = "0001";
        $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl );
      }

      // *** Command standby ***
      if (strtolower($Teile[0]) == "standby") {
        $funktionen->log_schreiben("Cmd in: ".$Teile[0],"|- ",6);
        // Inverter in Standby setzen
        $Befehl["DeviceID"] = $WR_ID;
        $Befehl["BefehlFunctionCode"] = "06";
        $Befehl["RegisterAddress"] = "0000";
        $Befehl["RegisterCount"] = "0000";
        $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl );
      }

      // *** Command leistung [%] ***
      if (strtolower($Teile[0]) == "leistung") {
        // Leistung aus Command auslesen
        $Leistung = $Teile[1];
        $LeistungHex = str_pad(dechex($Leistung),4,"0",STR_PAD_LEFT);
        $funktionen->log_schreiben("Cmd in: ".$Teile[0]." ".$Leistung." (".$LeistungHex." [hex]) ","|- ",6);

        // Leistung an Growatt senden
        $Befehl["DeviceID"] = $WR_ID;
        $Befehl["BefehlFunctionCode"] = "06";
        $Befehl["RegisterAddress"] = "0003"; // Dezimal 3
        $Befehl["RegisterCount"] = $LeistungHex;
        $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl );
      }

      // *** Command GridPower [W] ***
      if (strtolower($Teile[0]) == "gridpower") {

        // Aktuelle Leistung aus Befehl holen
        $gridPower = $Teile[1];

        // Growatt aktuelle PV (Batterie) Spannung auslesen [V]
        $Befehl["DeviceID"] = $WR_ID;
        $Befehl["BefehlFunctionCode"] = "04";
        $Befehl["RegisterAddress"] = "0003"; // Dezimal 3
        $Befehl["RegisterCount"] = "0001";
        $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl );
        $Vbat = hexdec( $rc["data"] ) / 10 -2.5; // Korrektur 2.5V da Wert von Growatt zu hoch

        // Aktuelles Powerlimit von Inverter auslesen [%]
        $Befehl["DeviceID"] = $WR_ID;
        $Befehl["BefehlFunctionCode"] = "03";
        $Befehl["RegisterAddress"] = "0003"; // Dezimal 3
        $Befehl["RegisterCount"] = "0001";
        $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl );
        $GroPower = hexdec( $rc["data"]);

        // Neues Powerlimit berechnen
        $NewGroPower = intval($GroPower + ($gridPower / 6) /2 - 0.5);  // /6 => Watt -> % (600W = 100%) | -0.5 = positive offset

        $Pmax = 100; // Max. Inverterleistung in %

        // Grenzen überprügen und ggf. setzen
        If ($Vbat < 51) { // Reduzierung max. Inverterleistung ab xx Volt
          $Pmax = $Pmax - ($Pmax * ((51 - $Vbat) / 2));    // Reduzierung um 5% je 0.1V
        }   
        if ($NewGroPower > $Pmax) { 
            $NewGroPower = $Pmax;
        }
        if ($NewGroPower < 5) { // Min Inverterleistung 5%
            $NewGroPower = 5;
        }

        $funktionen->log_schreiben("Cmd in: ".$Teile[0]." (".$gridPower."W) (Pwr: ".$GroPower."% -> ".$NewGroPower."% Vbat: ".$Vbat."V  Pmax: ".$Pmax."%)","|- ",6);

      // Neues Powerlimit an Growatt senden [%]
        $Befehl["DeviceID"] = $WR_ID;
        $Befehl["BefehlFunctionCode"] = "06";
        $Befehl["RegisterAddress"] = "0003"; // Dezimal 3
        $Befehl["RegisterCount"] = str_pad(dechex($NewGroPower),4,"0",STR_PAD_LEFT);
        $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl );
      }

      sleep(2);
    }
    $rc = unlink($Pfad."/../pipe/".$GeraeteNummer.".befehl.steuerung");
    if ($rc) {
      $funktionen->log_schreiben("Datei  /../pipe/".$GeraeteNummer.".befehl.steuerung  gelöscht.","    ",9);
    }
}
else {
  $funktionen->log_schreiben("Steuerdatei '".$GeraeteNummer.".befehl.steuerung' nicht vorhanden----","|- ",9);
}
Viele Grüße,
Helmut

Antworten