Zum Inhalt

Sungrow SH10RT — Batterie, EMS & Modbus Referenz

Stand: 23. März 2026


Systembeschreibung

Komponente Modell Details
Wechselrichter SH10RT-20 10 kW Hybrid, SN: A2351210260
Batterie SBR128→SBR160 5 SBR-Module (seit 06.03.2026), 16 kWh nominal
Wallbox AC011E-01 11 kW, RS485 auf COM1, SN: A24919A2960
Logger WiNet-S Modbus TCP Gateway, 192.168.100.75:502

Modbus-Zugang

  • IP: 192.168.100.75 (WiNet-S Dongle)
  • Port: 502 (Modbus TCP)
  • Unit ID: 1 (Wechselrichter)
  • Erreichbar von: raspip5 (192.168.178.199) via Sungrow-Subnetz 192.168.100.x
  • Latenz: ~17ms

Input Register (Read-Only) — Messwerte

Register Name Typ Scale Einheit Beschreibung
13000 Running State U16 1 Betriebszustand (Bitmask)
13009 Grid Power S16 1 W Netzleistung (neg=Export)
13010 Battery Power S16 1 W Batterieleistung (pos=Entladung, 0xFFFF=idle)
13022 Battery Voltage U16 0.1 V Batteriespannung
13023 Battery SOC U16 0.1 % Ladezustand
13024 Battery SOH/Temp U16 0.1 SOH oder Temperatur

Running State Bitmask (Register 13000)

Bit Wert Bedeutung
0 1 PV erzeugt
1 2 Batterie wird geladen
2 4 Batterie wird entladen
3 8 Last aktiv
4 16 Einspeisung (Export)
5 32 Netzbezug (Import)

Typische Kombinationen: - 12 (4+8) = Entladen + Last → Batterie versorgt Haus (nachts, normal) - 25 (1+8+16) = PV + Last + Export → PV versorgt Haus + speist ein - 27 (1+2+8+16) = PV + Laden + Last + Export → PV versorgt alles + lädt Batterie - 40 (8+32) = Last + Import → Netz versorgt Haus (Batterie inaktiv!)


Holding Register (Read/Write) — EMS-Steuerung

Register Name Scale Bereich Normaler Wert Beschreibung
13049 EMS Mode 1 0,2,3 0 0=Eigenverbrauch, 2=Forced, 3=External EMS
13050 Charge/Discharge Cmd 1 0xAA/BB/CC 0xBB (187) 0xAA=Laden, 0xBB=Entladen, 0xCC=STOPP!
13051 Forced Power 1 W 0–5000 0 Leistung für Forced Mode
13055 Battery Type 1 0–10 9 9=Li-ion Sungrow
13056 Nominal Voltage 0.1 V Nominale Batteriespannung
13057 Battery Capacity 1 Ah 10–1000 500 Batteriekapazität (in Ah!)
13058 Min SOC 0.1 % 0–50% 100 (=10%) Entlade-Untergrenze
13099 Backup Reserve SOC 1 % 0–100 5 Notstrom-Reserve

Erweiterte Register (33xxx-Bereich)

Register Name Scale Beschreibung
33046 Max Charge Power ×10 W Maximale Ladeleistung
33047 Max Discharge Power ×10 W Maximale Entladeleistung

SOC-Parameter — Drei verschiedene Werte!

Parameter Register Funktion
Min SOC (13058) Entlade-Untergrenze im Normalbetrieb Batterie wird nicht darunter entladen
Backup Reserve SOC (13099) Reserviert für Notstrom Wird im Normalbetrieb nicht genutzt
BMS-Abschaltung Intern, ~0-5% Hardware-Schutz gegen Tiefentladung

Zusammenspiel: Im Normalbetrieb entlädt der WR bis max(Min SOC, Backup Reserve). Bei Netzausfall wird die Backup Reserve freigegeben.

Wichtig: Max SOC (Register 13057 lt. manchen Protokollversionen) immer auf 100% lassen! Werte <100% deaktivieren das BMS Cell-Balancing.


Batterie-Hardware

SBR-Module (LiFePO4)

Parameter Wert
Spannung pro Modul 51,2 V nominal (16S × 3,2V)
Kapazität pro Modul 3,2 kWh
Vollladung (100% SOC) ~57 V pro Modul
Systemspannung 5 Module ~256 V nominal, ~277 V bei 100%
BMS-Kommunikation CAN-Bus (proprietär, NICHT RS485)
SOC-Berechnung Coulomb-Counting + OCV-Korrektur (durch BMS)
Zyklen ≥6.000 bei 90% DoD

Spannungsreferenz

Module Nominal 100% SOC
4 204,8 V ~205 V
5 256,0 V ~277 V
6 307,2 V ~334 V

Vorfälle & Troubleshooting

Vorfall 1: Batterie-Stopp nach Moduleinbau (07./08.03.2026)

Problem: Nach Einbau des 5. SBR-Moduls entlud die Batterie nicht mehr. Running State = 40 (Import+Last). Ursache: Register 13050 = 0xCC (STOPP) — vom Installateur nicht zurückgesetzt. Fix: client.write_register(address=13050, value=187) (0xBB = Entladen)

Vorfall 2: Batteriekapazität = 0 (22./23.03.2026)

Problem: Batterie entlud nicht, SOC zeigte 0%, Spannung 100V. Running State = 40. Ursache: Batteriekapazität in den erweiterten Einstellungen stand auf 0 kWh. Vermutung: Wurde beim Moduleinbau zurückgesetzt oder war nie korrekt eingestellt. Fix: In iSolarCloud Web-App → Geräte → Wechselrichter → Erweiterte Einstellungen → Batterieparameter → Batteriekapazität auf 16 gesetzt. Ergebnis: Register 13057 änderte sich von 1000 auf 500 (Ah), SOC sprang von 0% auf 99%. Hinweis: WiNet-S überträgt Cloud-Änderungen verzögert (Minuten bis Stunden). Bei Nicht-Übernahme: WiNet-S physisch neustarten.

Troubleshooting-Checkliste: Batterie entlädt nicht

  1. Running State prüfen (13000): Soll nachts 12 sein, nicht 40
  2. SOC prüfen (13023): Muss > Min SOC sein
  3. Min SOC prüfen (13058): Soll 100 (=10%), nicht 0 oder 1000
  4. Batteriekapazität prüfen (13057): Muss > 0 sein (z.B. 500 Ah für 5 Module)
  5. Lade/Entlade-Befehl prüfen (13050): Muss 0xBB (187) sein, nicht 0xCC (204)
  6. EMS-Modus prüfen (13049): Soll 0 (Eigenverbrauch) sein
  7. Batteriespannung prüfen (13022): Sollte ~250-280V für 5 Module sein

Vorfall 3: Wallbox-Abbruch blockiert Batterie (22./23.03.2026)

Problem: Batterie entlud nicht, Running State = 40, trotz korrekter Parameter. Vermutete Ursache: Fehlgeschlagener Wallbox-Ladeversuch am 22.03. nachmittags. Wallbox blieb in Status "Laden unterbrochen" hängen → WR-EMS reservierte Leistung für Wallbox → Batterie-Entladung blockiert. Begleiterscheinungen: Batteriekapazität=0, Max SOC=50% — möglicherweise durch Wallbox-EMS-Interaktion zurückgesetzt. Fix: WR-Reset (AC+DC+Batterie aus, 10 Min, wieder ein) → Wallbox-Status auf "nicht angeschlossen" zurückgesetzt. Verifizierung: Forced Mode per Modbus (13049=2, 13050=0xBB, 13051=3000) → Batterie entlud 3 kW → BMS funktioniert. Verifizierung Abend 23.03.: Batterie entlädt im Eigenverbrauchsmodus → State 12, 265V, SOC 99%, Netz 0W. Problem bestätigt gelöst durch WR-Reset. Empfehlung: Nach jedem abgebrochenen Wallbox-Ladevorgang Status in iEnergyCharge App prüfen. Bei Fehlzustand: Wallbox in App manuell zurücksetzen oder WR neustarten.

Vorfall 4: Batterie-Stopp durch Kälteschutz (26./27.03.2026)

Problem: Ab 26.03. ~22:00 entlud die Batterie nicht mehr, WR ging in Standby (Running State=0). Hausverbrauch, Batterie-Leistung zeigten 0 — in HA, Grafana UND iSolarCloud.

Ursache: Kälteschutz des BMS. Die Nacht 26→27.03 war deutlich kälter als die Nächte davor:

Nacht 25→26.03 (OK) Nacht 26→27.03 (Stopp)
Batterie-Temp 22:00 8°C 6°C
Tiefsttemp (morgens) 4°C 2°C
Entladung ganze Nacht (77%→36%) stoppt um 22:00 (91%→77%)

Die SBR LiFePO4-Zellen stoppen die Entladung bei ≤5-6°C Batterietemperatur.

Kein Fix nötig — Hardwareschutz des BMS. Batterie entlädt wieder bei steigender Temperatur.

Begleitfix: Weil der WR im Standby-Modus 0 für das Load-Register meldet, wurden berechnete Metriken eingeführt (siehe Abschnitt "Berechnete Metriken").

Kaelteschutz und Standort-Isolierung

Hintergrund: Die SBR-Module stehen im Carport (ueberdacht, feuchtigkeitsgeschuetzt, aber nicht temperaturgeschuetzt). Im Winter faellt die Batterietemperatur regelmaessig unter die BMS-Schwelle.

BMS-Temperaturgrenzen (fest, nicht konfigurierbar):

Temperatur Laden Entladen
> 5°C Ja Ja
0-5°C Nein Eingeschraenkt/Nein
< 0°C Nein Nein

Die 5°C-Grenze ist im BMS der SBR-Module hardcodiert — kein Parameter in iSolarCloud, kein Modbus-Register, nicht aenderbar. Der Temperatursensor sitzt im BMS innerhalb der Module (misst Zelltemperatur direkt).

Sungrow spezifiziert fuer SBR-Module: -10°C bis +50°C (Lagerung), 0°C bis +50°C (Betrieb).

Empfehlung: Styropor-Isolierung fuer Winterbetrieb

  1. Styropor-Platten (40-60 mm) um alle Module — Seiten, Deckel, Unterlage
  2. Kabel durch Ausschnitte fuehren
  3. Nicht luftdicht verschliessen — Belueftungsschlitze lassen (Kondensation)
  4. Optional: Frostwaechter-Heizluefter (Thermostat auf 8°C) mit in die Box
  5. Im Fruehjahr Deckel abnehmen — Ueberhitzung im Sommer vermeiden!

Erwarteter Effekt: +3-5°C gegenueber Aussentemperatur. Die Batterie erzeugt beim Laden/Entladen selbst Waerme, die Isolierung haelt diese im Gehaeuse.

Kosten: ~20 EUR Material (Baumarkt), optional +30 EUR Frostwaechter.

Kalibrierung nach Modulerweiterung

  1. Batteriekapazität im WR/iSolarCloud anpassen (kWh)
  2. Battery Type ggf. aktualisieren (SBR128 → SBR160)
  3. Einmal komplett entladen lassen (bis BMS-Abschaltung)
  4. Einmal komplett auf 100% laden lassen
  5. Dieser Vollzyklus synchronisiert BMS-SOC und WR-SOC

iSolarCloud — Zugang & Menüstruktur

Zugangsdaten

Portal Account Typ
https://web3.isolarcloud.eu anknorr@gmail.com Installateur (Erweiterte Einstellungen)
https://web3.isolarcloud.eu anknorr@me.com Endkunde
iOS App: iSolarCloud Kein Zugriff auf Erweiterte Einstellungen!
Geräte → Wechselrichter SH10RT auswählen → Einstellungen
├── Allgemeine Parametereinstellungen (Endkunde)
│   ├── Leistungssteuerung
│   │   ├── Backup-Modus aktivieren
│   │   └── Reservierter Batterie-SOC für Backup
│   ├── Energiemanagementparameter
│   │   ├── EMS-Modus
│   │   └── DO-Kontakt
│   └── Batterie-Management
│       ├── Lade-/Entladezeiten
│       └── Zwangsladung
│
└── Erweiterte Parametereinstellungen (nur Installateur, nur Web!)
    ├── Schutzparameter
    ├── Leistungssteuerungsmodus
    ├── Energiemanagementparameter
    └── Batterieparameter
        ├── Batteriekapazität (kWh)
        ├── Max SOC (%)
        ├── Min SOC (%) ← Entlade-Untergrenze
        ├── Max. Ladeleistung (kW)
        ├── Max. Entladeleistung (kW)
        └── Entladeabschaltung SOC

Wichtig: Erweiterte Einstellungen sind nur in der Web-Version verfügbar, nicht in der iOS App!

API-Verschlüsselung

Die iSolarCloud API (seit ~2026) erfordert AES+RSA-Verschlüsselung: 1. Random AES-256 Key generieren ("web" + 29 Zufallszeichen) 2. AES Key mit RSA Public Key verschlüsseln → Header x-random-secret-key 3. Request-Body mit AES-ECB verschlüsseln (hex-encoded) 4. Header x-access-key: 9grzgbmxdsp3arfmmgq347xjbza4ysps 5. AppKey: B0455FBE7AA0328DB57B59AA729F05D8 6. Passwort als MD5-Hash 7. RSA Public Key: siehe /tmp/isolar_final2.py

Status API-Zugang: Login mit anknorr@me.com funktioniert (MD5-Hash von 282013Hr). Login mit anknorr@gmail.com scheitert (Passwort-Format unklar).


Home Assistant Integration

Modbus-Konfiguration

Datei: /data/docker/homeassistant/config/modbus_sungrow.yaml

Prometheus-Metriken (sungrow-exporter, Port 9789)

45 Metriken mit Prefix sungrow_*, u.a.: - sungrow_battery_soc_percent, sungrow_running_state - sungrow_battery_power_watts, sungrow_battery_voltage_volts - sungrow_daily_charge_energy_kwh, sungrow_daily_discharge_energy_kwh

Berechnete Metriken (hinzugefügt 27.03.2026)

Problem: Wenn der WR in Standby geht (nachts, Kälteschutz), meldet das Load-Register 0W, obwohl das Haus weiter Strom bezieht. Grid-Register funktioniert weiterhin (CT-Clamp/Meter).

HA Template-Sensoren (in configuration.yaml): - sensor.sungrow_hausverbrauch_berechnet — Berechnet PV - Grid + Battery als Fallback wenn Load-Register 0 liefert. Nutzt running_state-Bits für Batterie-Vorzeichen. - sensor.sungrow_batterie_status — Nutzt running_state-Bits (Bit 1=Laden, Bit 2=Entladen) statt nur Leistungswert. 0W bei running_state=0 → "Standby" (vorher fälschlich "Entladen").

Prometheus-Exporter (neue Metriken): - sungrow_load_power_calculated_watts — Berechneter Hausverbrauch (Fallback) - sungrow_battery_power_signed_watts — Mit Vorzeichen (positiv=Laden, negativ=Entladen)

Grafana Dashboard (ck-pv-sungrow): 4 Panels auf berechnete Metriken umgestellt.

Logik: Wenn load_power > 0 → Registerwert verwenden. Sonst: max(0, PV - Grid_active + Battery_net). Dabei Battery_net = +power bei Entladung, -power bei Ladung, 0 bei Standby (per running_state-Bits).

Alertmanager-Regeln (in alerts.yml)

  • BatterieEntlaedtNicht: Running State=40 + SOC>15%, 30 Min → warning
  • BatterieStopp: Running State=40 + SOC>50%, 5 Min → critical
  • SungrowExporterDown: Exporter nicht erreichbar, 5 Min → warning

Energie-Dashboard

  • HA: /energie/pv (lovelace.energie)
  • Grafana: sungrow-exporter Metriken

Sungrow-Subnetz (192.168.100.x)

IP Gerät Ports
.1 Gateway 80, 443
.23 FRITZ!Powerline-Adapter 80, 443
.26 FRITZ!Repeater 80, 443
.28 WiNet-S (zweiter Pfad) 443, 502
.73 INSTAR IP-Kamera 80, 443
.75 WiNet-S / SH10RT 443, 502

WiNet-S Local API

  • POST https://192.168.100.75/inverter/list → Geräteliste (WR, Wallbox, Batterie)
  • Kein Reboot-Endpunkt verfügbar
  • Kein Parameter-Set-Endpunkt verfügbar
  • Parameter-Änderungen nur über iSolarCloud (Cloud) oder Modbus (wo erlaubt)

Quellen

  • Sungrow Communication Protocol V1.0.20 – V1.1.4 (Residential Hybrid Inverter)
  • GitHub: mkaiser/Sungrow-SHx-Inverter-Modbus-Home-Assistant
  • GitHub: janispritzkau/Modbus Registers Gist
  • Photovoltaikforum: Sungrow-Board (Threads zu Min SOC, Erweiterte Einstellungen)
  • Sungrow Academy: academy.sungrow-emea.com
  • elektronik-nach-mass.de: Sungrow Hybrid technische Einstellungen PDFs

Troubleshooting-Checkliste: Kälteschutz

  1. Batterie-Temperatur prüfen (Exporter: sungrow_battery_temperature_celsius): <5°C → Entladung gesperrt
  2. Running State (13000): 0 = kompletter Standby, 40 = Import+Last (Netz versorgt Haus)
  3. Grafana/HA: Berechnete Metriken zeigen trotzdem korrekten Verbrauch (über Grid-Wert)
  4. iSolarCloud: Zeigt 0 — kann nicht gefixt werden, WR meldet nichts im Standby
  5. Entwarnung: Batterie entlädt wieder automatisch bei steigender Temperatur

Aktualisiert: 28.03.2026 Zusammengeführt aus: Modbus-Analyse, iSolarCloud App-Recherche, SBR-Batterie-Dokumentation, Kälteschutz-Analyse