InverterHub — ein Modbus-TCP-Modul für viele Wechselrichter (+ Discovery + Energiefluss-Kachel)
Moin zusammen,
InverterHub liest Wechselrichter verschiedenster Hersteller direkt per Modbus TCP aus — ein generisches Treiber-Framework statt eines eigenen Moduls pro Hersteller. Dazu gibt es einen Netzwerk-Discovery und eine animierte Energiefluss-Kachel .
Dank vieler fleißiger Beta-Tester (danke euch!) läuft mittlerweile einiges an realen Anlagen. Hier der aktuelle Stand.
Die drei Module
- InverterHub — die Auslese-Instanz. Hersteller wählen, IP eintragen, Datenpunkt-Gruppen aktivieren.
- InverterHub Discovery — durchsucht einen IP-Bereich und legt gefundene Wechselrichter automatisch als Instanz an (Herstellererkennung über charakteristische Register).
- InverterHub Kachel — Energiefluss-Visualisierung (Hauslast zentral, Solar/Netz/Batterie/Verbraucher radial). Funktioniert mit einer InverterHub-Instanz oder komplett eigenständig mit manuell zugewiesenen Variablen.
Unterstützte Hersteller
Legende:
an realer Anlage bestätigt ·
an realer Anlage in Prüfung ·
nach Herstellerdoku/Referenz implementiert (Feldrückmeldung willkommen)
| Hersteller |
Status |
Umfang |
| GoodWe (ET/EH/BT/BH) |
 |
PV, Netz, Batterie 1+2, Meter, Energie, Backup/Insel, EMS-Steuerung, Riso — produktiv im Einsatz |
| Fronius (SunSpec, GEN24-Hybrid) |
 |
PV je String (U/I/P), Netz, Smart Meter (Gesamt + je Phase U/I/P), Energie, Batterie (SOC/Leistung/Spannung), Status |
| SolarEdge (SunSpec + StorEdge) |
 |
PV, Netz, Meter inkl. Bezug/Einspeisung, Energie, Temperatur, StorEdge-Batterie (SOC/Leistung/Spannung/Strom/Temp/SOH/Zustand), berechnete PV-Erzeugung |
| Victron GX (Cerbo/Venus OS) |
 |
PV (DC + AC-gekoppelt), Netz, Batterie (SOC/Leistung/Spannung/Strom/Zustand), Hausverbrauch, Netz-Quelle |
| Kostal (PLENTICORE plus Gen. 1) |
 |
PV (3 DC-Eingänge), Netz, Batterie, Meter, Hausverbrauch nach Quelle, Energie, Riso |
| SMA (STP/STPS/SI) |
 |
PV, Netz, Meter, Energie, Temperatur, Status, Riso |
| Sungrow (SH-Hybrid) |
 |
PV, Netz, Batterie, Meter, Energie, Backup, Riso |
| Solis (Hybrid) |
 |
PV, Netz, Batterie, Meter, Energie |
| Growatt (TL-X/MOD/MIX/SPH/WIT) |
 |
PV, Netz, Energie, Temperatur, Fehlercodes, Riso (optional/modellabhängig) |
| SolaX |
 |
PV, Netz, Batterie, Meter — nur über SolaX-Monitoring-Dongle (TCP-Gateway) |
| Deye (SG04LP3) |
 |
PV, Netz, Batterie, Hausverbrauch, Energie |
| Solplanet / AISWEI |
 |
PV, Batterie, Temperatur, Energie |
| Huawei (SUN2000 + DTSU666 + LUNA2000) |
 |
PV, Netz, Wirkleistung, Temperatur, Status, Energie, Smart Meter, Batterie, Riso |
Highlights
Ein Modul, viele Hersteller — austauschbare Treiber, gemeinsame Konventionen.
Discovery deckt alle Hersteller ab (Victron über Unit-ID 100, Huawei über Modell-Register …).
Energiefluss-Kachel — animiert, skaliert automatisch, radiale Anordnung, beliebig viele Zusatz-Verbraucher (Wärmepumpe, mehrere Wallboxen mit Fahrzeug-Zuordnung, …). Neu: auch ohne InverterHub nutzbar (manuelle Datenpunkte von beliebigen Modulen/Zählern).
Hauslast wird sauber berechnet (AC-Bilanz) und kann als eigene Variable ausgegeben werden; optionaler echter Hauslastzähler zeigt zusätzlich die Wandlungsverluste.
Isolationswiderstand (Riso) bei GoodWe, Huawei, Sungrow, SMA, Kostal (Growatt optional).
Invers-Schalter für Netz und Batterie (Datenpunkt-Konvention frei wählbar — die Kachel bleibt trotzdem korrekt).
Energie-Einheit wahlweise kWh oder Wh (Basiseinheit; die neue Symcon-Darstellung skaliert dann selbst).
Anschluss-Besonderheiten (kurz)
- Kostal: Port 1502 (nicht 502) + Byte-Reihenfolge passend zum Gerät (Werk: CDAB).
- Victron: Port 502; Unit-ID ist bei Victron ein Geräte-Selektor → Systemdienst liegt fest auf 100 (wird automatisch angesprochen).
- Huawei: Port 502, Unit-ID meist 1 (auch 0/16 möglich).
- Fronius: Smart Meter ist ein eigenes Modbus-Gerät → „Smart-Meter-Adresse" (Vorgabe 200, oft 240).
- SolaX: nur über das Monitoring-Dongle (dessen IP eintragen, nicht die des WR).
Alle Registeradressen stehen im Beschreibungsfeld jeder Variable.
Installation
Über den Module Store → eigene Module → GitHub-Repository:
https://github.com/DG65/InverterHub (Branch beta )
Status
Das Ganze ist Beta . Die Register basieren auf öffentlichen Hersteller-Doku, der Referenz OpenEMS, gepflegten Bibliotheken (z. B. huawei-solar-lib) und von euch geteilten Modbus-Vorlagen — und wurden, wo möglich, gegen reale Anlagen geprüft.
Rückmeldungen sind ausdrücklich erwünscht — besonders zu den mit
/
markierten Herstellern. Bitte mit Hersteller, Modell und betroffenem Register/Wert melden; bei Vorzeichen-Themen hilft ein kurzer Vergleich mit der Hersteller-App enorm.
Danke fürs Testen und die vielen guten Ideen! 
Was noch kommt
Das Modul ist bewusst als wachsendes Projekt angelegt, nicht als abgeschlossenes Werk:
-
Weitere Hersteller: und weitere sind als nächste Kandidaten im Blick — Vorschläge und vor allem Registerdokumentation zu weiteren Herstellern sind sehr willkommen.
-
Monitoring Kachel-Visualisierung: geplant ist eine grafische Übersichts-Kachel die alle relevanten Elektrischen Werte darstellt.
-
Mehrere Wechselrichter zusammenfassen: Bei Anlagen mit mehr als einem Wechselrichter (auch herstellerübergreifend) soll es eine Summen-/Aggregationsansicht geben, die die Werte aller Instanzen zu einer Gesamtanlagen-Sicht zusammenführt.
3 „Gefällt mir“
Hallo DerStandart,
probiere nochmals, Update sollte oben sein und wirken.
Danke für den Test!
Mein WR ist von Sungrow. Ich habe keinerlei Gerät von GoodWe. Die IP von dem Gerät, die hier angezeigt wird, gehört zu einem MODBUS RTU zu MODBUS TCP Konverter und ist somit falsch.
Erstellen der Instanz funktioniert nun ohne Fehlermeldung.
Sehr sehr viele Variablen bleiben leer. Ich warte mal ein bißchen ab und melde mich später noch mal.
Danke Dir für die Rückmeldung. Die Discovery Instanz findet alle Modbusgeräte
und schaut auf welchen WR es passen könnte. Das ist natürlich suboptimal, bei mir findet er gleich mal 5 WR obwohl ich nur 1 WR habe, das andere sind Zähler und Wallboxen. Wenn alles mit dem Modul klappt, dann habe ich vor ein analoges Modul für Zähler bzw. Netzanalysegeräte wie z.B. PAC2200 bzw. Janitza UMG604 etc. zu bauen.
So wie das Modul den PAC2200 auf der 101 erkennt, scheint er einem SolaX ähnlich zu sein.
Vielleicht bekomme ich das noch hin, dass nicht alles was Modbus ist erkannt wird.
Das ist nicht richtig. Ich habe den MODBUS RTU auf MODBUS TCP Konverter hier insgesamt 2 Mal im Netzwerk. Baugleiche Geräte. Nur eines wird gefunden. Darüber hinaus gibt es hier noch mindestens ein anderes Gerät, welches MODBUS spricht, aber auch nicht erkannt wird.
Mich stört es aber nicht.
Sehr gut wenn es Dich nicht stört. Welchen Sungrow hast Du denn? Da Du sagst, dass nicht sehr viele Register ausgelesen werden, bin ich noch auf der Suche und dem einbinden nach anderen Registertabellen.
Sungrow SH 6.0 RT
Hier die Idents der Variablen, die nie ausgelesen worden sind:
soc
bat_total_pwr
bat_charge_max_w
bat_discharge_max_w
work_mode
riso
temp_air
temp_module
temp_heatsink
dev_model
dev_fw_arm
dev_fw_dsp
grid_mode
island
meter_total
grid_l1_volt
grid_l1_curr
grid_l1_freq
grid_l1_pwr
grid_l2_volt
grid_l2_curr
grid_l2_freq
grid_l2_pwr
grid_l3_volt
grid_l3_curr
grid_l3_freq
grid_l3_pwr
inv_total
pv1_voltage
pv1_current
pv2_voltage
pv2_current
mppt1_power
mppt1_current
pv3_voltage
pv3_current
pv4_voltage
pv4_current
mppt2_power
mppt2_current
pv5_voltage
pv5_current
pv6_voltage
pv6_current
mppt3_power
mppt3_current
warn_code
err_msg
err_detail
bat1_volt
bat1_curr
bat1_pwr
bat1_mode
bat1_soc
bat1_soh
bat1_temp
bat1_bms_volt
bat1_bms_curr
bat1_chg_max_a
bat1_dis_max_a
bat1_bms_warn
bat1_bms_alarm
bat2_volt
bat2_curr
bat2_pwr
bat2_mode
bat2_soc
bat2_soh
bat2_temp
bat2_bms_volt
bat2_bms_curr
e_sell_day
e_buy_day
e_load_day
e_load_total
e_charge_day
e_charge_total
e_disch_day
e_disch_total
work_hours
mt_l1_volt
mt_l2_volt
mt_l3_volt
mt_l1_curr
mt_l2_curr
mt_l3_curr
backup_active
backup_l1_volt
backup_l1_curr
backup_l1_freq
backup_l1_pwr
backup_l2_volt
backup_l2_curr
backup_l2_freq
backup_l2_pwr
backup_l3_volt
backup_l3_curr
backup_l3_freq
backup_l3_pwr
ctl_work_mode
ctl_ems_enable
ctl_ems_mode
ctl_ems_power
ctl_export_enable
ctl_export_limit
ctl_soc_min
ctl_internet
ctl_restart
ctl_run
Ich muss dazu sagen, dass bei mir an MPPT2 nichts hängt.
Und ich habe die IP vom WINET-S genutzt. Wenn man die IP des dedizierten Netzwerkanschlusses am Gerät nutzt, mag es möglicherweise mehrere Infos geben. Das muss man ggf. alles noch beachten.
SH 6.0 RT sollte schon funktionieren. Liest Du die Werte auch auf normalem Weg via Symcon aus? Also mit Modbus I/O > Modbus Gerät … etc.
Wenn ja, was bekommst Du da alles vom WR zurück?
Ich habe keine MODBUS Geräte, sondern einzelne Instanzen pro Adresse. Damals gab es die MODBUS Geräts noch nicht. Ich habe mir also aus der Dokumentation des Herstellers alles herausgesucht, was für mich interessant sein könnte.
Momentan frage ich folgendes ab:
Export Power (13010-13011)
Load Power (13008)
Export limit min (5622)
Export limit max (5623)
Phase A Voltage (5019)
Phase B Voltage (5020)
Phase C Voltage (5021)
Meter Active Power (5601-5602)
Selfconsumption of today (13029)
Load 1 / On Off (13011)
Total DC Power (5017-5018)
Total active Power (13034-13035)
System State (13000)
Start Charging Power (13084)
MPPT 1 Current (5012)
MPPT 1 Voltage (5011)
MPPT 2 Current (5014)
MPPT 2 Voltage (5013)
Battery Level (13023)
Daily Output Energy (5003)
Daily Charge Energy (13040)
Battery current (13021)
Battery power (13022)
Battery state of healthy (13024)
Battery voltage (13020)
Batterie temperature (13025)
Min SOC (13059)
Max SOC (13058)
EMS mode selection (13050)
Charge / Discharge power (13052)
Charge / Discharge Command (13051)
Start Discharging Power (13085)
Inside Temperature (5008)
SOC for Backup (13100)
Total Output Energy (5004-5005)
Off-grid option (13075)
Global Scan (30230)
Start/Stop (13000)
Load 1 adjustment mode (13002)
Daily battery charge energy from PV (13012)
Daily direct energy consumption (13017)
Daily battery discharge energy (13026)
Daily Import Energy (13036)
Daily PV Generation (13002)
Daily export power from PV (13005)
Total export energy from PV (13006-13007)
Total PV Generation (13003-13004)
Total direct energy consumption (13018-13019)
Total Import energy (13037-13038)
Total battery charge energy from PV (13013-13014)
Total battery discharge energy (13027-13028)
Running State (13001)
Welche Werte kommen denn mit meinem Modul?
Ich habe mir das mal angesehen, ich denke, dass ich das Richtung Wochenende hinbekommen könnte. Einige Dinge könnte das Modul auch automatisiert ausblenden, z.B. den 2. Bat Port wenn keiner da ist oder den 3. MPPT etc.
Muss mal gucken wann es geht, aber vielen dank schon mal für Deine Hilfe!
1 „Gefällt mir“
ac_power
dev_sn
dev_rated_w
running_state
dev_type
grid_freq
grid_v1
grid_v2
grid_v3
grid_reactive
power_factor
pv_total
mppt1_volt
mppt1_curr
mppt2_volt
mppt2_curr
mppt3_volt
mppt3_curr
mppt4_volt
mppt4_curr
connected
e_pv_day
e_pv_total
load_power
export_power
mt_l1_pwr
mt_l2_pwr
mt_l3_pwr
backup_total
backup_freq
bat_power
bat_volt
bat_curr
bat_soc
bat_soh
bat_temp
Das sind die Werte, die kommen. Zum Teil können sie auch 0 sein oder einen ungültigen Wert haben.
Was denkst Du zum Handling, zur Einrichtung des Moduls. Warst Du bis dahin zufrieden?
Netzwerk durchsuchen mag ich persönlich nicht. Ich hätte lieber eine IP eingegeben und fertig. Mag aber ein komische Eigenart von mir sein.
Mehr habe ich noch nicht damit angestellt. Werde mich heute Abend ausführlich beschäftigen.
1 „Gefällt mir“
grid_reactive, -262145
mt_l1_pwr, -13697025
bat_power, -52690945
Die scheinen mir ungültige Infos zu bekommen.
Netzwerk durchsuchen ist kein muss sondern eine Hilfe für so manchen. Generell kann man aber auch das Geräte „Wechselrichter (Multi-Hersteller)“ als Instanz anlegen und kann dann die IP eintippen wie Du es magst.
Nur möchte ich mit dem Modul auch noch eine andere Klasse bedienen und wenn ich da an unsere größte Anlage mit rund 900 Wechselrichtern denke - da möchtest Du dann auch keine Adressen mehr eintippen. Deshalb die Suche und auch die automatische Benennung der Wechselrichter.
1 „Gefällt mir“
Danke für die vielen Rückmeldungen! Es ist einiges passiert, hier der Überblick:
Neue Hersteller
Zu den ursprünglichen sieben (GoodWe, Sungrow, Solis, Growatt, SolaX, SMA, Fronius) sind vier weitere dazugekommen:
- SolarEdge (reines SunSpec)
- Deye (SG04LP3-Serie)
- Solplanet / AISWEI (ASW-Gen-Serie)
- Kostal (PLENTICORE plus Gen. 1)
Bugfixes
- Sungrow und Solis hatten einen systematischen Off-by-one-Adressfehler (jedes Register wurde einen Schritt zu früh gelesen) — behoben, dank eines Testers mit Sungrow SH 6.0RT und seiner eigenen bestätigten Registerliste.
- Bei Sungrow wurde
meter_total nie beschrieben — jetzt korrekt aus dem vom Tester bestätigten Register gelesen.
- Fronius: die SunSpec-Feldoffsets waren im empfohlenen Standardpfad (Float-Modell) fast durchgehend falsch (AC-Leistung, Status, Netzspannung, Netzfrequenz, Energiezähler betroffen) — gegen die offizielle SunSpec-Modelldefinition korrigiert.
- SMA komplett neu geschrieben: von herstellereigenen Registern auf SunSpec umgestellt — schließt die vorher offene Lücke bei AC-/Netzwerten.
- Kostal: Ladezustand (SOC) hatte einen Typ-/Profil-Mismatch — behoben, bevor es in freier Wildbahn auffallen konnte.
Discovery-Modul (Netzwerksuche)
- Erkennt jetzt auch die vier neuen Hersteller.
- Deutlich robuster gegen Fehlzuordnungen: mehrere gemeldete Fälle, in denen fremde Geräte fälschlich als Wechselrichter erkannt wurden (ein Janitza-Stromzähler als SolaX, ein Modbus-RTU/TCP-Konverter als GoodWe, zuletzt go-e-Wallboxen als Growatt) sind behoben — die Erkennung verlangt jetzt für jeden Hersteller ein zweites, härteres Kriterium (z. B. ein plausibles Seriennummer-/Text-Register), statt sich auf einen einzelnen Schwellenwert zu verlassen.
- Neu: Fortschrittsanzeige während der Suche — zeigt live den Portscan und danach die Hersteller-Erkennung je gefundener IP, statt einfach nur zu warten, bis alles fertig ist.
InverterHub
- Neu: Checkbox „Kommunikation aktiv" — damit lässt sich die Kommunikation zu einem Wechselrichter vorübergehend abschalten (z. B. bei Wartungsarbeiten), ohne die Instanz zu löschen oder die Konfiguration zu verlieren.
Bitte einmal neu testen
Wer die Fortschrittsanzeige und die verbesserte Erkennung im Discovery-Modul ausprobieren möchte: am einfachsten beide Instanzen (InverterHub und InverterHubDiscovery) einmal löschen und über die aktuelle Beta-Version neu anlegen. Bestehende, bereits laufende Instanzen profitieren von den Datenkorrekturen ohnehin automatisch beim nächsten Kernel-Neustart bzw. Modul-Update — nur die neue Fortschrittsanzeige und die Erkennungs-Verbesserungen selbst zeigen sich naturgemäß erst bei einer neuen Suche.
Wie immer: Rückmeldungen zu falschen/fehlenden Werten sehr willkommen, am besten mit Hersteller, Modell und betroffenem Register/Ident.
Neue Version ist draussen und ich hoffe, dass ich einiges beheben konnte.
Vielleicht löschst Du auch nochmals beide Instanzen und beginnst nochmals mit der Discovery Instanz, auch wenn Du nicht der Scan-Typ bist, Für mich ist aber wichtig was er vermeintlich zu finden gedenkt etc.
1 „Gefällt mir“