helge
(Helge)
13. April 2023 um 09:12
21
@shadowblues ich nutze ebenfalls MODE3 zur Reduzierung der WR Leistung auf 50% bei 50% SoC,
aber das untere AKKU Limit, über MODE3 zu steuern, nein, hier nutze ich das vorhandene untere SoC Limit über ESS#1, weil bereits sauber implementiert
so, und nun bin ich an dem Punkt aus deinem Post#1 angekommen, wo eben das System nicht mehr "klassisch" ist
@helge Von den Komponenten ist es schon klassisch, von der Steuerung ggf. nicht.
Wie nutzt Du ESS#1 zur unteren Abschaltung aber ansonsten Mode3? So wie ich gelesen habe, übergeht Mode 3 die eingestellten Schranken und man kann sowohl mit höheren Strömen laden und entladen, wie eben auch tiefer entladen. Referenz muss ich nachher mal suchen.
helge
(Helge)
13. April 2023 um 09:57
23
@shadowblues bei mir steuert IObroker die Kommunikation zwischen allen Dingen. auch nicht gewöhnlich. die Leistungsbeschränkung ist ein Teil der Akku-Schutz-Regelung (im Volksmund "BMS")
MaxInverterPower = ModBus-Register 2704 (Mode3)
<xml xmlns="https://developers.google.com/blockly/xml ">
<block type="comment" id="K6P+240N%APtFltCOty)" x="-187" y="13">
<field name="COMMENT">Laderegelung</field>
<next>
<block type="on" id="o%BGpFsML/pq_wb8[]OL">
<field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_Delta</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION"></field>
<statement name="STATEMENT">
<block type="controls_if" id="GF#NDwTx-D#[M!]^i7Z@">
<mutation elseif="6" else="1"></mutation>
<value name="IF0">
<block type="logic_operation" id="Cm5b?Zzw2~X6|nX|fZ0r">
<field name="OP">AND</field>
<value name="A">
<block type="logic_operation" id="@!oxczL#I[t:#R~,s]ZB">
<field name="OP">AND</field>
<value name="A">
<block type="logic_compare" id="y[cgr+W}SV%#w ]lG5t$$">
<field name="OP">GT</field>
<value name="A">
<block type="get_value" id="eX17.f@SAX=HAM]NJWqf">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.239.SoC_(Shunt)</field>
</block>
</value>
<value name="B">
<block type="math_number" id="IPI7RHvJe$-lfAbSNvXh">
<field name="NUM">75</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="time_compare_ex" id="?N8Dl%qiSXcuEq?)N~[X">
<mutation xmlns="XHTML namespace " end_time="false" actual_time="true"></mutation>
<field name="USE_ACTUAL_TIME">TRUE</field>
<field name="OPTION"><</field>
<value name="START_TIME">
<block type="time_astro" id="{5LgXIqQW57W~
eX][/">
<field name="TYPE">solarNoon</field>
<field name="OFFSET">60</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id="+#,/{M_4cD/mD|u-H_7D">
<field name="OP">GT</field>
<value name="A">
<block type="get_value" id="Vdt7T$L;3Z%(u*[)zmAk">
<field name="ATTR">val</field>
<field name="OID">pvforecast.0.plants.west.energy.today</field>
</block>
</value>
<value name="B">
<block type="math_number" id="=@)8Bp:^,_M2w+g$E;8"> <field name="NUM">25000</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id=";1-JiJk|pAK}?v}8q/xs"> <field name="COMMENT">Laderegelung@PV-Prognose</field> <next> <block type="control" id="*bP1O69/aJ)6~9msWyj5"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.100.MaxChargePercentage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="Zz.Y2Yy:m7VI^Zlw=zYy"> <field name="NUM">2</field> </block> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_compare" id="yxFYxLr#5$?~SlT4;J??"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="T-lifdlP;3SEywBHpP7M"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_Delta</field> </block> </value> <value name="B"> <block type="math_number" id="b(j/
{@9nVAC-upvHC5 .">
<field name="NUM">0.1</field>
</block>
</value>
</block>
</value>
<statement name="DO1">
<block type="comment" id=")-uz)h)b]?+Qjv{sg="> <field name="COMMENT">Laderegelung@Zellen-DELTA</field> <next> <block type="control" id="uhS9%19S=NSAj=)Q)D8,"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.100.MaxChargePercentage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="Sgk#?BJuz{7%OL{d@EqX"> <field name="NUM">4</field> </block> </value> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_compare" id="b@;Ah;ibcSzxzO+B([JJ"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="Ful%wE}SEnKu%iGgK*Ox"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_Delta</field> </block> </value> <value name="B"> <block type="math_number" id=")X9I!-o]^6v?88??jI[R"> <field name="NUM">0.08</field> </block> </value> </block> </value> <statement name="DO2"> <block type="control" id="*eSeS3:qHse_XtQ]+$dd"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.100.MaxChargePercentage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id=":|u~.{4aI{7gNK!U;6O}"> <field name="NUM">10</field> </block> </value> </block> </statement> <value name="IF3"> <block type="logic_compare" id="7FV6;A9#OqdR]z!Y{ru#"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="^sgH=a_:T:[rNLqfIKxj"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_Delta</field> </block> </value> <value name="B"> <block type="math_number" id=")1vw^4WL]if^@pTCeV2M"> <field name="NUM">0.06</field> </block> </value> </block> </value> <statement name="DO3"> <block type="control" id="d,fR_]SyaE!ly5^P]i{p"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.100.MaxChargePercentage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="S!]h)MHL,8-?5(s$$/!%"> <field name="NUM">30</field> </block> </value> </block> </statement> <value name="IF4"> <block type="logic_operation" id="YCkEqpdN7zf,Pel4v-Ek"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="SVzrf|Bp9Y@0Bs?k;/*a"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="*|F#yAG
]Hn9[!UuA0rZ">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.239.SoC_(Shunt)</field>
</block>
</value>
<value name="B">
<block type="math_number" id="~T3$z-aWg?:0j{CWH;{s">
<field name="NUM">75</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_operation" id="dr%osFT_6/FU8|qfE:.:">
<field name="OP">AND</field>
<value name="A">
<block type="logic_compare" id="6R6r~v,%;Wjsy?yiUgVEX">
<field name="OP">GT</field>
<value name="A">
<block type="get_value" id="(jA6HuYbYIoPwaNp}{bM">
<field name="ATTR">val</field>
<field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_Delta</field>
</block>
</value>
<value name="B">
<block type="math_number" id="[R!wmvp)HrdMo31#[Z:C">
<field name="NUM">0.03</field>
</block>
</value>
</block>
</value>
<statement name="DO6">
<block type="control" id="l/d6KKW;_Kl$6jvYgBQo">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">modbus.0.holdingRegisters.100.MaxChargePercentage</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_number" id="=1N##5tAJ ;lUs5](FZc]">
<field name="NUM">65</field>
</block>
</value>
</block>
</statement>
<statement name="ELSE">
<block type="control" id="rEO-8FmZ|vnH!Z~!(WaW">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">modbus.0.holdingRegisters.100.MaxChargePercentage</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_number" id="y:42T~pv%XrYj$XU)kj">
<field name="NUM">100</field>
</block>
</value>
</block>
</statement>
</block>
</statement>
<next>
<block type="comment" id="9TWG|/E07%9).2PqqR ~">
<field name="COMMENT">Tief/Hoch-Abschaltung Zelle</field>
<next>
<block type="on" id="lz8S[jf2|{HL$-h#NMnl">
<field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_lowest</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION"></field>
<statement name="STATEMENT">
<block type="controls_if" id="B/KJOT[Bu7YCL8XTB)Y1">
<mutation elseif="3"></mutation>
<value name="IF0">
<block type="logic_compare" id="9{F6T/;CwLCp{IWi7#r0">
<field name="OP">LT</field>
<value name="A">
<block type="get_value" id="l-H^b/LRP=%Op]!PbJm"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_lowest</field> </block> </value> <value name="B"> <block type="math_number" id="=86/FCzD%6~uG2J4%7u$"> <field name="NUM">3.05</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="
4Q=.l@}S9m9zJ!mF~kv">
<field name="COMMENT">Tief-Abschaltung Zelle</field>
<next>
<block type="control" id="Q@W#JPNUo$nHcJZtK=@">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">modbus.0.holdingRegisters.236.switch (MultiPlus)</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_number" id="{lQ1kCHz6^VhR7bpInms">
<field name="NUM">1</field>
</block>
</value>
<next>
<block type="control" id="r(Y6RBP|3nJEpu{BO8y;">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">0_userdata.0.AlleBatterien.AkkuSchutzZelle-tief_ON/OFF</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="959bsDK;nptRKWo;k@KX">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</statement>
<value name="IF1">
<block type="logic_operation" id=":Pe0O#w~ZuPW2}BfF0PM" inline="false">
<field name="OP">AND</field>
<value name="A">
<block type="get_value" id="-kdcj.cY+%H9%+:!y+i5">
<field name="ATTR">val</field>
<field name="OID">0_userdata.0.AlleBatterien.AkkuSchutzZelle-tief_ON/OFF</field>
</block>
</value>
<value name="B">
<block type="logic_operation" id="(kqqi[]ve/:J1 ~gSH?" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="KGA{9R-VgAVV(X~@_pm5"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="=A8.m!2clpMj}wieX;V:"> <field name="ATTR">val</field> <field name="OID">modbus.0.holdingRegisters.236.switch_(MultiPlus)</field> </block> </value> <value name="B"> <block type="math_number" id="ld(@=6@Ti6EMj1nWLmgK"> <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="~[zD*c(i)-AP}D!).uTu"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="2_$q#x+HC3z0HT7
HJ2p">
<field name="ATTR">val</field>
<field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_lowest</field>
</block>
</value>
<value name="B">
<block type="math_number" id="LcPg9}cXMawvN/)B)mc~">
<field name="NUM">3.15</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="DO1">
<block type="control" id="?rA(F-D^N)6S=x/Z]tl">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">modbus.0.holdingRegisters.236.switch (MultiPlus)</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_number" id="jCwquDYVf.I!$%R$PyOq">
<field name="NUM">3</field>
</block>
</value>
<next>
<block type="control" id="3(g;kZMu?eE=fVSN.l0o">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">0_userdata.0.AlleBatterien.AkkuSchutzZelle-tief_ON/OFF</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="TU=?}ZRZqZut7Oj4[qgL">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
<value name="IF2">
<block type="logic_compare" id="la%I+P:Of~f.hD@A0xC~">
<field name="OP">GT</field>
<value name="A">
<block type="get_value" id="4-v]zYAmAm?Tww.Ejyc">
<field name="ATTR">val</field>
<field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_highest</field>
</block>
</value>
<value name="B">
<block type="math_number" id="l~V$JoR3qK]C2UJhsGD"> <field name="NUM">3.64</field> </block> </value> </block> </value> <statement name="DO2"> <block type="comment" id="bqMY:2r}@TzDkE*ePQz]"> <field name="COMMENT">Hoch-Abschaltung Zelle</field> <next> <block type="control" id=")W-fu|K]Z|%seOMP%b$D"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.236.switch_(MultiPlus)</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id=")@sAxAu2!~u0#9n}BCPj"> <field name="NUM">2</field> </block> </value> <next> <block type="control" id="C4w2x8i9o}K77V.y(;;*"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.AlleBatterien.AkkuSchutzZelle-hoch_ON/OFF</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="Ghq:?iY=fd,@;%PY*m3M"> <field name="BOOL">TRUE</field> </block> </value> </block> </next> </block> </next> </block> </statement> <value name="IF3"> <block type="logic_operation" id="kH8K(,7*3g7KmoG?w;!W" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="get_value" id="5{!je#QIP.Xm2)$*OC!l"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AlleBatterien.AkkuSchutzZelle-hoch_ON/OFF</field> </block> </value> <value name="B"> <block type="logic_operation" id="
epe8x)3N/(g9xT5Ap|-" inline="false">
<field name="OP">AND</field>
<value name="A">
<block type="logic_compare" id="X7}OnQ0%9y8m=rJ6ZfL]">
<field name="OP">EQ</field>
<value name="A">
<block type="get_value" id="e,qzeE_kr}lRQB:ti6mg">
<field name="ATTR">val</field>
<field name="OID">modbus.0.holdingRegisters.236.switch_(MultiPlus)</field>
</block>
</value>
<value name="B">
<block type="math_number" id="bWtFmi{[f:H3Tu-de3Zw">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id="BC{9sjgXvntI]@G6Jz M"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="+]4GYocTx{Zf!/loJxG@"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AlleBatterien.Zelle_Spannung_highest</field> </block> </value> <value name="B"> <block type="math_number" id=")-CzqY^=LCAvWG3Da%rn"> <field name="NUM">3.55</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO3"> <block type="control" id="[r.i!=5KhuR,C0X{F,5b"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.236.switch_(MultiPlus)</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="%41!ub]=SrzM-=3D#51w"> <field name="NUM">3</field> </block> </value> <next> <block type="control" id="_}LDAA;D}E0/iTclnZj
">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">0_userdata.0.AlleBatterien.AkkuSchutzZelle-hoch_ON/OFF</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="SYBxp62GwoYpT;=SqiQQ">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="comment" id="n hcBHNbn?0z[:(}Rji[">
<field name="COMMENT">Leistungsbeschränkung <40%</field>
<next>
<block type="on" id="{FgOO1eEOsN(8[00j?fJ">
<field name="OID">modbus.0.inputRegisters.239.SoC_(Shunt)</field>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<statement name="STATEMENT">
<block type="controls_if" id="Ohqj{vf3g?i;qC@tOz8z">
<mutation else="1"></mutation>
<value name="IF0">
<block type="logic_compare" id="Y,)]vu4sPIAsB_zM_:K1">
<field name="OP">LT</field>
<value name="A">
<block type="get_value" id="!rab5(PS+iIJ1lnQ{/s/">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.239.SoC_(Shunt)</field>
</block>
</value>
<value name="B">
<block type="math_number" id="2dmf.RX{@wz73=ojH-0E">
<field name="NUM">40</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="control" id="!hWwNYmF~cZrUKyGE$(9">
<mutation xmlns="XHTML namespace " delay_input="false"></mutation>
<field name="OID">modbus.0.holdingRegisters.100.MaxInverterPower</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_number" id="P::OWqj4Tu72B9h{M]9S">
<field name="NUM">2000</field>
</block>
</value>
</block>
</statement>
<statement name="ELSE">
<block type="control" id="x/QJ=iVM::{w]7E0qi+"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.100.MaxInverterPower</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="+2sx3|Ul,!_3VnM$LfYP"> <field name="NUM">10000</field> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="schedule" id=")4sI67?exq8X*-U)1umK" disabled="true" x="138" y="13"> <field name="SCHEDULE">*/10 * * * * *</field> <statement name="STATEMENT"> <block type="debug" id="mY2A:zj+r,OvJ{^jVi+H"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="uoC/DMgt#M_onmcf}qzF"> <field name="TEXT">test</field> </shadow> <block type="time_astro" id="4QB#B
U}YzbfSp1{OX@X">
<field name="TYPE">solarNoon</field>
<field name="OFFSET">60</field>
</block>
</value>
</block>
</statement>
</block>
</xml>
und ESS#1 ist das hier:
die untere Grenze ist ebenfalls per ModBus - Adresse 2901 änderbar
Ok, ich probiere das heute Abend mal aus ob die untere Grenze dann trotzdem zieht.
Du steuerst aber ja nur die MaxInverterPower - regeln tut er sich immer noch nach dem Nullpunkt am Netzübergang? Ist das schon ESS#3? Das ist doch Mode 2, oder?
Denn Mode 3 zeigt bei mir im ESS Menü eine ganz andere Anzeige - siehe Bild.
Da sind die ganzen Regeln meiner Meinung nach ausser Kraft gesetzt. Und Mode 1/2 kann ich nicht fahren, da ich die Nullpunktregelung nicht nutzen kann.
ModBus wäre ne Option, aber ich wollte halt die Regelung nicht noch mit mehr abhängigen Komponenten überladen und habe es daher auf dem GX gelöst mit NodeRed. Passt auch irgendwie, da ich meinen IOBroker grade (seit 2 Jahren) durch Homeassistant ablöse und daher eh alles umstelle auf NodeRed. Aber ob NodeRed oder Blockly / ModBus, das ändert aber an den Modes gar nichts.
Sind aber noch so 15-20 Automatisierungen umzustellen....
helge
(Helge)
13. April 2023 um 11:21
25
@shadowblues Mode3 = Interpretationssache ESS mode 2 and 3 [Victron Energy]
"1.3 - Mode 3 _ Customer self implements their control loop and grid measurements,...."
sobald du dem Gerät in der Leistung beeinflusst ist es Mode3 ;)
und nachdem ich nun in der Registerliste nachgesehen habe handelt es sich bei mir um ein Mode2 Register. OK mein fail, oder ein anderer Weg um Mode3 zu erreichen.
@helge Ich hatte auch gehofft mit Mode 2 klarzukommen, aber es macht eben die 0-Punkt Regelung und die bringt mir nichts
Wie gesagt ist es eine Überlegung in der Nacht auf Mode 1 umzuschalten wenn er da weniger Strom verbraucht. Wenn ich den unteren Wert dann noch per ModBus / NodeRed setzen kann, dann sollte das gehen.