OpenDTU für Deye Sun

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 das Projekt geforked (hier) und die Möglichkeit hinzugefügt Deye Sun Wechselrichter auszulesen.

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
  • Erreichbarkeit
  • Einfache Einbingen des Wechselrichters via UI

Funktion

Da der Deye Sun Wechselrichter ja keine 2.4 GHz Schnittstelle wie der Hoymiles hat, wird dieser über WLAN ausgelesen. Um genauer zu sein über den Modbus Port 48899 via UDP oder den Port 8899 mit TCP. Hier kann dann bei der Einrichtung der Hardware natürlich das 2.4 GHz Funk Modul weggelassen werden. Nach der Einrichtung des Wechselrichters wird ca. alle 30 Sekunden die Erreichbarkeit des Wechselrichters geprüft und alle 5 min die neuen Daten ausgelesen.

Problematik

Da die Deye Sun Wechselrichter die Daten nur alle 5 min aktualisieren können diese natürlich auch nur alle 5 min neu abgefragt werden. Das ist natürlich schade da die Werte nie so richtig aktuell sind. Aber zumindest sind sie der Durchschnitt der letzten 5 min und nicht nur ein zufälliger Zeitpunkt davon.

Drosselung der Leistung

Das Drosseln der Leistung des Wechselrichter kann öfter erfolgen als das auslesen. Je nachdem ob gerade Daten abgefragt werden oder die Verbindung „frei“ ist, kann dies sofort passieren aber auch schon mal bis zu 30 Sekunden dauern.

Unterschiedliche Protokolle

Es gibt Verschiedene Firmwareversionen des Herstellers für die Geräte mit unterschiedlichen Kommunikationsprotokollen: AT-Commands, eine eigene Modbus Implementierung und eine normale Modbus Implementierung.

Die At-Commands Schnittstelle funktioniert mit den alten Firmware Versionen 1.0 – 2.32. Die eigene Modbus Implementierung vermutlich mit den Versionen mit dem Abschließenden B (z.B. MW3_SSL_5408_1.0B) und die normale Modbus Implementierung vermutlich mit den Versionen mit dem Abschließenden C (z.B. MW_03_16U_5408_5.0C-S).

Die At-Commands Schnittstelle funktioniert vollständig (lesen der Daten und setzten des Limits).

Was ich Testen und Implementieren konnte war die eigene Modbus Implementierung mit der  Version MW3_SSL_5408_1.0B. Daher ist nun das Protokoll beim Anlegen eines neuen Wechselrichters möglich. Eine Firmware für die normale Modbus Implementierung habe ich leider noch nicht in die Hände bekommen und konnte diese daher auch noch nicht Implementieren.

Zudem ist bei der eigene Modbus Implementierung das setzten des Limits noch nicht möglich.

Auch noch gut zu wissen ist, dass nach einem Upgrade auf die neuen Versionen (MW_03_16U_5408_5.0C-S und Firmware MW3_SSL_5408_1.0B) ein downgrade der Firmware nicht mehr möglich ist. Bzw. nur über den Hersteller mit aktiver Internetverbindung durchgeführt werden kann. Die aktuell verfügbaren Firmware Versionen können hier heruntergeladen werden.

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 und 16MB Speicher.

Der hier beschriebene OpenDTU Fork funktioniert (noch) nicht für die neuen Firmwareversionen mit dem normalen Modbus Protokoll (vermutlich Firmware MW_03_16U_5408_5.0C-S) und für das custom Modbus Protokoll ist das Setzen des Limits noch nicht möglich  (Firmware MW3_SSL_5408_1.0B).

Bilder

8 Gedanken zu „OpenDTU für Deye Sun

  1. Hallo Brony,

    seitdem mein 600W Balkonkraftwerk am richtigen Ort angebracht ist (0° auf einer Pergola mit 2 Winkeleinstellungen) produziert es Strom wie Sau. Ich denke über diverse Erweiterungen nach: Batterie, vertikale Nachführung, Erweiterung etc.. Ein Knackpunkt bei der ganzen Sache ist, dass man idealer Weise die Leistungsabgabe der Anlage ans Netz über den Wechselrichter dynamisch steuert (z.B. das Verhältnis batterieladen/einspeisen oder die Reduktion der Batterieeinspeisung in der Nacht auf die Grundlast). Diese Reduzierung der Einspeiseleistung kann mein Deye SUN600 – aber halt nur über die App, nicht dynamisch. Nun habe ich mein System in Everhome eingebunden – auch den Deye. Hier kann ich ihn auch nur überwachen, aber nichts einstellen. Mit OpenDTU erscheint mir das realistisch zu werden und mit deiner Erweiterung auf Deye noch ein Schritt mehr.

    Aber Fragen:

    1. Die OpenDTU kann in Everhome eingebunden werden, wie bekomme ich deine Firmware drauf? Runterladen und über die DTU-App upgraden?

    2. Wieso zeigen sowohl die Solarman-App als auch Everhome die Leistung Verzögerungsfrei an, wenn – wie du schreibst – der Wechselrichter die Daten nur alle 5 Minuten preisgibt?

    3. Kann ich DTU und Direktverbindung zeitgleich betreiben (Direktverbindung zum Monitoring der aktuellen Werte und DTU zur Überwachung und Steuerung der Leistungsabgabe)?

    4. Die DTU ersetzt doch die Bindung an die Deye-Cloud in China. Aber wo landen die Daten? Werden die auf der DTU gespeichert, in der App? Bei Anbindung an Everhome hoffentlich dort …

    Ich bin gespannt …
    Vielen Dank im Voraus für deine Antworten.

    lg … Roland

    1. Hallo Roland,

      Zu deinen Fragen:

      1. Die Firmware die du suchst ist hier: https://github.com/tost11/OpenDTU-Push-Rest-API-and-Deye-Sun/blob/master/builds/deye_esp32dev_firmware.bin.. Diese kannst du entweder direkt auf den ESP aufspielen oder über die UI von DTU installieren. Bitte beachte, dass die Version schon etwas veraltet ist, da es schon ein halbes Jahr her ist als ich die gebaut hab. (Ich müsste da mal wieder den aktuellen stand rein mergen).

      2. Eine gute Frage, soweit ich weiß, zeigt die App zwar immer Daten an diese sind aber über die letzten 5 min akkumuliert und spiegeln nicht die aktuellen Werte wider wie z.B. bei den Hoymilles Geräten, die alle 10sec abgefragt werden können. Falls du da andere Erfahrungswerte hast oder mir sagst wie ich öfter an Daten komme, wäre das nett zu wissen.

      3. Mir ist nicht ganz klar was du mit Direktverbindung meinst aber grundsätzlich ja. Es können mehrere Geräte gleichzeitig Daten vom Wechselrichter abrufen.

      4. Nein DTU ersetzt nicht die Anbindung an die Deye-Cloud. DTU fragt die Daten von dem Wechselrichter separat ab über einen offenen Port an dem Gerät. Wie genau die Daten nach Everhome kommen kann ich dir nicht sagen mit diesem System hatte ich noch nie zu tun. Zudem speichert DTU keine historischen Werte, sondern zeigt nur die aktuellen an.

      Dann jetzt vielleicht noch ein kleiner Denkanstoß von mir. Wenn es dir nur darum geht, den Wechselrichter zu drosseln ist vielleicht dieses Tool eher, was du suchst: https://github.com/s10l/deye-logger-at-cmd. Hiermit lässt sich mit nur einem Befehl die Drosselung einstellen und du müsstest DTU gar nicht verwenden. Bzw. hier hatte ich auch mal was dazu geschrieben: https://itgrufti.de/solar/deye-sun-balkon-wechselrichter-drosseln/

      Ich hoffe ich konnte dir weiter helfen.

  2. Hallo
    Ich habe eine Frage:
    1. geht dies auch mit opendtu on battery.
    2, Unterstützt deine Fork auch 2 Wechselrichter, also z.b hoymiles und deye
    3. geht dann auch das dynamische einspeisen?

    Danke vielmals für dein Engagement

    1. 1. Nein da opendtu on battery ein eigener Fork ist und in meinem nicht enthalten. Zusammen mergen wäre aber sicher möglich.
      2. Ja beim Einrichten des Wechselrichters kann ausgewählt werden welcher „Hersteller“ verwendet werden soll.
      3. Wenn du mit dynamischen einspeisen meinst, dass du über das UI oder Web(Rest)-Aufrufe die Drosselung dynamisch ändern kannst (ca. alle 20sec) dann ja. Auch wenn ich da lieber auf dieses Projekt: https://github.com/s10l/deye-logger-at-cmd verweise, hier ist dies mit nur einem Kommandozeilenbefehl möglich.

  3. Hallo Brony,
    danke für die Bereitstellung der Software „OpenDTU für Deye Sun“. Mir gelang es, sie in Verbindung mit einem EPP-300G3-EU-230 (Deye) zum Laufen zu bringen. Ich möchte damit sagen, dass Werte, wie z.B. die Leistung (5min Mittelwert), DC-Spannung, AC-Spannung etc. angezeigt werden. Die Abfrage der Daten funktioniert also.
    Das Ändern des Limits wird jedoch nicht ausgeführt. In der Ereignisanzeige heißt es: command not send because Deye Sun device unknown (Checked by serial number), wobei meine Seriennummer wie Deine mit 41 beginnt. Unter Einstellungen Wechselrichter heißt es zwar bei Hersteller DeyeSun, jedoch bei Typ steht unknown.
    Nun weiß ich nicht weiter. Gibt es eine Möglichkeit, dass die openDTU den WR als den SUN300G3 erkennt, der er ja tatsächlich auch ist.
    Vielen Dank und viele Grüße,
    Marcus

    1. Hallo Marcus,
      dass, das Setzten des Limits nicht funktioniert, ist eine beabsichtigte Funktion. Somit ist es nicht möglich bei unbekannten Firmwareversionen Befehle zu senden, falls die Register nicht gleich sind bei neuen Geräten. Auf vermehrter Nachfrage habe ich dies „Feature“ aber in der neusten Firmware Version entfernt, es sollte somit nach einer Aktualisierung funktionieren.

      Zu dem Thema, dass der Wechselrichter als unbekannt angezeigt wird: Das liegt daran, dass die Seriennummer nicht bekannt ist. Diese wird an den ersten drei Stellen ermittelt. Schreib mir gern das Präfix deiner Seriennummer und ich werde es eintragen. Oder du dokumentierst sie hier unter diesem Github Issue.

  4. Servus Lukas,

    vielen Dank für deine Mühe und die Bereitstellung deines Forks.
    Leider habe ich es nicht hin bekommen, die SW auf meiner OpenDTU zum Laufen zu bringen…

    Zugegeben, ich bin auf diesem Gebiet noch recht unerfahren, da ich erst seit ca. vier Wochen einen Hoymiles Wechselrichter zusätzlich betreibe (das bisherige Setup lief mit einem Bosswerk MI-600, der jetzt aber noch mit einem Panel weiter betrieben wird). Dazu habe ich mir dann eine DTU besorgt, basierend auf dem ESP32-S3-WROOM -1-N16R8 mit 16 MB Flash und 8 MB PSRAM.
    Soweit ich sehen kann ist SW für die 4 MB Variante gemacht.
    Daher meine Frage: Gibt es deine SW auch für die 16 MB Varianten? Oder gibt es eine Möglichkeit sie dort zum Laufen zu bekommen?

    Das Update über das UI von OpenDTU hat übrigens nicht funktioniert. Mit dem Flash-Tool konnte ich sie zwar aufspielen, aber danach lief die DTU nicht mehr und hat sich am PC ständig an- und abgemeldet (USB, im 2-3 Sekundentakt da-ding – da-dong)

    Besten Dank und Grüße aus München
    Corry

    1. Grundsätzlich sollte die Firmware auf dem Esp auch laufen.

      Um die Firmware für eine andere Architektur z.B. den Esp mit 16MB RAM muss das Projekt mit dem passenden Flag compiliert werden. Eine Liste der Flags findest du in der platformio.ini Datei. Der Befehl sieht dann folgendermaßen aus: platformio run -e [BUILD_NAME] bzw. für die 16MB Variante: platformio run -e generic_esp32_16mb_psram.

      Ich hab das gerade mal zur Build-Pipeline hinzugefügt und die builds in der Repository hochgeladen. Du findest sie hier.

      Ich kann die Firmware leider gerade nicht Testen da ich keine Esp mit 16MB besitze.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.