NEWS
[Gelöst]Batteriespeichersimulation mit AMIS-Daten in Blockly
-
Ich möchte mir mit meinen Daten in den Objekten (Bezug- und Einspeisung aus der PV-Anlage) aus dem AMIS-Reader eine Batteriespeichersimulation in Blockly bauen.
Vom Amis-Reader bekomme die Werte in W für Bezug und Einspeisung in die Objekte im iobroker.Leider scheitere ich schon wieder an der Syntax.
Ich möchte bei der markierten Stelle noch weitere mathematische Bedingungen einfügen (/3600/2) wegen Umrechnung in Wattstunden.<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="5k}(y]MVDRUNbOxECkJt">summe</variable> <variable id="xmCWmTz.,g].L#6J$R5]">SPEICHER_STAND_Wh</variable> <variable id="Wo0,Fsx7zJsSP8w;R?od">BELADEN_W</variable> <variable id="5SI=f+T/eAx5%Kk.G|O2">SUMME_170_270_-</variable> <variable id="sI8IWPIqH}Om%}nzMwuR">ENTLADEN_W</variable> <variable id="$PnI*fiWd`pix1j3,%Ml">SUMME_170_270_+</variable> </variables> <block type="schedule" id="vJoi71#?.4ryRo!ZXykl" x="-213" y="-287"> <field name="SCHEDULE">*/2 * * * * *</field> <statement name="STATEMENT"> <block type="comment" id="_nHgFmoO)(JIadj*cbBN"> <field name="COMMENT">BELADUNG: Ermittlung Speicherstand bei ÜBERSCHUSS in wh</field> <next> <block type="variables_set" id="04CEwCi/(d1*/(^%z-|X"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> <value name="VALUE"> <block type="math_arithmetic" id="O)XOn2w+2MEYKh+_i^T6" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="Vv3iW}5G,a%,hF?iO4dq"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="vl5,Q51m)+q[q.ub$il%"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text" id="#tZri{2(T-e,x}.^b;-u"> <field name="TEXT"></field> </shadow> <block type="math_arithmetic" id="_l#{uIO(J9sWc!o#-mxI"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="3Svdo^)Jk}Jm!eOqWKdQ"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="V.(u/S#kt/I.Kiw$0Yfn"> <field name="VAR" id="Wo0,Fsx7zJsSP8w;R?od">BELADEN_W</field> </block> </value> <value name="B"> <shadow type="math_number" id=";Ogedm0(tx|PtTSfkdIH"> <field name="NUM">0.9</field> </shadow> <block type="math_arithmetic" id="R,ifg35YU$hY.[|WGRFa"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="*OH7U!^U,/*5G7S@k.sP"> <field name="NUM">3600</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="3hw(bnYbD-Vyn0D(V-[#"> <field name="NUM">2</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="aNx(u#^_(su!4Pyla9C!"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="b/9EO~vR@]lB4mDr{-RY"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id=",r@cTpM~2CRZSuK[Qrv2"> <field name="VAR" id="xmCWmTz.,g].L#6J$R5]">SPEICHER_STAND_Wh</field> </block> </value> </block> </value> </block> </value> <next> <block type="control_ex" id="#=3h2VtUt;vu.8~+r9!j" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="F~1Rny|KK~Y(7DJ-[{To"> <field name="VAR" id="xmCWmTz.,g].L#6J$R5]">SPEICHER_STAND_Wh</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="GuQZBtmk(](Z9B;5-NWH"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="P2Qr2GmG)Ym$oO+F%uEE"> <field name="NUM">0</field> </shadow> </value> <next> <block type="controls_if" id="^q|z=F:uxTyEVL5y`[+,"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="~G)n{+Q;bTJS//WP#/9Z"> <field name="OP">GT</field> <value name="A"> <block type="math_arithmetic" id="#:@K?^O09[?Ln;#%~@=+"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="w_k*IoH).RM}wG(Tq*6$"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="Oiz*pG9K`I4/{.wRyh%Y"> <field name="VAR" id="5SI=f+T/eAx5%Kk.G|O2">SUMME_170_270_-</field> </block> </value> <value name="B"> <shadow type="math_number" id="!DDh73rU-g]Y0aM0_0pt"> <field name="NUM">0.9</field> </shadow> <block type="math_arithmetic" id="A8kBBXENTeHpxU5uy2H/"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="dry3vTTF+ad92mz5!D|@"> <field name="NUM">-0.9</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="-Ca)9Vb1iClQ@ZTq3o8_"> <field name="NUM">20</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="I=,`AIZy*[JCqlb=6-*:"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="iKdyFBz%~f`BJ~FThCUS"> <field name="COMMENT">Überschuss wird mit Vorzeichendrehung u. Faktor-0,9 abzügl. Toleranzschwelle -20W dem Speicherstand hinzuaddiert</field> <next> <block type="control_ex" id="I.@$fB}o+?RTNxYEG?|?" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="-;ut0DMlP_,TP-nes/*}"> <field name="oid">0_userdata.0.BATTERIE_SPEICHER.BELADEN</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="N(,gBpGs8z6z;HV|~Nbq"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="S[bUv8A:C*@4r0Y($@Dy"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id=":f9.$SB!-hr`aJ#es|Rb" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="#F5m4)-*3DAh{Xc:$1gT"> <field name="VAR" id="xmCWmTz.,g].L#6J$R5]">SPEICHER_STAND_Wh</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="Ux-%d{xo1.H*f~lPLV%!"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="C1X1S~iLuS$l}[0|Cboz"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="comment" id="jQzSdH]}^^:~TpN8{^+?"> <field name="COMMENT">Entladung</field> <next> <block type="control_ex" id="BBoJPf0#NJ+he,MjNg!o" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="amp,PHX?6U#j~!6{c|g)"> <field name="oid">0_userdata.0.BATTERIE_SPEICHER.ENTLADEN</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id=".F6Fxvfb.aBj!vA;GHqW"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="{7UT-oD0CedP`@!~2v*I"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="=gUsvc3O^Ls39Z;tn@PE"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="comment" id="DlrrZBHbC[GReJA`Tfe2"> <field name="COMMENT">ENTLADUNG: Ermittlung Speicherstand bei BEZUG in Wh</field> <next> <block type="variables_set" id="9O_AXtoM#GtY;}ln^Yto"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> <value name="VALUE"> <block type="math_arithmetic" id="eA8|mO;y(Ag,)YoXcpXH" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="%x1z6vTZp+E?Ifg+47Ki"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="math_arithmetic" id="Y,H?.H2Ppzw/rau2~;|-"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="C6C)Nf/a@Yp*=%8atEt`"> <field name="VAR" id="sI8IWPIqH}Om%}nzMwuR">ENTLADEN_W</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">0.9</field> </shadow> <block type="math_arithmetic" id="Yq$brfXZ+*n,1:m2L,MA"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="XQ))*52CIR75:_!SvQyx"> <field name="NUM">3600</field> </shadow> </value> <value name="B"> <shadow type="math_number" id=".aSM9`j)JS4.Tv^pw=zM"> <field name="NUM">-2</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="FE0Vj-#ZOGHGgcAVgr7D"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="w]:]_S,g;3?#)IXZ?+OC"> <field name="VAR" id="xmCWmTz.,g].L#6J$R5]">SPEICHER_STAND_Wh</field> </block> </value> </block> </value> </block> </value> <next> <block type="control_ex" id="KgRR!9!/O/W11nt)W,]g" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="iloNUnL$b-O]*x!d|?[#"> <field name="VAR" id="xmCWmTz.,g].L#6J$R5]">SPEICHER_STAND_Wh</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="qxN+tet055S:1nAnFevh"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="tZ4=|!Aw#eX%WOd`#70a"> <field name="NUM">0</field> </shadow> </value> <next> <block type="controls_if" id="?flG}tz6nJdq8F7pH#Bi"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id=")p[pwr|21UkuxlpiZs{M"> <field name="OP">LT</field> <value name="A"> <block type="math_arithmetic" id="LfNB,5vc46.|KeX^pBIO"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="U9/BNk3yt%WqD8).c#3!"> <field name="VAR" id="$PnI*fiWd`pix1j3,%Ml">SUMME_170_270_+</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">0.9</field> </shadow> <block type="math_arithmetic" id="WJ)%PeRRCn}:S263!m~q"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="B3PhA4JuOCE^Irv_:n(F"> <field name="NUM">-0.8</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="~K|6CwBe]4}+GsvOkB3z"> <field name="NUM">20</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="M%dlyhSO-A=k*XFzgU/o"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="I1]Qe$F`4DECm@iV-ALe"> <field name="COMMENT">Bezug wird mit Vorzeichendrehung u. Faktor-0,8 abzügl. Toleranzschwelle -20W vom Speicherstand abgezogen</field> <next> <block type="control_ex" id="/*kOBFc`1rwqI#?u@~rl" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="z/:JDj^82fCp|p^`F.sb"> <field name="oid">0_userdata.0.BATTERIE_SPEICHER.ENTLADEN</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="Ic:!7H_kRujeu!fuZ^9i"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="CWPc_Y:cmPpa;0fe0U,u"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="(QY!sia.8=iPYr~/IU*H" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="QHL~0h]x1L~$AP.jVpmP"> <field name="VAR" id="xmCWmTz.,g].L#6J$R5]">SPEICHER_STAND_Wh</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="aSXGK(,e(f)]:Ll6BAd7"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="qdeGS*i+A`abv!x%mO6q"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="comment" id="6opYM{o/_VO5xv3wDsTe"> <field name="COMMENT">Beladung</field> <next> <block type="control_ex" id=",P1MnIG7[bl`6p`fN3Ta" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRsEL1LI2~Uv_y8fE]S#"> <field name="oid">0_userdata.0.BATTERIE_SPEICHER.BELADEN</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="IG+UD+s3s^t-$DmH0B6L"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="Q4/z-}/*3b,({4H5g50n"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </xml>
Objekt: Summe_170_270 in W Bezug(+) oder Einspeisung(-), Werte werden alle 2 Sekunden geliefert.
0,90 ist der Ladewirkungsgrad-Faktor,
0,80 ist der Entladewirkungsgrad-Faktor,
20 W ist die Toleranzschwelle für Be- und Entladung.BELADEN SPEICHER: Wert Überschuss wird negativ geliefert !
Wenn das (((Objekt Summe_170_270 x -0,9) -20W)/3600/2)>0
dann addiere diesen Wert zum Objekt Summe_Beladen_Wh
und addiere diesen Wert zum Objekt Speicher_Stand_Wh.ENTLADEN SPEICHER: Wert Bezug aus dem Netz wird positiv geliefert !
Wenn das (((Objekt Summe_170_270x0,9) -20W)/3600/2)>0
dann addiere diesen Wert zum Objekt Summe_Entladen_Wh
und subtrahierte diesen Wert vom Objekt Speicher_Stand_Wh.Vielen Dank im Voraus für die Hilfe.
-
@goetschhofer
Ich bin heute noch länger unterwegs und nicht am Rechner. (Dein Blockly, welches die DP erstellt, habe ich glaube ich auch nicht mehr...schon gelöscht, oder ist das mit in diesem Export dabei ?) -
@dslraser said in Batteriespeichersimulation mit AMIS-Daten in Blockly:
@goetschhofer
Ich bin heute noch länger unterwegs und nicht am Rechner. (Dein Blockly, welches die DP erstellt, habe ich glaube ich auch nicht mehr...schon gelöscht, oder ist das mit in diesem Export dabei ?)Kein Problem, es eilt nicht. Wenn es dir zeitlich mal reinpasst, würde ich mich sehr freuen, wenn du mir hier wieder unter die Arme greifen könntest.
Da ich Anfänger bin, habe ich mir die 5 Datenpunkte unter der Rubrik Batteriespeichersimulation händisch in den Objekten angelegt.
Ich habe versucht mich ganz auf die Lösung des Algorithmus im Blockly zu konzentrieren.Das Blockly mit der automatischen Anlage der Datenpunkte hast du mir sogar großzügigerweise am 30.8.21-19h13 in den Thread hochgeladen, aber da bin ich ich noch schwer überfordert.
https://forum.iobroker.net/topic/33161/mit-blockly-zwei-werte-addieren-und-neu-in-db-schreiben/88?_=1630325878910Vielen Dank im Voraus.
-
@goetschhofer sagte in Batteriespeichersimulation mit AMIS-Daten in Blockly:
Summe_170_270
Wo kommt das her ? Bzw. ist das ein Datenpunkt oder soll das einer sein ? (das kann ich in Deinem Blockly nicht sehen ? In dem Blockly ist es nur eine Variable)
Wenn das der Datenpunkt aus Deinen Screenshots ist, dann müßte das wahrscheinlich so, aber dafür muß das definiert sein.
Und meinst Du Deine Berechnung so ?
Das ist auch nur eine Variable ? (oder soll das auch auf den Datenpunkt zeigen ? Wo ist der Datenpunkt in Deinem Blockly definiert ?)
Hier das Gleiche ?
role: number ? (gibt es nicht und wird wahrscheinlich angemeckert)
-
@dslraser said in Batteriespeichersimulation mit AMIS-Daten in Blockly:
@goetschhofer sagte in Batteriespeichersimulation mit AMIS-Daten in Blockly:
Summe_170_270
Wo kommt das her ? Bzw. ist das ein Datenpunkt oder soll das einer sein ? (das kann ich in Deinem Blockly nicht sehen ? In dem Blockly ist es nur eine Variable)
Wenn das der Datenpunkt aus Deinen Screenshots ist, dann müßte das wahrscheinlich so, aber dafür muß das definiert sein.
Und meinst Du Deine Berechnung so ?
Das ist auch nur eine Variable ? (oder soll das auch auf den Datenpunkt zeigen ? Wo ist der Datenpunkt in Deinem Blockly definiert ?)
Hier das Gleiche ?
Ich befürchte ich habe in meinem 1. Entwurf den Begriff variable und Datenpunkt vermischt.
Daher habe ich es jetzt nochmals ein wenig angepasst, die Datenpunkte verknüpft und etwas mehr strukturiert.
Zum Test lasse ich mir über Debug die Werte anzeigen.
Den Be- und Entlade-Faktor habe ich mal zwecks Vereinfachung auf 1 gesetzt, den Minimalwert-Abzug ebenso auf Null.
Ich denke die Definitionen müssten jetzt korrekt sein ? -
-
Hier habe ich Das Blockly, welches die Datenpunkte selbst erstellt, um Deine Datenpunkte erweitert. Wenn Du dieses Blockly benutzt und dann da Deine Berechnung ausführst, da wären dann auch die Variablen/Datenpunkte definiert.
-
@dslraser said in Batteriespeichersimulation mit AMIS-Daten in Blockly:
Wo kommt der her ?
Ja, den sollte er sich eigentlich errechnen.
z. B. Leistung in W 1000/3600/2 Sek. = 0,138Wh, diese sollte er auch zum Objekt Speicher_Stand_Wh als Entladung_Wh abziehen oder falls es ein PV-Überschuss ist als Beladung_Wh hinzuaddieren.
Der Speicherstand ist jetzt natürlich negativ, da ich den Speicher rechnerisch noch nicht aufgeladen habe.
-
Vielen Dank für das Blockly, dies werde ich morgen früh gleich mal importieren und testen.
-
@goetschhofer sagte in Batteriespeichersimulation mit AMIS-Daten in Blockly:
Vielen Dank für das Blockly, dies werde ich morgen früh gleich mal importieren und testen.
Dann solltest Du eventuell mal Deine vorhandenen Datenpunkte löschen und durch das Blockly neu erstellen lassen, dann sollten auch die role stimmen. Eventuell in eine DB geschriebene Werte wären dann aber weg.
-
@goetschhofer sagte in Batteriespeichersimulation mit AMIS-Daten in Blockly:
Ja, den sollte er sich eigentlich errechnen.
Da beziehst Du Dich aber auf den Wert von der Objekt id (dann muss die Variable aber auch vorher mit der Objekt id verknüpft sein)
-
@dslraser said in Batteriespeichersimulation mit AMIS-Daten in Blockly:
@goetschhofer sagte in Batteriespeichersimulation mit AMIS-Daten in Blockly:
Vielen Dank für das Blockly, dies werde ich morgen früh gleich mal importieren und testen.
Dann solltest Du eventuell mal Deine vorhandenen Datenpunkte löschen und durch das Blockly neu erstellen lassen, dann sollten auch die role stimmen. Eventuell in eine DB geschriebene Werte wären dann aber weg.
Guten Morgen,
hätte gleich mal eine Frage zum Import von Blocklys in JS.
Wenn ich dein blockly markiere (Strg-c) und versuche dies bei import mit Strg-v einzufügen, bekomme ich eine Fehlermeldung.
Wenn ich den 2. Weg wähle, das blockly in eine Textdatei einfüge, abspeichere und von dieser Textdatei mit Strg-c, Strg-v im Import einfüge funktioniert dies.
Was mache ich beim 1. Weg falsch ?Meine Datenpunkte würde ich auf jeden Fall löschen.
Die DP vom AMIS-Zähler habe ich ja schon, warum muss ich diese ein 2. mal anlegen ?Die automatische Anlage der neuen DP ist mir klar.
Für die Simulation brauche ich ja nur folgende 2 DP:
Den 1. DP Summe_17ß_270+ (Bezug aus dem Netz) entlade ich den Speicher und mit dem 2. DP Summe_170_270_- (Überschuss aus PV) belade ich den Speicher.Ich schreibe aktuell noch keine Werte in die InfluxDB bei meiner Simu.
Die bereits existierenden AMIS-DP möchte ich keinesfalls angreifen, denn dies funktioniert mittlerweise zu 100 %.Es kommen ja nur die 6 DP für die Simu hinzu.
-
hätte gleich mal eine Frage zum Import von Blocklys in JS.
Wenn ich dein blockly markiere (Strg-c) und versuche dies bei import mit Strg-v einzufügen, bekomme ich eine Fehlermeldung.
Wenn ich den 2. Weg wähle, das blockly in eine Textdatei einfüge, abspeichere und von dieser Textdatei mit Strg-c, Strg-v im Import einfüge funktioniert dies.
Was mache ich beim 1. Weg falsch ?Keine Ahnung, vielleicht liegt es an Deinem verwendeten Browser ?
Meine Datenpunkte würde ich auf jeden Fall löschen.
Die DP vom AMIS-Zähler habe ich ja schon, warum muss ich diese ein 2. mal anlegen ?
Dann korrigiere die role der Datenpunkte, die sind zum Teil falsch. (role number gibt es nicht)
Die bereits existierenden AMIS-DP möchte ich keinesfalls angreifen, denn dies funktioniert mittlerweise zu 100 %.
Ist das alles in einem Blockly, oder machst Du das in verschiedenen Blocklys ? Welche Blocklys verwendest Du jetzt ? Ich kann Dir sonst nicht ganz folgen. Und welches Problem gibt es denn noch ?
-
@dslraser: Ist das alles in einem Blockly, oder machst Du das in verschiedenen Blocklys ? Welche Blocklys verwendest Du jetzt ? Ich kann Dir sonst nicht ganz folgen. Und welches Problem gibt es denn noch ?
Sorry, dass ich mich jetzt erst melde, aber ich habe mal versucht die Logik zu strukturieren und zu dokumentieren.
Ja, ich weiß dies ist sehr verwirrend.Danke für den Hinweis zu den Fehlern bei der role der Datenpunkte, habe ich bereits korrigiert.
Mit diesem Blockly bereite ich mir aktuell folgende 2 Datenpunkte auf, welche ich aktuell für Grafana benötige und auch für die BAT_SIMU benötigen werde. Dieses blockly möchte ich auch nicht angreifen, da es mit der BAT_SIMU nichts zu tun hat, ich knüpfe hier nur an 2 Werte an.
SUMME_170_270_+ = BEZUG aus dem NETZ
SUMME_170_270_- = EINSPEISUNG in das NETZ
Habe mal versucht die Logik für die BAT_SIMU in normaler Sprache (Excel-Logik) zu definieren:
Wenn es in der Umsetzung einen einfacheren Weg gibt, bitte nur zu ändern.
Als Ergebnis möchte ich eben folgende 7 Datenpunkte befüllen:
Danke im Voraus.
-
@goetschhofer
ich kann Deinen Blockly Export nicht importieren ? (Fehler) -
@dslraser said in Batteriespeichersimulation mit AMIS-Daten in Blockly:
@goetschhofer
ich kann Deinen Blockly Export nicht importieren ? (Fehler)Habe es jetzt nochmals exportiert, in eine Textdatei eingefügt und von dort wieder herauskopiert u. eingefügt.
Hoffe es passt, habe es jetzt als .txt-Datei angehängt.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="5k}(y]MVDRUNbOxECkJt">summe</variable> </variables> <block type="schedule" id="**{}]7ei59`(N*|ou37v" x="-212" y="-1362"> <field name="SCHEDULE">*/2 * * * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="04CEwCi/(d1*/(^%z-|X"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> <value name="VALUE"> <block type="math_arithmetic" id="O)XOn2w+2MEYKh+_i^T6" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="Vv3iW}5G,a%,hF?iO4dq"> <field name="NUM">1</field> </shadow> <block type="get_value" id="1MV.[J[?Vxe;s2g@VT9`"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AMIS.170</field> </block> </value> <value name="B"> <shadow type="math_number" id="aNx(u#^_(su!4Pyla9C!"> <field name="NUM">1</field> </shadow> <block type="get_value" id="0W[V_Lxj$oW6%y|FyPon"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.AMIS.270</field> </block> </value> </block> </value> <next> <block type="update" id=",]R8%D@+}|rm/}OUVPer"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.AMIS.SUMME_170_270</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="QWFsuL1-Xs)gB#NnSAC?"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <next> <block type="comment" id="4DYxTs/C!iUnSa6-`k/_"> <field name="COMMENT">Positiver Saldo = BEZUG: 1.7.0 + (-)2.7.0 >0</field> <next> <block type="controls_if" id="8zbXYVm0}s=QnE=v:77["> <value name="IF0"> <block type="logic_compare" id="D*Fx%^xShdM9Pu;L@Ahl"> <field name="OP">GT</field> <value name="A"> <block type="variables_get" id="2u[OL@uB6dK%HS#@]1*j"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="B"> <block type="math_number" id="0o._sWu/g~JgC2Y:2!R)"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="update" id="_e.hWhkcBFf:XJC+_7Tx"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.AMIS.SUMME_170_270_+</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="kUdx$9hAck0M7pw`JM.A"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <next> <block type="update" id="21a.`nyEyg+|qz`#Zq^%"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.AMIS.SUMME_170_270_-</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="uj$;dI3bc6[~|;qY!UaM"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <next> <block type="comment" id="LmYu;egZ=y]/lUN}J%Aq"> <field name="COMMENT">Negativer Saldo = EINSPEIS.: 1.7.0 + (-)2.7.0 <0</field> <next> <block type="controls_if" id=";HAm$Sqa4[({BH4i;D`S"> <value name="IF0"> <block type="logic_compare" id="th+%T3f4K%/3tFBWg(xd"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="?;j-RwSm+Vao(r]}uJyk"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <value name="B"> <block type="math_number" id="Jsx#h?Ttx!vT5GVP{hcU"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="update" id="3ge#`3!wvdBO$8!h)?%p"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.AMIS.SUMME_170_270_-</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="I7Wr/ggQT|l$Avqg~JQt"> <field name="VAR" id="5k}(y]MVDRUNbOxECkJt">summe</field> </block> </value> <next> <block type="update" id="m5xv07hzh^D$h3K|;,5^"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.AMIS.SUMME_170_270_+</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="C7%azoZ@V38KF+6!6sTy"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </xml>
Hätte den Import jetzt auch aus der Text-Datei versucht, bekomme aber eine Fehlermeldung.
Diese bekomme ich öfters.BLOCKLY ERSTELLUNG DP SUMME_170_280_+- 18.9.2021.txtBLOCKLY ERSTELLUNG DP SUMME_170_280_+- 18.9.2021.txt
-
ich kann mich da schwer rein denken, hilf mir mal...
wenn das hier
z.B. in dem DP das hier stünde (-100W)
dann müßte da was rauskommen ?
Das hier ?
-
Im Grunde ist es ganz einfach, wie ein Batteriespeicher funktioniert, ich erkläre dies gerne anhand eines Sparbuches.
Funktioniert genauso wie ein Sparbuch wo es Ein- und Auszahlungen gibt. Zusätzlich kommt noch dazu, dass man für die Einzahlungen- u. Auszahlungen in das und aus dem Sparbuch Spesen verrechnet bekommt. In der Realität Negativzinsen u. Bankspesen.
Die Spesen entsprechen den Be- und Entladeverlusten von ca. je 10 %.Beispiel Beladung:
Das Sparbuch=Speicherstand wird immer in kWh, noch besser in Wh (1 kWh=1.000 Wh) gerechnet, aber mit positiven Werten, da der Saldo des Speichers oder Sparbuchs nie ins minus rutschen kann. Entnehmen kann ich nur das, was ich vorher eingelegt (angespart) habe.Der DP SUMME_170_270_- = EINSPEISUNG in das NETZ liefert aktuell -400 W.
Diesen Leistungswert (Überschuss aus der PV-Anlage) mit -400 W kann ich nur mit 90 % in den Speicher einlegen, da ich Beladeverluste in Höhe von 10 % habe, ergibt -360 W. Bruttoladeleistung in W x 0,9 = Nettoladeleistung in W.
Weiters muss ich diese Netto-Ladeleistung noch vorher in Wh umrechnen, da dieser Leistungswert nur für 2 Sekunden zur Verfügung steht. D. h. 360 W Netto-Lade-Leistung / 3600 Sek. / 2 = entspricht 0,05 Wh Einlage/Beladung in den Speicher für die 2 Sekunden. Ein realer Speicher funktioniert genauso.
In den nächsten 2 Sekunden liefert der DP SUMME_170_270_- z. B. 1000 W Überschuss, da z. B. die Solarstrahlung so stark ansteigt. Berechnung erfolgt gleich wie vorhin mit -400 W. -1000 W x 0,9 = (-900 W x -1) -20 = 890 Netto-Ladeleistung und Umrechnung in Wh, 890/3600/2=0,1236 Wh.Ich multipliziere den Minus-Wert deshalb mit -1, da ich anschließend die positive Zahl leicht zum bestehenden Speicher-Saldo (+) am Speicher (Sparbuch) hinzuaddieren kann.
Der Wert mit -20 (W) soll Kleinladeleistungen bei der Vergleichsfunktion von vornherein unterbinden, gilt auch für die Entladung.Beispiel Entladung: Funktioniert vollkommen gleich, nur mit anderen Vorzeichen.
Der DP SUMME_170_270_+ = BEZUG aus dem NETZ liefert z. B. aktuell + 400 W.
Hier würde ich nicht aus dem Netz beziehen, sondern auf das angesparte Speicherguthaben (Sparbuch) zugreifen, falls vorhanden und hier auch mit Vorzeichendrehung den postiven Wert mit -1 multiplizieren, damit ich diesen Netto-Entnahme-Entladewert als Minuswert zum Speichersaldo hinzuaddieren kann. 5000 Wh Speichersaldo - 10 Wh Entladung = 4.990 Wh Speichersaldo.Folgende Datenpunkte benötige ich auch, damit ich den kumulierten Saldo Be- und Entladung in den Speicher visualisieren kann. Beispiel: Summe Beladungen 1.1.-31.1. = 80.000 Wh, Summe Entladungen: 75.000 Wh.
Hoffe, dass ich dich mit meinen Erläuterungen nicht zu viel verwirrt habe.
Danke
-
Sorry, habe alles wunderbar erläutert, aber anschließend wurde ich vom Internet getrennt.
Hat doch funktioniert. -
Mit diesem Blockly schreibt er mit zumindest mal die Ladeleistung BELADEN_W in den DP.
Aber das war es auch schon.
Nur stimmt das Ergebnis mit (Ladeleistung * -1) -20 W nicht ?
Hier habe ich ein Syntaxproblem.Ich kann die Berechnung auch auf 5 Sek. ändern.