NEWS
OpenDTU-onBattery Blockly DPL Ein/Aus
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Es war keine Seltenheit, das der DPL gerade wieder unter geregelt hat, weil zu viel Sonne da war, und sich dann die Kochplatten wieder gemeldet haben. Also wieder rauf bis zur nächsten Wolke usw. usw..
Dafür soll mqtt Mode benutzt werden.
MQTT Mode 0/2 funktioniert, hat aber Einschränkungen: Neustarts, WiFi-Abbrüche oder Änderungen in der WebUI setzen den Mode einfach zurück auf 0.
Man hat auch wieder das Pending-Problem mit längerem schalten.Da ist es viel einfacher den DPL zu deaktivieren
So sehe ich das auch und ist "kein Fehler" im System.
Ohne große zusätzliche, fehleranfällige Steuerung, sofort die volle Leistung da.
So soll es sein, wenn man sich das wünscht.
Ein Schalter, wie in meiner Switch-Version, oder maxLimit, ist dagegen relativ einfach umzusetzen, sobald man den Code verstanden hat – der Schaltzustand bleibt dabei dauerhaft erhalten, auch nach Neustarts, WiFi-Abbrüchen oder Änderungen in der WebUI.
Schaltet auch sofort (bei Deaktivierung des DPL) auf maximales Limit.Es wäre interessant, die Auswahl den Usern selbst überlassen zu können.
Besonders bei "solarbetriebenen“ Wechselrichtern macht das automatische Setzen auf das unterste Limit nach DPL-Deaktivierung wenig Sinn.
Da ist es viel einfacher den DPL zu deaktivieren, dann gehen halt hin und wieder 1,8 KW ins Netz wo sie eigentlich nicht hin dürfen.
Tatsächlich fließt dabei nur sehr wenig ins Netz – umgerechnet etwa 0,15 kWh bei 5 Minuten.
Naja – unsere Lösung funktioniert, und darauf kommt es an.

-
update 14.10.2025 10:45h
MQTT-Datenpunkte
Die Steuerung erfolgt ausschließlich über MQTT.
Dabei gilt:1. Automatisch angelegt:
mqtt.x.<baseTopic>.dpl.dplState- wird automatisch erstellt
- Liefert den aktuellen Status des Dynamic Power Limiters
- Werte: 0 = aus, 1 = ein (nur lesbar)
2. Manuell anlegen (Pflicht!)
mqtt.x.<baseTopic>.dpl.dplCmdDatenpunkt dplCmd muss manuell erstellt werden, sonst funktioniert die MQTT-Steuerung nicht.
Sollte dplCmd automatisch angelegt worden sein → löschen und manuell neu anlegen!Beispiel-Einstellungen:
"common": { "name": "dplCmd", "desc": "DPL on: 1, off: 0", "role": "state", "type": "number", "read": true, "write": true, "min": -1, "max": 1, "def": -1 }
️ Nicht als Boolean anlegen!
️ FunktionsweisedplCmd: 1 → DPL-Steuerung aktiv
dplCmd: 0 → DPL deaktiviert, alle "solarbetriebenen" WR gehen automatisch auf maximale Leistung.Nach jedem Schaltvorgang setzt sich dplCmd automatisch wieder auf -1 zurück.
Damit wird sichergestellt, dass auch bei ioBroker über Blockly oder Scripts mehrfach derselbe Befehl zuverlässig gesendet werden kann –
selbst wenn der vorherige Wert identisch war.Hintergrund:
In ioBroker kann über Blockly kein ack: false gesetzt werden.
Ohne den automatischen Rücksprung auf -1 würde der identische Wert daher nicht erneut übertragen.
Der Mechanismus sorgt also für sauberes und wiederholbares Schalten – auch bei Blockly!
Schritt-für-Schritt für ioBroker-Nutzer
-
WebUI OpenDTU-oB-Patch öffnen → Dynamic Power Limiter einmal ein- oder ausschalten
→ dplState wird automatisch angelegt. -
iobroker Objekte → Expertenmodus aktivieren → manuell neuen Datenpunkt anlegen:
mqtt.x.<baseTopic>.dpl.dplCmdTyp: state, Zahl (number), siehe Einstellungen oben.
-
DPL erneut in der WebUI schalten → danach ist MQTT-Steuerung aktiv.
-
Ablesen des Status
→ Nur über dplState (0/1)
→ dplCmd wird nach dem Senden automatisch auf -1 gesetzt. -
Nach DPL-Deaktivierung
→ "solarbetriebene" Wechselrichter gehen automatisch auf volle Leistung (kein manuelles Setzen nötig)
→ "batteriebetriebene" Wechselrichter verhalten sich wie im original Repo.
Hinweise zur Nutzung
-
Jeder Schaltvorgang schreibt in den Flash-Speicher → nicht wie ein Blinker ständig ein-/ausschalten!
Etwas Geduld nach jedem Wechsel schont Hardware & Nerven.
-
Patch ist minimalinvasiv:
Keine Zusatzdatenpunkte
Kein Eingriff in nicht benötigte Codebereiche
MQTT-Race-Conditions werden sauber abgefangen -
Rückkehr zur Original-Firmware jederzeit über Web-Firmware möglich.
️ Lizenz & HaftungDiese Firmware basiert auf OpenDTU-onBattery (GPLv2, Fork von OpenDTU).
Sie enthält eigene Anpassungen und wird nicht offiziell unterstützt.Verwendung auf eigene Verantwortung – keine Haftung für Schäden oder Fehlfunktionen.
OpenDtu-OnBattery_2025.09.16DplOff-maxLimit-MQTT.generic_esp32s3.zip
Hier im Thread finden sich weitere Firmware-Builds; direkte Links dazu sind im Eingangspost zu finden.
-
@maxclaudi
Die Umschaltung funktioniert nicht mehr.Hat sich etwas geändert?
Mache ich es auf der OpenDTU Oberfläche wird der dplState unter ioBroker geändert.
Ändere dplCmd passiert nichts.
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
@maxclaudi
Die Umschaltung funktioniert nicht mehr.Hat sich etwas geändert?
Mache ich es auf der OpenDTU Oberfläche wird der dplState unter ioBroker geändert.
Ändere dplCmd passiert nichts.
Nein, es hat sich nichts geändert.
Bei mir funktioniert alles, die Builds sind alle identisch.Welche Version verwendest du, und seit wann funktioniert es nicht mehr?
Wenn du aktuell die letzte Version mit „-1“ nutzt und vorher eine ältere hattest, dann musst du unbedingt den bisherigen Datenpunkt „dplCmd“ löschen.
Danach – wie in der Anleitung beschrieben – den Datenpunkt manuell neu erstellen.
Wichtig ist dabei:
min: -1 und max: 1"common": { "name": "dplCmd", "desc": "DPL on: 1, off: 0", "role": "state", "type": "number", "read": true, "write": true, "min": -1, "max": 1, "def": -1 }Nur einmal dachte ich auch, dass es nicht funktioniert, weil beim manuellen Setzen des dplCmd:1 der dplState kurz auf 1 ging und gleich wieder auf 0 zurücksprang – das lag aber daran, dass mein Script automatisch wieder zurückschaltete.
Vielleicht ist das bei dir auch der Fall?Ansonsten läuft alles unverändert und seit über einem Monat fehlerfrei.
Von selbst kann sich da eigentlich nichts ändern – ich kann das Problem jedenfalls nicht nachvollziehen. -
Es war die neue Firmware. Das mit -1 , 0 und 1 hatte ich nicht gelesen.
Umschaltung funktioniert.
Was ich jetzt nicht mehr hinbekomme ist das Ein- und Ausschalten mit iqontrol.
Einschalten geht. Ausschalten leider nicht.
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Es war die neue Firmware. Das mit -1 , 0 und 1 hatte ich nicht gelesen.
Umschaltung funktioniert.
Was ich jetzt nicht mehr hinbekomme ist das Ein- und Ausschalten mit iqontrol.
Einschalten geht. Ausschalten leider nicht.
edit: dehalb zum Anzeigen und auswerten NUR dplState verwenden und NUR zum schalten dplCmd. Siehe hier
Damit der gleiche Wert mehrfach gesendet werden kann, braucht man daher einen Hilfsdatenpunkt:viel Spaß

-
Was hat das eigentlich mit dem "-1" für einen Grund?
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Was hat das eigentlich mit dem "-1" für einen Grund?
@beowolf
steht auch in der Anleitung beschrieben:Das „-1“ ist im Prinzip ein kleiner Trick, der wegen der Eigenart des ioBroker MQTT-Adapters nötig ist – vor allem, wenn man mit Blockly arbeitet.
Hintergrund:
Der MQTT-Adapter sendet einen Wert nur dann, wenn er sich ändert.
Wenn also dein Blockly z. B. dplCmd :1 setzt und später (z. B. nach einem OpenDTU-Neustart) wieder dplCmd:1 senden will, passiert – nichts.
Der Adapter denkt: „Der Wert ist ja schon 1, also kein Grund, erneut zu senden.“
Damit bleibt der Befehl wirkungslos, und der DPL wird nicht eingeschaltet.Darum wird nach jeder Ausführung dplCmd wieder auf -1 zurückgesetzt.
So ist beim nächsten Schaltvorgang immer eine Wertänderung vorhanden → der MQTT-Adapter sendet zuverlässig, egal ob der neue Wert gleich dem alten ist.Hinweis zu VIS und iQontrol:
Ich hatte anfangs erwähnt, dass man dafür evtl. einen Hilfsdatenpunkt braucht – das war nicht korrekt.
In iQontrol (und auch in VIS) funktioniert das völlig problemlos, ohne zusätzlichen Datenpunkt.
Man muss nur sauber trennen:- dplCmd → zum Schalten (wird nach dem Senden wieder auf -1 gesetzt)
- dplState → zur Anzeige des tatsächlichen Zustands (0 = aus, 1 = ein)
In iQontrol kannst du beim Gerät einfach
- bei „Datenpunkt für Schalten“ → dplCmd
- bei „Datenpunkt für Status“ → dplState
eintragen.
Dann klappt Ein- und Ausschalten zuverlässig, und der Zustand wird korrekt angezeigt – ganz ohne Hilfsdatenpunkt.
Viel Spaß

-
Danke nochmal für die Erklärung.
-
@beowolf
gerne