NEWS
Mathe-Genie gesucht (Kurvenberechnung)
-
@steff sagte: ich weiß nun nicht mehr wie das Blockly mittlerweile aussieht.
-
@steff Hier mal die aktuelle Variante:
Um es variabel zu halten habe ich anfangs die Eckdaten in Variable gesetzt.
Wobei bei mir seltsamerweise die Ausrichtung der Anlage um 15° nach Süd verschoben werden musste.
Für morgen habe ich es nur noch auf 10° Verschiebung eingestellt um den Effekt zu sehenTrigger ist der aktuelle Erzeugungswert vom Wechselrichter.
Nur für die Kurve würde ein Cron im Minutenabstand reichen.Nach dem Berechnungsteil schreibe ich es in einen Datenpunkt, der dann geloggt wird um den chart zu erstellen
Das ausgeblendete ist ein debug, der früher als output gedient hatte, bis es brauchbar warDas Ganze ist gepant in einer bestehenden Überschussladeregelung eines E-Autos eine automatisierte An- und Abschaltung zu steuern, indem vor dem Anschalten geprüft wird, ob die Sonneneinstarhlung stabil ist, um voraussichtlich längere Zeit laden zu können
-
-
@gargano sagte in Mathe-Genie gesucht (Kurvenberechnung):
meld Dich nochmal
MELD!!!!
ich habe jetzt "nebenbei" mal versucht mit deiner Formel
f(x) = -(ax-b)(ax+b)
etwas (mit viel Empirik) auf die Beine zu stellen.
Sah auch erst ganz gut aus, jetzt geht nix mehrich bin von folgenden Voraussetzungen ausgegangen:
b ist die Strecke von Beginn der Kurve bis zum Apex, der Einfachheit halber b1 = b2
a bestimmt später über die "Krümmung" das Verhältnis Höhe zu breite der ParabelDas sah dann bei mir so aus:
- Faktor_timestamps: Timestamps in Minuten umgerechnet, damit ich besser sehen konnte ob die Werte passen.
- Faktor Formel: a
- Faktor Ergebnis: damit der Wert den Watt entspricht
- Uhrzeit Start: Anfang der Kurve (8:15)
- Uhrzeit max: Apex (woher auch immer ich den später bekomme, erst mal annähernd auf 11:15 gesetzt
- halbe Basis: b
- Zeit aktuell: Zeit seit Start der Kurve
nach 11:15 steigt der Betrag weiter, aber mit negativem Vorzeichen.
Hab das Ganze mehrfach durchgesehen. ggf. mal wieder eine Klammerung übersehen (passiert mir leider letzte Zeit häufigerZeit_aktuell passt, halbe Basis auch
-
@homoran Nee, geht mit quadratischer Regression. Raus kommt dann eine Funktion y = ax²+bx+c
Dazu vorher wahrscheinlich die Kurve glätten, ich nehme mal an Savitzky Berechnung wäre hier das richtige.
Ich habe das schon mal gemacht für Berechnung von Liquid Chromatograpie. Allerdings ist der Code in Pascal (Delphi).
Aber ich wollte eigentlich aus Interresse das mal in JS umsetzen. Kannst Du mir mal reale gemessene Daten schicken, wenns geht keine 100k -
@gargano sagte in Mathe-Genie gesucht (Kurvenberechnung):
y = ax²+bx+c
bin so weit auch
@gargano sagte in Mathe-Genie gesucht (Kurvenberechnung):
von Liquid Chromatograpie
HPLC?
Arbeite ich seit 30 Jahren mit
ich kenne noch die alten Integratoren@gargano sagte in Mathe-Genie gesucht (Kurvenberechnung):
Kannst Du mir mal reale gemessene Daten schicken, wenns geht keine 100k
warte mal, ich glaub ich hab den Denkfehler
-
-
@homoran sagte in Mathe-Genie gesucht (Kurvenberechnung):
ich glaub ich hab den Denkfehler
sieht zumindest im Moment (abfallend) brauchbar aus:
@paul53
gegen 13:00 habe ich das Haus nochmal verdreht -
@gargano sagte in Mathe-Genie gesucht (Kurvenberechnung):
Nee, geht mit quadratischer Regression
nein, das brauch ich nicht.
Will ja nur die Kurvenpunkte berechnen, also eine "normale Quadratische Gleichung wie hier:https://www.mathematik-oberstufe.de/analysis/qf/parabel-aus-p-sp.html
die blaue Kurve
Scheitelpunkt (Uhrzeit des Apex) und den einen Kurvenpunkt zur Berechnung des Streckfaktors (Uhrzeit Sonnenaufgang) habe ich ja.
ich bin (wie bereits in der Oberstufe) zu dumm den Ansatz hinzubekommen. -
Heute war endlich mal wieder Sonnenschein. Leicht diesig, aber ausreichend.
In der Zwischenzeit ist es mir irgendwie gelungen eine quadratische Gleichung mit den mir zur Verfügung stehenden Fixpunkten zu erstellen.
Natürlich ist das erweiterte Skript von @paul53 einfach Spitze.
Ich wollte ja eigentlich nur eine einfache Kurve.
Aber auch da werde ich noch ein wenig Perfektionismus betreiben - einfach weil es geht
Die ersten Optimierungen hatte ich mit der Ertragskurve des letzten Sonnentages gemacht, der war aber auch schon >2 Wochen alt und so stimmten die Zeiten für Sonnenauf- und Untergang nicht mehr, sowie der maximal mögliche Ertrag aufgrund der steigenden Elevation im Zenit.Hier will ich noch versuchen empirisch den Apex der Kurve automatisch anzupassen
Momentan wird dieser fix gesetzt, und ich habe ihn nach den ersten Tests jetzt zu weit hochgesetzt.
EDIT: sehe gerade, da sind noch Reste aus den früheren Versuchen in Form von Variablen enthalten, die nicht mehr benötigt werdenDanke nochmal an alle Beteiligten!!
-
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!