Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. maxclaudi

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 0
    • Topics 4
    • Posts 231
    • Best 20
    • Groups 2

    maxclaudi

    @maxclaudi

    Starter

    20
    Reputation
    27
    Profile views
    231
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    maxclaudi Follow
    Pro Starter

    Best posts made by maxclaudi

    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      einfacher:

      Dynamic Power Limiter nur über einen Datenpunkt ein- und ausschalten.

      Wird der DPL über ein Script ausgeschaltet, behält der Inverter das letzte Limit (non persistent) bei.

      Deshalb wird im folgenden Blockly beim Auschalten des DPL auch das Limit wieder auf 100% gesetzt.

      Der DPL kann einfach per Datenpunkt in einem Blockly ein- oder ausgeschaltet werden.
      Dazu wird der Datenpunkt zum Einschalten aktualisiert mit wahr.
      Zum Ausschalten mit falsch.

      01-dpl-ein-aus.png


      Im Blockly sind 2 Inverter zur DPL Steuerung berücksichtigt.
      Wird nur 1 Inverter zur DPL Steuerung verwendet, kann die Variable und der Block gelöscht werden oder einfach bei beiden Variablen die gleiche Seriennummer eintragen.
      Falls doch mal später 2 Inverter für DPL aktiviert werden sollen.

      Seriennummer werden nur nach dem Ausschalten verwendet, damit der/die Inverter wieder volle Leistung liefern.

      Werte werden nur non-persistent gesetzt, wie bei der DPL-Steuerung.


      Für das Script wurde manuell 1 Verzeichnis und 1 Datenpunkt angelegt:

      Verzeichnis:
      openDTUoB
      0_userdata.0.Datenpunkte.openDTUoB

      Datenpunkt:
      dplEinAus
      "type": "boolean"
      0_userdata.0.Datenpunkte.openDTUoB.dplEinAus


      Vor dem Ausführen des Scripts müsen folgende Eintragungen vorgenommen werden:

      IP OpenDTUon Battery
      Password
      1te Seriennummer des Inverters für die DPL-Steuerung
      2te Seriennummer des Inverters, der auch DPL steuert (bei nur einem aktivierten Inverter einfach die gleiche Seriennummer vom ersten Inverter eintragen).

      04-dpl-ein-aus.png


      Blockly:

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="P.,=V-_lWMTIt*,^9bWa">jsonObj</variable>
          <variable id="?Ekt8|,iPfa0uAPY)N%A">attr</variable>
          <variable id="y`qH:gKyqipx04VGZ@;=">val</variable>
          <variable id="T[fn@X+yakzmBpi9]n*E">openDTUonBatteryIP</variable>
          <variable id="nh}jM|3k}%Qhny;,Etjk">OpenDTUonBatteryPassword</variable>
          <variable id="/X1](JXiM-@K#NE`C4,%">InverterSerial</variable>
          <variable id="b+E=vG0=nXY*@8jhUpT1">InverterSerial2</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="_+8y375~59B=8rd!@Ae%">jsonObjekt</variable>
        </variables>
        <block type="comment" id="g{c,O//*067~CDT{26F+" x="212" y="-112">
          <field name="COMMENT">OpenDTUonBattery&amp;#10;DPL Ein/Aus</field>
          <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.Datenpunkte.openDTUoB.dplEinAus</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <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.170.178.250</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">openDTU42</field>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id="u:x]^bL1{Q9m2)/M*CRl">
                                  <field name="VAR" id="/X1](JXiM-@K#NE`C4,%">InverterSerial</field>
                                  <value name="VALUE">
                                    <block type="text" id="m)|9(*pwq()mn.3Ron~:">
                                      <field name="TEXT">11611111111</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="variables_set" id="++@7g{b1u:LHh]h:CEq+">
                                      <field name="VAR" id="b+E=vG0=nXY*@8jhUpT1">InverterSerial2</field>
                                      <value name="VALUE">
                                        <block type="text" id="m8cbvw?0pnZNAUaiU8Zq">
                                          <field name="TEXT">112122222222</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="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>
                                                                                              <next>
                                                                                                <block type="comment" id="ql1mac4Qf*!]/(y:*HR+">
                                                                                                  <field name="COMMENT">DPLinverter01  Limit 100%</field>
                                                                                                  <next>
                                                                                                    <block type="exec" id="iNs^J_^oAm89Vr+p^dcU">
                                                                                                      <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="C9zK,I#|DhseRSSl*?8X">
                                                                                                          <field name="TEXT"></field>
                                                                                                        </shadow>
                                                                                                        <block type="text_join" id="~7~(vzW]+%{R35ES=iGn">
                                                                                                          <mutation items="3"></mutation>
                                                                                                          <value name="ADD0">
                                                                                                            <block type="variables_get" id=".v]Hhm{LD(-@){kzp()2">
                                                                                                              <field name="VAR" id="JppG`(9.sfDt)j^gha}{">cUrlLimitPart1</field>
                                                                                                            </block>
                                                                                                          </value>
                                                                                                          <value name="ADD1">
                                                                                                            <block type="variables_get" id="OZY@nUX[m`.Rp[12/e{g">
                                                                                                              <field name="VAR" id="/X1](JXiM-@K#NE`C4,%">InverterSerial</field>
                                                                                                            </block>
                                                                                                          </value>
                                                                                                          <value name="ADD2">
                                                                                                            <block type="variables_get" id="]wG/EOqQ!/tw6ZlRcab0">
                                                                                                              <field name="VAR" id="Xy47v*SILC`=7N1mM,:5">cUrlLimitPart2</field>
                                                                                                            </block>
                                                                                                          </value>
                                                                                                        </block>
                                                                                                      </value>
                                                                                                      <next>
                                                                                                        <block type="comment" id="aI[_!O+Ua%`p6/mqrCjz">
                                                                                                          <field name="COMMENT">DPLinverter02  Limit 100%</field>
                                                                                                          <next>
                                                                                                            <block type="exec" id="v[cN9cA@.Ejy;Z1G81kX">
                                                                                                              <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="C9zK,I#|DhseRSSl*?8X">
                                                                                                                  <field name="TEXT"></field>
                                                                                                                </shadow>
                                                                                                                <block type="text_join" id="Wd`VvP4NqCJ}/*|~IbTV">
                                                                                                                  <mutation items="3"></mutation>
                                                                                                                  <value name="ADD0">
                                                                                                                    <block type="variables_get" id="hy+6K,WWY.Y`%h-+p;v1">
                                                                                                                      <field name="VAR" id="JppG`(9.sfDt)j^gha}{">cUrlLimitPart1</field>
                                                                                                                    </block>
                                                                                                                  </value>
                                                                                                                  <value name="ADD1">
                                                                                                                    <block type="variables_get" id="W/O@o[J$nrG+r..LB`}A">
                                                                                                                      <field name="VAR" id="b+E=vG0=nXY*@8jhUpT1">InverterSerial2</field>
                                                                                                                    </block>
                                                                                                                  </value>
                                                                                                                  <value name="ADD2">
                                                                                                                    <block type="variables_get" id="q%FGBbHAZ^N/`|V3wzs%">
                                                                                                                      <field name="VAR" id="Xy47v*SILC`=7N1mM,:5">cUrlLimitPart2</field>
                                                                                                                    </block>
                                                                                                                  </value>
                                                                                                                </block>
                                                                                                              </value>
                                                                                                            </block>
                                                                                                          </next>
                                                                                                        </block>
                                                                                                      </next>
                                                                                                    </block>
                                                                                                  </next>
                                                                                                </block>
                                                                                              </next>
                                                                                            </block>
                                                                                          </next>
                                                                                        </block>
                                                                                      </statement>
                                                                                    </block>
                                                                                  </next>
                                                                                </block>
                                                                              </next>
                                                                            </block>
                                                                          </next>
                                                                        </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>
              </statement>
            </block>
          </next>
        </block>
        <block type="procedures_defcustomnoreturn" id="nxZk[TB}x%yvkJ058U]o" x="738" y="862">
          <mutation statements="false">
            <arg name="jsonObj" varid="P.,=V-_lWMTIt*,^9bWa"></arg>
            <arg name="attr" varid="?Ekt8|,iPfa0uAPY)N%A"></arg>
            <arg name="val" varid="y`qH:gKyqipx04VGZ@;="></arg>
          </mutation>
          <field name="NAME">change</field>
          <field name="SCRIPT">anNvbk9ialthdHRyXSA9IHZhbDs=</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
        </block>
      </xml>
      

      Damit kann in jedem Script der Dynamic Power Limiter ein- oder ausgeschaltet werden.

      Ist bestimmt brauchbar.

      Vorschläge oder Verbesserungen willkommen.

      Würde mich mal über eine Rückmeldung oder einen Beitrag freuen.
      Nicht, dass ich hier Alleinunterhalter bin 🙂

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      @rene55

      also ich hab vorher noch sichergestellt, dass der Server 100% keine Anmeldedaten verlangt und port 1883 frei von anderen Instanzen ist.

      edit:
      passt, laut den Bildern von Arne muss nicht mal der Port angegeben werden 🙂
      Wird wohl intern automatisch auf port 1883 gesetzt.
      Sollte der Adapter nicht die Objekte erstellen, dann einfach Port mit angeben.

      posted in Tester
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery

      edit:
      einfacher -> OpenDTU-onBattery Blockly DPL Ein/Aus


      @lesiflo , @Totte23

      @lesiflo sagte in OpenDTU-onBattery:

      Hallo zusammen,

      ich möchte vom iobroker aus den Dynamic Power Limiter aus/einschalten. Geht das überhaupt?

      b785d376-4856-4125-b94f-c17380740367-image.png
      Hab den openDTU Adapter installiert und openDTU über mqtt eingebunden. Hab schon einiges ausprobiert, finde aber keinen Parameter mit dem das geht.

      Das Thema ist zwar alt, aber bestimmt benötigt mal wieder jemand Hilfe dazu 🙂
      Man findet die Antwort auch nicht im Netz, deswegen habe ich die requests gelogt.

      Man kann über blockly oder javascript den OpenDTUonBattery DPL ein-, ausschalten.
      Theoretisch auch alles andere.
      Wenn's nur ums einschalten und ausschalten mit den voreingestellten Werten geht,
      z. B . mit Blockly:
      Bei Aktionen "exec Befehl" auswählen.

      Ausschalten:

      curl -u "admin:yyyyyyyy" http://xxx.xxx.xxx.xxx/api/powerlimiter/config -d 'data={"enabled": false}'
      

      Einschalten:

      curl -u "admin:yyyyyyyy" http://xxx.xxx.xxx.xxx/api/powerlimiter/config -d 'data={"enabled": true}'
      

      yyyyyyyy => Passwort
      xxx.xxx.xxx.xxx => IP von der OpenDTU

      Stark verkürzt, man kann auch alle einstellbaren Werte verändern und mit übergeben.
      Hilft bestimmt mal jemand weiter.

      Frohe Ostern 😉

      posted in Einbindung von Geräten
      maxclaudi
      maxclaudi
    • RE: Zendure Solar Flow ohne Cloud MQTT-Broker MIT Authentication

      @rene55
      👍
      DeviceID ist klar denke ich?

      Nennt sich beim Solar Flow Adapter: Device Key

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      @lesiflo
      Lokal ist super.
      Es wird zuverlässig, schnell und oft aktualisiert 🙂

      posted in Tester
      maxclaudi
      maxclaudi
    • RE: Zendure Solar Flow ohne Cloud MQTT-Broker MIT Authentication

      @rene55
      und Alle:

      Die generierten Passwörter wurden getestet, sind richtig und funktionieren.

      Aber:
      Der iobroker SolarFlow-Adapter hat keine Zugangsdaten für den lokalen Betrieb!
      Deshalb funktioniert der Adapter von @nograx NUR wenn mann die Anmeldedaten mit in die URL übergibt.

      Es wäre schön, wenn @nograx irgendwann in der Instanz des solarflow-Adapters eine Möglichkeit zum abspeichern von User und Password für einen lokalen MQTT-Server einpflegen würde.
      Geht aber auch so!

      Mit mosquitto-Server ausführlich getestet.

      Wenn ein mosquitto-Server läuft verbinden sich die Zendure Geräte mit Passwörtern lokal einwandfrei.

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      @nograx

      gleich installiert.
      werde es testen. Danke.


      edit: Erste 3h ohne Neustart sind vorbei.
      Läuft bis jetzt einwandrei.
      ACE1500 hat nichts zu tun Akku voll.
      Hub+ACE connected.
      Super schnelle Aktualisierung der Datenpunkte.
      ...to be continued


      18.06h
      6h ohne Neustart
      alles ok.


      21.10h
      über 9h ohne Neustart.
      alles ok.

      Unter Protokolle iobroker:
      Keine Meldung(en).
      Weder vom Solarflow-Adapter, noch vom mqtt-Server 1883, seit Start v1.13.0 (Mi, 30.04.2025 11.59h).
      Nicht mal ne Info.

      Datenpunkt-Aktualisierungen kommen schnell.
      Steuerung funktioniert.


      posted in Tester
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      @beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:

      @maxclaudi sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:

      Würde mich mal über eine Rückmeldung oder einen Beitrag freuen.
      Nicht, dass ich hier Alleinunterhalter bin

      Danke für das Blockly.

      gerne 👍

      Was geht:

      DPL wird per Datenpunkt ein ein und aus geschaltet.

      Nach dem Einschalten läuft DPL wie gewohnt.

      Nach dem Ausschalten werden meine WR (HM-800 und HM-600) auch auf 100% gestellt.

      Was nicht geht:

      Die bleiben nicht bei 100%.

      Ein paar Sekunden später sind sie auf 7,5 % bzw. 10 % (Minimales Leistungslimit im DPL) gestellt.

      Warum passiert das?

      Weil die Zeit dazwischen zu kurz ist. Die Wechselrichter haben bestimmt noch den state Pending.

      Das habe ich auch schon bei einigen Hoymiles festgestellt.

      Ergänzend zu Deiner Beobachtung:
      DPL ist weiterhin ausgeschaltet aber die Werte haben sich mit ausgeschaltetem Zustand auf Minimum verändert.

      Funktioniert auch so einwandfrei:
      Nach dem DPL Ausschalten warten (ca. 10sek.), dann das Limit vergleichen:
      Falls Datenpunkt(e) (mqtt von openDTUonBattery der entsprechenden Wechselrichter) limit_relative ≠ 100 dann mittels curl auf 100% setzen.

      oder man kann nach ausschalten vom DPL und nach timeout von ~10sek einfach 100% Limit setzen.
      Das wird dann beibehalten.

      Die ca. 10 sekunden Wartezeit sind nötig.
      Vielleicht etwas zu kurz, einfach testen, weil der Hoymiles Zeit benötigt um Befehle hintereinander auszuführen. Pending muss abgeschlossen sein.
      Normalerweise könnte man pollen, auswerten, abwarten und dann senden.
      Aber für so einfache Dinge unnötig.

      Man schaltet ja normal nur 1x am Tag DPL ein oder aus (für Bypass?).

      Um es Dir leichter zu machen habe ich dafür noch ein Blockly für beide Wechselrichter zusammengeklickt:

      b542583e-9708-473a-9432-8eabf07be746-image.png

      blockly als import:

      <block xmlns="https://developers.google.com/blockly/xml" type="variables_set" id="6acw^x;DnOzQr,+1QMY~" x="-912" y="13063">
        <field name="VAR" id="03lE}K#LAiE6UIn{TSpe">openDTUoB_pwd</field>
        <value name="VALUE">
          <block type="text" id=".Gzymx[U58ZC5@#_eI1O">
            <field name="TEXT">topSecret</field>
          </block>
        </value>
        <next>
          <block type="variables_set" id="s*[FyKXx,06qe75!Ql(H">
            <field name="VAR" id="Q[Ul.eSqTa`ja|Cts-+/">HM800_serial</field>
            <value name="VALUE">
              <block type="text" id="2sNdysyulvZDNM6yeP8H">
                <field name="TEXT">123456789011</field>
              </block>
            </value>
            <next>
              <block type="variables_set" id="~/@Acy]v_1,b~:Bn[L_+">
                <field name="VAR" id="]TAF~$|vQbu%71?%TIMg">HM600_serial</field>
                <value name="VALUE">
                  <block type="text" id="f;}RPMU,=+?6Q7VrPX[$">
                    <field name="TEXT">123456789012</field>
                  </block>
                </value>
                <next>
                  <block type="variables_set" id="n9utWkCmZ~5O=d;qD`/Y">
                    <field name="VAR" id="DvrV|7SgL3%[J#.tMQYu">ip</field>
                    <value name="VALUE">
                      <block type="text" id="XM-2mM4T[^{0`;c!`RPw">
                        <field name="TEXT">192.168.2.200</field>
                      </block>
                    </value>
                    <next>
                      <block type="comment" id="pHVW34|})@%~DNJ(tX3f">
                        <field name="COMMENT">Limit_100%</field>
                        <next>
                          <block type="variables_set" id="YGofdo8=[F6.o!Qp^XF+">
                            <field name="VAR" id="9G;7cx}YMIq[e`lw6*X~">HM800_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="03lE}K#LAiE6UIn{TSpe">openDTUoB_pwd</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="DvrV|7SgL3%[J#.tMQYu">ip</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-+/">HM800_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">HM600_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="03lE}K#LAiE6UIn{TSpe">openDTUoB_pwd</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="DvrV|7SgL3%[J#.tMQYu">ip</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">HM600_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="exec" id="z~uv`gd4.T-c?jLD!w`q">
                                    <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="{M)j=M5AjT,.J`1?|4n4">
                                        <field name="TEXT">pwd</field>
                                      </shadow>
                                      <block type="variables_get" id="2pE#.amP4,xu4{2Q,D%{">
                                        <field name="VAR" id="b;`WR[z]dikov!wE@,}j">HM600_curl</field>
                                      </block>
                                    </value>
                                    <next>
                                      <block type="exec" id="{]ZETu!ip1~2tjg$bQ`P">
                                        <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=",tNN#:Wd`$Q^xxlYDxuS">
                                            <field name="TEXT">pwd</field>
                                          </shadow>
                                          <block type="variables_get" id="jo++g^rXVk`{euOClG%?">
                                            <field name="VAR" id="9G;7cx}YMIq[e`lw6*X~">HM800_curl</field>
                                          </block>
                                        </value>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </next>
          </block>
        </next>
      </block>
      

      kannst ja anpassen für Dein Blockly. Variablen von Passwort für OpenDTU, IP und Seriennumern müsstest schon integriert haben und kannst die dann nehmen/ersetzen.

      Alternativ starten manche den Wechselrichter nach DPL ausschalten neu, damit die non-persistenten Werte weg sind und der Wechselrichter wieder auf 100% ist.

      Viel Spaß und Erfolg.

      PS: Blockly mag ich eigentlich nicht. Lieber js. Ist man nicht so eingeschränkt und geht schneller.

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      @nograx sagte in Test Adapter Zendure Solarflow:

      Moin, mit der Version 1.13.2 wird der AC Mode beim ACE 1500 nun auch korrekt gesetzt. Musste erstmal checken das Zendure hier den selben Datenpunkt bei Geräten für unterschiedliche Dinge nutzt.

      Die Version 1.13.2 ist noch in Arbeit?

      Und
      die Passwort-Generierung funktioniert ja jetzt.
      Bist Du so lieb und würdest optionale mqtt-Zugangsdaten in die UI für lokalen Betrieb einpflegen?

      Mir ist klar, dass die Daten ohne SSL bzw. TLS sowieso im Klartext gesendet werden, aber es wäre schön, wenn die nicht offen in der Instanz sichtbar wären.
      (Einfachste Lösung die Verkettung des IP String?)

      Bitte.


      edit/ps:
      Von mir aus kannst auch die Passwortgenerierung mit in den Adapter einpflegen.
      Wenn Du möchtest.

      posted in Tester
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      @beowolf
      Habe den Fehler im OpenDTU-OnBattery code gefunden.

      Verhalten und Ablauf wenn DPL ausgeschaltet wird (enabled:false):

      Die Konfiguration wird zwar gespeichert, aber:
      Der PowerLimiter macht keinen expliziten „Reset“ der Limits auf 100%.
      Stattdessen hängt es davon ab, ob im LimitManager gerade noch ein alter Limit-Wert aktiv ist.

      Deshalb passiert, dass manchmal noch der alte Wert aus der aktiven Regelung stehen bleibt (z. B. 60 %), manchmal springt es auf 100 %.

      Warum dieses Verhalten?
      Im Code sieht man, dass beim Abschalten (enabled=false) die Logik nicht aktiv eine Rücksetzung triggert.
      Das bedeutet praktisch:

      Beim Einschalten → aktiver Eingriff in die Limits.
      Beim Ausschalten → kein Eingriff → Limit bleibt zufällig auf dem letzten Stand.

      Lösung:
      Firmware patchen (sauberste Lösung)
      Im onAdminPost oder PowerLimiter::disable() explizit ein Setzen auf 100 % Limit einbauen, z. B.:

      src/WebApi_powerlimiter.cpp, angepasst für onAdminPost()


      void WebApiPowerLimiterClass::onAdminPost(AsyncWebServerRequest *request, JsonDocument &root)
      {
          if (root.containsKey("enabled")) {
              PowerLimiter.Enabled = root["enabled"];
              PowerLimiter.saveConfig();
      
              if (!PowerLimiter.Enabled) {
                  // Wenn PowerLimiter deaktiviert wird, Limit für alle bekannten Wechselrichter auf 100% setzen
                  for (auto &invCfg : PowerLimiter.config.inverters) {
                      LimitManager.setLimit(invCfg.serial, 100, LimitType::PERCENT);
                  }
              }
          }
      
          if (root.containsKey("verbose_logging")) {
              PowerLimiter.config.VerboseLogging = root["verbose_logging"];
          }
      
          if (root.containsKey("solar_passthrough_enabled")) {
              PowerLimiter.config.SolarPassthroughEnabled = root["solar_passthrough_enabled"];
          }
      
          if (root.containsKey("conduction_losses")) {
              PowerLimiter.config.ConductionLosses = root["conduction_losses"];
          }
      
          if (root.containsKey("battery_always_use_at_night")) {
              PowerLimiter.config.BatteryAlwaysUseAtNight = root["battery_always_use_at_night"];
          }
      
          if (root.containsKey("target_power_consumption")) {
              PowerLimiter.config.TargetPowerConsumption = root["target_power_consumption"];
          }
      
          if (root.containsKey("target_power_consumption_hysteresis")) {
              PowerLimiter.config.TargetPowerConsumptionHysteresis = root["target_power_consumption_hysteresis"];
          }
      
          if (root.containsKey("base_load_limit")) {
              PowerLimiter.config.BaseLoadLimit = root["base_load_limit"];
          }
      
          if (root.containsKey("ignore_soc")) {
              PowerLimiter.config.IgnoreSoc = root["ignore_soc"];
          }
      
          if (root.containsKey("battery_soc_start_threshold")) {
              PowerLimiter.config.BatterySocStartThreshold = root["battery_soc_start_threshold"];
          }
      
          if (root.containsKey("battery_soc_stop_threshold")) {
              PowerLimiter.config.BatterySocStopThreshold = root["battery_soc_stop_threshold"];
          }
      
          if (root.containsKey("voltage_start_threshold")) {
              PowerLimiter.config.VoltageStartThreshold = root["voltage_start_threshold"];
          }
      
          if (root.containsKey("voltage_stop_threshold")) {
              PowerLimiter.config.VoltageStopThreshold = root["voltage_stop_threshold"];
          }
      
          if (root.containsKey("voltage_load_correction_factor")) {
              PowerLimiter.config.VoltageLoadCorrectionFactor = root["voltage_load_correction_factor"];
          }
      
          if (root.containsKey("full_solar_passthrough_soc")) {
              PowerLimiter.config.FullSolarPassthroughSoc = root["full_solar_passthrough_soc"];
          }
      
          if (root.containsKey("full_solar_passthrough_start_voltage")) {
              PowerLimiter.config.FullSolarPassthroughStartVoltage = root["full_solar_passthrough_start_voltage"];
          }
      
          if (root.containsKey("full_solar_passthrough_stop_voltage")) {
              PowerLimiter.config.FullSolarPassthroughStopVoltage = root["full_solar_passthrough_stop_voltage"];
          }
      
          if (root.containsKey("inverter_serial_for_dc_voltage")) {
              PowerLimiter.config.InverterSerialForDcVoltage = root["inverter_serial_for_dc_voltage"].as<String>();
          }
      
          if (root.containsKey("inverter_channel_id_for_dc_voltage")) {
              PowerLimiter.config.InverterChannelIdForDcVoltage = root["inverter_channel_id_for_dc_voltage"];
          }
      
          if (root.containsKey("inverter_restart_hour")) {
              PowerLimiter.config.InverterRestartHour = root["inverter_restart_hour"];
          }
      
          if (root.containsKey("total_upper_power_limit")) {
              PowerLimiter.config.TotalUpperPowerLimit = root["total_upper_power_limit"];
          }
      
          if (root.containsKey("inverters")) {
              for (JsonObject inv : root["inverters"].as<JsonArray>()) {
                  String serial = inv["serial"];
                  auto *cfg = PowerLimiter.findInverterConfig(serial);
                  if (cfg) {
                      if (inv.containsKey("is_governed")) cfg->IsGoverned = inv["is_governed"];
                      if (inv.containsKey("is_behind_power_meter")) cfg->IsBehindPowerMeter = inv["is_behind_power_meter"];
                      if (inv.containsKey("power_source")) cfg->PowerSource = inv["power_source"];
                      if (inv.containsKey("use_overscaling_to_compensate_shading")) cfg->UseOverscalingToCompensateShading = inv["use_overscaling_to_compensate_shading"];
                      if (inv.containsKey("lower_power_limit")) cfg->LowerPowerLimit = inv["lower_power_limit"];
                      if (inv.containsKey("upper_power_limit")) cfg->UpperPowerLimit = inv["upper_power_limit"];
                      if (inv.containsKey("scaling_threshold")) cfg->ScalingThreshold = inv["scaling_threshold"];
                  }
              }
          }
      
          PowerLimiter.saveConfig();
          request->send(200, "application/json", "{\"success\":true}");
      }
      
      

      Effekt der Änderung:

      • Wenn enabled:true: alles wie bisher.

      • Wenn enabled:false: alle in config.inverters gelisteten WR bekommen sofort ein Limit von 100 %.

      Danach reicht ein einziger curl-DPL-Aufruf enabled:false.


      Habe bei github ein issue erstellt, in der Hoffnung, dass das künftig berücksichtigt wird.

      Dann würde der Code ohne Timeout und Limit setzen funktionieren, so wie es sein sollte.


      3 Alternativen:

      • API-Seite belassen (Workaround), wie bisher hier, mit timeout und mit Limit danach setzen.

      • oder:
        kleine Watchdog-Logik einbauen: Wenn false, prüft ein Timer alle paar Sekunden, ob Limits ≠ 100% sind, und setzt diese bei Bedarf dann zurück auf 100%.

      • oder
        nach DPL ausschalten: Wechselrichter Neustart durchführen, dann gehen non-presistente Werte auch verloren.

      Fazit:
      Dass das Limit nicht immer auf 100 % springt, liegt daran, dass die Firmware beim Abschalten keine Limit-Rücksetzung vornimmt. Es bleibt der „letzte gesetzte Wert“ bestehen, bis jemand ihn überschreibt.

      Vielleicht wird das ja mal geändert.

      posted in Blockly
      maxclaudi
      maxclaudi

    Latest posts made by maxclaudi

    • RE: Test Adapter Zendure Solarflow

      @felli

      macht doch nichts. Auch wenn es Kritik wäre 😉
      Zendure ist nicht dumm und macht das nicht ohne Einschaltstrombergenzung.

      Fraglich bleibt wie das bei manuellem schalten ist, wenn viel PV-Leistung vorhanden ist.

      Die vorher verlinkte Antwort ist richtig und betrifft "Automatic schaltet ein" "Automatic schaltet aus", mein "Automatic ausschalten bei <= 18W" und mein "Automatic einschalten um 0 Uhr".

      Ist gemessen und anhand von Daten analysiert bei meinem HUB2000.

      Wenn natürlich ein User, der keinen technischen Hintergrund hat, einfach immer wild tagsüber aus und einschaltet, weil die App das kann, der muss sich nicht über Defekte wundern.

      Aus dem Grund hat auch Zendure (vergeblich, angeblich) gewarnt, nicht so oft umzuschalten.
      Aber wie möchte man jeden Kunden und technisch nicht so versierten davor abhalten?
      Die App kann's ja 🙂

      posted in Tester
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      @felli sagte in Test Adapter Zendure Solarflow:

      @maxclaudi richtig, habe ich eine Weile so gemacht und als Trigger einfach den Passmode genommen. Sobald der auf true ging den dpl geschaltet. Dazu habe ich einfach die mqtt Verbindung von der OpenDTUonBattery zu meinem mqtt Broker in IoBroker genutzt. Man hat dann ein sauberes IoBroker Objekt was man ansteuern kann. Siehe Screenshot....

      Mache das aber nicht mehr, ByPass immer aus, ein langes Leben des Relais ist mir lieber. Aber jeder wie er es braucht 😉

      Screenshot_20250826-192113.png

      meine Antwort darauf 🙂
      Automatic schaltet mit nahezu ohne Last Bypass ein und mein Script mit sehr geringer Last aus. (18W DC bei 48V sind wieviel Ampere? Und welches Relais soll das nicht mitmachen?). In der Nacht ohne Last auf Automatic (Keine Sonne/PV=keineLast).
      Wenn du es nicht glaubst, dann schraub den Hub auf und messe 😉
      aber ja, jeder wie er möchte 🙂

      posted in Tester
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      HUB1200 und HUB2000

      Einige verwenden den Zendure HUB mit

      • Hoymiles oder kompatiblen Wechselrichter i. V. mit
      • OpenDTU-OnBattery

      Wenn der Hub in Bypass ist, kann der Wechselrichter über OpenDTU-OnBattery DPL gesteuert werden.

      • Zwischendurch benötigt man aber Vollgas und DPL soll deaktiv sein (kritische Verbraucher mit hohen, kurzzeitigen Stromanforderungen), damit man z.B. einen Schalter hat fürs Kochen etc.

      Dann ist für solarbetriebene Wechselrichter dies eine gute Lösung.

      posted in Tester
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      @beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:

      Das Ziel ist es, das ich bzw. meine Frau (WAF ist wichtig) mittags wenn die Sonne schön scheint, den DPL ausschalten kann. Also alles, was von den Panels kommt soll zu 100% in das Hausnetz gehen.

      Das was ich festgestellt hatte ist, wenn der Herd mittags an ist, ist das ja keine konstante Last. Die Kochplatten gehen an und wieder aus usw.. In der Zeit regelt sich der DPL um den Verstand.

      Deshalb brauche in eine Kachel (iQontrol) um mit einem Fingertipp den DPL auszuschalten.

      Mit dem Blockly was ich oben eingestellt hatte funktioniert es jetzt.

      Ich teste gleich mal dein geändertes.

      Hat mir keine Ruhe gelassen und denke, dass ich nun die Lösung für "solarbetriebene" Wechselrichter habe 👍 🙂

      edit besser aufbereitet:


      OpenDTU‑OnBattery: DPL per ioBroker ein/aus (Laien‑HowTo)

      Dieses HowTo erklärt, wie Dynamischen Power Limiter (DPL) von OpenDTU‑OnBattery über ioBroker/MQTT im Alltag als einfacher Ein/Aus‑Schalter benutzt wird.
      Der Leitfaden ist bewusst Schritt‑für‑Schritt und für Einsteiger geschrieben.

      Kurz über DPL: DPL regelt die Wechselrichterleistung so, dass Netzbezug/Ziel eingehalten wird. Per „Mode“ kann zwischen Normalbetrieb (DPL regelt) und Vollgas/Bypass (volle PV‑Leistung innerhalb des eingestellten Limits) umschalten.


      Was man braucht

      • OpenDTU‑OnBattery (mit aktiviertem DPL)

      • MQTT‑Broker (z. B. Mosquitto oder ioBroker MQTT‑Adapter im Server/Broker‑Modus)

      • ioBroker mit zwei MQTT‑Adapter‑Instanzen:

        1. Server/Broker – empfängt/wartet auf MQTT‑Nachrichten
        2. Client/Subscriber – abonniert Topics und kann Befehle senden (publish)

      Hinweis: Die Anleitung funktioniert z. B. mit ioBroker MQTT‑Adapter v6.1.2.


      Schritt 1 – Broker/Server einrichten

      1. In ioBroker eine MQTT‑Adapter‑Instanz anlegen.
      2. Unter Instanzen → Verbindung den Modus „Server/Broker“ wählen.
      3. Standard‑Ports/Einstellungen sind ausreichend. Benutzer/Passwort merken.

      Alternativ kann ein externer Broker (z. B. Mosquitto) genutzt werden.


      Schritt 2 – OpenDTU‑OnBattery verbinden

      1. In OpenDTU‑OnBattery die MQTT‑Client‑Einstellungen so setzen, dass sie zum Broker passen (IP/Port/Benutzer/Passwort).

      2. Nach erfolgreicher Verbindung erscheinen in ioBroker unter der Server‑Instanz die ersten Datenpunkte.

        • Beispielpfad: mqtt.0.<baseTopic>... (die Zahl 0 ist die Instanz‑Nummer)
        • <baseTopic> ist das Grundtopic, z. B. solar/1121XXXXXX

      Schritt 3 – ioBroker‑Client zum Steuern anlegen

      1. Zweite MQTT‑Adapter‑Instanz in ioBroker anlegen.

      2. Unter Instanzen → Verbindung den Modus „Client/Subscriber“ wählen.

      3. Verbindungseinstellungen (IP/Port/Benutzer/Passwort) müssen zum Broker/Server aus Schritt 1 passen.

      4. Starten. Kurz darauf tauchen unter dieser Instanz die gleichen Topics auf – hier kann man schreiben.

        • Beispielpfad: mqtt.1.<baseTopic>... (Instanz‑Nummer 1)

      Schritt 4 – DPL in OpenDTU aktivieren

      • In der OpenDTU‑Weboberfläche den DPL einschalten und konfigurieren (inkl. oberem Limit, also der maximalen Einspeiseleistung).
      • Erst wenn DPL aktiv ist, reagiert OpenDTU auf „Mode“‑Befehle.

      Schritt 5 – Die wichtigen Datenpunkte

      Immer die Client/Subscriber‑Instanz (z. B. mqtt.1) benutzen, wenn man schreiben will.


      Lesen (aktueller Modus):

      mqtt.<clientInst>.<baseTopic>.powerlimiter.status.mode
      
      • Zeigt 0/1/2. Nur sinnvoll, wenn DPL aktiv ist.

      Schreiben (Modus setzen):

      mqtt.<clientInst>.<baseTopic>.powerlimiter.cmd.mode
      
      • Hier schreibt man 0 oder 2 (siehe unten).
      • Wenn noch nie gesetzt, steht der State oft auf (null) → normal.

      Oberes Leistungs‑Limit (zum Nachlesen):

      mqtt.<clientInst>.<baseTopic>.powerlimiter.status.upper_power_limit
      
      • Gibt an, wie viel Watt maximal eingespeist werden. Der Wert wird in der OpenDTU‑Weboberfläche eingestellt.

      Die drei Modi (zur Einordnung)

      • 0 – Normalbetrieb: DPL regelt gemäß den Einstellungen.

      • 1 – WR aus: Wechselrichter wird abgeschaltet (für diesen Guide nicht nutzen).

      • 2 – Vollgas/Passthrough: Volle PV‑Leistung bis zum eingestellten oberen Limit, keine DPL‑Regelung während Mode:2.

        • Solar‑WR (ohne Batterie): genau der gewünschte „Bypass“.
        • Batterie‑WR: benötigt funktionierende VE.Direct‑Daten; wenn inaktiv/alt → WR kann abschalten.

      Merke: Wir nutzen für die einfache Ein/Aus‑Logik nur 0 (Normal) und 2 (Bypass/Vollgas).


      Schritt 6 – Einfache Ein/Aus‑Steuerung (Boolean)

      In ioBroker einen booleschen Datenpunkt anlegen, z. B. DPL_Override:

      • true → schreibe 0 nach ...powerlimiter.cmd.mode
        (DPL normal aktiv – geregelt)
      • false → schreibe 2 nach ...powerlimiter.cmd.mode
        (Vollgas/Bypass – maximale PV bis zum oberen Limit)

      Damit hat man einen Schalter, der DPL im Alltag bequem zwischen Regelung und Vollgas umschaltet.


      Wichtige Hinweise

      • DPL muss dauerhaft aktiv sein – sonst ignoriert OpenDTU den Mode.
      • Web‑UI geändert? Sobald etwas in der OpenDTU‑Weboberfläche geändert wird, setzt OpenDTU den Mode sofort auf 0 zurück.
      • Neustart (WR oder OpenDTU): Der Mode ist danach immer 0 (Sicherheitsverhalten).
      • cmd.mode zeigt (null), wenn noch nie etwas geschrieben wurde → kein Fehler.

      Fehlersuche (Quick‑Check)

      • Mode‑Schreiben ohne Wirkung?
        → Ist DPL aktiv? Richtiges Topic/Instanz verwendet (cmd statt status)? Wert 0/2 als Integer geschrieben?
      • Nach Web‑UI Bedienung wieder Regelung aktiv?
        → Gewollt: Web‑Änderungen setzen Mode auf 0 zurück.
      • Nach Stromausfall plötzlich geregelt statt Vollgas?
        → Nach Neustart stets Mode 0. Optional Automatisierung bauen, die deinen Wunsch‑Mode nach Boot setzt.

      Glossar (kurz)

      • Broker/Server: Zentrale MQTT‑Vermittlung (Mosquitto oder ioBroker‑Adapter im Server‑Modus).
      • Client/Subscriber: Verbindet sich zum Broker, liest/schreibt Topics (zweite ioBroker‑Instanz).
      • Topic: Pfad/Adresse einer Nachricht, z. B. solar/1121XXXXXX/powerlimiter/...
      • BaseTopic: Dein Geräteteil des Pfades, z. B. solar/1121XXXXXX.

      Checkliste

      • Broker/Server läuft (Mosquitto
        oder ioBroker MQTT im Server‑Modus)
      • OpenDTU‑OnBattery als
        MQTT‑Client verbunden
      • Zweite ioBroker‑Instanz als
        Client/Subscriber verbunden
      • DPL in OpenDTU
        aktiviert, oberes Limit gesetzt
      • status.mode lesen, cmd.mode schreiben
      • Boolean‑Schalter:
        true → 0 (Normal), false → 2 (Bypass)
      • Web‑UI/Neustart setzt
        Mode 0 → ggf. Auto‑Set per ioBroker

      Fertig!
      So lässt sich DPL mit ioBroker einfach als Ein/Aus‑Schalter betreiben – laienfreundlich und robust im Alltag.


      Denke das ist die beste Lösung.
      Macht genau und schnell, was wir möchten.
      Viel Spaß 😉

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      @beowolf
      Habe den Fehler im OpenDTU-OnBattery code gefunden.

      Verhalten und Ablauf wenn DPL ausgeschaltet wird (enabled:false):

      Die Konfiguration wird zwar gespeichert, aber:
      Der PowerLimiter macht keinen expliziten „Reset“ der Limits auf 100%.
      Stattdessen hängt es davon ab, ob im LimitManager gerade noch ein alter Limit-Wert aktiv ist.

      Deshalb passiert, dass manchmal noch der alte Wert aus der aktiven Regelung stehen bleibt (z. B. 60 %), manchmal springt es auf 100 %.

      Warum dieses Verhalten?
      Im Code sieht man, dass beim Abschalten (enabled=false) die Logik nicht aktiv eine Rücksetzung triggert.
      Das bedeutet praktisch:

      Beim Einschalten → aktiver Eingriff in die Limits.
      Beim Ausschalten → kein Eingriff → Limit bleibt zufällig auf dem letzten Stand.

      Lösung:
      Firmware patchen (sauberste Lösung)
      Im onAdminPost oder PowerLimiter::disable() explizit ein Setzen auf 100 % Limit einbauen, z. B.:

      src/WebApi_powerlimiter.cpp, angepasst für onAdminPost()


      void WebApiPowerLimiterClass::onAdminPost(AsyncWebServerRequest *request, JsonDocument &root)
      {
          if (root.containsKey("enabled")) {
              PowerLimiter.Enabled = root["enabled"];
              PowerLimiter.saveConfig();
      
              if (!PowerLimiter.Enabled) {
                  // Wenn PowerLimiter deaktiviert wird, Limit für alle bekannten Wechselrichter auf 100% setzen
                  for (auto &invCfg : PowerLimiter.config.inverters) {
                      LimitManager.setLimit(invCfg.serial, 100, LimitType::PERCENT);
                  }
              }
          }
      
          if (root.containsKey("verbose_logging")) {
              PowerLimiter.config.VerboseLogging = root["verbose_logging"];
          }
      
          if (root.containsKey("solar_passthrough_enabled")) {
              PowerLimiter.config.SolarPassthroughEnabled = root["solar_passthrough_enabled"];
          }
      
          if (root.containsKey("conduction_losses")) {
              PowerLimiter.config.ConductionLosses = root["conduction_losses"];
          }
      
          if (root.containsKey("battery_always_use_at_night")) {
              PowerLimiter.config.BatteryAlwaysUseAtNight = root["battery_always_use_at_night"];
          }
      
          if (root.containsKey("target_power_consumption")) {
              PowerLimiter.config.TargetPowerConsumption = root["target_power_consumption"];
          }
      
          if (root.containsKey("target_power_consumption_hysteresis")) {
              PowerLimiter.config.TargetPowerConsumptionHysteresis = root["target_power_consumption_hysteresis"];
          }
      
          if (root.containsKey("base_load_limit")) {
              PowerLimiter.config.BaseLoadLimit = root["base_load_limit"];
          }
      
          if (root.containsKey("ignore_soc")) {
              PowerLimiter.config.IgnoreSoc = root["ignore_soc"];
          }
      
          if (root.containsKey("battery_soc_start_threshold")) {
              PowerLimiter.config.BatterySocStartThreshold = root["battery_soc_start_threshold"];
          }
      
          if (root.containsKey("battery_soc_stop_threshold")) {
              PowerLimiter.config.BatterySocStopThreshold = root["battery_soc_stop_threshold"];
          }
      
          if (root.containsKey("voltage_start_threshold")) {
              PowerLimiter.config.VoltageStartThreshold = root["voltage_start_threshold"];
          }
      
          if (root.containsKey("voltage_stop_threshold")) {
              PowerLimiter.config.VoltageStopThreshold = root["voltage_stop_threshold"];
          }
      
          if (root.containsKey("voltage_load_correction_factor")) {
              PowerLimiter.config.VoltageLoadCorrectionFactor = root["voltage_load_correction_factor"];
          }
      
          if (root.containsKey("full_solar_passthrough_soc")) {
              PowerLimiter.config.FullSolarPassthroughSoc = root["full_solar_passthrough_soc"];
          }
      
          if (root.containsKey("full_solar_passthrough_start_voltage")) {
              PowerLimiter.config.FullSolarPassthroughStartVoltage = root["full_solar_passthrough_start_voltage"];
          }
      
          if (root.containsKey("full_solar_passthrough_stop_voltage")) {
              PowerLimiter.config.FullSolarPassthroughStopVoltage = root["full_solar_passthrough_stop_voltage"];
          }
      
          if (root.containsKey("inverter_serial_for_dc_voltage")) {
              PowerLimiter.config.InverterSerialForDcVoltage = root["inverter_serial_for_dc_voltage"].as<String>();
          }
      
          if (root.containsKey("inverter_channel_id_for_dc_voltage")) {
              PowerLimiter.config.InverterChannelIdForDcVoltage = root["inverter_channel_id_for_dc_voltage"];
          }
      
          if (root.containsKey("inverter_restart_hour")) {
              PowerLimiter.config.InverterRestartHour = root["inverter_restart_hour"];
          }
      
          if (root.containsKey("total_upper_power_limit")) {
              PowerLimiter.config.TotalUpperPowerLimit = root["total_upper_power_limit"];
          }
      
          if (root.containsKey("inverters")) {
              for (JsonObject inv : root["inverters"].as<JsonArray>()) {
                  String serial = inv["serial"];
                  auto *cfg = PowerLimiter.findInverterConfig(serial);
                  if (cfg) {
                      if (inv.containsKey("is_governed")) cfg->IsGoverned = inv["is_governed"];
                      if (inv.containsKey("is_behind_power_meter")) cfg->IsBehindPowerMeter = inv["is_behind_power_meter"];
                      if (inv.containsKey("power_source")) cfg->PowerSource = inv["power_source"];
                      if (inv.containsKey("use_overscaling_to_compensate_shading")) cfg->UseOverscalingToCompensateShading = inv["use_overscaling_to_compensate_shading"];
                      if (inv.containsKey("lower_power_limit")) cfg->LowerPowerLimit = inv["lower_power_limit"];
                      if (inv.containsKey("upper_power_limit")) cfg->UpperPowerLimit = inv["upper_power_limit"];
                      if (inv.containsKey("scaling_threshold")) cfg->ScalingThreshold = inv["scaling_threshold"];
                  }
              }
          }
      
          PowerLimiter.saveConfig();
          request->send(200, "application/json", "{\"success\":true}");
      }
      
      

      Effekt der Änderung:

      • Wenn enabled:true: alles wie bisher.

      • Wenn enabled:false: alle in config.inverters gelisteten WR bekommen sofort ein Limit von 100 %.

      Danach reicht ein einziger curl-DPL-Aufruf enabled:false.


      Habe bei github ein issue erstellt, in der Hoffnung, dass das künftig berücksichtigt wird.

      Dann würde der Code ohne Timeout und Limit setzen funktionieren, so wie es sein sollte.


      3 Alternativen:

      • API-Seite belassen (Workaround), wie bisher hier, mit timeout und mit Limit danach setzen.

      • oder:
        kleine Watchdog-Logik einbauen: Wenn false, prüft ein Timer alle paar Sekunden, ob Limits ≠ 100% sind, und setzt diese bei Bedarf dann zurück auf 100%.

      • oder
        nach DPL ausschalten: Wechselrichter Neustart durchführen, dann gehen non-presistente Werte auch verloren.

      Fazit:
      Dass das Limit nicht immer auf 100 % springt, liegt daran, dass die Firmware beim Abschalten keine Limit-Rücksetzung vornimmt. Es bleibt der „letzte gesetzte Wert“ bestehen, bis jemand ihn überschreibt.

      Vielleicht wird das ja mal geändert.

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      @beowolf
      was genau funktioniert und was nicht?

      um darauf aufzubauen, richtig angeordnet:

      <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="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="_+8y375~59B=8rd!@Ae%">jsonObjekt</variable>
          <variable type="timeout" id="timeout">timeout</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&amp;#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.49.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">fdgxxxdcf</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">114191</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">114192</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">114172</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="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>
                                                                                                                  <next>
                                                                                                                    <block type="timeouts_cleartimeout" id="v:wbTQNv4m:UTlyfw:n8">
                                                                                                                      <field name="NAME">timeout</field>
                                                                                                                      <next>
                                                                                                                        <block type="timeouts_settimeout" id="}0V3y4lcY{PIE#!~V6bg">
                                                                                                                          <field name="NAME">timeout</field>
                                                                                                                          <field name="DELAY">1</field>
                                                                                                                          <field name="UNIT">min</field>
                                                                                                                          <statement name="STATEMENT">
                                                                                                                            <block type="comment" id="pHVW34|})@%~DNJ(tX3f">
                                                                                                                              <field name="COMMENT">Limit_100%</field>
                                                                                                                              <next>
                                                                                                                                <block type="exec" id="z~uv`gd4.T-c?jLD!w`q">
                                                                                                                                  <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="{M)j=M5AjT,.J`1?|4n4">
                                                                                                                                      <field name="TEXT">pwd</field>
                                                                                                                                    </shadow>
                                                                                                                                    <block type="variables_get" id="2pE#.amP4,xu4{2Q,D%{">
                                                                                                                                      <field name="VAR" id="fb8(CemIXpTZO:5?3eho">WR1 HM-1000_curl</field>
                                                                                                                                    </block>
                                                                                                                                  </value>
                                                                                                                                  <next>
                                                                                                                                    <block type="exec" id="{]ZETu!ip1~2tjg$bQ`P">
                                                                                                                                      <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=",tNN#:Wd`$Q^xxlYDxuS">
                                                                                                                                          <field name="TEXT">pwd</field>
                                                                                                                                        </shadow>
                                                                                                                                        <block type="variables_get" id="jo++g^rXVk`{euOClG%?">
                                                                                                                                          <field name="VAR" id="b;`WR[z]dikov!wE@,}j">WR2 HM-1000_curl</field>
                                                                                                                                        </block>
                                                                                                                                      </value>
                                                                                                                                      <next>
                                                                                                                                        <block type="exec" id="%(7_80L^M(jkeI`nd-}u">
                                                                                                                                          <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=",tNN#:Wd`$Q^xxlYDxuS">
                                                                                                                                              <field name="TEXT">pwd</field>
                                                                                                                                            </shadow>
                                                                                                                                            <block type="variables_get" id="2wu`wtHRf/32+V=%3s+9">
                                                                                                                                              <field name="VAR" id="~^lm~JreXhZ81X6{yXWg">WR3 HM-1000_curl</field>
                                                                                                                                            </block>
                                                                                                                                          </value>
                                                                                                                                        </block>
                                                                                                                                      </next>
                                                                                                                                    </block>
                                                                                                                                  </next>
                                                                                                                                </block>
                                                                                                                              </next>
                                                                                                                            </block>
                                                                                                                          </statement>
                                                                                                                        </block>
                                                                                                                      </next>
                                                                                                                    </block>
                                                                                                                  </next>
                                                                                                                </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>
      </xml>
      

      Wenn Du mir Dein(e) Ziele) nennst, kommen wir evtl. schneller und einfacher zu einer Lösung.

      • Über Datenpunkt steuerbar muss es sein oder genügt explizte Anforderung?

      • Umschalten DPL Ein/Aus soll wie oft am Tag geschehen?
        Normalerweise 1x am Tag einschalten und 1x am Tag ausschalten (wegen Bypass?)
        Beim Ausschalten muss 100% Leistung wieder eingestellt sein bzw. werden.

      • Muss es Blockly sein oder darf es JS sein?
        JS in iob sandbox ist schon eingeschränkt, Blockly noch mehr und umständlich.
        Mit workaround klappt's bestimmt, dauert nur länger bis wir das umgesetzt bekommen.
        Blockly mit async macht es unmöglich schwer mit sync Auswertung API auf Pending, deshalb timeout.

      PS: Beachten, dass beim import von Blockly die Timeout-stop und Timeout nicht stimmen, das ist ein Fehler von iob Blockly. Immer kontrollieren und richtig auswählen, vor dem speichern und testen.

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      @beowolf
      jetzt ist das Bild weg. Du hast vergessen direkt vor dem Timeout auch ein Stop-Timeout einzubauen.
      Damit ein timeout-reset statt findet.
      Dann funktioniert es auch.

      Am besten exportierst Du Deinen Blockly-Code in die Zwischenablage, fügst ihn hier als code ein und Seriennummern+passwort usw. ersetzt Du einfach mit 'xxxxxx'.

      Dass Du keineMinute warten möchtest, ist klar.
      Was sind sonst noch die Ziele?

      Bedenke, dass die Limit-Änderungen in den flüchtigen Speicher geschrieben werden => unbedenklich.
      Das Umschalten (Ein/Aus) ist Flash => bedenklich.
      Das Umschalten sollte man nicht übertreiben und nicht oft an einem Tag machen, was auch überflüssig ist.

      Zeit ist zwar knapp (bin an einem größeren Projekt dran), aber das werden wir für Dich hoffentlich gelöst bekommen 😉

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: OpenDTU-onBattery Blockly DPL Ein/Aus

      @beowolf sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:

      @maxclaudi sagte in OpenDTU-onBattery Blockly DPL Ein/Aus:

      Würde mich mal über eine Rückmeldung oder einen Beitrag freuen.
      Nicht, dass ich hier Alleinunterhalter bin

      Danke für das Blockly.

      gerne 👍

      Was geht:

      DPL wird per Datenpunkt ein ein und aus geschaltet.

      Nach dem Einschalten läuft DPL wie gewohnt.

      Nach dem Ausschalten werden meine WR (HM-800 und HM-600) auch auf 100% gestellt.

      Was nicht geht:

      Die bleiben nicht bei 100%.

      Ein paar Sekunden später sind sie auf 7,5 % bzw. 10 % (Minimales Leistungslimit im DPL) gestellt.

      Warum passiert das?

      Weil die Zeit dazwischen zu kurz ist. Die Wechselrichter haben bestimmt noch den state Pending.

      Das habe ich auch schon bei einigen Hoymiles festgestellt.

      Ergänzend zu Deiner Beobachtung:
      DPL ist weiterhin ausgeschaltet aber die Werte haben sich mit ausgeschaltetem Zustand auf Minimum verändert.

      Funktioniert auch so einwandfrei:
      Nach dem DPL Ausschalten warten (ca. 10sek.), dann das Limit vergleichen:
      Falls Datenpunkt(e) (mqtt von openDTUonBattery der entsprechenden Wechselrichter) limit_relative ≠ 100 dann mittels curl auf 100% setzen.

      oder man kann nach ausschalten vom DPL und nach timeout von ~10sek einfach 100% Limit setzen.
      Das wird dann beibehalten.

      Die ca. 10 sekunden Wartezeit sind nötig.
      Vielleicht etwas zu kurz, einfach testen, weil der Hoymiles Zeit benötigt um Befehle hintereinander auszuführen. Pending muss abgeschlossen sein.
      Normalerweise könnte man pollen, auswerten, abwarten und dann senden.
      Aber für so einfache Dinge unnötig.

      Man schaltet ja normal nur 1x am Tag DPL ein oder aus (für Bypass?).

      Um es Dir leichter zu machen habe ich dafür noch ein Blockly für beide Wechselrichter zusammengeklickt:

      b542583e-9708-473a-9432-8eabf07be746-image.png

      blockly als import:

      <block xmlns="https://developers.google.com/blockly/xml" type="variables_set" id="6acw^x;DnOzQr,+1QMY~" x="-912" y="13063">
        <field name="VAR" id="03lE}K#LAiE6UIn{TSpe">openDTUoB_pwd</field>
        <value name="VALUE">
          <block type="text" id=".Gzymx[U58ZC5@#_eI1O">
            <field name="TEXT">topSecret</field>
          </block>
        </value>
        <next>
          <block type="variables_set" id="s*[FyKXx,06qe75!Ql(H">
            <field name="VAR" id="Q[Ul.eSqTa`ja|Cts-+/">HM800_serial</field>
            <value name="VALUE">
              <block type="text" id="2sNdysyulvZDNM6yeP8H">
                <field name="TEXT">123456789011</field>
              </block>
            </value>
            <next>
              <block type="variables_set" id="~/@Acy]v_1,b~:Bn[L_+">
                <field name="VAR" id="]TAF~$|vQbu%71?%TIMg">HM600_serial</field>
                <value name="VALUE">
                  <block type="text" id="f;}RPMU,=+?6Q7VrPX[$">
                    <field name="TEXT">123456789012</field>
                  </block>
                </value>
                <next>
                  <block type="variables_set" id="n9utWkCmZ~5O=d;qD`/Y">
                    <field name="VAR" id="DvrV|7SgL3%[J#.tMQYu">ip</field>
                    <value name="VALUE">
                      <block type="text" id="XM-2mM4T[^{0`;c!`RPw">
                        <field name="TEXT">192.168.2.200</field>
                      </block>
                    </value>
                    <next>
                      <block type="comment" id="pHVW34|})@%~DNJ(tX3f">
                        <field name="COMMENT">Limit_100%</field>
                        <next>
                          <block type="variables_set" id="YGofdo8=[F6.o!Qp^XF+">
                            <field name="VAR" id="9G;7cx}YMIq[e`lw6*X~">HM800_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="03lE}K#LAiE6UIn{TSpe">openDTUoB_pwd</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="DvrV|7SgL3%[J#.tMQYu">ip</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-+/">HM800_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">HM600_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="03lE}K#LAiE6UIn{TSpe">openDTUoB_pwd</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="DvrV|7SgL3%[J#.tMQYu">ip</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">HM600_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="exec" id="z~uv`gd4.T-c?jLD!w`q">
                                    <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="{M)j=M5AjT,.J`1?|4n4">
                                        <field name="TEXT">pwd</field>
                                      </shadow>
                                      <block type="variables_get" id="2pE#.amP4,xu4{2Q,D%{">
                                        <field name="VAR" id="b;`WR[z]dikov!wE@,}j">HM600_curl</field>
                                      </block>
                                    </value>
                                    <next>
                                      <block type="exec" id="{]ZETu!ip1~2tjg$bQ`P">
                                        <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=",tNN#:Wd`$Q^xxlYDxuS">
                                            <field name="TEXT">pwd</field>
                                          </shadow>
                                          <block type="variables_get" id="jo++g^rXVk`{euOClG%?">
                                            <field name="VAR" id="9G;7cx}YMIq[e`lw6*X~">HM800_curl</field>
                                          </block>
                                        </value>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </next>
          </block>
        </next>
      </block>
      

      kannst ja anpassen für Dein Blockly. Variablen von Passwort für OpenDTU, IP und Seriennumern müsstest schon integriert haben und kannst die dann nehmen/ersetzen.

      Alternativ starten manche den Wechselrichter nach DPL ausschalten neu, damit die non-persistenten Werte weg sind und der Wechselrichter wieder auf 100% ist.

      Viel Spaß und Erfolg.

      PS: Blockly mag ich eigentlich nicht. Lieber js. Ist man nicht so eingeschränkt und geht schneller.

      posted in Blockly
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      @iboriz sagte in Test Adapter Zendure Solarflow:

      @maxclaudi Danke für den Tipp, jetzt hat es bei mir auch endlich geklappt 🙂

      👍 freut mich, viel Spaß 🙂

      posted in Tester
      maxclaudi
      maxclaudi
    • RE: Test Adapter Zendure Solarflow

      @lesiflo
      wie viel kWp?

      @lesiflo sagte nachträglich in Test Adapter Zendure Solarflow:

      @maxclaudi Zur Info ich habe eine große Anlage mit 7 kWp und das BKW mit 1,6 kWp und 7,8 kWh Akku's.

      Die große Anlage lädt auch die Akkus mit.

      ach deshalb 👍 🙂

      posted in Tester
      maxclaudi
      maxclaudi
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo