Was ist OpenDTU ?
OpenDTU ist eine Soft/Hardware Lösung um die Hoymiles Wechselrichter auszulesen. Ich finde dieses Projekt sehr gut, da es für den geringen Kostenaufwand sehr viele Features bietet. Aus diesem Grund habe ich meinen Fork des Projekts erweitert (hier) und die Möglichkeit hinzugefügt die neuen Hoymiles Wechselrichter mit integriertem WLAN auszulesen. Das „neue“ WLAN Protokoll wurde bereits von diesem Projekt TDUGateway ermittelt und ich habe einen Teil der eigentlichen Kommunikation größtenteils nur übernommen und ihn auf das OpenDTU Projekt adaptiert.
Dies war nötig da DTUGateway immer nur einen Wechselrichter zeitgleich unterstützt. Zudem ist der Funktionsumfang von OpenDTU etwas größer was Benutzbarkeit angeht. Ein Vorteil an DTUGateway ist allerdings das auf dem ESP8266 läuft.
Funktionalität
Es werden fast alle Features unterstützt, die OpenDTU Software auch für die Hoymiles Wechselrichter bietet.
- Auslesen aller Werte (Panel-Spannung, Stromstärke usw.)
- Drossel der Leistung des Wechselrichters
- Neustart des Wechselrichters
- Erreichbarkeit
- Einfache Einbingen des Wechselrichters via UI
Funktion
Da der Hoymiles W-Serie Wechselrichter ja keine NRF24 Schnittstelle wie die (alten) Hoymiles Geräte hat, wird dieser über WLAN ausgelesen. Um genauer zu sein über den Protobuf Port 10081 via TCP. Hier kann dann bei der Einrichtung der Hardware natürlich das 2.4 GHz Funk Modul weggelassen werden. Nach der Einrichtung des Wechselrichters kann eingestellt werden wie oft die Daten abgefragt werden. Alles 20-30 Sekunden haben sich hier als sehr stabil herausgestellt.
Bei den ersten Firmware Versionen des Wechselrichters kommt es zu Problemen, wenn die Daten öfter als alle 30 Sekunden abgefragt werden (die Werte werden zwar abgefragt allerdings ändern sie sich nicht). Zusätzlich kommt es vermehrt zu Verbindungsabbrüchen, welche immer nach einengen, Stunden betrieb auftreten. Dies betrifft Firmwareversionen welche mit einer 1 beginnen z.B. 1.00.08
Firmware
Das letzte build zum Installieren kann hier gefunden werden. Hierbei handelt es sich um das generische esp32 build für den ESP mit 4MB Speicher.
Limitierungen
Da ich selber nicht alle Wechselrichtertypen des Herstellers besitze funktioniert die korrekte ermitteln alle Typen (noch) nicht. Diese werden über die Seriennummer ermittelt. Falls ihr also einen Wechselrichter besetzt, der nicht richtig erkannt wird, teilt mir gern das Präfix (die ersten 4 Ziffern) der Seriennummer mit oder kommentiert sie hier unter diesem Github Issue.
Wechselrichter mit 6 Eingängen (6T) werden auch noch nicht unterstützt. Diese waren in der Implementierung vom eigentlichen Projekt (DTUGateway) nicht enthalten.
Des Weiteren ist ein Ausschalten und das Auslesen der Firmware Informationen zum jetzigen Zeitpunkt noch nicht implementiert.
OpenDTU als Gateway
Des Weiteren ist es mit dem hier beschriebenen Fork möglich OpenDTU als Gateway zum Wechselrichter zu verbinden. Diesen quasi komplett vom Internet zu trennen um Firmwareupdates und remote zugriff des Herstellers zu unterbinden. OpenDTU fungiert somit als Brücke zwischen dem Haus WLAN und dem Wechselrichter. Für mehr Infos ist diese Setup hier genauer beschrieben.


Danke, für die großartige Arbeit!
Hast du geplant Deye und HMS-xxxxW-xT auch mit openDTU on battery zu forken oder die Funktion der Nulleinspeisung zu implementieren?
Ja, darüber nachgedacht habe ich bereits. Im besten fall, müsste man die Forks ja „nur“ mergen. Bzw. hab auch darüber nachgedacht das RPC Protokoll des Shelly direkt anzubinden bzw. mit diesem Projekt auch jede eigene Implementierung eines Smartmeters. Auch die Deye Sun Wechselrichter lassen sich ja öfter Drosseln als die Auslesezeit von 5 Min. Ich nehme es mal mit auf, auf meine To-do-Liste, da ja anscheinend gesteigertes Interesse besteht.
Das hört sich klasse an. Ich finde auch die Idee Wechselrichter und andere Solarhardware nicht aufs Internet oder Clouds zugreifen zu lassen hervoragend. Ich mache das mit der normalen DTU und einem alten Wr ähnlich. Hole mir die Daten von der OpenDTU auf den Raspberry PI und hier generiere ich alles über einfache Shellskripte und GNUPlot für die Diagramme und lokale Webseiten – ganz ohne Internet. Und habe damit genau die Daten und die Optik die ich brauche.
Servus, habe einen HMS-800W-2T und habe versucht, ihn mit der openDTU zu verbinden. Aber das funktioniert bei mir schon beim eingeben der Seriennummer nicht.
Diese beginnt mit 4143. Jedoch bei der Eingabe der ersten Ziffer zeigt die Maske an „unbekanntes Format“ (HoymilesW ist in der Auswahl darüber eingestellt)… Ratlos…
Die Seriennummer die mit 4143 Anfängt, ist die Nummer für das DTU-Interface des Wechselrichters (intern hat jeder Wechselrichter dieselben Funktionen wie die DTU-Sticks). Auf dem Geräte müsste noch eine zweite Seriennummer stehen. In der Konsole (Im Header Menü: Info ⇾ Konsole) müsste auch ein Fehler angezeigt werden, der die beiden Seriennummern anzeigt. Achtung diese werden in Dezimal angezeigt und müssen für die Eingabe noch in Hex konvertiert werden.
Es kann aber auch sein, dass es sich hier um eine unbekannte Seriennummer handelt. In diesem Fall müsste diese eingetragen werden in Sourcecode. Dies kann getestet werden, indem das Gerät trotz der unbekannten Seriennummer hinzugefügt wird im OpenDTU. Die Werte des Wechselrichters sollt dann trotzdem angezeigt werden. Die Anzahl der Strings ist dann nur falsch.
Danke für die Hinweise! Ich habe eine zweite Seriennummer gefunden und diese eingetragen.
Die Konsole zeigt leider gar nichts an.
Auch das Dashboard zeigt keinerlei Hinweise auf eine Verbindung, überall nur Nullwerte.
Es scheint also, bei mir stimmt grundsätzlich etwas noch nicht.
Ich werde noch mal alles neu flashen. Daher zu Sicherheit noch mal die Rückfrage:
Ich flashe zunächst die Standart-Open-DTU-Firmware von hier: https://github.com/ohAnd/dtuGateway/releases/tag/v2.3.0018 (factory flash) und lade dann die geforkte Firmware-Datei über die Update-Funktion in der openDTU Nutzeroberfläche??! (https://github.com/tost11/OpenDTU-Push-Rest-API-and-Deye-Sun/releases –> all_in_one_deye_hoymilesW_esp32dev_firmware.bin)
Die passende Firmware für dein Vorhaben ist: HMS-XXXW-XT_esp32dev_firmware.bin, allerdings sollte es mit der von dir gewählten auch funktionieren (hat etwas mehr Features, die du nicht brauchst). Wenn die Konsole (in der web-UI: Info → Konsole) nicht anzeigt schau mal, ob die Log level dort richtig eingestellt sind. Ach ja ich nehme mal an du flashst zuerst die Original Open-DTU Firmware und nicht DTUGateway, hierbei handelt es sich um ein anderes Projekt! Ich weiß nicht, ob das mit dem überschreiben, dann funktioniert. Das Original Open-DTU Release findest du hier: https://github.com/tbnobody/OpenDTU/releases.
So, ich hatte nun eeendlich mal wieder Zeit mich mit der DTU zu befassen.
Ich bin nun einen Schritt weiter (glaube ich). Das Problem saß wie so oft zunächst vor dem Bildschirm. Ich habe nun noch mal die Anleitungen zur Verbindung von WR, openDTU und Heimnetz gelesen und vermutlich auch nun korrekt ausgeführt.
– DTU empfängt und sendet Daten laut Verbindungsstatistik
– Netzwerkinformationen sagen ein WR hat sich mit der IP 192.168.4.2 verbunden, ich sehe eine MAC
– aber die Liveansicht liefert keine Daten
– Ereignisanzeige (unter Livedaten) sagt: „received inverter data not used because serials not matching (correct serial and ip?)“ – eingestellte IP des WR ist die …4.2
Könnte es nun doch der Falls sein das die Seriennummer in die Firmware eingebaut werden müsste?
Hi Kafi,
das klingt doch erst mal sehr gut, der Wechselrichter wird erkannt und die Verbindung ist möglich! Das Einzige, was jetzt noch nicht stimmt, ist die Seriennummer. Diese ist in der Konsolenausgabe leider Dezimal und nicht in Hexadezimal. In der Weboberfläche muss dies am in Hex angegeben werden. Daher nimm mal die erste Seriennummer aus dem log, bei mir z.b: „Skipped setting red inverter data because serial is invalid! (dtu red 22070228301234 to configured: 1379389269025)“ und konvertiere sie in Hexadezimal und trage sie erneut bei den Wechselrichtereinstellungen ein. Also in meinem Fall wäre das: 1412A01E35B2. Danach sollte die Seriennummer stimmen und die Live Ansicht auch die Werte anzeigen. Als Hex Konverter kannst du z.B, https://www.rapidtables.com/convert/number/decimal-to-hex.html verwenden.
Hallo, erstmal vielen herzlichen Dank für diese tolle Arbeit. Genau so etwas habe ich gesucht.
Was muss ich beachten wenn die OpenDTU an einer abgelegenen Gartenhütte betrieben werden soll.
Dort ist kein WLan und daher kein NTP-Abgleich möglich. Es soll lediglich die Leistung und Ertrag an einem Display angezeigt werden.
Für ältere Generationen ist das 1,3“-Display in Briefmarkengröße etwas ungünstig. Daher möchte ich ein SSD1309 (2,4“) über I2C ansteuern. Funktioniert das, oder müssten Anpassungen durchgeführt werden?
Hallo Yam,
das Problem mit dem NTP an einem abgelegenen Orte hatte auch schon einmal. Dafür gibt es hier eine Firmware in der bei NTP eine Startzeit konfiguriert werden kann welche übernommen wird, wenn die Box neu startet. Wobei ich glaube das der Hoymiles Wlan Wechselrichter auch ohne korrekte Zeit abgefragt werden kann, das ist nur bei dem Original HM-Serie nötig (bin aber nicht mehr ganz sicher wie genau das Implementiert war).
Um die Box mit dem Wechselrichter zu verbinden, kann sich entweder die DTU-Box in das WLAN des Wechselrichters einklingen oder andersherum. Beim Verbinden des WR in das DTU WLAN darauf achten die Zeit des AP auf 0 zu stellen damit er auch immer an bleibt. Bei der Adresse des Wechselrichters entweder die IP oder die MAC Adresse angeben. Letzteres eignet sich besser da diese Statisch bleibt. Beim Verbinden der Box in das WLAN des WR geht natürlich nur die IP-Adresse.
Hier habe ich auch mal eine Anleitung dazu geschrieben. Oder alternativ noch diese hier, Den Teil mit dem Heim-WLAN kannst du natürlich einfach weglassen.
Das Display sollte eigentlich einfach so laufen ist ja dasselbe Protokoll. Mehr kann ich dir da aber auch nicht zu sagen. Hier hilft aber vielleicht die Original OpenDTU Dokumentation.
Moin, ich habe eine HMS-800W-2T und versuche die Firmware all_in_one_deye_hoymilesW_esp32dev_firmware.bin zu flaschen. Über die OTA der OpenDTU bzw. OpenDTU-OnBattery gibt es nur ein „Failed“. Das python esptool lehnt die Datei als nicht ESP32-S3 Image ab. Wie wird eine solche non-Faktory Firmware geflasht
Mhm ich bin mir nicht ganz sicher welche Architektur du dafür brauchst und wie dir Buildprozess ist, allerdings gibt es in der platformio.ini ein Flag das sich generic_esp32s3 nennt, das klingt vielversprechend. Ich denke, um mit diesem esp zu arbeiten, musst du das Repository auschecken und selber kompilieren, die heruntergeladene Firmware wird dort nicht Funktionieren. Zum Kompilieren brauchst du platformio und die dazugehörigen Abhängigkeiten. Es sollte aber analog zur Original Firmware funktionieren schau doch mal, ob du dort in der Dokumentation fündig wirst: https://www.opendtu.solar/
hi, ich hab deine w firmware auf meinen esp32 geflasht und es läuft soweit alles fasdt perfekt. danke dafür schonmal. alledings hab ich folgendes problem. ich habe den 800w 2t gebraucht gekauft. es sind darauf einige kwh als gesamtleistung gespeichert. das kann ich ja nicht löschen. auch die funktion “ AC-Ausgang Gesamtertrag Offset “ hilft mir da nicht weiter. kann da eintragen was ich möchte aber im display steht immer der alte wert. gibts da ne möglichkeit das zu korrigieren , die zeile auszublenden oder andere werte anzeigen zu lassen ( temp, einzelmodule, einstrahlung ) ? ich selbst hab von programierung keine ahnung um das selbst anzugehen. vielen dank
grüße alex
Hallo Alex,
der Ertrag, der auf dem Display angezeigt wird, ist der Gesamtertrag der einzelnen Solarmodule, um diesen zu korrigieren, musst du der Offset für die Module konfigurieren. Dies geht über Einstellungen -> Wechselrichter -> Runter scrollen zum gerät und bearbeiten (Stift Icon) -> wechseln zum Tab „Strings“ -> Ertragsversatz für die jeweiligen Strings eintragen. Danach sollte auch der Gesamtertrag auf der Startseite und auf dem Display stimmen.
Hallo Tost, ich antworte dir hier auf deinen Post „15. Juni 2026 um 13:15 Uhr“, da ich nicht unter dem Thread antworten konnte, kein Button mehr:
– ich würde behaupten, ich habe die Nummer bereits im Hex-Format eingetragen. Diese Nummer habe ich von einem Aufkleber auf dem WR bzw. kann ich sie auch in der App von der Einrichtung sehen Die Nummer beginnt mit 1412 und enthält auch Buchstaben, was für mich ein sehr starker Indikator für HEX ist 😉
– auch unter dem Button „Zeige Wechselrichterinformationen“ sehe ich diese Nummer
– da ich nach wie vor keinerlei Einträge in der Debug-Konsole sehe, konnte ich sie auch nicht dort im Dezimalformat sehen.
Mhm das klingt aber eigentlich alles richtig und auch das Präfix stimmt und sollte der DTU bekannt sein. Ich glaube da kann ich dir leider auch nicht weiter helfen. Wenn du die Konsolenausgabe irgendwie zum Laufen bekommst, könnten wir feststellen was nicht geht. Hast du da mal das Log-Level auf debug gestellt und das neuste Release installiert? Was noch ginge, wäre die Firmware selber mit PlatformIO via USB zu Flaschen und da den log mitzulesen aber das ist nicht ganz trivial einzurichten.
Es funktioniert traumhaft ! Danke für die tolle Erklärung und Arbeit hier.
Irgendwie habe ich es nicht geschafft, die „bin“ direkt zu flashen. Ich bin einen Umweg über das Installieren von OpenDTU. Hier habe ich die geforkte bin als Update eingespielt.
Jetzt geht´s den nächsten Schritt weiter. Mein Stromzähler wird von einem Tasmota ausgelesen und mit einer anderen DTU ausgelesen und ein weiterer Wechselrichter geregelt.
Gerne würde ich den Hoymiles W Wechselrichter auch regeln können.
Schön das es geklappt hat! Die Implementierung der Befehle zur Drosselung sind auch vorhanden, jetzt musst du dir nur noch eine Art Automatisierung bauen.