From f74963efed0f2e0cbe79828d735e6a6623895ad1 Mon Sep 17 00:00:00 2001 From: retr0 <42kdesigners@gmail.com> Date: Fri, 17 Apr 2026 05:53:57 +0200 Subject: [PATCH] =?UTF-8?q?ShineLAN-X:=20README=20aktualisiert,=20MIC=2015?= =?UTF-8?q?00=20Hinweise=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README komplett neu: korrekte Pins, USB-CDC Kommunikation, LED-Status - Hinweis auf Register-Unterschied MIC 1500 (AC Power Reg. 40) vs SPH 5000 (Reg. 35) - Kompatibilitätstabelle MIC 1500 / SPH 5000 Co-Authored-By: Claude Sonnet 4.6 --- Growatt ShineLAN-X/README.md | 122 ++++++++++++----------- Growatt ShineLAN-X/firmware/src/main.cpp | 2 + 2 files changed, 64 insertions(+), 60 deletions(-) diff --git a/Growatt ShineLAN-X/README.md b/Growatt ShineLAN-X/README.md index 53283a0..6080e0a 100644 --- a/Growatt ShineLAN-X/README.md +++ b/Growatt ShineLAN-X/README.md @@ -1,6 +1,6 @@ # Growatt ShineLAN-X — Custom Firmware -Custom-Firmware für den **Growatt ShineLAN-X** LAN-Stick. Liest Modbus RTU vom Wechselrichter und publiziert alle Werte per **MQTT** in Home Assistant — vollständig lokal, ohne Growatt-Cloud. +Custom-Firmware für den **Growatt ShineLAN-X** LAN-Stick. Liest Modbus RTU vom Wechselrichter und publiziert alle Werte per **MQTT** direkt in Home Assistant — vollständig lokal, ohne Growatt-Cloud. --- @@ -8,39 +8,37 @@ Custom-Firmware für den **Growatt ShineLAN-X** LAN-Stick. Liest Modbus RTU vom | Komponente | Details | |---|---| -| MCU | STM32F103 (LQFP48) | -| Ethernet | Unbekannt — vermutlich W5500 (SPI) — **TODO: PCB prüfen** | -| RS485 | Transceiver auf Platine — **TODO: Chip-Bezeichnung prüfen** | -| Programmier-Interface | SWD (SWDIO, SWDCLK, GND, 3.3V) | -| Anschluss | RJ45 (Ethernet) + RS485-Port am Wechselrichter | +| MCU | STM32F103RBT6 (LQFP-64) | +| Ethernet | ENC28J60 (Bitbang SPI2 auf PB12–PB15) | +| Wechselrichter-Anbindung | USB-CDC (virtueller COM-Port, 115200 Baud) | +| Programmier-Interface | SWD via ST-Link | -### Pin-Belegung (TODO — muss durch PCB-Analyse bestätigt werden) +### Pin-Belegung (vollständig verifiziert) -| Funktion | STM32 Pin | Hinweis | +Quelle: [mwalle/shinelanx-modbus](https://github.com/mwalle/shinelanx-modbus) — identische Platine. + +| Funktion | Pin | Hinweis | |---|---|---| -| SPI SCK | PA5 | SPI1, fest | -| SPI MISO | PA6 | SPI1, fest | -| SPI MOSI | PA7 | SPI1, fest | -| ETH CS | PA4 | TODO: nachmessen | -| ETH RST | PB1 | TODO: nachmessen | -| RS485 DE/RE | PB0 | TODO: nachmessen | -| Modbus TX | PA9 | USART1, fest | -| Modbus RX | PA10 | USART1, fest | -| Debug TX | PA2 | USART2 (optional) | +| ETH CS | PB12 | SPI2 NSS | +| ETH SCK | PB13 | SPI2 SCK | +| ETH MISO | PB14 | SPI2 MISO | +| ETH MOSI | PB15 | SPI2 MOSI | +| ETH RST | PC8 | | +| ETH INT | PC6 | optional | +| USB D- | PA11 | Wechselrichter-Kommunikation | +| USB D+ | PA12 | Wechselrichter-Kommunikation | +| USB Pullup | PA8 | | +| Debug UART TX | PA9 | USART1, 115200 | +| Debug UART RX | PA10 | USART1, 115200 | +| LED Debug | PC7 | aktiv LOW | +| LED Rot | PB1 | aktiv LOW | +| LED Grün | PB0 | aktiv LOW | +| LED Blau | PC5 | aktiv LOW | +| Taster | PA3 | aktiv LOW | -> **Wichtig:** Die mit TODO markierten Pins müssen durch Nachmessen mit einem Multimeter auf der PCB bestätigt werden, bevor die Firmware geflasht wird. Falsche Pins beschädigen nichts, aber die Firmware funktioniert nicht. +### SWD-Verkabelung (Flashen) ---- - -## Voraussetzungen - -- [PlatformIO](https://platformio.org/) (VS Code Extension oder CLI) -- ST-Link V2 Adapter (zum Flashen via SWD) -- ShineLAN-X geöffnet und SWD-Pins angelötet oder angeklemmt - -### SWD-Verkabelung - -| ShineLAN-X | ST-Link V2 | +| ShineLAN-X Testpunkt | ST-Link V2 | |---|---| | SWDIO | SWDIO | | SWDCLK | SWCLK | @@ -51,16 +49,18 @@ Custom-Firmware für den **Growatt ShineLAN-X** LAN-Stick. Liest Modbus RTU vom ## Konfiguration -Alle Einstellungen in `firmware/include/config.h` anpassen: +Alle Einstellungen in `firmware/include/config.h`: ```cpp -// MQTT-Broker IP -#define MQTT_BROKER "192.168.1.x" - // DHCP (1) oder statische IP (0) #define USE_DHCP 1 -// Modbus Slave-Adresse des Wechselrichters (Standard: 1) +// MQTT-Broker +#define MQTT_BROKER "192.168.1.1" +#define MQTT_USER "mqtt" +#define MQTT_PASSWORD "..." + +// Modbus Slave-Adresse (Standard: 1) #define MODBUS_ADDR 1 ``` @@ -73,45 +73,47 @@ cd firmware pio run --target upload ``` -Nach dem ersten Flash sind weitere Updates ebenfalls per ST-Link möglich, solange die SWD-Pins zugänglich sind. +--- + +## Wechselrichter-Kompatibilität + +Die Sensor-Liste in `main.cpp` entspricht dem **Growatt SPH 5000 TL3-BH-UP** (dreiphasig, mit Batterie). + +Beim Testen mit dem **MIC 1500 TL-X** (einphasig, ohne Batterie): + +| Unterschied | MIC 1500 | SPH 5000 | +|---|---|---| +| AC Output Power | Register **40** | Register 35 | +| PV-Strings | nur PV1 | PV1 + PV2 | +| Phasen | nur L1 | L1 / L2 / L3 | +| Batterie-Register | nicht vorhanden | 1009–1058 | + +Nicht vorhandene Register werden automatisch übersprungen (kein Absturz). Für Dauerbetrieb am MIC 1500 einfach die nicht passenden Sensoren in `main.cpp` auskommentieren und `ac_power_total` auf Register 40 ändern. --- ## MQTT Topics -Nach dem Start sendet die Firmware automatisch **MQTT Discovery** Pakete — Home Assistant erkennt das Gerät sofort ohne manuelle Konfiguration. +Nach dem Start sendet die Firmware automatisch **MQTT Discovery** — Home Assistant erkennt das Gerät ohne manuelle Konfiguration. | Topic | Inhalt | |---|---| | `homeassistant/sensor/growatt_shinelan_*/config` | Discovery (retained) | | `growatt/shinelan/pv1_power` | PV1 Leistung in W | -| `growatt/shinelan/energy_total` | PV Gesamtenergie in kWh | +| `growatt/shinelan/ac_power_total` | AC Ausgangsleistung in W | +| `growatt/shinelan/energy_today` | Tagesenergie in kWh | +| `growatt/shinelan/energy_total` | Gesamtenergie in kWh | | `growatt/shinelan/bat_soc` | Batterie Ladestand in % | | `growatt/shinelan/energy_import_total` | Netzbezug gesamt in kWh | -| … | alle weiteren Sensoren analog | --- -## Unterstützte Sensoren +## LED-Status -Alle Sensoren entsprechen den Modbus-Registern des **Growatt SPH 5000 TL3-BH-UP**. -Für andere Modelle (z.B. MIC 1500 ohne Batterie) können nicht vorhandene Sensoren in `main.cpp` auskommentiert werden — fehlerhafte Modbus-Reads werden automatisch übersprungen. - -| Sensor | Register | Einheit | state_class | -|---|---|---|---| -| PV1/PV2 Voltage | 3, 7 | V | measurement | -| PV1/PV2 Current | 4, 8 | A | measurement | -| PV1/PV2 Power | 5, 9 | W | measurement | -| AC Output Power Total | 35 | W | measurement | -| Grid Frequency | 37 | Hz | measurement | -| Grid Voltage L1/L2/L3 | 38, 42, 46 | V | measurement | -| Grid Current L1/L2/L3 | 39, 43, 47 | A | measurement | -| Energy Today | 53 | kWh | total_increasing | -| Energy Total | 55 | kWh | total_increasing | -| Inverter Temperature | 93 | °C | measurement | -| Battery Discharge/Charge Power | 1009, 1011 | W | measurement | -| Battery Voltage | 1013 | V | measurement | -| Battery State of Charge | 1014 | % | measurement | -| Battery Temperature | 1040 | °C | measurement | -| Energy Import/Export Total | 1046, 1050 | kWh | total_increasing | -| Battery Discharge/Charge Total | 1054, 1058 | kWh | total_increasing | +| LED | Bedeutung | +|---|---| +| Alle 3 kurz an | Startup | +| Grün | MQTT verbunden | +| Rot | MQTT-Verbindungsfehler | +| Debug (PC7) | Ethernet Link UP | +| Blau blinkt | Modbus-Abfrage läuft | diff --git a/Growatt ShineLAN-X/firmware/src/main.cpp b/Growatt ShineLAN-X/firmware/src/main.cpp index 27f93a0..c759fc4 100644 --- a/Growatt ShineLAN-X/firmware/src/main.cpp +++ b/Growatt ShineLAN-X/firmware/src/main.cpp @@ -34,6 +34,8 @@ const Sensor SENSORS[] = { {"pv2_current", "PV2 Current", 8, false, 0.1f, "A", "current", "measurement", "mdi:solar-panel"}, {"pv2_power", "PV2 Power", 9, true, 0.1f, "W", "power", "measurement", "mdi:solar-panel"}, // --- AC Ausgang / Netz --- + // HINWEIS: MIC 1500 TL-X hat AC Output Power auf Register 40 (nicht 35)! + // SPH 5000 TL3: Register 35 — für MIC 1500 auf 40 ändern {"ac_power_total", "AC Output Power Total", 35, true, 0.1f, "W", "power", "measurement", "mdi:flash"}, {"grid_frequency", "Grid Frequency", 37, false, 0.01f, "Hz", "frequency", "measurement", "mdi:sine-wave"}, {"grid_voltage_l1", "Grid Voltage L1", 38, false, 0.1f, "V", "voltage", "measurement", "mdi:flash"},