Transparente TCP-Brücke zwischen dem eingebauten WLAN-Access-Point eines Huawei SUN2000 und dem Heimnetz — für Setups, in denen der SDongle nicht verfügbar oder nicht stabil ist, oder in denen mehrere Wechselrichter ausgelesen werden sollen, die per RS485 nicht zusammenhängen.
Getestet und produktiv im Einsatz mit Huawei SUN2000 + wlcrs/huawei_solar
HACS-Integration + Home Assistant.
Home Assistant (wlcrs/huawei_solar) Bridge (WT32-ETH01) SUN2000
192.168.x.y ──LAN──▶ 192.168.x.60 ──WLAN──▶ WR-AP
Port 6607 Port 6607
Der SUN2000-WR-AP benutzt intern immer dieselbe IP-Adresse und verlangt beim Verbinden eine Huawei-eigene Authentifizierung (Local O&M Login). Das führt zu zwei Problemen:
Problem 1 – Mehrere Wechselrichter: Wer zwei oder mehr SUN2000 ohne RS485-Daisy-Chain betreibt, kann nicht beide direkt ins Heimnetz einbinden — sie haben alle dieselbe interne IP.
Problem 2 – evcc direkt: evcc implementiert den Huawei-Login nicht und kann den WR-AP daher nicht direkt ansprechen. Die Lösung: evcc liest die Daten über Home Assistant (HA-Integration als Datenquelle), HA pollt über die Bridge.
Die Bridge löst beides: Jede Bridge bekommt eine eigene Adresse im Heimnetz, leitet den Verkehr transparent durch, und übernimmt die Verbindungsverwaltung zum jeweiligen Wechselrichter.
| Bauteil | Bezugsquelle | Hinweis |
|---|---|---|
| WT32-ETH01 (ESP32 + LAN8720) | Amazon.de ↗ | 1 Stück pro Wechselrichter |
| FTDI-Programmer (USB-TTL) | Amazon.de ↗ | Nur zum Erstflashen nötig |
| 5V-Netzteil ≥ 500 mA | Amazon.de ↗ | Standard-Option |
| PoE-Splitter 5V (optional) | Amazon.de ↗ | Wenn PoE-Switch vorhanden |
Diese Seite enthält Affiliate-Links zu Amazon. Als Amazon-Partner verdiene ich an qualifizierten Käufen. Der Preis für dich bleibt unverändert.
Erstflashen (einmalig, USB erforderlich):
- IO0-Pin mit GND verbinden, dann Strom anlegen (Bootloader-Modus)
pio run -t upload— PlatformIO baut und flasht die Firmware- IO0-Brücke entfernen, neu starten
- Ab jetzt: alle Updates per OTA über die Weboberfläche
Einrichten:
- Board per Ethernet ans Heimnetz, Strom anlegen
- Einrichtungs-AP erscheint: SSID
sunbridge-<MAC>, Passwortsunbridge— oder direkt über die DHCP-Adresse per Browser erreichbar, bzw.sunbridge-<MAC>.local - Weboberfläche öffnen → Netzwerke suchen → WLAN des Wechselrichters wählen
(
SUN2000-<Seriennummer>), Passwort eintragen → Speichern - Gerät startet neu und verbindet sich automatisch
In Home Assistant einrichten:
HACS → wlcrs/huawei_solar → als Modbus-Host die Ethernet-Adresse der Bridge
eintragen, Port 6607. Die Ziel-IP auf der WR-AP-Seite muss nicht konfiguriert
werden — die Bridge ermittelt sie automatisch aus dem Gateway des WR-WLANs.
Pro Wechselrichter eine Bridge flashen. Jede Bridge bekommt einen eigenen Gerätenamen und eine eigene Adresse im Heimnetz (DHCP-Reservierung nach MAC oder feste IP in der Weboberfläche). Kein Routing, kein NAT, keine statischen Routen im Router — die Bridges wissen nichts voneinander.
In HA werden dann einfach mehrere Instanzen der wlcrs/huawei_solar-Integration
angelegt, jede mit der IP der zugehörigen Bridge.
- Signalweg-Anzeige Heimnetz → Bridge → Wechselrichter mit Live-Status
- WLAN-Scanner — kein manuelles Abtippen der SSID
- Statuszähler — Sitzungen, übertragene Bytes, WLAN-Pegel, letzter Fehler
- Log-Konsole — Live-Ausgabe direkt im Browser
- Firmware-Badge im Header — zeigt an ob ein Update verfügbar ist
- OTA-Update — Firmware direkt über den Browser einspielen
- Netzwerk-Tab — DHCP oder feste IP, Gerätename, Ethernet-Einstellungen
| Software | Status |
|---|---|
wlcrs/huawei_solar (HACS) |
✅ Getestet, produktiv |
| evcc (direkt) | ❌ Huawei-Login nicht implementiert |
| evcc (über HA-Sensoren) | ✅ Funktioniert über wlcrs/huawei_solar |
ETH.begin() — Arduino-Core-Versionen: Core 2.x und 3.x haben unterschiedliche
Argumentreihenfolgen. net.cpp schreibt beide Varianten aus und wählt per
ESP_ARDUINO_VERSION_MAJOR. Die Plattform ist in platformio.ini auf
espressif32@6.9.0 gepinnt (Core 2.x).
Pins des WT32-ETH01 sind fix: PHY-Adresse 1, Power GPIO16, MDC GPIO23, MDIO GPIO18, Takt extern über GPIO0. GPIO0 ist dadurch als freier Pin belegt.
Stromversorgung: Das Board zieht Spitzen bis ~500 mA. Ein schwaches Netzteil äußert sich als sporadischer Reset oder als Ethernet, das nicht hochkommt.
Flash-Größe: Bei ~85 % Flash-Auslastung ist noch ausreichend Platz für OTA (Update-Partition braucht die Hälfte des Flash). Bei künftigen Erweiterungen im Blick behalten.
Falls dir das Projekt Zeit gespart hat:
MIT — siehe LICENSE