NEWS
Regelung eines Hoymiles Solarinverters (Nulleinspeisung)
-
Script-2 Regelung: (brauch eigentlich bis aufdie Meter-DP nicht mehr angepasst werden, wenn weitere Hoymiles-WR dazu kommen) Bei dem bescheidenen Wetter kann ich zZ nicht viel testen.
-
leider zu viele Zeichen, ... Fortsetzung von script-2
-
Ich bräuchte etwas Hilfe bei der Anpassung des Scripts. Ich würde gerne mit maximal ca 50% der Wechselrichterleistung einspeisen.
Ich ab das Scripts jetzt so geändert, dass vor dem Schreiben auf den Wechselrichter geprüft wird, ob der Wert größer oder kleiner 50% ist und entsprechend angepasst wird. Aber ich habe das Gefühl das stört die Berechnungslogik des Scripts. Jemand eine Idee? -
@stefan-g-0 Welches Script hast du benutzt? Dann zeig doch mal den Scriptteil, so können wir nur raten oder an der Glaskugel rubbeln.
-
Ich hab dieses hier benutzt und entsprechend angepasst. Ich prüfe vor dem Schreiben von "SolarLimit" auf den Wechselrichter, ob es größer oder kleiner als mein Drosselwert ist. Falls größer schreibe ich den Drosselwert.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</variable> <variable id="?~:J:;gqC%-pt?=zNsH:">Sunrise</variable> <variable id="UJ`JGN{Ezb$K7jJ[4P}j">Sunset</variable> <variable id="z*CGze`HM;h,=g8Kiaf{">Drosselwert</variable> <variable id="BN!a@q$SEAU4^)xo:SRJ">maxSolarPower</variable> <variable id="AcYpB0Ty+wVObL7=Y.a.">measuredPower</variable> <variable id="1}Q0686mMw0ZGk)e+r?(">measuredSolarPower</variable> <variable id="le#}gR{6G.yhW=x|6pS8">neededPower</variable> <variable id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</variable> <variable id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</variable> <variable id="}s`y%Qd}~t2t(jU$8(ud">upperLimit</variable> <variable id="P^1|W+9iVy?PgNp}9!.S">lowerLimit</variable> </variables> <block type="schedule" id="!P+uzJ#%y!_wHsKqo2~M" x="-443" y="-618"> <field name="SCHEDULE">*/20 * * * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="~v~t5u;a_q(#kb+E{(FH"> <field name="VAR" id="?~:J:;gqC%-pt?=zNsH:">Sunrise</field> <value name="VALUE"> <block type="time_astro" id="Svgszky6QE2/10f8vck1"> <field name="TYPE">sunrise</field> <field name="OFFSET">0</field> </block> </value> <next> <block type="variables_set" id="~/087{!i@]6[`rKxsw]j"> <field name="VAR" id="UJ`JGN{Ezb$K7jJ[4P}j">Sunset</field> <value name="VALUE"> <block type="time_astro" id="BO/%++Qd.ktL4PfK.r3?"> <field name="TYPE">sunset</field> <field name="OFFSET">0</field> </block> </value> <next> <block type="controls_if" id="xaOp|xXgB@BB44iq}cJ."> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="|K,B[pWUT`!LyJsB6,pK"> <field name="OP">AND</field> <value name="A"> <block type="time_compare_ex" id="Y8n@Iqzd:%qZbp|#P_v^"> <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="false" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION">>=</field> <value name="START_TIME"> <shadow type="text" id="]-0N3DkP*7?ghtYzXwX!"> <field name="TEXT">12:00</field> </shadow> <block type="variables_get" id="!,6PYgrHnSxh#Evn[Yie"> <field name="VAR" id="?~:J:;gqC%-pt?=zNsH:">Sunrise</field> </block> </value> </block> </value> <value name="B"> <block type="time_compare_ex" id="qRYvI=rC7,D?`B=PV@^6"> <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="false" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION"><=</field> <value name="START_TIME"> <shadow type="text" id="Prz0lJ[Ff$!.fHy0|JP%"> <field name="TEXT">12:00</field> </shadow> <block type="variables_get" id="LMy)6-$QN(f3d9klxV`O"> <field name="VAR" id="UJ`JGN{Ezb$K7jJ[4P}j">Sunset</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id=",LM-)aU+$I+@$aew%Vm-"> <field name="VAR" id="z*CGze`HM;h,=g8Kiaf{">Drosselwert</field> <value name="VALUE"> <block type="math_number" id="!l$.aimbnDQVxF;^?}C7"> <field name="NUM">50</field> </block> </value> <next> <block type="variables_set" id="~p6WKGjCNU[UXfc{|$8|"> <field name="VAR" id="BN!a@q$SEAU4^)xo:SRJ">maxSolarPower</field> <value name="VALUE"> <block type="math_number" id="Z(v(#cMkS]/o.,;iyE/|"> <field name="NUM">1500</field> </block> </value> <next> <block type="variables_set" id="Ih%sQzzK`!Ec=`tscEm-"> <field name="VAR" id="AcYpB0Ty+wVObL7=Y.a.">measuredPower</field> <value name="VALUE"> <block type="get_value" id="E60zTd:yszZT-@pD[YB#"> <field name="ATTR">val</field> <field name="OID">shelly.0.SHEM-3#BCFF4DFD118F#1.Total.InstantPower</field> </block> </value> <next> <block type="variables_set" id=":rlAB32E^@yPP9Jh?EMO"> <field name="VAR" id="1}Q0686mMw0ZGk)e+r?(">measuredSolarPower</field> <value name="VALUE"> <block type="get_value" id="Q8pLDlgI~N(N2-6)X@Qu"> <field name="ATTR">val</field> <field name="OID">opendtu.0.116190743424.ac.phase_1.power</field> </block> </value> <next> <block type="variables_set" id="t8-xB+K`%rr)x]%:Q5cN"> <field name="VAR" id="le#}gR{6G.yhW=x|6pS8">neededPower</field> <value name="VALUE"> <block type="math_arithmetic" id="a;U.-:0QItU1Q=;0a)kz"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="}d9rloSf)l~.^HiZ[;lQ"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="2FaDMR/kS5K9d!j=`dK3"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="2FEk%?jHI2)Hvf4}p|*;"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="Z`YZ!4FileGG?5VwaP-/"> <field name="VAR" id="AcYpB0Ty+wVObL7=Y.a.">measuredPower</field> </block> </value> <value name="B"> <shadow type="math_number" id="+10nRI6/x]hugF{/lmxM"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="n0BqKn~p@qPw.Jvfrj,s"> <field name="VAR" id="1}Q0686mMw0ZGk)e+r?(">measuredSolarPower</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="O,R:R1iQy0^xtDQ%pEzg"> <field name="NUM">1</field> </shadow> <block type="math_number" id="L/fGMljWSM2_zW5XIdX^"> <field name="NUM">200</field> </block> </value> </block> </value> <next> <block type="variables_set" id="$61h{3os=)%X-VEx9M:i"> <field name="VAR" id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</field> <value name="VALUE"> <block type="math_round" id="3$tH.4.P)ukPPcI4xw.A"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number" id="{D8W1ElJ#97Cg:]vDkM;"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="ju~9S8j-`0c/OF%2$7-o"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="6:p#t,*^;)z:Wb:@dc|3"> <field name="NUM">100</field> </shadow> </value> <value name="B"> <shadow type="math_number" id=".fYZ,3H9RSS}:wD=%Bvk"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="Z9S-r-/8^FbCeq,[{ULB"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="jul_lM$(9.yj`:ZH8}%@"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="_mPBX.l-0%hNvWtND[z1"> <field name="VAR" id="le#}gR{6G.yhW=x|6pS8">neededPower</field> </block> </value> <value name="B"> <shadow type="math_number" id="{Q+JfjzDv.)Z1KRbU*uv"> <field name="NUM">600</field> </shadow> <block type="variables_get" id="M!sN^/9!7$b}.ru.lqgC"> <field name="VAR" id="BN!a@q$SEAU4^)xo:SRJ">maxSolarPower</field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="g3gA+F5X4*$4x2),%sJV"> <field name="VAR" id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</field> <value name="VALUE"> <block type="get_value" id="7wbrC,7l;@ahCGcw2/pL"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.PV-Anlage.storedNeededPower</field> </block> </value> <next> <block type="variables_set" id="2KI]WdQd`0MzEf%mOPaL"> <field name="VAR" id="}s`y%Qd}~t2t(jU$8(ud">upperLimit</field> <value name="VALUE"> <block type="math_round" id="Ha.~N]M`[1eWboby_aYe"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number" id=":C/cpWh)P`-jK9}]IN*4"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="v}v!|Jkv3JHVqQR7poM0"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="U{yunxfvol_:dK{m!k`b"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="{dg*rTfc(I5I1PoYYN;l"> <field name="VAR" id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</field> </block> </value> <value name="B"> <shadow type="math_number" id="TEJ)K0YFfZ8(D02EG`M@"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="#Aa[sC!ija_TtL9Go*jl"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="6,o$]#*K=2#VFH`_9WTA"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="?YS@_}6Hup[`ZsLR!Z45"> <field name="VAR" id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</field> </block> </value> <value name="B"> <shadow type="math_number" id="YxGb?xk[MY37)!7O-Cqe"> <field name="NUM">0.05</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="+KJ71_Z(eLN.a(uoEuci"> <field name="VAR" id="P^1|W+9iVy?PgNp}9!.S">lowerLimit</field> <value name="VALUE"> <block type="math_round" id="=HYNg!vGE)^Z7m{+e$cs"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number" id="|d.50MyF$Zxnn(B]!gq~"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="?8HAOa[X,LM#h`p]lLc4"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="(8p!3BSrd)N0m`PVj}cd"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="?$cU!rsg;wkU}CP.VsR."> <field name="VAR" id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</field> </block> </value> <value name="B"> <shadow type="math_number" id="@kP8*eoC!D4/Wa?%grKM"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="D$_kryX`Gb5eu$gnYS_q"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="CHoIZ8~aNcbyIIQ`+^XK"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="nrL6t1UCC{jy1*U[O|Xq"> <field name="VAR" id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</field> </block> </value> <value name="B"> <shadow type="math_number" id="||~-FC.nb3oU=fuLJzw}"> <field name="NUM">0.1</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="8cGY=ms*^/Fbn#Cde4/e"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="H62VUB,[liG^nrlRF:tt"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="QUQf.~7J|ziuD3sLdl)|"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="lGPf[Ci!QdAF4j#Bn34-"> <field name="TEXT">Sonnenaufgang; </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="kwmbl:u%6-!)]lE{Bhdj"> <field name="VAR" id="?~:J:;gqC%-pt?=zNsH:">Sunrise</field> </block> </value> </block> </value> <next> <block type="debug" id="yaFK]t~sZKg}j1WzH!TL"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="!=3G59}srtq{e9)D:kG*"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="g_%Dq-ksE!p;Tib-dWoB"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="(bZZUaTT0bt~IQ|a~%#R"> <field name="TEXT">Sonnenuntergang; </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="weuYcyZ5+:mfnpSK9UiP"> <field name="VAR" id="UJ`JGN{Ezb$K7jJ[4P}j">Sunset</field> </block> </value> </block> </value> <next> <block type="debug" id="1|f1K~GhCe(a;/q4o_X]"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="x-eWadG[^C!km-=H]:}6"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="2Zo2{I0w6J%`$2:qEY1l"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="+YI.VRyx;em.YT$D(|bs"> <field name="TEXT">Istwert: </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="z%3ACfZd0~)KLgj0p}%@"> <field name="VAR" id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</field> </block> </value> </block> </value> <next> <block type="debug" id="r+xN[i`4xS-M`OYDBpb."> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="IzsRzbI6F~d5],Hap$(]"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="(f(78JM#Hy0@?Z0hJe~l"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="~}`O(MW.TU:J%_oS)#Xu"> <field name="TEXT">obere Grenze: </field> </block> </value> <value name="ADD1"> <block type="variables_get" id=",vBoJg7x{3!@v.c5w4q]"> <field name="VAR" id="}s`y%Qd}~t2t(jU$8(ud">upperLimit</field> </block> </value> </block> </value> <next> <block type="debug" id="qBNh2:P3U}F#$|$6FZFn"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="2kPK8(t-SdR9TZvb.%-l"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="}cq5v9RJT$55w(=?6BX)"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="*q^TTVgJ+?:b!z,x/S;V"> <field name="TEXT">untere Grenze: </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="Vh$)4$K%:ZHW:~MiMXet"> <field name="VAR" id="P^1|W+9iVy?PgNp}9!.S">lowerLimit</field> </block> </value> </block> </value> <next> <block type="debug" id="k}*+@}8y%^u*6nB1JGm^"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="_QR/WZ8nPoRE;O(*~nCd"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="9O/.cB+R0J#M=YHuIJn?"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="3Uv-x,Irz%wnP{oXU!s^"> <field name="TEXT">benötigte Power in Prozent: </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="T);Yxf;X[xS0z_7}_YkI"> <field name="VAR" id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</field> </block> </value> </block> </value> <next> <block type="debug" id="^YDhG@UuUW]S56Hj`Hy5"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="=obzK~!.,8zkt6;/x6L="> <field name="TEXT">test</field> </shadow> <block type="text_join" id="V$lr1mYZa{TtI%S5xyu^"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="iU,u1kyso{}XAE[Jpp0H"> <field name="TEXT">aktueller Bezug: </field> </block> </value> <value name="ADD1"> <block type="variables_get" id=",]tO,O1-TAt8/MU~#_`R"> <field name="VAR" id="AcYpB0Ty+wVObL7=Y.a.">measuredPower</field> </block> </value> <value name="ADD2"> <block type="text" id="nC2YHo+c`taKRNk4:cD,"> <field name="TEXT"> Watt</field> </block> </value> </block> </value> <next> <block type="controls_if" id="//Rx),f%pyif!qW8O/?G"> <mutation elseif="1" else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="6|n{EZ*g-L?wwMuw~`pt"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="@s)ep$AZC}nn4%[Y{zXv"> <field name="OP">GTE</field> <value name="A"> <block type="variables_get" id="rLGQIwoD@(-[)i.@Gek1"> <field name="VAR" id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</field> </block> </value> <value name="B"> <block type="math_number" id="i.8)/]r6EY5E@{+61}ch"> <field name="NUM">100</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="M%7gn=%*6!Oo0Iy!N0HE"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="FPBUa4}8MCdw~u2(u=Z4"> <field name="VAR" id=":U;.Z4:pYNy(TwM9X-dL">storedNeededPower</field> </block> </value> <value name="B"> <block type="math_number" id="])#t~DUCT78?qe_~1/X)"> <field name="NUM">100</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="_|aD2Z`JU`?BoQCCcfTz"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="wcNA/`cj2DUcJLr26^bd"> <field name="TEXT">keine Änderung, Wert ist gleich gespeichertem Wert</field> </shadow> </value> </block> </statement> <value name="IF1"> <block type="logic_operation" id="4WJuW,40dOlCCnG8!=A("> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id="0U*fZT58L0uKFJsD)N{;"> <field name="OP">GT</field> <value name="A"> <block type="variables_get" id="%=U`G7.6z`w:8|:XtgTI"> <field name="VAR" id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</field> </block> </value> <value name="B"> <block type="variables_get" id="IE{(_NPVQP{:.^rxbG?4"> <field name="VAR" id="}s`y%Qd}~t2t(jU$8(ud">upperLimit</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="7GGwP6lHcmy!ILxZJvYk"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="EN^7brshgWEicI7V4)C!"> <field name="VAR" id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</field> </block> </value> <value name="B"> <block type="variables_get" id="7B.88d1a^Hr`R-b6!iMZ"> <field name="VAR" id="P^1|W+9iVy?PgNp}9!.S">lowerLimit</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="controls_if" id="P8/_4.KJ/zZ6qh9iBh+o"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="mk*xKT^,LdqKZpmRr}r4"> <field name="OP">LTE</field> <value name="A"> <block type="variables_get" id=".d_KP;p/?wytr_{S7(db"> <field name="VAR" id="le#}gR{6G.yhW=x|6pS8">neededPower</field> </block> </value> <value name="B"> <block type="variables_get" id="R!EQmKR0*lP1iR`NTG%f"> <field name="VAR" id="BN!a@q$SEAU4^)xo:SRJ">maxSolarPower</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="v_^pc%4YAqueF4@xp/Ph"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> <value name="VALUE"> <block type="variables_get" id="rba!2I;EQyijkPfjo!Ze"> <field name="VAR" id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</field> </block> </value> <next> <block type="update" id="E7HJvqAC,*BNAxN~e8sd"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV-Anlage.storedNeededPower</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="hR1[WimPbd@1ICN+UAdn"> <field name="VAR" id="X-B3:`dA%wy5$?]at5W-">NeededPowerPercent</field> </block> </value> </block> </next> </block> </statement> <statement name="ELSE"> <block type="variables_set" id="iqqD`P-h34,:2q7p$CH|"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> <value name="VALUE"> <block type="math_number" id="dowAhu.+=iz#Wc-F]p:X"> <field name="NUM">100</field> </block> </value> <next> <block type="update" id="*?5=;cANP)NJ|KuX_[PF"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV-Anlage.storedNeededPower</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="7vXqNl1zb}n*oh6q3:]4"> <field name="NUM">100</field> </block> </value> </block> </next> </block> </statement> <next> <block type="controls_if" id="]^/I[vJo!sr5LpkbcFB!"> <value name="IF0"> <block type="logic_compare" id="%50d#)U*~RScC:F-kp{g"> <field name="OP">LTE</field> <value name="A"> <block type="variables_get" id="KVYNgaA$~@zFf4U(-2G("> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> </block> </value> <value name="B"> <block type="math_number" id="!0pj`kNb_!ZOVov*^)[3"> <field name="NUM">4</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="/4+e9gEK~pdujzM|}ksi"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> <value name="VALUE"> <block type="math_number" id="c+YG2dsZvm-}l6dXt[1Z"> <field name="NUM">5</field> </block> </value> </block> </statement> <next> <block type="control" id="W+gr)Q`C;VMjG:,mB)8r"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">opendtu.0.116190743424.power_control.limit_nonpersistent_relative</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_ternary" id=";sFFAfljVZ6Z,4Hj1E.,"> <value name="IF"> <block type="logic_compare" id="K$|~0#y=wVD5PE=bkE}q"> <field name="OP">GTE</field> <value name="A"> <block type="variables_get" id="s~rkNt-]~GB@EGz5xO0x"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> </block> </value> <value name="B"> <block type="variables_get" id="Spb2f@6),Fdr.F?-T%,5"> <field name="VAR" id="z*CGze`HM;h,=g8Kiaf{">Drosselwert</field> </block> </value> </block> </value> <value name="THEN"> <block type="variables_get" id="YM@qJ^Vd4^scx`yk]T0x"> <field name="VAR" id="z*CGze`HM;h,=g8Kiaf{">Drosselwert</field> </block> </value> <value name="ELSE"> <block type="variables_get" id="sGW|-?0p?f%T3GmWYs,$"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> </block> </value> </block> </value> <next> <block type="update" id="s#3b#336vxWJ~)CrO5|2"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV-Anlage.storedNeededPower</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="G@Vi{iS}Y+YU)Hb+t-9X"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> </block> </value> <next> <block type="debug" id="4(mO4hae0d8|yCEDlMj~"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="GhK9E*i9z*IoFuBKSaq1"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="K$7:Tw;%Pm?f$3/:xV?V"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="tzX795?CuQ=.SGL`i!ns"> <field name="TEXT">gesetztes Limit: </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="`hpd|~6gnaa1#A:#I^ku"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> </block> </value> </block> </value> <next> <block type="controls_if" id="ZH?n)}/A8xDqvLu;mM3m" disabled="true"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="vVy#@8N({zRaYhlMew]c" disabled="true"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id="PIGb)h}(L;=:AD;5r=W$"> <field name="OP">LTE</field> <value name="A"> <block type="get_value" id="Hn,:c1}lRncb$M*c37T["> <field name="ATTR">val</field> <field name="OID">0_userdata.0.PV-Anlage.Solarlimit_HM400.Solarlimit_HM400</field> </block> </value> <value name="B"> <block type="math_number" id="O/l%Uh0A@?HPfD;/4eRW"> <field name="NUM">5</field> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="x8],WeAvz)P5RbWxBqKU"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id="D1Vr-[UHVwz,0UMcxf~t"> <field name="OP">GTE</field> <value name="A"> <block type="get_value" id="*^o)uk]A48Tjk%pvj2pB"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.PV-Anlage.Solarlimit_HM400.Solarlimit_HM400</field> </block> </value> <value name="B"> <block type="math_number" id="az|/|Fl[JpJ{rB83ed[p"> <field name="NUM">100</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="1f.~}_NZHFWHi$U;Bl[E"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="o%XYKF2zkxK+dE|3E%-_"> <field name="ATTR">val</field> <field name="OID">opendtu.0.112183217812.ac.phase_1.power</field> </block> </value> <value name="B"> <block type="get_value" id="uM~uo~N[nRQ?i9!fzRA!"> <field name="ATTR">val</field> <field name="OID">opendtu.0.112183217812.power_control.current_limit_absolute</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="ELSE"> <block type="debug" id="Pv3KiYZaGuo2FdU}gjig"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="t2%tFy.G9l;?j^VyEMCa"> <field name="TEXT">keine Änderung</field> </shadow> </value> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="debug" id="k-_yI!1YR}Cw@^zA*2By"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="pOzzR,#7b~P,=jhm/QLz"> <field name="TEXT">keine Änderung</field> </shadow> </value> </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> </statement> <statement name="ELSE"> <block type="debug" id="6hv2w66u%V}c3Ij`Q?pi"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="LmPU])Tk80,#%40`K:m4"> <field name="TEXT">Zeit ist außerhalb der Reglungszeit.</field> </shadow> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> <next> <block type="on" id="ZL8vO[p1R/A;ya1za`xr"> <field name="OID">opendtu.0.116190743424.ac.phase_1.power</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="i-LU9|:0W/^N9OUHV|vz"> <value name="IF0"> <block type="logic_operation" id="48E=B|L[caW^`eKm5$Cc"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="ADUq~1G|e1m2kF9p-[da"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="]/H$#$HQ9nwK}$2/`2.Q"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="r:ue*$Q:uC]aI/~i0U4s"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="~2fS%r3Dl82Iw#.eqH2@"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="*2RL.urvN{kWxHd3WB`u"> <field name="ATTR">oldState.val</field> </block> </value> <value name="B"> <block type="math_number" id="z}#YN6;iKhUl2_Ro+6Q#"> <field name="NUM">600</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="Vtc?VuGf[$DFDIRTl,|s"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="G@pf3q(s;qCR*%@78O,h"> <field name="TEXT">HM1500 Voltage reset</field> </shadow> </value> <value name="USERNAME"> <block type="text" id="0bbcQ.OXxi{(C*B9MEoW"> <field name="TEXT">Stefan</field> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> <block type="variables_get" id="0O[l*@b$eWz(z6Nj5;8Z" x="613" y="962"> <field name="VAR" id=")2]D^Y|D:QS6S[A}9J=/">SolarLimit</field> </block> </xml>
-
Ich habe mir für meine Bedürfnisse das Programm angepasst. Mit der Nulleinspeiseregelung bin ich aber nicht zufrieden, da diese schwingt.
Hintergrund:- Smartmeter Shelly EM, Messwert Leistungsbezug leider nur alle 5 s, wahrscheinlich ein gemittelter Wert aus der Messzeit?
- Berechnet wird die neue Einspeiseleistung, übertragen mit OpenDTU
In dem Moment, wo die "needed Power" Variable berechnet wird, stimmt der Betrag natürlich wegen dem wahrscheinlich gemittelten (vorherigen) Netzbezug nicht, der neue Leistungsbedarf ist zu hoch/zu niedrig--> System schwingt
Daher meine Frage:
was für eine Aktualisierungszeit hat euer Smartmeter, habt ihr ähnliche Erscheinungen? -
@andi_grafa
Ich denke, das größere Problem dabei ist die Reaktionszeit der WR. Ich habe 3 HM und einen HMS. Dass ist ein Unterschied wie Tag und Nacht. Die HM benötigen teils 30 sek ehe sie die neuen Werte an nehmen. Da sind alle Eulen verflogen und es kommt zu dem extremen "schwingen". Der HMS funkt im Sub 1G Bereich und läuft deutlich besser. Die Reaktionszeit ist im Bereich von max. 5sek. Da kann man deutlich besser steuern und der WR macht, was er aktuell soll und nicht eine halbe Minute später. Ich werde mindestens noch einen der HM durch einen HMS ersetzen. Auch die Reichweite ist im Sub 1G Bereich deutlich größer. -
@duffy said in Regelung eines Hoymiles Solarinverters (Nulleinspeisung):
Das "verstellen" funktioniert bei beiden. Hast du im open DTU Adapter auch die Zugangsadaten der openDTU eingetragen?
Bei mir war das die Lösung des Problems, Zugangsdaten rein und schon konnte ich die openDTU in der Leistung über die Objekte verstellen, bzw. begrenzen.Hallo duffy, schönen guten Morgen. Ich bin ganz neu im Forum und versuche gerade über den IObroker openDTU-adapter per blockly den Limit-Werte zu schreiben ( opendtu.0.xxxxxx.power_control.limit_nonpersistent_relative ). ImAdapter habe ich dazu den Wert "solar/114182123339/status/limit_relative". Ich hoffe das ist der "nonpersistent" Datenpunkt. Leider wird der von mir gesetzte Limit-Wert vom openDTU immer wieder mit den vorherigen Wert überschrieben. Hast Du einen Tipp für mich? Viele Grüße
-
@tigger66 Bevor jetzt Alle auf HMS umrüsten- kann man nicht die wertvolle Elektroenergie sinnvoll nutzen, anstatt den WR runterzubegrenzen? ZB. Akku laden, Warmwasser erhitzen (WW ist immer noch besser als nichts).
-
Ich steuere:
um die Leistung des WR zu ändern.
Wenn ich den Wert dort setze bleibt er auch so bis ich ihn wieder ändere.Hast du deine Zugangsdaten der DTU in den OPENDTU Adapter eingetragen?
Gruss Duffy
-
@duffy so wie ich das sehe, hat er das Topic noch gar nicht angelegt. Wie das geht, steht in dieser Diskussion im Posting vom 17. März 2023.
-
Also ich habe kein Topic angelegt. Mir hat das alles der OpenDTU Adapter geliefert was ich benötigt habe. Muss ehrlicherweise sagen habe auch nie was mit MQTT gemacht immer nur alles mit Adaptern.
-
@duffy ok, den Adapter nutze ich nicht. Wäre für mich nur Ballast, vermutlich sollte er den Wert aber trotzdem unter cmd->limit_nonpersistant_relative eintragen. Kann nat. im Adapter anders sein...
-
@kymchy Der Adapter ist aber sehr zu empfehlen. Hatte vorher auch MQTT. Der Adapter ist praktischer. Der legt auch die Datenpunkte an.
-
@laser da ich für viele andere Sachen MQTT nutze, bringt mir der Adapter nicht viel. Ein Topic ist schnell erstellt.
-
@duffy said in Regelung eines Hoymiles Solarinverters (Nulleinspeisung):
Hast du deine Zugangsdaten der DTU in den OPENDTU Adapter eingetragen?
Tatsächlich würde ich gerne über den openDTU-Adapter arbeiten um das LIMIT schreibend zu verändern; weil ich das als Anfänger komfortabler einschätze.
Nach dem Anlegen des openDTU-Adapters hatte ich 2 neue Objekte : mqtt und opendtu .
Den Datenpunkt "limit_nonpersistent_relative" ( Dein Screenshot ) wird mit unter den mqtt-Objekten gar nicht angeboten ( mein ScreenShot-1 ).
Was meinst Du genau mit "Hast du deine Zugangsdaten der DTU in den OPENDTU Adapter eingetragen?"Vielleicht mache ich ja grundsätlzich etwas falsch ?
viele Grüße
-
Wo bei dir Web UI-Adresse drin steht habe ich die IP meiner opendtu.
Mqtt ist bei mir abgeschaltet. Wenn du den openDTU Adapter verwendest benötigst du das Mqtt nicht.
Hier noch mal der genaue Pfad zu dem Datenpunkt.
Wenn du weiter nichts über mqtt laufen hast schalte den Adapter mal ab nicht das der vielleicht den opendtu Adapter stört.
Ich bin aber auch bei weitem kein Profi und kann dir nur sagen wie es bei mir funktioniert.
Gruß Duffy
-
@duffy : Herzlichen Dank, morgen werde ich das gleich mal ausprobieren; schönen Abend
-
@duffy super ! es hat geklappt; danke für den Tipp
-
Hier ist noch mein Script für die Nulleinspeisung über Opendtu und Hoymiles HM1500. Den Strom lese ich mit einem Hichi Lesekopf am Stromzähler.
Funktioniert wunderbar. Ich speise fast nichts ein.
Immer wenn sich der Strom ändert - wird alle 10 Sekunden vom Hichi gemeldet, da brauche ich keinen CRON Job - wird das Limit neu gesetzt sofern die WR Stromerzeugung >300 Watt ist. Die OpenDTU schalte ich ca. 1h nach Sonnenaufgang an und mit Sonnenaufgang ab. Die dauerhafte Limitierung liegt bei 600W. Damit startet der WR jeden Morgen und bleibt da auch, wenn es keine Regelung gibt.Die Steuerung erfolgt über die Prozentangabe der Wechselrichterleistung in den Limits von 30% bis 100%
Am Anfang gab es die Fehlermeldung es würde kein Number-Value übertragen, durch die Value Funktion hat sich das erledigt.