NEWS
OpenDTU-onBattery Blockly DPL Ein/Aus
-
Das ist ja Super. Die Umschaltung erfolgt wirklich direkt. Vielen, vielen Dank dafür.
Im Skript darf doch nur die 100% Geschichte raus. Alles andere muß so bleiben.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="L=IeP_E{`;v.^#v:zZ)2">jsonObj</variable> <variable id="+-}`+im{K3Jj+XIEO6#j">attr</variable> <variable id="ulw#]uAEr8ao^|N_NWy}">val</variable> <variable id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</variable> <variable id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</variable> <variable id="Q[Ul.eSqTa`ja|Cts-+/">WR1 HM-1000_serial</variable> <variable id="]TAF~$|vQbu%71?%TIMg">WR2 HM-1000_serial</variable> <variable id="4eljrs#2Fi];mvA0WV6L">WR3 HM-1000_serial</variable> <variable id="yU6fmm*ctEK;X.gC*Cng">WR4 HM-1000_serial</variable> <variable id="2|vbm;5buC6^$eogp=fe">urlDPLstate</variable> <variable id="PWsI)BqL)EeZPzj!8-VY">set</variable> <variable id="JppG`(9.sfDt)j^gha}{">cUrlLimitPart1</variable> <variable id="Xy47v*SILC`=7N1mM,:5">cUrlLimitPart2</variable> <variable id="fb8(CemIXpTZO:5?3eho">WR1 HM-1000_curl</variable> <variable id="b;`WR[z]dikov!wE@,}j">WR2 HM-1000_curl</variable> <variable id="~^lm~JreXhZ81X6{yXWg">WR3 HM-1000_curl</variable> <variable id="h/:^mLws30u))2ZimsSs">WR4 HM-1000_curl</variable> <variable id="_+8y375~59B=8rd!@Ae%">jsonObjekt</variable> </variables> <block type="procedures_defcustomnoreturn" id="nxZk[TB}x%yvkJ058U]o" x="213" y="-137"> <mutation statements="false"> <arg name="jsonObj" varid="L=IeP_E{`;v.^#v:zZ)2"></arg> <arg name="attr" varid="+-}`+im{K3Jj+XIEO6#j"></arg> <arg name="val" varid="ulw#]uAEr8ao^|N_NWy}"></arg> </mutation> <field name="NAME">change</field> <field name="SCRIPT">anNvbk9ialthdHRyXSA9IHZhbDs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="comment" id="g{c,O//*067~CDT{26F+" x="212" y="-112"> <field name="COMMENT">OpenDTUonBattery&#10;DPL Ein/Aus</field> <next> <block type="comment" id="wPs7.T(3#lmg-Q#YnMcz"> <field name="COMMENT">IP von OpenDTUonBattery:</field> <next> <block type="variables_set" id="xiC72+QQD{FQ44VC6wQn"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> <value name="VALUE"> <block type="text" id="3|rd+!6W]T02z}tGd1/m"> <field name="TEXT">192.168.xx.xxx</field> </block> </value> <next> <block type="comment" id="8!|A_f5hyHJr/:f!|;r."> <field name="COMMENT">OpenDTUonBattery Passwort:</field> <next> <block type="variables_set" id="ItJFflir$91[$;pF5+MA"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> <value name="VALUE"> <block type="text" id="xYm]l*(;=w@0xJQnWi5-"> <field name="TEXT">Beowolf503588</field> </block> </value> <next> <block type="comment" id="(Mkj3qMZry-SXoV#TG-e"> <field name="COMMENT">serial HM</field> <next> <block type="variables_set" id="s*[FyKXx,06qe75!Ql(H"> <field name="VAR" id="Q[Ul.eSqTa`ja|Cts-+/">WR1 HM-1000_serial</field> <value name="VALUE"> <block type="text" id="2sNdysyulvZDNM6yeP8H"> <field name="TEXT">11419xx</field> </block> </value> <next> <block type="variables_set" id="~/@Acy]v_1,b~:Bn[L_+"> <field name="VAR" id="]TAF~$|vQbu%71?%TIMg">WR2 HM-1000_serial</field> <value name="VALUE"> <block type="text" id="f;}RPMU,=+?6Q7VrPX[$"> <field name="TEXT">11419xx</field> </block> </value> <next> <block type="variables_set" id="XI+~|V]7r!Kau}Xh8`cs"> <field name="VAR" id="4eljrs#2Fi];mvA0WV6L">WR3 HM-1000_serial</field> <value name="VALUE"> <block type="text" id="4o,d$])#Rr|W-+g=8#5r"> <field name="TEXT">11417xx</field> </block> </value> <next> <block type="variables_set" id="4L=wN^,g:oz:OQikS*6@"> <field name="VAR" id="yU6fmm*ctEK;X.gC*Cng">WR4 HM-1000_serial</field> <value name="VALUE"> <block type="text" id="2jRM6}4{ndN1e8lQqLzw"> <field name="TEXT">11418xx</field> </block> </value> <next> <block type="comment" id="8ezl|ED@6X29f4k@:.2H"> <field name="COMMENT">----</field> <next> <block type="variables_set" id="!#IE.`!)HPf,NcPW*miy"> <field name="VAR" id="2|vbm;5buC6^$eogp=fe">urlDPLstate</field> <value name="VALUE"> <block type="text_join" id="F#[x6:MOpP{a#hljyq@2"> <mutation items="5"></mutation> <value name="ADD0"> <block type="text" id="!@~5;?O8`oIO%oN]bLJa"> <field name="TEXT">curl -u "admin:</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="SFT0:Zq378qj5]2?a5#b"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> </block> </value> <value name="ADD2"> <block type="text" id="5}ok+uklC%b/F}gtZr`^"> <field name="TEXT">" http://</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="C|ac)ks!*i8cZS5zb!0?"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> </block> </value> <value name="ADD4"> <block type="text" id="!=iiY$6m(O#=Q|km-7W1"> <field name="TEXT">/api/powerlimiter/config</field> </block> </value> </block> </value> <next> <block type="variables_set" id="Nw*-3DKlvV=)l.++!yg%"> <field name="VAR" id="PWsI)BqL)EeZPzj!8-VY">set</field> <value name="VALUE"> <block type="text_join" id="b3+b3^R@5s5Vbpj^o9!6"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id="%UJkDROf_mMO^oE4EKW."> <field name="VAR" id="2|vbm;5buC6^$eogp=fe">urlDPLstate</field> </block> </value> <value name="ADD1"> <block type="text" id="o}*[n$;A?-]x1P{Ppan."> <field name="TEXT"> -d 'data=</field> </block> </value> </block> </value> <next> <block type="variables_set" id="1%5eOCEM.zYy[-sZ0a43"> <field name="VAR" id="JppG`(9.sfDt)j^gha}{">cUrlLimitPart1</field> <value name="VALUE"> <block type="text_join" id="B,v7UaJQkq-DSzv41b;v"> <mutation items="5"></mutation> <value name="ADD0"> <block type="text" id=";4j$FAn0X}CSE_D5:/kl"> <field name="TEXT">curl -u "admin:</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="Ea#Og5Jr^hwL!_Oh-[Ua"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> </block> </value> <value name="ADD2"> <block type="text" id="kBsI#4)FR#3@EAh.=@b]"> <field name="TEXT">" http://</field> </block> </value> <value name="ADD3"> <block type="variables_get" id=",/9?^Tx*?hC1YP`-X]37"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> </block> </value> <value name="ADD4"> <block type="text" id="p5zvA0V{e$4V$#_9gWcY"> <field name="TEXT">/api/limit/config -d 'data={"serial":"</field> </block> </value> </block> </value> <next> <block type="variables_set" id="u|60ca%8U|+rvrL1*bdK"> <field name="VAR" id="Xy47v*SILC`=7N1mM,:5">cUrlLimitPart2</field> <value name="VALUE"> <block type="text" id="`Z^Zv4qi(GN;drYs.f6I"> <field name="TEXT">","limit_value":100,"limit_type":1}'</field> </block> </value> <next> <block type="variables_set" id="YGofdo8=[F6.o!Qp^XF+"> <field name="VAR" id="fb8(CemIXpTZO:5?3eho">WR1 HM-1000_curl</field> <value name="VALUE"> <block type="text_join" id="zv%(}:f|zmP5HG:fD09("> <mutation items="7"></mutation> <value name="ADD0"> <block type="text" id="XAm?]VyB/h{~mRaM1bsf"> <field name="TEXT">curl -u "admin:</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="%XVNmv0mDVw(k}BQGk_?"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> </block> </value> <value name="ADD2"> <block type="text" id="^p-]`Q~oVv2Eh[045E)c"> <field name="TEXT">" http://</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="T{Tp#*68~o$/f%-3@4=!"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> </block> </value> <value name="ADD4"> <block type="text" id=")l]/Nhc,h|Rg:#*Ka0Q("> <field name="TEXT">/api/limit/config -d 'data={"serial":"</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="-iy+n+|)dc=K/8NqL~*E"> <field name="VAR" id="Q[Ul.eSqTa`ja|Cts-+/">WR1 HM-1000_serial</field> </block> </value> <value name="ADD6"> <block type="text" id=".ZX[eqqM@Hf-6HHnLe[X"> <field name="TEXT">","limit_value":100,"limit_type":1}'</field> </block> </value> </block> </value> <next> <block type="variables_set" id="itIS@8Y63,ktSrsgW5.F"> <field name="VAR" id="b;`WR[z]dikov!wE@,}j">WR2 HM-1000_curl</field> <value name="VALUE"> <block type="text_join" id="*I6(R5oBcHQuA=dX6mSv"> <mutation items="7"></mutation> <value name="ADD0"> <block type="text" id="oUpBy-8zKLYpodhxSIf9"> <field name="TEXT">curl -u "admin:</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="QuBN*njkx@{j1+c[+ZmZ"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> </block> </value> <value name="ADD2"> <block type="text" id=";pv}`0?1q%g!#_s5~/y%"> <field name="TEXT">" http://</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="o[)lM|Pmbvb7OKUi*NuS"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> </block> </value> <value name="ADD4"> <block type="text" id="V8FZuQaNdG6{3d83*Vfy"> <field name="TEXT">/api/limit/config -d 'data={"serial":"</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="qi!d0-X1Z-#=8-deCnKw"> <field name="VAR" id="]TAF~$|vQbu%71?%TIMg">WR2 HM-1000_serial</field> </block> </value> <value name="ADD6"> <block type="text" id="^C*6RVCe.]c[_:It59N)"> <field name="TEXT">","limit_value":100,"limit_type":1}'</field> </block> </value> </block> </value> <next> <block type="variables_set" id="y-50t.$8~@?)JdWuw9L}"> <field name="VAR" id="~^lm~JreXhZ81X6{yXWg">WR3 HM-1000_curl</field> <value name="VALUE"> <block type="text_join" id=":Z}TZDl]Vrik0giB}n.P"> <mutation items="7"></mutation> <value name="ADD0"> <block type="text" id="/x5W!c:L8z/%#/u$QS5C"> <field name="TEXT">curl -u "admin:</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="jMWXlHgbFT7ud{NSR#)m"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> </block> </value> <value name="ADD2"> <block type="text" id="}Er+;ReC#[21_HkBUgT%"> <field name="TEXT">" http://</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="({)=]?)Sq8cbZ{J_6:(R"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> </block> </value> <value name="ADD4"> <block type="text" id="a!m?UC,|z(Z2L1w[V]?;"> <field name="TEXT">/api/limit/config -d 'data={"serial":"</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="d10hz@@3$|l=(.i3!yCU"> <field name="VAR" id="4eljrs#2Fi];mvA0WV6L">WR3 HM-1000_serial</field> </block> </value> <value name="ADD6"> <block type="text" id="ghyHOj#I.GZdwt}/N4.V"> <field name="TEXT">","limit_value":100,"limit_type":1}'</field> </block> </value> </block> </value> <next> <block type="variables_set" id="4x#LN@l+TQ!Lkp[H-5/t"> <field name="VAR" id="h/:^mLws30u))2ZimsSs">WR4 HM-1000_curl</field> <value name="VALUE"> <block type="text_join" id=",RCm`Tm3,)jX(r6IS8=C"> <mutation items="7"></mutation> <value name="ADD0"> <block type="text" id="br?7@jk..QlqS}d/LU(."> <field name="TEXT">curl -u "admin:</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="B,=zC-eX!PZK{])4[XLZ"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> </block> </value> <value name="ADD2"> <block type="text" id="y*;OJo}j:4VGR}oKsP+G"> <field name="TEXT">" http://</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="1t9*`a:OlrR;a!bh!MYQ"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> </block> </value> <value name="ADD4"> <block type="text" id="KTYq]v}[P~p)G@UtO@#v"> <field name="TEXT">/api/limit/config -d 'data={"serial":"</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="v+/,]aZX,R+_{1jSnOWR"> <field name="VAR" id="yU6fmm*ctEK;X.gC*Cng">WR4 HM-1000_serial</field> </block> </value> <value name="ADD6"> <block type="text" id="S/6V?%a]sOs$UZ`Jbmqu"> <field name="TEXT">","limit_value":100,"limit_type":1}'</field> </block> </value> </block> </value> <next> <block type="on_ext" id="MpdxhvC3:):%?cL5ChV-"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="j)L11f:Db#X;sEL6awg/"> <field name="oid">0_userdata.0.openDTUoB.dplEinAus</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="Y+nX-p}*xExWw]O`OX~{"> <field name="COMMENT">aktueller DPL state:</field> <next> <block type="exec" id="I~3.fAPDzJ[1T(TlzoOT"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="9;-TT-}BY,qROECr/9_6"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="i4]srTbBS]Jm}Z^t,,i^"> <field name="VAR" id="2|vbm;5buC6^$eogp=fe">urlDPLstate</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="U*PNhv3v$WIWPSb|ja,I"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> <value name="VALUE"> <block type="convert_json2object" id="y.{-xr4=@LsO?lm{BV16"> <value name="VALUE"> <block type="exec_result" id="6ho:XZ{%G?n+B=|[OsSQ"> <field name="ATTR">result</field> </block> </value> </block> </value> <next> <block type="comment" id="A(14glg}PvpJG@9qX7Z+"> <field name="COMMENT">DPL Ein:</field> <next> <block type="controls_if" id=")aeo4TK/:D$bt5(cFhVN"> <value name="IF0"> <block type="logic_compare" id="%pI.k62s._dcfZnb8SHC"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="C-u,UgBdHv4sZCblY)(F"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="e..27D@{cN0JPJc_@bv;"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="procedures_callcustomnoreturn" id="D9g{#*qgs_-7rfz6|TYD"> <mutation name="change"> <arg name="jsonObj"></arg> <arg name="attr"></arg> <arg name="val"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="yi4H-8|bl|J[{ecr@w?*"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> <value name="ARG1"> <block type="text" id="/1aiKrRmt}{2sRQ`BE^S"> <field name="TEXT">enabled</field> </block> </value> <value name="ARG2"> <block type="logic_boolean" id="]!TrP#dnQ%e`r1%@n;)0"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="exec" id="xWQm84D2~+;KrfUenNP|"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="Y[J#ti:!)V_p[~D/~=BP"> <field name="TEXT">pwd</field> </shadow> <block type="text_join" id="?#1pjgc[4w-Nbot8xQpL"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id=";wn*ZeQHpIf@a_40]mk$"> <field name="VAR" id="PWsI)BqL)EeZPzj!8-VY">set</field> </block> </value> <value name="ADD1"> <block type="convert_object2json" id="`s4:$VMpnCx?$#E/lH89"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="akzUA)PF0iBQcIE,ZBTo"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="tazI8QS$S%YmkBw8,!R]"> <field name="TEXT">'</field> </block> </value> </block> </value> </block> </next> </block> </statement> <next> <block type="comment" id="zV97]OnS?/IjoV1xAl_T"> <field name="COMMENT">DPL Aus:</field> <next> <block type="controls_if" id="7{aiQa33_g$QnlPw!:;F"> <value name="IF0"> <block type="logic_compare" id="XYHuB8ZNE3]RuqS}0zLa"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="kRJjzY0xkd07ZrzDPb1?"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="{2pCy)Ah-nq3V.,{DVo1"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="procedures_callcustomnoreturn" id="-Hz0vX5GM=t[9OHH8]Wg"> <mutation name="change"> <arg name="jsonObj"></arg> <arg name="attr"></arg> <arg name="val"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="v[6xm8C%Otou%c3=g710"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> <value name="ARG1"> <block type="text" id="tL?JD.@HaQSk5`{9Wm]{"> <field name="TEXT">enabled</field> </block> </value> <value name="ARG2"> <block type="logic_boolean" id="WMimixsaaPP)fhHu2.J$"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="exec" id="/p+Uv~V#hIePApTb=KTR"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="Y[J#ti:!)V_p[~D/~=BP"> <field name="TEXT">pwd</field> </shadow> <block type="text_join" id="?fTh]i~D]=Ue}GsE8^;i"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="$!],od*U?4dNiG;_YIzl"> <field name="VAR" id="PWsI)BqL)EeZPzj!8-VY">set</field> </block> </value> <value name="ADD1"> <block type="convert_object2json" id="|pyw%?Kwve~3iciql_#f"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="z0~!%^yv(pHWcQpw)5``"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="/g9Zs!_,BY#!LKzHEF`/"> <field name="TEXT">'</field> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
Alles funktioniert sogar mit meinen "getunten" HM WR. Ich habe ja die HM-600 und die HM-800 mit dem Hoymiles 1000W Dongle (Flole-Inverter-Tool) auf 1000 Watt erweitert. Die laufen damit super und vollkommen ohne Probleme.
Grüße
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Das ist ja Super. Die Umschaltung erfolgt wirklich direkt. Vielen, vielen Dank dafür.
Im Skript darf doch nur die 100% Geschichte raus.
ja
, alle Limit Setzungen können entfernt werden
Es reicht mit der modFirmware aus, nur noch OpenDTU-OnBattery-DPL ein- und auszuschalten.
Habe das Blockly für Dich angepasst:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="L=IeP_E{`;v.^#v:zZ)2">jsonObj</variable> <variable id="+-}`+im{K3Jj+XIEO6#j">attr</variable> <variable id="ulw#]uAEr8ao^|N_NWy}">val</variable> <variable id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</variable> <variable id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</variable> <variable id="2|vbm;5buC6^$eogp=fe">urlDPLstate</variable> <variable id="PWsI)BqL)EeZPzj!8-VY">set</variable> <variable id="_+8y375~59B=8rd!@Ae%">jsonObjekt</variable> </variables> <block type="procedures_defcustomnoreturn" id="nxZk[TB}x%yvkJ058U]o" x="237" y="-137"> <mutation statements="false"> <arg name="jsonObj" varid="L=IeP_E{`;v.^#v:zZ)2"></arg> <arg name="attr" varid="+-}`+im{K3Jj+XIEO6#j"></arg> <arg name="val" varid="ulw#]uAEr8ao^|N_NWy}"></arg> </mutation> <field name="NAME">change</field> <field name="SCRIPT">anNvbk9ialthdHRyXSA9IHZhbDs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="comment" id="g{c,O//*067~CDT{26F+" x="253" y="-97"> <field name="COMMENT">OpenDTUonBattery&#10;DPL Ein/Aus</field> <next> <block type="comment" id="wPs7.T(3#lmg-Q#YnMcz"> <field name="COMMENT">IP von OpenDTUonBattery:</field> <next> <block type="variables_set" id="xiC72+QQD{FQ44VC6wQn"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> <value name="VALUE"> <block type="text" id="3|rd+!6W]T02z}tGd1/m"> <field name="TEXT">192.168.xxx.xxx</field> </block> </value> <next> <block type="comment" id="8!|A_f5hyHJr/:f!|;r."> <field name="COMMENT">OpenDTUonBattery Passwort:</field> <next> <block type="variables_set" id="ItJFflir$91[$;pF5+MA"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> <value name="VALUE"> <block type="text" id="xYm]l*(;=w@0xJQnWi5-"> <field name="TEXT">topSecret</field> </block> </value> <next> <block type="comment" id="8ezl|ED@6X29f4k@:.2H"> <field name="COMMENT">----</field> <next> <block type="variables_set" id="!#IE.`!)HPf,NcPW*miy"> <field name="VAR" id="2|vbm;5buC6^$eogp=fe">urlDPLstate</field> <value name="VALUE"> <block type="text_join" id="F#[x6:MOpP{a#hljyq@2"> <mutation items="5"></mutation> <value name="ADD0"> <block type="text" id="!@~5;?O8`oIO%oN]bLJa"> <field name="TEXT">curl -u "admin:</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="SFT0:Zq378qj5]2?a5#b"> <field name="VAR" id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</field> </block> </value> <value name="ADD2"> <block type="text" id="5}ok+uklC%b/F}gtZr`^"> <field name="TEXT">" http://</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="C|ac)ks!*i8cZS5zb!0?"> <field name="VAR" id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</field> </block> </value> <value name="ADD4"> <block type="text" id="!=iiY$6m(O#=Q|km-7W1"> <field name="TEXT">/api/powerlimiter/config</field> </block> </value> </block> </value> <next> <block type="variables_set" id="Nw*-3DKlvV=)l.++!yg%"> <field name="VAR" id="PWsI)BqL)EeZPzj!8-VY">set</field> <value name="VALUE"> <block type="text_join" id="b3+b3^R@5s5Vbpj^o9!6"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id="%UJkDROf_mMO^oE4EKW."> <field name="VAR" id="2|vbm;5buC6^$eogp=fe">urlDPLstate</field> </block> </value> <value name="ADD1"> <block type="text" id="o}*[n$;A?-]x1P{Ppan."> <field name="TEXT"> -d 'data=</field> </block> </value> </block> </value> <next> <block type="on_ext" id="MpdxhvC3:):%?cL5ChV-"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="j)L11f:Db#X;sEL6awg/"> <field name="oid">0_userdata.0.openDTUoB.dplEinAus</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="Y+nX-p}*xExWw]O`OX~{"> <field name="COMMENT">aktueller DPL state:</field> <next> <block type="exec" id="I~3.fAPDzJ[1T(TlzoOT"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="9;-TT-}BY,qROECr/9_6"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="i4]srTbBS]Jm}Z^t,,i^"> <field name="VAR" id="2|vbm;5buC6^$eogp=fe">urlDPLstate</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="U*PNhv3v$WIWPSb|ja,I"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> <value name="VALUE"> <block type="convert_json2object" id="y.{-xr4=@LsO?lm{BV16"> <value name="VALUE"> <block type="exec_result" id="6ho:XZ{%G?n+B=|[OsSQ"> <field name="ATTR">result</field> </block> </value> </block> </value> <next> <block type="comment" id="A(14glg}PvpJG@9qX7Z+"> <field name="COMMENT">DPL Ein:</field> <next> <block type="controls_if" id=")aeo4TK/:D$bt5(cFhVN"> <value name="IF0"> <block type="logic_multi_and" id="|=G?gJHQ5k}cxFqoR^;z"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <value name="AND0"> <block type="logic_compare" id="%pI.k62s._dcfZnb8SHC"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="C-u,UgBdHv4sZCblY)(F"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="e..27D@{cN0JPJc_@bv;"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="AND1"> <block type="logic_compare" id="wdDtzwPpJLC8TB-GUhOw"> <field name="OP">EQ</field> <value name="A"> <block type="get_attr" id="1Dn=g_RFPxjHuXA-brk3"> <value name="PATH"> <shadow type="text" id="(Z$IBe;(S`S6T]qVdh]y"> <field name="TEXT">enabled</field> </shadow> </value> <value name="OBJECT"> <shadow type="get_object" id="c1DWkSsJA%t1U3IxR_0J"> <field name="OID">Object ID</field> </shadow> <block type="variables_get" id="taltqfd{-^G(i!T3k2,w"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> </block> </value> <value name="B"> <block type="logic_boolean" id="_3!+w8pZWtXff|:t(Q)b"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="procedures_callcustomnoreturn" id="D9g{#*qgs_-7rfz6|TYD"> <mutation name="change"> <arg name="jsonObj"></arg> <arg name="attr"></arg> <arg name="val"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="yi4H-8|bl|J[{ecr@w?*"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> <value name="ARG1"> <block type="text" id="/1aiKrRmt}{2sRQ`BE^S"> <field name="TEXT">enabled</field> </block> </value> <value name="ARG2"> <block type="logic_boolean" id="]!TrP#dnQ%e`r1%@n;)0"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="exec" id="xWQm84D2~+;KrfUenNP|"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="Y[J#ti:!)V_p[~D/~=BP"> <field name="TEXT">pwd</field> </shadow> <block type="text_join" id="?#1pjgc[4w-Nbot8xQpL"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id=";wn*ZeQHpIf@a_40]mk$"> <field name="VAR" id="PWsI)BqL)EeZPzj!8-VY">set</field> </block> </value> <value name="ADD1"> <block type="convert_object2json" id="`s4:$VMpnCx?$#E/lH89"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="akzUA)PF0iBQcIE,ZBTo"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="tazI8QS$S%YmkBw8,!R]"> <field name="TEXT">'</field> </block> </value> </block> </value> </block> </next> </block> </statement> <next> <block type="comment" id="zV97]OnS?/IjoV1xAl_T"> <field name="COMMENT">DPL Aus:</field> <next> <block type="controls_if" id="7{aiQa33_g$QnlPw!:;F"> <value name="IF0"> <block type="logic_multi_and" id="H^iZ|8)TJame`y1Ep3dR"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <value name="AND0"> <block type="logic_compare" id="XYHuB8ZNE3]RuqS}0zLa"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="kRJjzY0xkd07ZrzDPb1?"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="{2pCy)Ah-nq3V.,{DVo1"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="AND1"> <block type="logic_compare" id="o9%Kp_kK#y%JO.kFX@M9"> <field name="OP">EQ</field> <value name="A"> <block type="get_attr" id="[vl5Bz_`8%$:LaC|q(*Q"> <value name="PATH"> <shadow type="text" id="TVh_L%j|;TO7i+p`+Y1L"> <field name="TEXT">enabled</field> </shadow> </value> <value name="OBJECT"> <shadow type="get_object" id="c1DWkSsJA%t1U3IxR_0J"> <field name="OID">Object ID</field> </shadow> <block type="variables_get" id="=rqG=O%Vhnwcc`uSo:x?"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> </block> </value> <value name="B"> <block type="logic_boolean" id="^OU`S]xO|8j_[Hvd:k`w"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="procedures_callcustomnoreturn" id="-Hz0vX5GM=t[9OHH8]Wg"> <mutation name="change"> <arg name="jsonObj"></arg> <arg name="attr"></arg> <arg name="val"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="v[6xm8C%Otou%c3=g710"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> <value name="ARG1"> <block type="text" id="tL?JD.@HaQSk5`{9Wm]{"> <field name="TEXT">enabled</field> </block> </value> <value name="ARG2"> <block type="logic_boolean" id="WMimixsaaPP)fhHu2.J$"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="exec" id="/p+Uv~V#hIePApTb=KTR"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="Y[J#ti:!)V_p[~D/~=BP"> <field name="TEXT">pwd</field> </shadow> <block type="text_join" id="?fTh]i~D]=Ue}GsE8^;i"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="$!],od*U?4dNiG;_YIzl"> <field name="VAR" id="PWsI)BqL)EeZPzj!8-VY">set</field> </block> </value> <value name="ADD1"> <block type="convert_object2json" id="|pyw%?Kwve~3iciql_#f"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="z0~!%^yv(pHWcQpw)5``"> <field name="VAR" id="_+8y375~59B=8rd!@Ae%">jsonObjekt</field> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="/g9Zs!_,BY#!LKzHEF`/"> <field name="TEXT">'</field> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
die zusätzliche UND Vergleichung ist nicht nötig.
Ist aber sicherer, schöner und üblicher.
Wenn aus irgendeinem Grund schon DPL-State stimmt, muss er auch nicht geändert werden.
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Alles funktioniert sogar mit meinen "getunten" HM WR. Ich habe ja die HM-600 und die HM-800 mit dem Hoymiles 1000W Dongle (Flole-Inverter-Tool) auf 1000 Watt erweitert. Die laufen damit super und vollkommen ohne Probleme.
denke wir haben unser Ziel erreicht, viel Spaß
-
@maxclaudi sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
die zusätzliche UND Vergleichung ist nicht nötig.
Ist aber sicherer, schöner und üblicher.Was meinst du damit?
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
@maxclaudi sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
die zusätzliche UND Vergleichung ist nicht nötig.
Ist aber sicherer, schöner und üblicher.Was meinst du damit?
das hier:
das zusätzliche UND vergleicht den empfangenen Status von OpenDTUoB-DPL ob er er in diesem Beispiel ausgeschaltet ist. Nur dann wird der Befehl ausgeführt und OpenDTUoB-DPL eingeschaltet. Sollte DPL schon eingeschaltet sein, dann wird nichts gemacht.
Kann man auch weg lassen und nur auf Wert=wahr (OpenDTUoB.dplEinAus wurde geändert) prüfen.
Ohne das zusätzliche: UND auf Atrribut enabled=false prüfen.
Dann wird OpenDTUoB immer eingeschaltet, auch wenn DPL schon an sein sollte.Warum? Vielleicht hat man ja einen Fehler in einem oder mehreren scripts.
So wird verhindert, dass wenn openDTUoB-DPL schon in dem DPL-aktiv oder DPL-deaktiv state ist, nicht erneut geschaltet wird.
Was an ist muss nicht noch einmal an geschaltet werden usw.optional, bleibt Dir überlassen
-
habe eine OpenDTU-OnBattery-maxLimit-Version veröffentlicht.
Es gibt 2 Versionen zur Auswahl:
Version: maxLimit:
Beim Deaktivieren vom Dynamic-Power-Limiter werden die "solarbetriebenen" Wechselrichter" immer auf maximales Limit gesetzt (statt wie im normalen Repo auf minimales Limit).
"batteriebetriebene" Wechselrichter: wie bisher im Original (werden abgeschaltet).Alle anderen Funktionen bleiben gleich.
Version: switchLimit
Hier kann mit Schalter im WebUi gewählt werden.
Betrifft nur "solarbetriebene Wechselrichter".
Ist der Schalter aktiviert, dann wird beim Deaktivieren vom Dynamic Power Limiter auf maximales Limit gesetzt.Ist der Schalter deaktiviert, dann wird beim Deaktivieren vom DPL auf minimales Limit gesetzt.
Das Umschalten: Deaktiv oder Aktiv muss auch gespeichert werden, wie DPL ein/aus.
Das macht der vorhandene "Speichern" Button für Alle Einstellungen vom DPL inkl. der Einstellung des neuen Schalters.Für mich ist die Version mit Schalter zwar nicht nötig, aber vielleicht gibt es jemand der die Möglichkeit zum Umschalten haben möchte
Fertige (bin) Releases zum flashen
- über WebUi Firmware-Aktualisierung also Firmware hochladen
- oder zum direkten flashen beim ersten mal als factory.bin
für die meisten bzw. üblichen Boards sind vorhanden.
Damit lässt sich die Blockly-Vorlage zum ein-/auschalten des DPL über einen Datenpunkt gut verwenden.
Genug gearbeitet, jetzt haben Alle was davon.
viel Spaß
edit 07.09.2025, Update auf github:
Vorherige Releases:
bin-Firmware-Versionen sind auf der Basis von der stable Version OpenDTU-OnBattery 2025.06.11Neue zusätzliche Releases:
bin-Firmware-Versionen auf der Basis von der developer Version OpenDTU-OnBattery 2025.06.11 - Stand 06.09.2025 -
Update, aktuelle Releases.
Switch-Version
über WebUi kann jederzeit gewählt werden:
beim Ausschalten von Dynamic Power Limiter Ausgangsleistung entweder- maximale Ausgangsleistung an den Wechselrichtern oder
- minimale Ausgangsleistung (wie bisher original):
2025.09.16-patch_DplOff-switchLimit-maxclaudi-dev20250927
maxLimit Version
- beim Ausschalten von Dynamic Power Limiter: immer maximale Ausgangsleistung an den Wechselrichtern.
2025.09.16-patch_DplOff-maxLimit-maxclaudi-dev20250927
meine bvorzugte Version
edit:
Dieses Projekt wird künftig nur noch privat weitergeführt.
Auf GitHub bleiben die bisher veröffentlichten Versionen
(maxLimit-Version / Switch-Version) weiterhin verfügbar —
ohne die zusätzliche MQTT-Funktion zum komfortablen Ein- und Ausschalten
(siehe nächster Post).Begründung:
GitHub verlangt künftig verpflichtend die Aktivierung der Zwei-Faktor-Authentifizierung (2FA)
für alle aktiven Entwicklerkonten.
Da ich diese Anforderung aus persönlichen und organisatorischen Gründen nicht umsetzen werde,
wird das Projekt auf GitHub hiermit eingestellt.Der vorhandene Quellcode bleibt zu Dokumentationszwecken öffentlich.
Zukünftige Weiterentwicklungen oder Support über GitHub sind nicht vorgesehen.
Das Projekt selbst bleibt auf GitHub jedoch eingefroren.Bei Interesse können sich Anwender gerne direkt an mich wenden.
-
Nach intensiver Tüftelei und etlichen Kaffee-Pausen steht die neue Version bereit.
WebUI-Schalter gibt es nicht; bei DPL-Deaktivierung wird sofort die maximale Leistung an den „solarbetriebenen“ Wechselrichtern eingestellt.Neue MQTT-Datenpunkte ermöglichen die Steuerung:
- dplState wird automatisch angelegt.
- dplCmd muss manuell erstellt werden, damit die Steuerung über MQTT funktioniert.
Sollte der Datenpunkt dplCmd automatisch angelegt werden, diesen bitte löschen!
Die Bedienung erfolgt komfortabel über Blockly oder Scripts.
Einfach den Status über dplState auslesen oder auswerten, Ein- oder Ausschalten über den Datenpunkt dplCmd.Es sind keine weiteren Schritte nötig:
- Beim Einschalten (dplCmd: 1) funktioniert die DPL-Steuerung.
- Beim Ausschalten (dplCmd: 0) werden die „solarbetriebenen“ Wechselrichter auf maximale Leistung gesetzt.
Wichtiger Hinweis: Bitte nicht wie ein Hyperaktiv-Blinklicht ständig aus- und einschalten.
Jeder Schaltvorgang schreibt in den Flash-Speicher der Firmware und die Wechselrichter brauchen ein wenig Zeit, um sich auf den neuen Zustand einzupendeln.
Geduld ist hier Gold wert – es soll nicht blinken, sondern sicher schalten!
OpenDTU-onBattery-maxLimit-MQTT-Patch (ESP32) – Schritt-für-Schritt
Patch-Info & Firmware
- Basis: OpenDTU-onBattery V: 2025.09.16 (Developer)
- Patch-Version: 05.10.2025
- ESP32 Firmware: generic_esp32s3.bin
- Hinweis: Keine factory.bin, Flashen über Web-Oberfläche möglich.
- Rückkehr zur Originalversion: jederzeit über Web-Firmware möglich.
Zweck des Patches:
- DPL (Dynamic Power Limiter) Steuerung über MQTT
- Automatisches Setzen der maximalen Wechselrichterleistung nach DPL-Deaktivierung
- Minimalinvasive Änderungen, stabil und kompatibel
MQTT-Datenpunkte
a) Automatisch angelegt- mqtt.x.<baseTopic>.dpl.dplState
- Wird nach einmaligem Umschalten des DPL in der WebUI automatisch erstellt
- Liefert aktuellen Status des Dynamic Power Limiters (nur lesbar)
- Werte: 0 = aus, 1 = ein
b) Manuell anlegen (Expertenmodus)
- mqtt.1.<baseTopic>.dpl.dplCmd
- Zwingend manuell anlegen, sonst kann DPL nicht via MQTT gesteuert werden
- Typ: number
- Rolle: state
- Werte: 0 = aus, 1 = ein
- Nicht als Boolean anlegen!
- Nach einmaligem Umschalten des DPL in WebUI wird der Datenpunkt aktiv.
Hinweis: Der zusätzliche Schritt über WebUI ist bewusstes Design, damit Subscription und Initialisierung korrekt erfolgen.
Schritt-für-Schritt für iobroker-Nutzer
1. WebUI öffnen und Dynamic Power Limiter ein- oder ausschalten.
- dplState wird automatisch angelegt.
2. In Objekte Expertenmodus einschalten.
- Datenpunkt dplCmd manuell anlegen:
mqtt.x.<baseTopic>.dpl.dplCmd
Typ: Zustand (state)
Zustandstyp: Zahl (number)
Name: dplCmd
3. Dynamic Power Limiter erneut in WebUI umschalten und speichern.
- Ab jetzt funktioniert das Ein-/Ausschalten über dplCmd via Blockly oder Scripts.
4. Ablesen des Status:
- Nur über dplState → aktueller Zustand des DPL (0/1).
- dplCmd spiegelt nicht automatisch den Status.
Verhalten bei solarbetriebenen Wechselrichtern
- Nach Ausschalten des DPL wird automatisch die maximale Leistung der Wechselrichter eingestellt.
- Kein manuelles Setzen eines 100%-Limits mehr nötig.
Hinweise zu Stabilität & Sicherheit
- Patch minimalistisch, Original-Code so unangetastet wie möglich
- Keine zusätzlichen HomeAssistant- oder anderen Datenpunkte
- Race-Conditions bei MQTT werden verhindert
- Firmware kann jederzeit auf Originalversion zurückgesetzt werden
- Initialer WebUI-Schalter sorgt für sauberen Start der dplCmd Subscription
- Firmware wurde nach bestem Wissen und Gewissen erstellt und getestet.
- Keine Garantie für Funktion oder Schäden.
- Wer meine Arbeit nützlich findet und sich bedanken möchte:
Ein Klick auf den Pfeil nach oben (unten am Post, neben Zitieren) reicht völlig. Das ist für mich mehr als genug.
Viel Spaß!
️ Lizenz- und Haftungshinweis
Diese Firmware basiert auf OpenDTU-onBattery
(ist selbst ein Fork von OpenDTU , Lizenz: GPLv2).
Sie enthält eigene Anpassungen und Erweiterungen und ist keine offizielle Version.
Die Bereitstellung erfolgt ausschließlich zu Dokumentations- und Testzwecken.Verwendung auf eigene Verantwortung.
Für eventuelle Schäden oder Fehlfunktionen wird keine Haftung übernommen. -
Vielen Dank für die tolle Arbeit.
Habe da aber noch mal ein paar Fragen.
-
Du schreibst das der Datenpunkt dplCmd manuell angelegt werden muß. Bei mir (ioBroker) erschien der Datenpunkt unter mqtt zusammen mit dplState automatisch. Ist das richtig?
-
Ich hatte bis jetzt den OpenDTU Adapter installiert. Dort erscheinen ja alle Werte die wichtig sind.
Um nun DPL schalten zu können muß ich in OpenDTUBatterie ja mqtt aktivieren. Hatte ich bis jetzt nicht. Werte waren ja alle verfügbar. Jetzt sind alle Werte "nochmal" vorhanden und auf dem "mqtt-Kanal" ist noch mehr los. Das die Datenpunkte über den OpenDTU Adpater kommen ist nicht möglich? -
Wenn das nicht über den Adapter geht. Kann der dann komplett deinstalliert werden weil alles über mqtt geht?
Grüße
ManfredPS:
Bei mir schaltet DPL leider nicht um wenn ich dplCmd von 0 auf 1 oder von 1 auf 0 ändere. Wenn ich in der WEBui von OpenDTU den Zustand ändere, wechselt dplState so wie es soll von 0 auf 1 usw.
-
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Vielen Dank für die tolle Arbeit.
Habe da aber noch mal ein paar Fragen.
-
Du schreibst das der Datenpunkt dplCmd manuell angelegt werden muß. Bei mir (ioBroker) erschien der Datenpunkt unter mqtt zusammen mit dplState automatisch. Ist das richtig?
-
Ich hatte bis jetzt den OpenDTU Adapter installiert. Dort erscheinen ja alle Werte die wichtig sind.
Um nun DPL schalten zu können muß ich in OpenDTUBatterie ja mqtt aktivieren. Hatte ich bis jetzt nicht. Werte waren ja alle verfügbar. Jetzt sind alle Werte "nochmal" vorhanden und auf dem "mqtt-Kanal" ist noch mehr los. Das die Datenpunkte über den OpenDTU Adpater kommen ist nicht möglich? -
Wenn das nicht über den Adapter geht. Kann der dann komplett deinstalliert werden weil alles über mqtt geht?
Grüße
ManfredPS:
Bei mir schaltet DPL leider nicht um wenn ich dplCmd von 0 auf 1 oder von 1 auf 0 ändere. Wenn ich in der WEBui von OpenDTU den Zustand ändere, wechselt dplState so wie es soll von 0 auf 1 usw.
Hallo Manfred,
mach bitte Folgendes Schritt für Schritt:
1️⃣ Zuerst einmal einen Neustart der OpenDTU-OnBattery durchführen (über WebUI → Neustart).
Damit wird alles sauber initialisiert.2️⃣ Dann in ioBroker den Datenpunkt dplCmd prüfen.
Wenn er auf 0 steht, dann in der WebUI den Dynamic Power Limiter einschalten und auf „Speichern“ klicken.
(Der Speichern-Button ist wichtig – erst dadurch wird der Zustand wirklich aktiv übernommen.)Wenn dplCmd auf 1 steht, kannst du zur Sicherheit einmal den umgekehrten Weg gehen:
→ In der WebUI einschalten + speichern, kurz warten,
→ danach ausschalten + speichern, wieder kurz warten.3️⃣ Ab jetzt kannst du über ioBroker den Datenpunkt dplCmd (0/1) verwenden, um den DPL zu schalten.
Der aktuelle Zustand wird über dplState zurückgemeldet.4️⃣ Wenn du in der WebUI nichts siehst:
Nach dem Schalten einfach in der WebUI auf „Live-Ansicht“ wechseln und dann wieder zurück zu
„Einstellungen → Dynamic Power Limiter Einstellungen“.
Die Seite aktualisiert sich nicht automatisch, wenn extern geschaltet wird.
Das liegt daran, dass:- die WebUI-Werte nur bei Aufruf der Seite oder beim Speichern neu aus der Config gelesen werden,
- aber keine WebSocket-Verbindung oder „Live-Update“-Funktion besteht, die auf MQTT-Ereignisse reagiert.
Hinweis:
Der OpenDTU-Adapter wird für diese Steuerung nicht benötigt.
Alles läuft direkt über MQTT – der Adapter kann also weg, wenn du nur MQTT nutzt. -
-
Ok.
zu 1. Habe ich gemacht.
zu 2. Datenpunkt dplCmd. Der kam automatisch nach dem Aufspilen der Firmware und nachdem ich den DPL einaml an und wieder aus geschaltet hatte. Ist das Richtig?
Wenn ich in der WebUI den DPL schalte ändert sich der Datenpunkt dplState. Nicht dplCmd.
Nochmal. Ich habe das doch richtig verstanden?
dplCmd schaltet DPL an oder aus.
dplState gibt mir zurück ob DPL an oder aus ist.
-
@beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Ok.
zu 1. Habe ich gemacht.
zu 2. Datenpunkt dplCmd. Der kam automatisch nach dem Aufspilen der Firmware und nachdem ich den DPL einaml an und wieder aus geschaltet hatte. Ist das Richtig?
edit 07.10.2025 20:19h
Der automatisch angelegte Datenpunkt löschen!
Er muss manuell angelegt werden!
Siehe Anleitung und auch Bestätigung von Beowolf
Wenn ich in der WebUI den DPL schalte ändert sich der Datenpunkt dplState. Nicht dplCmd.
Richtig.
Nochmal. Ich habe das doch richtig verstanden?
dplCmd schaltet DPL an oder aus.dplState gibt mir zurück ob DPL an oder aus ist.
ja, richtig.
dplState:
- Liefert aktuellen Status des Dynamic Power Limiters (nur lesbar)
- Werte: 0 = aus, 1 = ein
dplCmd:
- dplCmd ändert sich nie von selbst – auch nicht nach einem Neustart.
- Dieser Datenpunkt dient nur zum Schalten:
-
- Wert 1 → Dynamic Power Limiter einschalten
-
- Wert 0 → Dynamic Power Limiter ausschalten
- Er zeigt also nicht den aktuellen Zustand, sondern sendet nur einen Schaltbefehl an die Firmware.
Der tatsächliche Zustand wird immer NUR über dplState angezeigt.
Kurz gesagt:
dplCmd ist der Schalter,
dplState ist die Anzeige, ob wirklich geschaltet wurde. -
Ok. Dann habe ich ja alles richtig gemacht.
Nur, warum wird der DPL dann nicht geschaltet?
-
@beowolf
Das klingt, als wäre bei dir grundsätzlich alles richtig eingerichtet
Wenn sich der DPL trotzdem nicht schalten lässt, prüf bitte einmal Folgendes:Neustart der OpenDTU-onBattery durchführen (über die WebUI).
Nach dem Neustart in der WebUI den Dynamic Power Limiter manuell umschalten auf den entgegengesetzten Zustand (z. B. einschalten) und auf „Speichern“ klicken – das ist wichtig, weil erst beim Speichern der Wert wirklich übernommen wird.
Danach in der Live-Ansicht kontrollieren, ob DPL aktiv ist.
Jetzt kannst du in ioBroker über den Datenpunkt
dplCmd (0 = aus, 1 = ein) schalten.
Wenn du schaltest, sollte sich der Datenpunkt dplState anschließend ebenfalls ändern.Wenn das klappt, ist alles in Ordnung.
Wenn nicht, schreib bitte kurz, ob sich dplState überhaupt ändert oder gar nichts passiert – dann schauen wir gezielt weiter.Manchmal hilft es auch, MQTT kurz zu deaktivieren und wieder zu aktivieren oder den MQTT-Adapter einmal neu zu starten, damit sich alles sauber neu verbindet.
Wenn das Schalten über ioBroker weiterhin nicht reagiert, kannst du testweise mit dem MQTT Explorer prüfen, ob die MQTT-Verbindung grundsätzlich funktioniert:
Öffne den MQTT Explorer und suche nach deinem Topic
<baseTopic>/dpl/dplCmd.
wenn es nicht existiert einfach direkt eingeben, Beispiel:
Dort kannst du einmal probeweise eine 1 oder 0 (als „raw“) senden.
Wird der Wert sofort übernommen, ist alles korrekt – dann liegt das Problem höchstens an der ioBroker-Seite (Adapter oder Datenpunkt).Wenn sich im MQTT-Explorer erfolgreich schalten lässt, dann sollte daraufhin auch der Datenpunkt dplCmd mit 1 oder 0 schalten lassen.
Wenn sich im MQTT-Explorer auch nichts tut, liegt es eher an den MQTT- oder OpenDTU-Einstellungen.
-
Also, im mqtt-explorer kann ich den 1 oder 0 senden. Kommt alles direkt in ioBrooker an.
Wenn ich in der webUI von OpendtuonBatterie den DPL an und aus schalte kommte es ja auch in ioBroker an. Dort wechselt ja der dplState entsprechend auf 0 oder 1.
Ich habe den Eindruck, das OpenDTUonBatterie den dplCmd-Befehl nicht mitbekommt.
Wie müssen die Einstellung in dem mqtt-Bereich bei opendtu denn aussehen?
-
@beowolf
Das klingt alles absolut korrekt bei dir
Wenn dplState im ioBroker auf 0/1 reagiert, dann funktioniert die Kommunikation perfekt.
Der dplCmd-Befehl kommt also an – nur siehst du das in der WebUI nicht sofort, weil sich die Seite nicht automatisch aktualisiert, wenn von außen (über MQTT) geschaltet wird.So kannst du es sicher nachvollziehen:
-
Schau zuerst, was aktuell im ioBroker steht:
Wenn dplState = 0, ist DPL aus. -
Setze jetzt manuell dplCmd = 1.
→ DPL wird eingeschaltet.
→ Kurz danach sollte dplState auch auf 1 springen. -
Jetzt in der WebUI oben auf „Live-Ansicht“ klicken.
Danach zurück zu „Einstellungen → Dynamic Power Limiter“.
Erst jetzt siehst du dort den neuen Zustand korrekt (Schieberegler auf „ein“). -
Wenn du wieder ausschalten willst:
→ dplCmd = 0 setzen
→ dplState geht auf 0
→ Danach wieder den gleichen WebUI-Wechsel machen (Live-Ansicht → DPL-Seite),
dann zeigt’s auch dort wieder richtig „aus“.
Wichtig:
Die Seite „Dynamic Power Limiter Einstellungen“ lädt sich nicht neu, wenn über MQTT geschaltet wird –
das ist also nur eine nicht richtige Anzeige, wenn die Seite nicht über Wechsel zu einer anderen Seite der Frimwar zwischendrin sattgefunden hat. -
-
@maxclaudi sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:
Setze jetzt manuell dplCmd = 1.
→ DPL wird eingeschaltet.
→ Kurz danach sollte dplState auch auf 1 springen.Genau das passiert nicht.
Das sich die Seite nicht automatisch aktualisier ist schon klar.
-
@beowolf
Bitte Mqtt Teil- Screenshot oder Beschreibung, wie mqtt-Einstellung unter MQTT bei OpenDtu eingestellt ist z.B.:
Wenn über WebUI geschaltet wird, dann zeigt auch dplState:1 oder dplState:0 richtig an?
ja?:
Dann als Nächstes:- OpenDTU-onBattery Neustart über die WebUI neu starten.
- Dynamic Power Limiter einmal manuell in der WebUI umschalten und auf „Speichern“ klicken:
- Wenn dplCmd zu Beginn 0 ist: in WebUi DPL ausschalten + speichern.
- Wenn dplCmd zu Beginn 1 ist: in WebUi DPL einschalten + speichern.
- Dies ist wichtig, weil erst beim Speichern das ESP-Device das dplCmd-Topic abonniert und auf Steuerbefehle reagiert.
- In ioBroker prüfen und ggf. gegensteuern:
- Kontrolliere über den Datenpunkt dplState, ob der Status korrekt übernommen wurde (0 = aus, 1 = ein).
- Jetzt kannst du den Datenpunkt dplCmd setzen (0 = aus, 1 = ein), um den DPL ein- oder auszuschalten.
- Normalerweise ändert sich dadurch nichts, wenn der Zustand schon korrekt ist, aber so stellst du sicher, dass das System sauber synchronisiert ist.
- WebUI-Zustand aktualisieren:
- Auf „Live-Ansicht“ klicken, dann zurück zu Einstellungen → Dynamic Power Limiter, um den aktuellen Zustand korrekt in der WebUI angezeigt zu bekommen.
-
Habe ich jetzt alles schon zig mal gemacht.
Bist du ganz sicher, das du die richtige Firmware eingstellt hast?
-
Hey @beowolf,
die Firmware, die du nutzt, ist korrekt – das können wir also ausschließen.
Was jetzt noch wichtig ist, damit das Schalten über dplCmd zuverlässig funktioniert:-
OpenDTU neu starten (über WebUI), damit MQTT sauber verbunden ist.
-
Dynamic Power Limiter einmal manuell über WebUI schalten und speichern – das Speichern ist entscheidend, damit das ESP-Device das dplCmd-Topic abonniert.
- Wenn dplCmd am Anfang 0 zeigt → in WebUI ausschalten + speichern
- Wenn dplCmd am Anfang 1 zeigt → in WebUI einschalten + speichern
-
Live-Ansicht aufrufen, kurz warten, und in ioBroker kontrollieren, dass dplState den aktuellen Wert anzeigt.
-
Danach kannst du über dplCmd in ioBroker schalten. Kurz darauf sollte dplState den neuen Zustand übernehmen.
-
WebUI-Anzeige: die Seite aktualisiert sich nicht automatisch. Einfach auf „Live-Ansicht“ klicken und dann zurück in die DPL-Einstellungen, um den korrekten Zustand zu sehen.
Wenn all das passiert, funktioniert MQTT sauber – und du kannst alles über den Datenpunkt dplCmd steuern.
Optionaler Test über MQTT-Explorer (funktioniert das?):
-
Öffne den MQTT-Explorer und finde Topic <baseTopic>/dpl/dplCmd.
oder gib es direkt ein. -
Sende probeweise eine 1 oder 0 (entgegengesetzt schalten).
-
Wenn das ESP-Device reagiert, sollte dplState kurz danach den neuen Wert anzeigen.
Wenn das klappt, ist die MQTT-Seite der OpenDTU korrekt eingerichtet, und anschließend kannst du in ioBroker mit dplCmd schalten.
Damit iobroker-Adapter ausgeschlossen werden kann.
-
-
Das was du da schreibst, habe ich alles schon gemacht. Es funktioniert einfach nicht.
Schade.