NEWS
Aufheizrate Pool bestimmen
-
Ich möchte die Aufheizrate [in °C/h] eines Whirlpools bestimmen.
Dazu messe ich zeitlich versetzt (~ 30 min) die Temperatur und bestimme durch Differenzbildung die Aufheizrate pro Zeit. Soweit so gut - in der Theorie.Mit diesem ersten Script wurde mir die Aufheizrate zwar kurzzeitig berechnet, jedoch immer wieder auf "0" gesetzt. Hat also nicht funktioniert, vermutlich weil bei jeder Aktualisierung des Triggerwertes "Pool_Temperatur" das Script von vorne losgebrettert ist:
Das sah dann immer so aus:Also neuer Versuch, mittels eines "State" die zwei Messungen zeitlich voneinander zu trennen:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="state">state</variable> <variable id="oOsMZNR0kWr%DKpVTac%">temp_1</variable> <variable id="CqIi$mc34-]S$X(9K;*Q">temp_2</variable> <variable id="+hw(BRJ7LWj#x?jkz*j!">aufheizrate</variable> </variables> <block type="on_ext" id="XQ1h@q3{]E(z|ZPie!0." x="-362" y="-87"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="@FwY30x87UBieD*y#9+]"> <field name="oid">alias.0.Pool.Pool_Temperatur</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="Fb(U=Ctdb5sfdR8,d5g{"> <value name="IF0"> <block type="logic_compare" id="iZ8H6ImQ9eJ%RdVu?ZXZ"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="G9vk9KsIkeTLQKg$o-Hu"> <field name="VAR" id="state">state</field> </block> </value> <value name="B"> <block type="math_number" id="8jI;%{tH72}Kb/UNLmwW"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="K_UZ]E0D.qK$Jhe/n`3?"> <field name="COMMENT">1. Messung Pooltemperatur</field> <next> <block type="variables_set" id="9?fQGfz^rBk0,~1OdM@:"> <field name="VAR" id="oOsMZNR0kWr%DKpVTac%">temp_1</field> <value name="VALUE"> <block type="get_value" id="-f`*9F)49ah)Tay.54+I"> <field name="ATTR">val</field> <field name="OID">alias.0.Pool.Pool_Temperatur</field> </block> </value> <next> <block type="comment" id="-mE0E=Td3N@d2{K.^c|E"> <field name="COMMENT">nur zur Überprüfung der Temperaturwerte</field> <next> <block type="update" id="uA.|0{Wt?R4o`Iw3AZq$"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.4_Temperaturen_T.Pool_temp_1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id=")O!;H3[#Irrk^h5+HZ3T"> <field name="VAR" id="oOsMZNR0kWr%DKpVTac%">temp_1</field> </block> </value> <next> <block type="variables_set" id="set_state_to_1"> <field name="VAR" id="state">state</field> <value name="VALUE"> <block type="math_number" id="number_1"> <field name="NUM">1</field> </block> </value> <next> <block type="timeouts_wait" id="thvwdx972e^6;A$IgS]f"> <field name="DELAY">30</field> <field name="UNIT">min</field> <next> <block type="controls_if" id="if_block_2"> <value name="IF0"> <block type="logic_compare" id="compare_block_2"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="get_state_2"> <field name="VAR" id="state">state</field> </block> </value> <value name="B"> <block type="math_number" id="number_1_copy"> <field name="NUM">1</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="?LQiF~Vd_4AirU2wicZY"> <field name="COMMENT">2. Messung Pooltemperatur</field> <next> <block type="variables_set" id="=V{xewm65U#D(Kc7n@=-"> <field name="VAR" id="CqIi$mc34-]S$X(9K;*Q">temp_2</field> <value name="VALUE"> <block type="get_value" id="d2^KURC%{~[0Jn3U!a5z"> <field name="ATTR">val</field> <field name="OID">alias.0.Pool.Pool_Temperatur</field> </block> </value> <next> <block type="comment" id="{d@U^aQSr8lwEK#DcSJA"> <field name="COMMENT">nur zur Überprüfung der Temperaturwerte</field> <next> <block type="update" id="=F1l8%lI4N}EmVm*,h=W"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.4_Temperaturen_T.Pool_temp_2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="1%`mfL9$L.asb%U8x3}("> <field name="VAR" id="CqIi$mc34-]S$X(9K;*Q">temp_2</field> </block> </value> <next> <block type="comment" id="ImjjsvwzFEk:6x*s$us%"> <field name="COMMENT">Berechnung Aufheizrate in [°C/h]</field> <next> <block type="variables_set" id="Ap(i7[0e}DNVJ:5Tg(Ee"> <field name="VAR" id="+hw(BRJ7LWj#x?jkz*j!">aufheizrate</field> <value name="VALUE"> <block type="math_arithmetic" id="rAO]$1pH(di82=h|u,pE"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id=",63(myE%F%tIQ}{Jc_a0"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="S!U*KnIq!Nr2u}t*{zL9"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="!l5dv1!G6fjE#Z))^6#U"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="i)c!eh1QvBD+5Ie;y?q["> <field name="VAR" id="CqIi$mc34-]S$X(9K;*Q">temp_2</field> </block> </value> <value name="B"> <shadow type="math_number" id="?Pm#mTVpWQvWYbd?^pbB"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="M%Vzy^yU(]X[G+$6cpmJ"> <field name="VAR" id="oOsMZNR0kWr%DKpVTac%">temp_1</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="Xi.eU-~YC;PAK-VqrcaC"> <field name="NUM">0.5</field> </shadow> </value> </block> </value> <next> <block type="comment" id="UR6o!20(,OmcEVIfNrg:"> <field name="COMMENT">Schreibe Wert Aufheizrate in Objekt</field> <next> <block type="update" id="=[rVi.^gZC=IZn_VP_$c"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.4_Temperaturen_T.Aufheizrate</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="xfavm!KZ8-=:};}DB5%|"> <field name="VAR" id="+hw(BRJ7LWj#x?jkz*j!">aufheizrate</field> </block> </value> <next> <block type="variables_set" id="U0XHB*PFa;z6)[j,wrD0"> <field name="VAR" id="state">state</field> <value name="VALUE"> <block type="math_number" id="JWpJXo|})uc0ncGe{|mF"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </xml>
Hierbei bekomme ich aber weder eine Aufheizrate geschrieben, noch wird die testweise in ioBroker gesetzte Variable "State" aktualisiert.
Was mache ich hier falsch? Danke für ein paar sachdienliche Hinweise
-
@markus-7
Zwei Vorschläge: -
Danke dir für die Vorschläge, bin gerade am Probieren und sitze auf dem Schlauch, wo ich diese Funktionsbausteine (Mathematik?) finde:
-
@markus-7 sagte in Aufheizrate Pool bestimmen:
ich diese Funktionsbausteine (Mathematik?) finde:
unter der rechten Maustaste
externe Eingänge -
Danke dir ... die rechte Maustaste wird einfach unterschätzt
-
Noch eine Frage zu der Zahl "3.600.000" in deinem ersten Script:
Wo geht dort die eigentliche Zeiteinheit "pro Stunde" oder "Messung pro x Minuten" ein? Der Faktor wäre ja Umrechnung h in ms oder so ähnlich?Btw: Die beiden Scripte geben recht unterschiedliche Werte aus (1. Script=Aufheizrate, 2. Script=Aufheizrate_2).
PS: So sieht der tatsächliche Temperaturverlauf aus:
-
@markus-7 sagte in Aufheizrate Pool bestimmen:
Der Faktor wäre ja Umrechnung h in ms oder so ähnlich?
= 3600000
-
Ja, hatte ich ja schon geschrieben ... nur wofür brauche ich diesen Wert?
-
@markus-7 sagte in Aufheizrate Pool bestimmen:
Die beiden Scripte geben recht unterschiedliche Werte aus
bitte keine schwarzen Briefmarken im Megapixelfornat
Fenster schmaler ziehen ohne dass Infos verloren gehen.
Dann ist das auch mobil lesbarhttps://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1
-
@markus-7 sagte in Aufheizrate Pool bestimmen:
nur wofür brauche ich diesen Wert?
zum Umrechnen der Wertedifferenz bezogen auf eine Zeitdifferenz in msec auf "pro Stunde"
Die timestamps in iobroker sind in Millisekunden
-
Ah, danke für die Info mit den Timestamps
Mit den Screenshots werde ich zukünftig schauen, wie ich sie vorher verkleiner kann.
-
@markus-7 sagte: Die beiden Scripte geben recht unterschiedliche Werte aus
... So sieht der tatsächliche Temperaturverlauf aus:Da die Temperatur nicht nur steigt, sondern stark schwankt, erhält man zufällige Werte, die stark voneinander abweichen können.
Einen großen Teil der Schwankungen kann man ausfiltern, wenn man nur Anstiege berücksichtigt:Der Trigger auf "Pumpe schaltet ein" soll den Beginn der Aufheizung symbolisieren. Dann werden die Variablen auf Anfangswerte zurück gesetzt.
-
Danke für die Erklärung, nur das mit der Aufheizung ist leider nicht so einfach, da der Pool an einer PV-Solarthermie-Kopplung hängt und die Solarthermiepumpe Sonneneinstarhlungsabhängig ein- und ausschaltet:
Daher hatte ich ursprünglich über eine Zeitdifferenz von ~ 30 Minuten die unterschiedlichen Temperaturwerte ermittelt, um diese Schwankungen auszugleichen.
-
@markus-7 sagte: über eine Zeitdifferenz von ~ 30 Minuten die unterschiedlichen Temperaturwerte ermittelt, um diese Schwankungen auszugleichen.
Mit Pause funktioniert so etwas nicht. Eine gleitende Mittelwertbildung über 30 Minuten sieht so aus:
Der Datenpunkt "Liste" muss vom Typ "array" sein.
Eine Mittelwertbildung hat den Nachteil, dass sie zeitlich hinterher hinkt. -
Werde ich so probieren, danke!
Nur für mich zum Verständnis: warum funktioniert eine "Pause" zwischen zwei Messungen nicht?