NEWS
Zeitdifferenz berechnen
-
@patrickfro sagte: einer Aktion,
Welche Aktion? Jede Wertänderung oder nur Änderung false --> true (öffnen)?
@patrickfro sagte in Zeitdifferenz berechnen:
nach 20 Sekunden feststellen, ob sie in den letzten 10 Sekunden weiter ausgeübt wurde
Weshalb erst nach 20 s?
-
@paul53 Jede Wertänderung, die bei aktiver Nutzung etwa 1-2 Mal pro Sekunde realistisch ist.
Nach 20 Sekunden möchte ich beim Start der Aktion testen, ob es nur eine Wertänderung aufgrund Verschieben des Gegenstandes ist oder ob wirklich Sport gemacht wird. Die 20 Sekunden sind willkürlich, könnten auch 30 Sekunden oder eine Minute sein.
-
-
@paul53 Super, vielen Dank.
Ich glaube, ich habe mich unglücklich ausgedrückt.
Bei Start des möglichen Trainings, also der auf/zu-Schaltung, soll nicht sofort eine Benachrichtigung per Telegram kommen. Nach den ersten 20 Sekunden soll geschaut werden, ob innerhalb der letzten 10 Sekunden eine Bewegung, also eine auf/zu-Schaltung passierte. Ob danach weitere Schaltungen registriert werden, ist egal. Eine Benachrichtigung per Telegram erfolgt nur einmalig, wenn nach erster Schaltung weitere folgen. Nach der ersten Benachrichtigung ist eine Sperre von 60 Minuten (ich habe aus Testgründen 2 Minuten eingetragen). Würde die Aktion länger als eine Stunde durchgeführt werden, so erhielte ich eben eine weitere Nachricht.
Ich hoffe, das ist verständlicher. Es soll also geprüft werden, ob die fortlaufenden Schaltungen nur sehr kurz (<10 Sekunden) oder länger (> 10 Sekunden) durchgeführt werden.
-
@patrickfro sagte: Nach den ersten 20 Sekunden soll geschaut werden, ob innerhalb der letzten 10 Sekunden eine Bewegung, also eine auf/zu-Schaltung passierte.
Dann versuche es mal so:
-
@paul53 Vielen Dank für die Arbeit.
Ich bin gerade "schon" auf eine Lösung gekommen. Dein erster Code hat mir mit etwas Zeitversatz viel gebracht. Ich achte nun nicht mehr auf die Zeit, sondern nutze die "erhöhe um"-Funktion.
Danke nochmal
-
@paul53 said in Zeitdifferenz berechnen:
@matthias-i sagte: Mein Plan ist deshalb den Zeitplan des Mähroboters zu erweitern, ihn aber nur dann mähen zu lassen, wenn die wöchentliche max. Mähzeit nicht überschritten ist und ihn bei unterschreiten einer minimalen Mähzeit am Wochenende auch außerhalb des Zeitplans mähen zulassen, um "Mähzeit nachzuholen".
Der Aussage entnehme ich, dass es um die wöchentliche Mäh-Dauer geht? Das Prinzip der Kumulation der Mäh-Dauer habe ich schon hier gezeigt (es wird mit ms gerechnet). Einmal in der Woche muss dann per Zeitplan die Mäh-Dauer zurück gesetzt werden. Unter der Woche kann die schon erreichte Mäh-Dauer ausgewertet werden.
Hallo, Ich habe das blockly für die Laufzeit meiner Lüftungsanlage genutzt. Allerdings habe ich es auf eine Tagesauswertung geändert. D.h. jeden Abend um 0 Uhr wird der Wert genullt.
Das Blockly ist bis auf den Trigger für mich nachvollziehbar. Ich verstehe die Auflösung "ist kleiner als letztes" in dem Zusammenhang nicht... Jede andere Auslösung funktioniert hingegen nicht..
Was mich etwas stört, ist dass der Wert nicht live aktualisiert wird... Wenn also die Anlage 4 Stunden ohne Stillstand läuft, werden die 4 Stunden erst nach der ersten Unterbrechung geschrieben. Was müsste ich ändern, wenn der Wert der tatsächlichen Laufzeit, alle 5 min aktualisiert wird?
-
@erazor86 sagte: Ich verstehe die Auflösung "ist kleiner als letztes" in dem Zusammenhang nicht... Jede andere Auslösung funktioniert hingegen nicht..
Triggert beim Ausschalten (Änderung true --> false).
@erazor86 sagte in Zeitdifferenz berechnen:
Was müsste ich ändern, wenn der Wert der tatsächlichen Laufzeit, alle 5 min aktualisiert wird?
Trigger auf "wurde geändert" und mit Einschalten ein 5-Minuten-Intervall starten, das beim Ausschalten gestoppt wird.
-
@paul53
Danke für die Infos.Ich habe die Änderung mit dem Intervall getestet, leider wird die Zeit aber nicht korrekt summiert... hast du eine Idee wo der Fehler liegt?
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="-8jUk([-^/E4KtM^jFpH">Einschaltdauer</variable> <variable type="interval" id="Intervall">Intervall</variable> </variables> <block type="on_ext" id="$kEbY#R6hv*pK~*3s7f~" x="-137" y="-887"> <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="]RDHZN_H_)V(`JXk!Elr"> <field name="oid">shelly.0.SHSW-PM#76B4A1#1.Relay0.Power</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="Z1deQeC:Wf9EFWSp*9d."> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="Und_gySW1{EKGEii[HCF"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="||QIbPAQe`%W;0wg-{?#"> <field name="ATTR">val</field> <field name="OID">shelly.0.SHSW-PM#76B4A1#1.Relay0.Power</field> </block> </value> <value name="B"> <block type="math_number" id="HqE;j0Kf4sCPS7;z?]Q^"> <field name="NUM">30</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="[,#g!m*(]K+img?eH=QG"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Lüftung</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="^Ac4Kzc_h}0.obCgF:E|"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="6KG7eQnX[B.%@aRx=z9d"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="=F75;y^mPd(wsy0hYvB`"> <field name="ATTR">val</field> <field name="OID">shelly.0.SHSW-PM#76B4A1#1.Relay0.Power</field> </block> </value> <value name="B"> <block type="math_number" id="/!c,7EU$*|vt)O4#EhMu"> <field name="NUM">30</field> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id="mJ:W^[k+%f!(T#!`:)qC"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Lüftung</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="gFpUSs2H!_esXCo(IRSp"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> </block> <block type="variables_set" id=")vn_uk6$xwFtS;?LfqDk" x="-137" y="-588"> <field name="VAR" id="-8jUk([-^/E4KtM^jFpH">Einschaltdauer</field> <value name="VALUE"> <block type="get_value" id="lxYUqLH.{;ScEd8_W{^t"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Dauer</field> </block> </value> <next> <block type="on_ext" id="g10!%+,PQcoL^1CtCc1M"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="1^6dn_Y//1Ld.:S1*pg/"> <field name="oid">0_userdata.0.Datenpunkte.Rechengrößen.Lüftung</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_setinterval" id="F%|n+bdyr1u[T$eOo-O+"> <field name="NAME">Intervall</field> <field name="INTERVAL">1</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="math_change" id="W|~lE[Qwmq@OL@N)v/_4"> <field name="VAR" id="-8jUk([-^/E4KtM^jFpH">Einschaltdauer</field> <value name="DELTA"> <shadow type="math_number" id="fWsz,$6i4tL0Y7%pNn7F"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="8dbw%mT9A/DW6~o1_^,q" inline="false"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="{,*U53G|oL{_f}d)G^$*"> <field name="NUM">1</field> </shadow> <block type="on_source" id="TK$!iiMRM!%JRabhC~fo"> <field name="ATTR">state.lc</field> </block> </value> <value name="B"> <shadow type="math_number" id="9`6U/6qXEXc(}AK3z5/:"> <field name="NUM">1</field> </shadow> <block type="on_source" id="MDsgyx~9/!NR^RbOGcUb"> <field name="ATTR">oldState.lc</field> </block> </value> </block> </value> <next> <block type="update" id="+zK*btZIiTCUL)S.~[8D"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Dauer</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="5wD}KRR8({98*0W6r6o}"> <field name="VAR" id="-8jUk([-^/E4KtM^jFpH">Einschaltdauer</field> </block> </value> <next> <block type="update" id="g}hdq5eRT$=;qHw^zDv@"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Dauer</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_from_date" id="5zYzKU@-kYT+vYrXHim~"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">hh:mm:ss</field> <value name="VALUE"> <block type="math_arithmetic" id="de6Osb3N2jOv]1ZE8LKs"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="L,;}sdh*6EgE2`Me1YYz"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="?OEdL._f`+/(Z.!r^}`O"> <field name="VAR" id="-8jUk([-^/E4KtM^jFpH">Einschaltdauer</field> </block> </value> <value name="B"> <shadow type="math_number" id="v|/~JK[UhMh,%Mn!Xgh9"> <field name="NUM">1</field> </shadow> <block type="convert_from_date" id="K:i9{k,$dbC{cRF0m%/e"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">object</field> <value name="VALUE"> <block type="text" id="qhKVkD25/vl9XM(CX`Q0"> <field name="TEXT">1970-01-01 00:00</field> </block> </value> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </statement> <next> <block type="timeouts_clearinterval" id="PJ51GE9hrAOoR{osIItE"> <field name="NAME">Intervall</field> <next> <block type="schedule" id="|kytfE5cp$@M5Mjr?=aH"> <field name="SCHEDULE">0 0 * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="eS9Yhju/DoLFarLL^QXj"> <field name="VAR" id="-8jUk([-^/E4KtM^jFpH">Einschaltdauer</field> <value name="VALUE"> <block type="math_number" id="50RLcx#=~4Lt|(*Ts50@"> <field name="NUM">0</field> </block> </value> <next> <block type="update" id="Ldq+96Oy#$LhNj2?O@o+"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Dauer</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="VAB-z1%//`0bxPwp14r,"> <field name="NUM">0</field> </block> </value> <next> <block type="update" id="O-+G9zJ.R4,~Y8b,(n+!"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Dauer</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="8jFlvBl*%rTvcjRF;3^l"> <field name="TEXT">00:00:00</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@erazor86 Man kann nicht den gleichen Datenpunkt für einen String ("SS:mm:ss") und auch für die Zeitdifferenz in ms verwenden. Das müssen verschiedene Datenpunkte sein.
Versuche es mal hiermit:
-
@paul53 es funktioniert super und besten Dank... auch wenn ich noch nicht ganz durch steige muss ich mir nochmal in einer ruhigen Minute zu Gemüte führen
-
@paul53 jetzt wird die Dauer der Lüftung in ss:mm:ss in den Datenpunkt geschrieben.
Wie kann ich dieses Format jetzt in eine Dezimalzahl konvertieren? Bspw. aus 08:30:00 soll dann 8,5 werden.
Ich habe es wie folgt probiert, allerdings wird mir nur die 8h ausgegeben..
<block xmlns="https://developers.google.com/blockly/xml" type="on_ext" id="g10!%+,PQcoL^1CtCc1M" x="-162" y="-487"> <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="1^6dn_Y//1Ld.:S1*pg/"> <field name="oid">0_userdata.0.Datenpunkte.Rechengrößen.Dauer</field> </shadow> </value> <statement name="STATEMENT"> <block type="update" id="Qg5uQ5,C~h#CP}OXp,n|"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Dauer_dezimal</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_tonumber" id="7`9D*4n16D87os~S.wgX"> <value name="VALUE"> <block type="on_source" id="6QPqXzV(jXa`:A/Jy*s|"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </statement> </block>
-
@erazor86 sagte: Format jetzt in eine Dezimalzahl konvertieren?
Schreibe besser den Wert als Dezimalzahl im ursprünglichen Skript:
Der untere Datenpunkt erhält den Dezimalwert.
-
@erazor86
Die Wandlung des Strings "SS:mm:ss" in eine Dezimalzahl ist etwas aufwändiger. -
@paul53 said in Zeitdifferenz berechnen:
@erazor86
Die Wandlung des Strings "SS:mm:ss" in eine Dezimalzahl ist etwas aufwändiger.danke, doch irgendwie gibt es hierbei ein Problem... steige nicht ganz durch, wo das Problem liegt:
-
@erazor86 sagte: wo das Problem liegt:
Poste bitte den Javascript-Code ohne die letzte Zeile in Code tags.
-
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="H_b:)/lk~U=V#?2Fm-_6">Einschaltdauer</variable> <variable id="9zZ/z:qt+2ur[Mg(U{^@">Liste</variable> </variables> <block type="on_ext" id="g10!%+,PQcoL^1CtCc1M" x="-187" y="-487"> <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="1^6dn_Y//1Ld.:S1*pg/"> <field name="oid">0_userdata.0.Datenpunkte.Rechengrößen.Dauer</field> </shadow> </value> <statement name="STATEMENT"> <block type="variables_set" id="jmdG%dMd*=ZRFyjN};FO"> <field name="VAR" id="H_b:)/lk~U=V#?2Fm-_6">Einschaltdauer</field> <value name="VALUE"> <block type="lists_split" id="UrkwL9|$/`pGV6dtQ4=#"> <mutation mode="SPLIT"></mutation> <field name="MODE">SPLIT</field> <value name="INPUT"> <block type="on_source" id="/tG2*O8M2}DxPJBVce+("> <field name="ATTR">state.val</field> </block> </value> <value name="DELIM"> <shadow type="text" id="jddb#N[0ZokH]@uv|$^L"> <field name="TEXT">:</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="yo,~CC4vFjRQ+!BI[Dj3"> <field name="VAR" id="H_b:)/lk~U=V#?2Fm-_6">Einschaltdauer</field> <value name="VALUE"> <block type="math_arithmetic" id=";{JdB#Q(L~2pI)@VEq]X" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="3c9}N}KuPq4SPU`Vi.}0"> <field name="NUM">1</field> </shadow> <block type="convert_tonumber" id="6tSv_rtVlamrBt%%sdNk"> <value name="VALUE"> <block type="lists_getIndex" id="j;YZ-#|;ymc?7Z!/}m`$"> <mutation statement="false" at="true"></mutation> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="*zdTBCpC?k.-sQA7_Jd6"> <field name="VAR" id="9zZ/z:qt+2ur[Mg(U{^@">Liste</field> </block> </value> <value name="AT"> <block type="math_number" id="8e{^1DPK0hDM:M;#X-S2"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="pL0;D`,uYz`_FzqS0iED"> <field name="NUM">1</field> </shadow> <block type="math_rndfixed" id="dngO+Sv-~SYJ@nbcCD?}"> <field name="n">1</field> <value name="x"> <shadow type="math_number" id="IkY$?m}d-0oo0[1S/kHE"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="W{h5)61$s9~M5v9,Fi-O"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="]yL|:!R]:vuM,{XmCAR+"> <field name="NUM">1</field> </shadow> <block type="lists_getIndex" id="}XJb*fL,oH]:}i%XL1@/"> <mutation statement="false" at="true"></mutation> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="}~3#`VQg2s=7HTPvh~,0"> <field name="VAR" id="9zZ/z:qt+2ur[Mg(U{^@">Liste</field> </block> </value> <value name="AT"> <block type="math_number" id="ge_58=bFeMNGFo7bk8`9"> <field name="NUM">2</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="1mGyZqUY*qCf4zf!K^TZ"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <next> <block type="update" id="Qg5uQ5,C~h#CP}OXp,n|"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Datenpunkte.Rechengrößen.Dauer_dezimal</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id=";*9U=xcn:`{pl^f5-rs,"> <field name="VAR" id="H_b:)/lk~U=V#?2Fm-_6">Einschaltdauer</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </xml>
-
@erazor86
Tausche an 2 Stellen die Variable Liste gegen Einschaltdauer. -
@paul53
manchmal könnte es so einfach sein.... Vielen Dank.. -
Hallo zusammen,
ich komme mit meiner Differenzzeit in Minuten ebenfalls nicht weiter. Ich versuche die Zeitdifferenz zwischen "Jetzt" und der letzten Aktualisierung eines Datenpunktes in Minuten zu errechnen und diese in den Datenpunkt "AbwesendSeitMinuten" zu schreiben.
Das folgende Blockly funktioniert bis 59 Minuten prima, alles darüber hinaus funktioniert jedoch nicht. Es werden also zum Beispiel nicht 67 Minuten Differenz dargestellt, sondern nur "7". Die restlichen 60 Minuten verschwinden.
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="comment" id="vdO3Z/b-^J_@l)?Eq_R+" x="13" y="38"> <field name="COMMENT">Abwesenheitszeit berechnen</field> <next> <block type="on" id="-Se3D{`):B`]p/=p_aOI"> <field name="OID">fb-checkpresence.0.presentCount</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="g$$Mh+_gT[pE?%~wmOw7"> <value name="IF0"> <block type="logic_compare" id="B~cGcXi@sZ~Vuxeg9NrH"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="Ra3xND;{0=Gx-[pw@??P"> <field name="ATTR">val</field> <field name="OID">fb-checkpresence.0.presentCount</field> </block> </value> <value name="B"> <block type="text" id="|2l5jEGj$arki%U@aI1*"> <field name="TEXT">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="update" id="fO*d3{jQ-Q,Muo5?^aHF"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.AbwesendSeitMinuten</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_from_date" id="xF2Wqp~s/~y5PUaC_;7^"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">m</field> <value name="VALUE"> <block type="math_arithmetic" id="{)*krPx!rRWcV.lMNvs9"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="rD[[`+/pH}Z,=`RaZDKb"> <field name="NUM">1</field> </shadow> <block type="time_get" id="{YtxVX%(xd!aZrGPIR%/"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">object</field> </block> </value> <value name="B"> <shadow type="math_number" id="U}:)~D1u/;(DT4d+kNZM"> <field name="NUM">1</field> </shadow> <block type="get_value" id="}D,-3Ku3mkH){l1UJ|o?"> <field name="ATTR">lc</field> <field name="OID">fb-checkpresence.0.presentCount</field> </block> </value> </block> </value> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> </xml>