docs: README auf v1.8.18 aktualisiert

Flash-Wizard, OTA-Abschnitt (Zwei-Phasen), Setup-Wizard, Finanzen-Tab,
Abschlags-Tracker, Port-Sicherheit, Überschuss-Geräte, repo-Struktur.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
retr0
2026-05-05 21:32:29 +02:00
parent 3b3d4055f6
commit e72ad2db19
+67 -33
View File
@@ -1,6 +1,6 @@
# ShineBridge # ShineBridge
Lokale Solar-Wechselrichter-Integration für Home Assistant — ohne Cloud, ohne Hersteller-App. Modbus TCP via ShineLAN-X, MQTT Discovery, persistente History, PV-Überschussladen. Lokale Solar-Wechselrichter-Integration für Home Assistant — ohne Cloud, ohne Hersteller-App. Modbus TCP via ShineLAN-X, MQTT Discovery, persistente History, PV-Überschussladen, Energie-Dashboard.
> **Repository:** `https://gitea.bitfire.work/retr0/shinebridge` > **Repository:** `https://gitea.bitfire.work/retr0/shinebridge`
@@ -10,8 +10,8 @@ Lokale Solar-Wechselrichter-Integration für Home Assistant — ohne Cloud, ohne
| Komponente | Beschreibung | Status | | Komponente | Beschreibung | Status |
|---|---|---| |---|---|---|
| **ShineBridge Add-on** | HAOS Add-on: Modbus TCP / UDP → MQTT Discovery | ✅ v1.5.3 | | **ShineBridge Add-on** | HAOS Add-on: Modbus TCP / UDP → MQTT Discovery | ✅ v1.8.18 |
| **ShineLAN-X Firmware** | NuttX auf STM32F103: Modbus RTU ↔ TCP | ✅ Produktiv | | **ShineLAN-X Firmware** | NuttX auf STM32F103: Modbus RTU ↔ TCP + OTA | ✅ Produktiv |
| **ShineWifi-X ESPHome** | ESPHome-Configs für ESP8266-Stick | ✅ Getestet | | **ShineWifi-X ESPHome** | ESPHome-Configs für ESP8266-Stick | ✅ Getestet |
| **ShineDiag** | Portables Vor-Ort-Diagnose-Tool (Pi 3B) | ✅ Bereit | | **ShineDiag** | Portables Vor-Ort-Diagnose-Tool (Pi 3B) | ✅ Bereit |
@@ -30,13 +30,15 @@ Wechselrichter / Energiezähler
│ UDP/8899 (Goodwe) │ UDP/8899 (Goodwe)
│ Modbus TCP Port 502 (Kathrein Wallbox) │ Modbus TCP Port 502 (Kathrein Wallbox)
[ShineBridge Add-on] [ShineBridge Add-on] Port 8099 (HAOS Ingress)
├── Modbus TCP / Goodwe UDP / Kathrein Wallbox lesen ├── Modbus TCP / Goodwe UDP / Kathrein Wallbox lesen
├── EMS-Controller: PV-Überschussladen + Zwangsladen ├── EMS-Controller: PV-Überschussladen + Zwangsladen
├── MQTT Discovery → Home Assistant Sensoren ├── MQTT Discovery → Home Assistant Sensoren
├── Aggregat-Gerät „ShineBridge Gesamt" ├── Aggregat-Gerät „ShineBridge Gesamt"
├── Persistente History (SQLite, 7 Tage) ├── Persistente History (SQLite, 7 Tage)
── Web UI: Geräte verwalten, Live-Daten, Sparklines, EMS-Konfig ── Energie-Dashboard (SVG-Flussdiagramm, EPEX Spot)
├── Finanzen-Tab (Abschlags-Tracker, Eigenversorgung)
└── Web UI: Live-Daten, Geräte, Einstellungen, Flash-Wizard
``` ```
### Features ### Features
@@ -45,9 +47,16 @@ Wechselrichter / Energiezähler
- **MQTT Discovery** — Sensoren erscheinen automatisch in HA - **MQTT Discovery** — Sensoren erscheinen automatisch in HA
- **Aggregat-Gerät** — summiert alle Geräte für das HA Energie-Dashboard - **Aggregat-Gerät** — summiert alle Geräte für das HA Energie-Dashboard
- **Persistente History** — Messwerte überleben Add-on-Neustarts (SQLite, 7 Tage) - **Persistente History** — Messwerte überleben Add-on-Neustarts (SQLite, 7 Tage)
- **Energie-Dashboard** — HA-Style SVG-Flussdiagramm mit animierten Dots; EPEX-Spot-Chart
- **Finanzen-Tab** — kWh-Kosten, Eigenversorgung, Abschlags-Tracker (monatliche Rate + Grundpreis)
- **Flexibler Tarif** — Festpreis oder EPEX Spot (aWATTar DE/AT) mit Aufschlag
- **Sparklines** — Live-Graphen der letzten 5 Minuten pro Sensor - **Sparklines** — Live-Graphen der letzten 5 Minuten pro Sensor
- **EMS-Controller** — PV-Überschussladen der Kathrein Wallbox, Zwangsladen-Fallback - **EMS-Controller** — PV-Überschussladen der Kathrein Wallbox, Zwangsladen-Fallback
- **Setup-Wizard** — Geführte Ersteinrichtung (MQTT + erster Wechselrichter)
- **Flash-Wizard** — ShineLAN-X Firmware direkt aus dem Add-on flashen (OTA oder ST-Link-Anleitung)
- **Überschuss-Geräte** — Zigbee2MQTT-Geräte bei PV-Überschuss automatisch einschalten
- **Konfig-Export/Import** — JSON im Einstellungen-Tab - **Konfig-Export/Import** — JSON im Einstellungen-Tab
- **Port-Sicherheit** — `/api/*` nur über HAOS-Ingress erreichbar, kein Direktzugriff von außen
- **Kein Cloud-Zwang** — vollständig lokal - **Kein Cloud-Zwang** — vollständig lokal
### Unterstützte Geräte ### Unterstützte Geräte
@@ -82,37 +91,37 @@ Konfigurierbar pro Gerät im Web UI:
### Netzleistung (grid_power) ### Netzleistung (grid_power)
Der Sensor `grid_power` (Goodwe) zeigt die Netzleistung intuitiv: Der Sensor `grid_power` zeigt die Netzleistung intuitiv:
- **Positiv** = Netzbezug (Strom vom Netz) - **Positiv** = Netzbezug (Strom vom Netz)
- **Negativ** = Einspeisung (Strom ins Netz) - **Negativ** = Einspeisung (Strom ins Netz)
Bei reinen Growatt-Anlagen (ohne Goodwe) wird `power_to_grid` als Proxy verwendet (nur Einspeisung bekannt). Bei reinen Growatt-Anlagen (ohne Goodwe) wird `power_to_grid` als Proxy verwendet.
### Installation ### Installation
**Schritt 1 — NuttX auf den ShineLAN-X flashen** *(einmalig, ST-Link nötig)* **Schritt 1 — Add-on in Home Assistant installieren**
```bash
# dapboot Bootloader
st-flash write ShineLAN-X/releases/dapboot.bin 0x08000000
# NuttX Firmware
st-flash write ShineLAN-X/releases/nuttx-mbusd-shinelanx-dfu.bin 0x08002000
```
SWD-Pinbelegung: `PA13=SWDIO PA14=SWCLK GND 3.3V`
**Schritt 2 — Add-on in Home Assistant installieren**
1. **Einstellungen → Add-ons → Add-on-Store → ⋮ → Repositories** 1. **Einstellungen → Add-ons → Add-on-Store → ⋮ → Repositories**
2. URL: `https://gitea.bitfire.work/retr0/shinebridge` 2. URL: `https://gitea.bitfire.work/retr0/shinebridge`
3. „ShineBridge" → Installieren → Starten 3. „ShineBridge" → Installieren → Starten
4. MQTT-Zugangsdaten in der Add-on-Konfiguration eintragen
5. Web UI öffnen → Gerät hinzufügen **Schritt 2 — ShineLAN-X flashen**
Beim ersten Start erscheint der **Setup-Wizard** automatisch. Der Tab **Flash** im Web UI führt durch beide Szenarien:
- **OTA-Modus** (Stick bereits geflasht): IP eingeben → Firmware auswählen → Flashen. Die aktuelle Firmware ist im Add-on integriert.
- **Erstflash via ST-Link** (Stick noch ungeflasht): Schritt-für-Schritt-Anleitung mit Pinout und `st-flash`-Befehl.
Für den manuellen Erstflash:
```bash
# SWD-Pinbelegung: PA13=SWDIO PA14=SWCLK GND 3.3V
st-flash --reset write nuttx-mbusd-shinelanx.bin 0x08000000
```
**Schritt 3 — Gerät konfigurieren** **Schritt 3 — Gerät konfigurieren**
Im Web UI → „+ Gerät hinzufügen": Im Web UI → „+ Gerät hinzufügen" (oder Setup-Wizard beim ersten Start):
- Name, Modell, IP, Port, Modbus-Adresse, MQTT Topic-Präfix, Abfrageintervall - Name, Modell, IP, Port, Modbus-Adresse, MQTT Topic-Präfix, Abfrageintervall
- Bei Kathrein Wallbox: EMS-Parameter konfigurieren - Bei Kathrein Wallbox: EMS-Parameter konfigurieren
@@ -142,25 +151,42 @@ Gibt alle Messpunkte des gewählten Zeitfensters zurück (max. 7 Tage).
## ShineLAN-X Firmware ## ShineLAN-X Firmware
Der **Growatt ShineLAN-X** ist ein LAN-Monitoring-Stick (STM32F103RC + ENC28J60) der im USB-Port des Wechselrichters steckt. Die Custom-Firmware (NuttX + mbusd) macht ihn zum Modbus TCP Gateway. Der **Growatt ShineLAN-X** ist ein LAN-Monitoring-Stick (STM32F103RC + ENC28J60) der im USB-Port des Wechselrichters steckt. Die Custom-Firmware (NuttX + mbusd) macht ihn zum Modbus TCP Gateway mit OTA-Update-Funktion.
> **Firmware von [mwalle (Martin Walle)](https://github.com/mwalle/shinelanx-modbus)** > **Firmware basiert auf [mwalle (Martin Walle)](https://github.com/mwalle/shinelanx-modbus)**
> Das Binary `nuttx-mbusd-shinelanx-dfu.bin` ist das Werk von Martin Walle und wird hier unverändert weitergegeben.
> Lizenzen: Board-Support Apache 2.0 · mbusd BSD 3-Clause · Gateway-App BSD 2-Clause. > Lizenzen: Board-Support Apache 2.0 · mbusd BSD 3-Clause · Gateway-App BSD 2-Clause.
> Quellcode und Kompilieranleitung: [github.com/mwalle/shinelanx-modbus](https://github.com/mwalle/shinelanx-modbus) > Quellcode: [github.com/mwalle/shinelanx-modbus](https://github.com/mwalle/shinelanx-modbus)
### Flash-Layout ### Flash-Layout
``` ```
0x08000000 dapboot (7 KB) ← Bootloader für USB DFU OTA 0x08000000 dapboot (8 KB) ← Bootloader, nicht überschrieben
0x08002000 NuttX (93 KB) ← Modbus RTU ↔ TCP, Port 502 0x08002000 NuttX (93 KB) ← Modbus RTU ↔ TCP, Port 502 + OTA HTTP, Port 80
0x08020000 Staging (≤124 KB) ← OTA: Neue Firmware temporär hier
``` ```
### OTA-Update
Ab der DFU-Variante (`nuttx-mbusd-shinelanx-dfu.bin`) ist OTA ohne ST-Link möglich. Der Stick hostet einen HTTP-Server auf Port 80:
| Endpunkt | Beschreibung |
|---|---|
| `GET /` | Status-JSON: `{"ota":true,"app_base":"0x08002000",...}` |
| `POST /update` | Firmware-Binary empfangen, in Staging schreiben, anwenden, Reset |
| `POST /reboot` | Software-Reset |
Der OTA-Prozess läuft zweistufig (Single-Bank STM32 Einschränkung):
1. **Stage 1** — Firmware in die obere Flash-Hälfte (Staging) schreiben, TCP-Stack läuft noch
2. **Stage 2** — Aus SRAM heraus: Staging → App-Bereich kopieren, Reset
Das Add-on steuert OTA über den **Flash-Tab** im Web UI.
### Hardware ### Hardware
| Komponente | Details | | Komponente | Details |
|---|---| |---|---|
| MCU | STM32F103RC — 256 kB Flash, 64 kB RAM | | MCU | STM32F103RC — 256 kB Flash, 48 kB SRAM |
| Ethernet | ENC28J60 (SPI2) | | Ethernet | ENC28J60 (SPI2) |
| USB | PA11=D, PA12=D+, PA8=Pullup | | USB | PA11=D, PA12=D+, PA8=Pullup |
| SWD | PA13=SWDIO, PA14=SWCLK | | SWD | PA13=SWDIO, PA14=SWCLK |
@@ -224,8 +250,11 @@ shinebridge/
├── haos-addon/ ← HAOS Add-on ├── haos-addon/ ← HAOS Add-on
│ ├── config.yaml │ ├── config.yaml
│ ├── Dockerfile │ ├── Dockerfile
│ ├── firmware/ # Integrierte ShineLAN-X Binaries
│ │ ├── nuttx-mbusd-shinelanx.bin # Direktflash (0x08000000)
│ │ └── nuttx-mbusd-shinelanx-dfu.bin # OTA-fähig (0x08002000)
│ └── src/ │ └── src/
│ ├── main.py # Flask, Poll-Threads, REST API, Aggregation │ ├── main.py # Flask, Poll-Threads, REST API, Flash-Proxy
│ ├── modbus_client.py # Modbus TCP, Float32-Dekodierung │ ├── modbus_client.py # Modbus TCP, Float32-Dekodierung
│ ├── goodwe_client.py # Goodwe UDP/8899 via goodwe-Bibliothek │ ├── goodwe_client.py # Goodwe UDP/8899 via goodwe-Bibliothek
│ ├── wallbox_client.py # Kathrein Wallbox Modbus TCP │ ├── wallbox_client.py # Kathrein Wallbox Modbus TCP
@@ -233,11 +262,16 @@ shinebridge/
│ ├── mqtt_publisher.py # MQTT Discovery + Aggregat │ ├── mqtt_publisher.py # MQTT Discovery + Aggregat
│ ├── inverters.py # Register-Maps aller Geräte │ ├── inverters.py # Register-Maps aller Geräte
│ ├── history.py # SQLite Persistenz │ ├── history.py # SQLite Persistenz
│ └── web/index.html # Web UI │ └── web/index.html # Web UI (Energie, Finanzen, Live, Geräte, Flash)
├── ShineLAN-X/ ├── ShineLAN-X/
│ └── releases/ │ └── releases/
│ ├── dapboot.bin │ ├── nuttx-mbusd-shinelanx.bin
│ └── nuttx-mbusd-shinelanx-dfu.bin │ └── nuttx-mbusd-shinelanx-dfu.bin
├── shinelanx-modbus/ ← NuttX Firmware Quellcode
│ └── apps/shinelanx-modbus-gw/
│ ├── main.c # Startup: MAC, DHCP, OTA-Thread, mbusd
│ ├── ota_http.c # OTA HTTP-Server (Zwei-Phasen Flash)
│ └── ota_http.h
├── ShineWifi-X/ ← ESPHome Configs ├── ShineWifi-X/ ← ESPHome Configs
├── tools/ ├── tools/
│ └── shinediag/ ← Vor-Ort-Diagnose-Tool │ └── shinediag/ ← Vor-Ort-Diagnose-Tool