Sungro Wallbox AC011e-01 an SH8.0RT

Wer ein Projekt betreibt, bitte hier einstellen. Ist es ein sehr interessantes Projekt, bekommt derjenige ein eigenes Unterforum.

Moderator: Ulrich

matkoe
Beiträge: 9
Registriert: Mi 14. Jun 2023, 21:12

Sungro Wallbox AC011e-01 an SH8.0RT

Beitrag von matkoe »

Ich habe meine Wallbox in die Sungrowerweiterung sungrow_math.php aufgenommen.
Die Modbusregister dazu konnte ich dem Projekt https://github.com/Eisbaeeer/sungrow/bl ... gister.tsv entnehmen. Danke an dieser Stelle.
Die Wallbox ist via RS485 am Wechselrichter angeschlossen und kann via Modbus IP abgefragt werden. Dazu muß im WiNet-S Adapter die Adresse ermittelt werden. In der Regel ist es die "2". ( Menü Gerät / Geräteliste, Spalte"Weiterleiten der Modbus ID", Hinweis: Seit dem letzten Update ist der Zugriff über https erforderlich und Modbus über WiNet-S ist stabil.)

Die Werte für Strom und Spannung der drei Phasen und die Anzahl der verwendeten Phasen wird ausgelesen, die jeweilige Leistung berechet und in dem Measurement "WB" gespeichert. Das Measurement "AC" wurde um die Spalte "HausOhneWB" erweitert.

Die Werte können dann in Grafana dargestellt werden.

Code: Alles auswählen

<?php

// 15.01.2025 Matthias Körner
// Abfrage von Daten aus einer Wallbox AC011e-01 via Modbus über WiNet-S Adapter
// Die Modbus Register stammen von folgenden Github Projekt
// https://github.com/Eisbaeeer/sungrow/blob/main/AC011E01_Input-Register.tsv
a
  $GeraeteAdrWB = "02"; // Dieser Wert muss aus dem WiNet-S Adapter ausgelesen werden.
                        // Menü Gerät / Geräteliste, Spalte"Weiterleiten der Modbus ID"
//  $Tracelevel = 8;    // zu anzeigen von Meldungen bei Inbetriebnahme

// Phase R
  $RegisterAdresse = 21301;
  $RegisterAnzahl = "0001";
  $DatenTyp = "U16";
  $Ergebnis = $funktionen->modbus_tcp_lesen($COM1, $GeraeteAdrWB, $FunktionsCode, $RegisterAdresse, $RegisterAnzahl, $DatenTyp, $Timebase);
  $funktionen->log_schreiben("WB Spannung_R".($Ergebnis["Wert"] ), "|--", 8);
  if (is_array($Ergebnis)) {
    $WB_Spannung_R=$Ergebnis["Wert"]/10;
  } else {
    $funktionen->log_schreiben("Lesefehler WB", "   ", 8);
  }

  $RegisterAdresse = 21302;
  $RegisterAnzahl = "0001";
  $DatenTyp = "U16";
  $Ergebnis = $funktionen->modbus_tcp_lesen($COM1, $GeraeteAdrWB, $FunktionsCode, $RegisterAdresse, $RegisterAnzahl, $DatenTyp, $Timebase);
  $funktionen->log_schreiben("WB Strom_R".($Ergebnis["Wert"] ), "|--", 8);
  if (is_array($Ergebnis)) {
    $WB_Strom_R = $Ergebnis["Wert"]/10;
  } else {
    $funktionen->log_schreiben("Lesefehler WB", "   ", 8);
  }

// Phase S
  $RegisterAdresse = 21303;
  $RegisterAnzahl = "0001";
  $DatenTyp = "U16";
  $Ergebnis = $funktionen->modbus_tcp_lesen($COM1, $GeraeteAdrWB, $FunktionsCode, $RegisterAdresse, $RegisterAnzahl, $DatenTyp, $Timebase);
  $funktionen->log_schreiben("WB Spannung_S".($Ergebnis["Wert"] ), "|--", 8);
  if (is_array($Ergebnis)) {
    $WB_Spannung_S = $Ergebnis["Wert"]/10;
  } else {
    $funktionen->log_schreiben("Lesefehler WB", "   ", 8);
  }

  $RegisterAdresse = 21304;
  $RegisterAnzahl = "0001";
  $DatenTyp = "U16";
  $Ergebnis = $funktionen->modbus_tcp_lesen($COM1, $GeraeteAdrWB, $FunktionsCode, $RegisterAdresse, $RegisterAnzahl, $DatenTyp, $Timebase);
  $funktionen->log_schreiben("WB Strom_S".($Ergebnis["Wert"] ), "|--", 8);
  if (is_array($Ergebnis)) {
    $WB_Strom_S = $Ergebnis["Wert"]/10;
  } else {
    $funktionen->log_schreiben("Lesefehler WB", "   ", 8);
  }

// Phanse T
  $RegisterAdresse = 21305;
  $RegisterAnzahl = "0001";
  $DatenTyp = "U16";
  $Ergebnis = $funktionen->modbus_tcp_lesen($COM1, $GeraeteAdrWB, $FunktionsCode, $RegisterAdresse, $RegisterAnzahl, $DatenTyp, $Timebase);
  $funktionen->log_schreiben("WB Spannung_T".($Ergebnis["Wert"] ), "|--", 8);
  if (is_array($Ergebnis)) {
    $WB_Spannung_T = $Ergebnis["Wert"]/10;
  } else {
    $funktionen->log_schreiben("Lesefehler WB", "   ", 8);
  }

  $RegisterAdresse = 21306;
  $RegisterAnzahl = "0001";
  $DatenTyp = "U16";
  $Ergebnis = $funktionen->modbus_tcp_lesen($COM1, $GeraeteAdrWB, $FunktionsCode, $RegisterAdresse, $RegisterAnzahl, $DatenTyp, $Timebase);
  $funktionen->log_schreiben("WB Strom_T".($Ergebnis["Wert"] ), "|--", 8);
  if (is_array($Ergebnis)) {
    $WB_Strom_T = $Ergebnis["Wert"]/10;
  } else {
    $funktionen->log_schreiben("Lesefehler WB", "   ", 8);
  }

// Phasenanzahl
  $RegisterAdresse = 21203;
  $RegisterAnzahl = "0001";
  $DatenTyp = "U16";
  $Ergebnis = $funktionen->modbus_tcp_lesen($COM1, $GeraeteAdrWB, $FunktionsCode, $RegisterAdresse, $RegisterAnzahl, $DatenTyp, $Timebase);
  $funktionen->log_schreiben("WB Strom_T".($Ergebnis["Wert"] ), "|--", 8);
  if (is_array($Ergebnis)) {
    $WB_Phase = $Ergebnis["Wert"];
  } else {
    $funktionen->log_schreiben("Lesefehler WB", "   ", 8);
  }

//Leistung aus allen Phasen ermitteln
  $LeistungWB_R = $WB_Spannung_R*$WB_Strom_R;
  $LeistungWB_S = $WB_Spannung_S*$WB_Strom_S;
  $LeistungWB_T = $WB_Spannung_T*$WB_Strom_T;
  $LeistungWB = $LeistungWB_R+$LeistungWB_S+$LeistungWB_T;
//Leistung für Haus berechnen
  $HausOhneWB = $aktuelleDaten["Hausverbrauch"] - $LeistungWB;
//Query erstellen

// WB Measurement (Neu)
  $aktuelleDaten["ZusatzQuery"]  = "WB ";
  $aktuelleDaten["ZusatzQuery"] .=  "Spannung_R=".$WB_Spannung_R.",Strom_R=".$WB_Strom_R.",Leistung_R=".$LeistungWB_R;
  $aktuelleDaten["ZusatzQuery"] .= ",Spannung_S=".$WB_Spannung_S.",Strom_S=".$WB_Strom_S.",Leistung_S=".$LeistungWB_S;
  $aktuelleDaten["ZusatzQuery"] .= ",Spannung_T=".$WB_Spannung_T.",Strom_T=".$WB_Strom_T.",Leistung_T=".$LeistungWB_T;
  $aktuelleDaten["ZusatzQuery"] .= ",Leistung=".$LeistungWB.",Phasen=".$WB_Phase;
  $aktuelleDaten["ZusatzQuery"] .= "\n";
// AC Measurement (neue Spalte)
  $aktuelleDaten["ZusatzQuery"] .= "AC HausOhneWB=".$HausOhneWB;
  $aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten['zentralerTimestamp'];
//  $funktionen->log_schreiben( $aktuelleDaten["ZusatzQuery"], "   ", 8);

?>

Zurück zu „Sonstige Projekte von Mitgliedern“

Wer ist online?

Mitglieder in diesem Forum: Sonstige [Bot] und 0 Gäste