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 :-)
-
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 :-)
-
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 -
@markus-7 sagte in Aufheizrate Pool bestimmen:
ich diese Funktionsbausteine (Mathematik?) finde:
unter der rechten Maustaste ;-)
externe Eingänge -
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:

-
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
-
@markus-7 sagte in Aufheizrate Pool bestimmen:
Der Faktor wäre ja Umrechnung h in ms oder so ähnlich?
= 3600000
-
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:
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
-
@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
-
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: 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.
-
@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.
-
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. -
@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.
