NEWS
Mathe-Genie gesucht (Kurvenberechnung)
-
Moin zusammen, ich bin ja auch an allem interessiert was mir in irgend einer Form die optimale Nutzung meiner PV Anlage und den Eigenverbrauch versüßt.
Ich hatte mit @Gargano zusammen diese PV Ertragsvorschau zusammen gestrickt.
Auch habe ich mir ein Blockly geschrieben, um nicht in die 70% Kappung des EVUs zu laufen.
Allerdings habe ich versucht nachzuvollziehen, welchen Ansatz du, @Homoran mit deinem Diagramm verfolgst? Kannst du mal erklären was du genau damit vor hast.
-
@jb_sullivan sagte in Mathe-Genie gesucht (Kurvenberechnung):
Kannst du mal erklären was du genau damit vor hast.
Ja!
wobei ich jetzt im nachhinein gar nicht mehr so ganz sicher bin, ob das überhaupt notwendig war.Mit den verschiedenen Kurvenmöglichkeiten
errechne ich die mögliche maximale Solarproduktion zur Zeit x
- braun ist das was mir reichen würde - eine einfache quadratische Gleichung
- lediglich die Anpassung des max aufgrund des ändernden Sonnenwinkels im Zenit habe ich noch nicht umgesetzt
- beide grüne Kurven berechnen den theoretischen Ertrag anhand der Einfallswinkel über komplexe Berechnungen
- hellgrün berücksichtigt dabei sogar die diffuse Strahlung
(ganz großen Dank an @paul53)
- hellgrün berücksichtigt dabei sogar die diffuse Strahlung
Anhand dieser Kurve führe ich einen "Wolkenwächter" aus.
Dieser berechnet die Anzahl Über-/Unterschreitungen der zu dem Zeitpunkt möglichen Energie anhand- (mögliche Energie - Grundverbrauch)/2
bei Über-/Unterschreiten des jeweiligen Punktes fügt der Wolkenwächter in der Liste eine 1 ein, ansonsten eine 0 .
nach vorgegebener Zeit wird der jeweils älteste Wert entferntJe nach Wert dieser Zahl startet die Ladung meines Elektroautos - oder eben nicht
Ziel ist es nur mit Überschuss möglichst lange zu laden und nicht andauernd die Ladung zu unterbrechen.hier mal ein Bild (auf die Schnelle gesucht):
Zusätzlich mache ich auf die gleiche Weise noch eine Überprüfung ob überhaupt genug Solarenergie produziert wird.
Wenn der Schwellwert von 2000W überschritten wird eine 1, darunter eine 0 in die Liste.
Daraus errechnet sich der "Sonnenanteil"Hier im Bild ist der Sonnenateil >85% und die rechte Zahl daneben ist die Wolkenwarnung, hier 2 (<5)
Jetzt würde die Ladung beginnen können.In der Kurve sieht man dass im Intervall (damals noch 10 Minuten) nur ein Einbruch vorkam, der den Wert dann um 2 erhöht (Unter- und wieder Überschreitung der Schwelle)
- braun ist das was mir reichen würde - eine einfache quadratische Gleichung
-
Also im Grunde verfolgen wir beide den gleichen Ansatz, nur auf vollkommen unterschiedliche Weise.
Bei mir kommt hinzu, das ich einen Speicher habe und mit dem SOC Wert einen Trigger nutze, ab wann ich die vom Dach kommende Energie lieber als Eigenverbrauch umleite.
Das ist in sofern sehr einfach, denn wenn der Speicher voll ist (oder zu einem definierten %-Wert), wird der erzeugte Strom zu unwirtschaftlichen Konditionen verkauft - das will ich genau so vermeiden wie du.
Da das e-Auto noch in der Warteschlange ist, habe ich mir mal ein paar andere Verbraucher als Last heran gezogen. Des weiteren dienen diese Verbraucher dazu, nicht in die 70% Abregelung des EVU hinein zu laufen.
Das ist aber nicht der Hauptgedanke, denn wenn erstmal das e-Auto da ist, brauche ich mir diesbezüglich wohl keine Gedanken mehr zu machen. Außerdem habe ich mir eine openWB Wallbox bestellt, die ja ebenfalls sehr gut auf PV Überschuß laden optimiert ist.
Mein Problem mit dem Blockly Script, sind die Wolken.
Den Wert, was gerade als Überschuss verkauft wird, hole ich mir vom Discovergy Adapter (Power Delivery). Der Aktualisierungsintervall der Daten läßt sich im Discovergy Adapter einstellen. Somit bekomme ich alle XY Sekunden einen Wert, worauf das Blockly reagiert.
Aktualisiere ich schnell, habe ich an einem wolkigen Tag natürlich ein lustiges Ein und Aus schalten der Verbraucher. Das ist weder gut für die Geräte noch wünschenswert.
Aktualisiere ich zu langsam (z.B. 180 Sek), rausche ich dann doch wieder in den Netzbezug, weil gerade dunkle Wolken durchziehen, aber das Script noch die Freigabe wegen PV-Überschuss anstehen hat.
Also die Krux an der Geschichte ist definitiv die Sinnvolle Wolkenerkennung. Habe es schon über die Helligkeitserkennung von Innogy BWM oder mit den LUX Werten der Xiaomi BWM versucht. Funktioniert aber auch nicht wirklich, weil die BWM nur dann einen Helligkeits / LUX Wert schreiben, wenn sie auch Bewegung erkannt haben. Mit zum Himmel gerichteten Sensoren wird das schwierig.
Hier mal mein Blockly, für den Fall das es dich interessiert.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="iwu_1;PHCBW[(6sePQ9Q">Leistung_Verbraucher_1</variable> <variable id="#3v}HDbdMRBS$0v{!o)h">Speicher</variable> <variable id="f6*O*xo-Qtq,VGU7f|-6">Leistung_Verbraucher_2</variable> <variable id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</variable> <variable id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</variable> <variable id="Qd@~YUEX}4:5(CxoR0XE">Leistung_Verbraucher_3</variable> <variable id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</variable> </variables> <block type="comment" id="N.k$x:jEK%$*r_Zwwx(r" x="-4687" y="-1787"> <field name="COMMENT">Leistung der Verbraucher festlegen</field> <next> <block type="comment" id="G=?w)hM,Bcc=X^a=CB}~"> <field name="COMMENT">e-bike Ladestation 500W</field> <next> <block type="variables_set" id="55T2_jCmM2/Du69hIUin"> <field name="VAR" id="iwu_1;PHCBW[(6sePQ9Q">Leistung_Verbraucher_1</field> <value name="VALUE"> <block type="math_number" id="KX#UMRmtPT`N$^)1m/o4"> <field name="NUM">500</field> </block> </value> <next> <block type="comment" id="K,Q}Z]4js48V-,t}55G`"> <field name="COMMENT">Raumentfeuchter 440W</field> <next> <block type="variables_set" id="eC{wc[7:B]Q?{m~SVWK."> <field name="VAR" id="f6*O*xo-Qtq,VGU7f|-6">Leistung_Verbraucher_2</field> <value name="VALUE"> <block type="math_number" id="eZ*_Hcj}V[j/q1_!;2M8"> <field name="NUM">440</field> </block> </value> <next> <block type="comment" id="#LRdQ3elGN0Ke!(/%jf{"> <field name="COMMENT">Poolpumpe 500W</field> <next> <block type="variables_set" id="Og7]d_/m7sC|)op5H1?T"> <field name="VAR" id="Qd@~YUEX}4:5(CxoR0XE">Leistung_Verbraucher_3</field> <value name="VALUE"> <block type="math_number" id="zt]-8Ph*m#v]0bG?iBzu"> <field name="NUM">500</field> </block> </value> <next> <block type="on_ext" id="5%FksP=:EPtmlXMu2Ixo"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid"> <field name="oid">default</field> </shadow> <block type="field_oid" id="u9hpl,/[~$7)zJI#.NtF"> <field name="oid">discovergy.0.60868258.Power_Delivery</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="JX:8ymNz*s:lKhd)ysRK"> <field name="VAR" id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</field> <value name="VALUE"> <block type="logic_boolean" id="$KP3Vav-:FSD^bmO/pCR"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="VOZMO0+3G!eKaYev_zqP"> <field name="VAR" id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</field> <value name="VALUE"> <block type="logic_boolean" id="2yD!mn?s~P*$,cMV~BUI"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="3I`}{uswn4U|nd,+2yyE"> <field name="VAR" id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</field> <value name="VALUE"> <block type="logic_boolean" id="s:}qChL^~GF_o-`l%I[6"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="controls_if" id="ZfY*AV|Z9v@w)+{;7Ce4"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id=",_!aC(]3lGQ/|n[1H?k%" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id=".t,$*3GhaR1qLe-Rt0@["> <field name="OP">GTE</field> <value name="A"> <block type="get_value" id="3]d={usIWbau!?su74V("> <field name="ATTR">val</field> <field name="OID">discovergy.0.60868258.Power_Delivery</field> </block> </value> <value name="B"> <block type="math_number" id="/jk/KZIuq`:0Fq-`wnCv"> <field name="NUM">150</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="4`WHkHHs9k(`Y,srxkqw"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="5Vwg(XL6HYz0Uz|[R?Nr"> <field name="VAR" id="#3v}HDbdMRBS$0v{!o)h">Speicher</field> </block> </value> <value name="B"> <block type="logic_boolean" id="Sp-nLxB.0Y6.3YS]Ng}Z"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="xAF=1}H-`M11m2BGyR`~" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="oQcGHRV;/?MrR}kCR}Ya"> <field name="TEXT">Speicher & Power Freigabe</field> </shadow> </value> <next> <block type="controls_if" id="-8BS*=Y59GFJ)IK$ek@`"> <value name="IF0"> <block type="logic_compare" id="eVrv%46jPtIrwmx]4H,;"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="J$WnBHsK!VJr~:TPawkG"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="variables_get" id="h)]T[l(3DASZkPMVN~:K"> <field name="VAR" id="iwu_1;PHCBW[(6sePQ9Q">Leistung_Verbraucher_1</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="Htr/tqkBs_F1S94kP%b3"> <field name="VAR" id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</field> <value name="VALUE"> <block type="logic_boolean" id="kbwWOhZ!92^0tlTDJDMS"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="debug" id="jZW(9(J8kvFKDL]2Mb*/" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="mXJD*?1:uJa+5WJ)^b24"> <field name="TEXT">Freigabe Verbraucher1</field> </shadow> </value> <next> <block type="controls_if" id="7CaD]B[!w^uxjJHuR,~%"> <value name="IF0"> <block type="logic_compare" id="%s+?b/tOJ]MrD8@N(RWp"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="iuoB$p~iRSidkBnul|(z"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_arithmetic" id="m:#?lpymy.24[z}#VjtK" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="a{K}g{j|F?TgpS{{m$+m"> <field name="VAR" id="iwu_1;PHCBW[(6sePQ9Q">Leistung_Verbraucher_1</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="8(%Xir`3RA6FZ-}%KKH#"> <field name="VAR" id="f6*O*xo-Qtq,VGU7f|-6">Leistung_Verbraucher_2</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="nm(2xDV9lyo0;/-.@R~l"> <field name="VAR" id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</field> <value name="VALUE"> <block type="logic_boolean" id="d^fg7.Ilbwo4(vY0UlSx"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="debug" id=";zrLgW13_,~B+nV@sl?9" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="}[ok^rE-[x0r{iWs+/c]"> <field name="TEXT">Freigabe Verbraucher1 & 2</field> </shadow> </value> <next> <block type="controls_if" id="KG^SD.*Ll4OE`Ks()z@T"> <value name="IF0"> <block type="logic_compare" id="Z5%$5i[{Wyyg_/D24?Kl"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="JpB*?Fy6g]DQ_#vYr8TB"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_arithmetic" id="fgIq2~^~`T(%LC8mw8WU" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="1oy%Bt,2%5}/TJ=;Rqon"> <field name="VAR" id="iwu_1;PHCBW[(6sePQ9Q">Leistung_Verbraucher_1</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="0}+#7s~aK{i5A]@/nuP%" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="Bqebl1X.3EQG%N!G4InL"> <field name="VAR" id="f6*O*xo-Qtq,VGU7f|-6">Leistung_Verbraucher_2</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="7zAru$B:cIPf3rZr4!%3"> <field name="VAR" id="Qd@~YUEX}4:5(CxoR0XE">Leistung_Verbraucher_3</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="*XD]aqB0%*~8wCgSm:Vc"> <field name="VAR" id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</field> <value name="VALUE"> <block type="logic_boolean" id="s*cOI[MF{^ZzVCLtNZm1"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="debug" id="Qw/7jN/F1j+jCB@e{Dx," disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="1L]B)Ig8}XINBJ/e11gS"> <field name="TEXT">Freigabe Verbraucher1&2&3</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="variables_set" id="}gD3VZ4Z5rM|y#s_%w*."> <field name="VAR" id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</field> <value name="VALUE"> <block type="logic_boolean" id="kf#,9n$c~L,mF[W+ifoE"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="-6d|TG-Ua}hi%^SrgoX9"> <field name="VAR" id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</field> <value name="VALUE"> <block type="logic_boolean" id="P7xS_$)e/3`eN$6r.[C]"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id=";]q3eUAgEqW@#~RYk%q^"> <field name="VAR" id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</field> <value name="VALUE"> <block type="logic_boolean" id="$G/M49E1pinH%h[QUFGw"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="comment" id="m=kb2aNtc`3lz=s3!#)e" x="-4037" y="-1812"> <field name="COMMENT">Freigabe über Speicher SoC</field> <next> <block type="on_ext" id=":Z,oPP(pZcNLI*ic7?=v"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="B-qBr$_xx{MAqsn72)d/"> <field name="oid">fronius.0.powerflow.inverter1.SOC</field> </shadow> </value> <statement name="STATEMENT"> <block type="variables_set" id="k/O?%F?yK:76mPu#sPXp"> <field name="VAR" id="#3v}HDbdMRBS$0v{!o)h">Speicher</field> <value name="VALUE"> <block type="logic_boolean" id="ucAqD%A|WqvvGRX5tq/Q"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="controls_if" id="@:]C#RGL_r!}.(u!+_1F"> <value name="IF0"> <block type="logic_compare" id="RaNa=2L`-^F66JF7Aw~L"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="mM8Ui_)ko{7jU{y~|!+I"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="LebGx|?(!5`2!KtoTMCz"> <field name="NUM">99</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="$v?p67}s]Gz=(QnHs!Qz"> <field name="VAR" id="#3v}HDbdMRBS$0v{!o)h">Speicher</field> <value name="VALUE"> <block type="logic_boolean" id="$!B4k462/f#JpLsw!WRG"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="debug" id="c_{ROsP0ZNtLXx]y4fey" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="?(r=r`RW7jm~B4kB/dTA"> <field name="TEXT">Speicher Freigabe freigegeben</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="controls_if" id="A!HzgN7jFk$[P..ZACwI"> <value name="IF0"> <block type="logic_compare" id="6-=egQ`o3@uaq`oqE{GZ"> <field name="OP">LTE</field> <value name="A"> <block type="on_source" id="ZH}eAd!(V81(JKoLmcxE"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="q)UiwwWQ88%c^bE^^K#%"> <field name="NUM">97</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="zj5VkE1@s/ixB*g3e.M]"> <field name="VAR" id="#3v}HDbdMRBS$0v{!o)h">Speicher</field> <value name="VALUE"> <block type="logic_boolean" id="@aIsrkH^cJ6Xmf/S0DG^"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="debug" id="YDpGZEb}-twSc8635=x_" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="Rbt?I+rv$A/Yk*q/x})j"> <field name="TEXT">Speicher Freigabe gesperrt</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="procedures_callnoreturn" id="Py3WU:HMO%lmxbbF*ZwF"> <mutation name="PV_Ueberschuss"></mutation> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> <block type="comment" id="ku6OGkkxV:+B3s`T5m,2" x="-3538" y="-1813"> <field name="COMMENT">Verbraucher EIN / AUS schalten</field> <next> <block type="on_ext" id="6|z(;*0}z`bb*]GH~QQt"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="L_/|{9;~%0)!1YYOJ1V#"> <field name="oid">discovergy.0.60868258.Power_Delivery</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="|S.LEn`GDI8RYU^Q7C.3"> <value name="IF0"> <block type="logic_compare" id="Y!qC$9Me5U4hBsrSLQ#]"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="_YT#{$J%y,_1pGeW?;iY"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DEKO_3.POWER1</field> </block> </value> <value name="B"> <block type="variables_get" id="W0AuxVIiR|EP#}`+-,`3"> <field name="VAR" id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="d=-NnR_}kEXUNzl=Odqy"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DEKO_3.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="=be9t$1zyc608QA?BR8d"> <field name="VAR" id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</field> </block> </value> <next> <block type="control" id="6F)@lJ]t9kzJA@E:9iuC"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.DP_Verbraucher1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="2rpdO@8j6Ds-8P?2Be35"> <field name="VAR" id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</field> </block> </value> <next> <block type="debug" id="bGUiN[M}O,yelfB]sIbw" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="88{_G_K3r=xI@sUR3:X6"> <field name="TEXT">Verbraucher 1 ansteuern</field> </shadow> </value> <next> <block type="update" id="I~4VAmY([=IJW7G2G@P?"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.Verbraucher_1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text_join" id=":FiA]WkIGr:W[Zr3u9EI"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="^?tdnfdsK_(Uz_HtzOi="> <field name="TEXT">e-Bike Ladestation ist </field> </block> </value> <value name="ADD1"> <block type="logic_ternary" id="=O#Bar~Q_$FOiRh+i,Gz"> <value name="IF"> <block type="logic_compare" id="E!.yBZVM4G*bb,sFo}ZP"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="dHRaHv0_xYM3Sw??8EZ]"> <field name="VAR" id="=0*Y@LKH/LaJKjrR)j@$">Verbraucher_1</field> </block> </value> <value name="B"> <block type="logic_boolean" id="6@B*F.}B!8be=x|@XY5H"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id=")1e8P,J}j~H^%2MAczFF"> <field name="TEXT"><span style='color:lightgreen'> AN</span></field> </block> </value> <value name="ELSE"> <block type="text" id="}#`Yb-cj3ad1^$;Y}vvE"> <field name="TEXT"><span style='color:#f01630'> AUS</span></field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="controls_if" id="Flc*5me3#MKLjPR}Jbwv"> <value name="IF0"> <block type="logic_compare" id=";FJmFB8TH$eP.#xkh6L:"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="SZe9}zcn7{9,-`YWK4NJ"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DEKO_4.POWER1</field> </block> </value> <value name="B"> <block type="variables_get" id="oeGoowX!X;]Y9bs2kfRq"> <field name="VAR" id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="UNHCfC{N.w`0`f3z[^v^"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DEKO_4.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="RW@De^K~}D},:i/}U{IH"> <field name="VAR" id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</field> </block> </value> <next> <block type="control" id="HG0*7VmqJn+c4i#~[a+@"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.DP_Verbraucher2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="IO$S`Ds9zyIg-k@)O~{?"> <field name="VAR" id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</field> </block> </value> <next> <block type="debug" id="7Peg*9Q$rK3~[C^:E6i:" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="e~pyMK?Ux1Le^-!UyFmj"> <field name="TEXT">Verbraucher 2 ansteuern</field> </shadow> </value> <next> <block type="update" id="BQR*n=Y9QnxkQVZ~Io,Z"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.Verbraucher_2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text_join" id="wf#Ims2#R8;Z1lcD.Y+s"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="3@r4YjmA#FzZ$:Z+.pe="> <field name="TEXT">Raumentfeuchter ist </field> </block> </value> <value name="ADD1"> <block type="logic_ternary" id="s0Nx(}!4w39r5]|U!fKd"> <value name="IF"> <block type="logic_compare" id=".y#n]{$R5#cu(UNevkC!"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="=|qa8kPsv7^Y_O#(ZWP]"> <field name="VAR" id="H^P_+K-N%`%.=oQ1d31B">Verbraucher_2</field> </block> </value> <value name="B"> <block type="logic_boolean" id="%^b+7U*KI#Gl6.XE_%^M"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id="*JC8d`O[Oce.IZbBQ9_B"> <field name="TEXT"><span style='color:lightgreen'> AN</span></field> </block> </value> <value name="ELSE"> <block type="text" id="MvLb|NY@ABsU1ckoZRQl"> <field name="TEXT"><span style='color:#f01630'> AUS</span></field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="controls_if" id="1_p4|xA*iz~/5FO7+$sT"> <value name="IF0"> <block type="logic_compare" id="t8H6q49piQ*}svHaCSCS"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="P(pMElCz.laE5;*n89:v"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DEKO_5.POWER1</field> </block> </value> <value name="B"> <block type="variables_get" id="FAD7c|rF@i)yh~}9#)EV"> <field name="VAR" id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="XjO4=|hRrz9.$aTQ%X2X"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DEKO_5.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="rtzEp4lHztN%rPgJhjFS"> <field name="VAR" id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</field> </block> </value> <next> <block type="control" id="d?w0%tp(Q$?7BEkW5,nD"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.DP_Verbraucher3</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="~yK:@*a8GdbY;V_l@W4H"> <field name="VAR" id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</field> </block> </value> <next> <block type="debug" id="Zx!5(240HY++bS@6)dy!" disabled="true"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="m28(eRp^}7YxxGkhtmu2"> <field name="TEXT">Verbraucher 3 ansteuern</field> </shadow> </value> <next> <block type="update" id="AobmUdTRHT%M??B`|O|h"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.Verbraucher_3</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text_join" id="l*mP~Z@+u5AM1))RjQQ+"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="JVzu}xJ]**Z^}kwhM:G("> <field name="TEXT">Poolpumpe ist </field> </block> </value> <value name="ADD1"> <block type="logic_ternary" id="4]AG#TLA{[7iftWJrGJo"> <value name="IF"> <block type="logic_compare" id="A*OpC)NsaW8b5@:1R;jo"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="$w8-U0oax/DDzCeJ.XzZ"> <field name="VAR" id="M(sJ9{SKo+{%:on(Scq|">Verbraucher_3</field> </block> </value> <value name="B"> <block type="logic_boolean" id="Y^qL,^;.UW:2R;sbk0GW"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id="D3=Tnz![FQGD?PI9^?#2"> <field name="TEXT"><span style='color:lightgreen'> freigegeben</span></field> </block> </value> <value name="ELSE"> <block type="text" id="Jzxo2+wNl,)?o#DtXxME"> <field name="TEXT"><span style='color:#f01630'> gesperrt</span></field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </next> </block> <block type="procedures_defnoreturn" id="vSZX`k5eiB;pKBZ5|]DV" x="-4687" y="-687"> <field name="NAME">PV_Ueberschuss</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="control" id="T*J1}lD,^B@Mv^X5RfpL"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.SoC_Freigabe</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="vYdK/xZF*jEXdtGYxjsg"> <field name="VAR" id="#3v}HDbdMRBS$0v{!o)h">Speicher</field> </block> </value> <next> <block type="update" id="M[(HyI-#CSj5KU]CJ.g;"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.PV_Eigenverbrauch.PV_Ueberschuss_Freigabe </field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text_join" id="S0m){u$ed`!7OBaLb5`n"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="(dW}xu@7iN(3s}ZO}bZf"> <field name="TEXT">PV Überschuss Freigabe </field> </block> </value> <value name="ADD1"> <block type="logic_ternary" id="?Q%.}Uf{;n,ftJ/JS[#k"> <value name="IF"> <block type="logic_compare" id="Ff]l_d]wX2`=*|]xStRp"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="FEX-)#QxiWs$?-?PK[GY"> <field name="VAR" id="#3v}HDbdMRBS$0v{!o)h">Speicher</field> </block> </value> <value name="B"> <block type="logic_boolean" id="m0#SDw^x9X.P10lAM)@L"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id="^jeQ!p*@c7jQ?wQ#gsW."> <field name="TEXT"><dev style='color:lightgreen'> OK</dev></field> </block> </value> <value name="ELSE"> <block type="text" id="DtBZ^o9QygMriGsGp9{5"> <field name="TEXT"><dev style='color:#f01630'> gesperrt</dev></field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </xml>
Da @paul53 als ausgewiesener JavaScript Experte ja auch hier im Thread unterwegs ist, kurze Hijacking Frage zu diesem Script - Warum wird mir im Script Editor "timeout" als Fehler unterstrichen?
var timer = null; var sperre = false; on({id: "rflink.0.channels.Byron_1.SWITCH_05"}, function(obj) { if(!sperre) { sperre = true; setState("vis.0.control.command", '{"instance": "FFFFFFFF", "data": "200_Webcam", "command": "changeView"}'); if(timer) clearTimeout(timer); timer = setTimeout(function () { setState("vis.0.control.command", '{"instance": "FFFFFFFF", "data": "001_Main", "command": "changeView"}'); }, 20000); timeout = setTimeout(function () { setState("alexa2.0.Echo-Devices.G070RQ13813305NG.Commands.speak-volume"/*volume*/, 90, true); }, 500); timeout = setTimeout(function () { setState("alexa2.0.Echo-Devices.G070RQ13813305NG.Commands.speak"/*speak*/, 'Es hat an der Haustür geklingelt'); }, 1000); timeout = setTimeout(function () { setState("alexa2.0.Echo-Devices.G070RQ13813305NG.Commands.speak-volume"/*volume*/, 40, true); }, 1500); setTimeout(function() { sperre = false; }, 5000); } });
-
@jb_sullivan sagte in Mathe-Genie gesucht (Kurvenberechnung):
Warum wird mir im Script Editor "timeout" als Fehler unterstrichen?
timeout ist nicht definiert, setz mal ein var in Zeile 12 davor.
-
@gargano PERFEKT - das war es schon - alle roten Unterstreichungen sind weg. Funktioniert hat das Script aber trotzdem
-
@homoran nach langem suchen bin ich auf diesen Thread gestoßen und da würde ich gerne nachfragen wieso dein Haus richtung Osten die PV installiert hat? oder sind die 140° anders zu sehen? wenn ich da mein Haus nehme bin ich etwa 13° richtung osten von 0° süden gedreht. Dh. -13° da bekomme ich aber durch deine berechnung sehr schlechte werte raus.
Kann da jemand evtl noch aufklärung geben.
Vielen Dank
-
@sirlance sagte in Mathe-Genie gesucht (Kurvenberechnung):
würde ich gerne nachfragen wieso dein Haus richtung Osten die PV installiert hat?
weil der Bauträger es so gebaut hat!
@sirlance sagte in Mathe-Genie gesucht (Kurvenberechnung):
ich etwa 13° richtung osten von 0° süden gedreht. Dh. -13°
so sieht aber die Windrose nicht aus!
du wärst nach 167° ausgerichtet -
@homoran Ok danke für die schnelle Antwort mal schauen was Grafana mir anzeigt nach dem heutigen Tag.
Momentan noch alles manuell aber wenn das dann funktioniert sollte es auch automatisiert laufen :).
Ich würde mich mal anbieten das skript etwas aufzuräumen und als js version hier rein packen wenn es für dich ok ist.
Die entsprechenden stellen für die Wallbox dann in functions auslagern dann kann sich das jeder selber so bauen wie er es braucht
-
@sirlance sagte in Mathe-Genie gesucht (Kurvenberechnung):
dann kann sich das jeder selber
wenn er denn js beherrscht.
-
Ich hab mal vor Äonen mich mit diesem Thema berschäftigt. Das ganze zu berechnen ist sehr komplex. Die ideale Methode wäre es eine Funktion zu finden, die bei jedem Datum bei jeder Koordinate etc die richtigen Werte ausspuckt. Wenn man das als Formel hätte, und in ein Koordinatensystem eintragen würde, könnte man wie MartyBr durch integration die Fläche = Ertrag berechnen.
Aber leider sind das nur ganz ganz grobe Näherungen die die sekundäre Strahlung komplett außer acht lässt. Die lässt sich auch nicht berechnen denn die ist von sehr vielen Faktoren abhängig (Wolkendicke, Beschaffenheit der Wolke (Viel Wasser?), Temperatur, Klarer Himmel (schlecht für anlagen die auf diffuses licht angewiesen sind, zb NO Anlagen im Winter)
In dem Excel tool kannst koordinaten eingeben und er berechnet dann die Elevation und den Azimut der Sonne. Mit den Cos Funktionen kannste dann den Einstrahlungswinkel auf die Modulplatten berechnen. Die Solarkonstante ist auf der Erde ca. 1000W/m² (Im Weltraum 1300 ca).
Bedenke dass die Kurve immer kleiner ist als die Kurve von der PV, da hier eindeutig die Streustrahlung fehlt!