NEWS
Regelung eines Hoymiles Solarinverters (Nulleinspeisung)
-
-
danke für das script, hab es noch ein bisschen an meine Bedürfnisse angepasst.
- Nutzung mit openDTU-Adapter
- alle Hoymiles-WR werden im gleichen %-Satz reduziert
- angepasst an die tatsächliche max-Leistung(ac-Wp) die der jeweilige WR bringt -> Alias "power_peak"
- es wird so viel ausgeregelt damit der Sun1000(mit Truckiplatine) sich langweilt.
Script-1 erfasst die "power_peak"s in den den opendtu.0.-Adapter-Objektbaum-DPs
Achtung Datenpunkte müssen manuell in Experten-mode angelegt werden: Script arbeitet noch nicht mit dem selector-Baustein -> also DPs in Script anpassenopendtu.0.1xxxxxxxxxxx.ac.phase_x.power_peak opendtu.0.1xxxxxxxxxxx.dc.input_x.power_peak opendtu.0.total.power_peak
-
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