NEWS
Anzahl Tage berechnen
-
@albi_63 sagte:
Wir rechnet man allgemein mit Datums?
Wenn man eine Zeit-Differenz berechnen will, muss man Anfang (Voll) und Ende (Leer) als Datum-Objekt speichern. Um diese Differenz Leer - Voll in ein beliebiges Zeit-Format zu konvertieren, muss man noch die Zeitzone berücksichtigen.
Etwa so: -
@paul53
Hy Paul
Danke dir für deine Hilfe. Ich habe jetzt das script angepasst auf meinen Testschalter. Aber irgendwo sitzt der Hund.
Das Log gibt mir bei Monat 1 und bei Tage auch die 1 raus.12:31:51.134 info javascript.0 (13638) script.js.common.Wassertank.Anz_Tage: registered 1 subscription and 0 schedules 12:32:44.520 warn javascript.0 (13638) script.js.common.Wassertank.Anz_Tage: Der Wassertank reichte für 01.01 00:00:45 Tage Std: Min
Anbei das script
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="QyKrT,r/Z.uEZuB1cCk6">Voll</variable> <variable id="}wmbN}pP_^UnXdMM~xr6">Anz_Tage</variable> <variable id="S(r:dJ+2zJ_K^*ns[%8h">Leer</variable> </variables> <block type="variables_set" id="-/BuYzQg0[woH]GqqkmV" x="38" y="38"> <field name="VAR" id="QyKrT,r/Z.uEZuB1cCk6">Voll</field> <value name="VALUE"> <block type="convert_from_date" id="@E9qvt%M_z*lAE|3|:Mj"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">object</field> <value name="VALUE"> <block type="get_value" id="-:/T1V[x8?/MkwyGHGG,"> <field name="ATTR">val</field> <field name="OID">javascript.0.Eigene_Datenpunkte.Testschalter</field> </block> </value> </block> </value> <next> <block type="comment" id="JTThMM~5)+XN9YZKDn^7"> <field name="COMMENT">Voll</field> <next> <block type="on" id=")zg+#0@Ltxt34qmTtE9b"> <field name="OID">javascript.0.Eigene_Datenpunkte.Testschalter</field> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="O=4X@^|$adiI^q*scv~3"> <field name="VAR" id="}wmbN}pP_^UnXdMM~xr6">Anz_Tage</field> <value name="VALUE"> <block type="on_source" id="7Wkmj?g:@4}?o%R~=J;X"> <field name="ATTR">state.lc</field> </block> </value> <next> <block type="update" id="z^%m8=RBV218J=[!*|/G"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Eigene_Datenpunkte.Wassertank.Voll</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_from_date" id="aF.d{;oE?N|V.N^3O?Lg"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation> <field name="OPTION">custom</field> <field name="FORMAT">JJJJ.MM.TT SS:mm:ss</field> <value name="VALUE"> <block type="variables_get" id="WI:]LM3-YGa8s+:4zrRQ"> <field name="VAR" id="QyKrT,r/Z.uEZuB1cCk6">Voll</field> </block> </value> </block> </value> </block> </next> </block> </statement> <next> <block type="comment" id="k,yKec_%s)@7n83M3of9"> <field name="COMMENT">Leer</field> <next> <block type="on" id="{55TC3}K4a@l:4$@M,U$"> <field name="OID">javascript.0.Eigene_Datenpunkte.Testschalter</field> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="gXHSbLd`-*=_JDm`NEl`"> <field name="VAR" id="S(r:dJ+2zJ_K^*ns[%8h">Leer</field> <value name="VALUE"> <block type="on_source" id="`h[X6_8+8x[JCPy9DEq}"> <field name="ATTR">state.lc</field> </block> </value> <next> <block type="update" id="[2[cL{Ua|eK:qZ^(CRoP"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Eigene_Datenpunkte.Wassertank.Leer</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_from_date" id="QDIgRy%}5wUrj@3MMoW/"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation> <field name="OPTION">custom</field> <field name="FORMAT">JJJJ.MM.TT SS:mm:ss</field> <value name="VALUE"> <block type="variables_get" id="ECaK}:wet.T.pe:lB`Si"> <field name="VAR" id="QyKrT,r/Z.uEZuB1cCk6">Voll</field> </block> </value> </block> </value> <next> <block type="variables_set" id="b}sNlY!L7iE,_ER:h]1Y"> <field name="VAR" id="}wmbN}pP_^UnXdMM~xr6">Anz_Tage</field> <value name="VALUE"> <block type="convert_from_date" id="AN:(UBwQH{X*~Eu7(A(}" inline="false"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation> <field name="OPTION">custom</field> <field name="FORMAT">MM.TT SS:mm:ss.sss</field> <value name="VALUE"> <block type="math_arithmetic" id="o|Zy%2G/,HaU{`)XJo?P" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id=")suP~`j2q)26gS7.9,{["> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="v)(k;?Zk!jW_S!PWI$Pt"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="Z,m`#-rT3Xws-6F%Wby0"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="aq1P9afQZ(Gj7xacgg%S"> <field name="VAR" id="S(r:dJ+2zJ_K^*ns[%8h">Leer</field> </block> </value> <value name="B"> <shadow type="math_number" id="c_D}!OO@RhR206Zi#q`H"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="@=p=s3`Xd@!0!AyDnwOR"> <field name="VAR" id="QyKrT,r/Z.uEZuB1cCk6">Voll</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="_-E7:Y6H*,,b5e3qdH}S"> <field name="NUM">1</field> </shadow> <block type="convert_from_date" id=",J;aXR^(gFO;DF6TJK(8"> <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=";|KbE)i+qviS?x;xsA`S"> <field name="TEXT">1970-01-01 00:00</field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="update" id="Xh9:~6:6U8:~j:I_hy5u"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Eigene_Datenpunkte.Wassertank.Anz_Tage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text_join" id="ty!AHeO0jd#MR+Yf,KYU"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="_E+FYD:XnDs+/v7Or#DK"> <field name="TEXT">Der Wassertank reichte </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="5bAUP@U9SX:+m1iDMhYF"> <field name="VAR" id="}wmbN}pP_^UnXdMM~xr6">Anz_Tage</field> </block> </value> <value name="ADD2"> <block type="text" id="orElMSg28TSabR{~Mq[*"> <field name="TEXT">Tage</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@albi_63
Es sind einige Fehler enthalten. Habe mal korrigiert (Testschalter true = voll, false = leer):
@albi_63 sagte in Anzahl Tage berechnen:
Das Log gibt mir bei Monat 1 und bei Tage auch die 1 raus.
Ja, das stimmt. Will man auch Tage mit übergeben, funktioniert die Konvertierung nicht, denn das Jahr beginnt mit dem 01.01. und nicht mit dem 00.00.
-
@albi_63
Hier eine Version, mit der Tage und Restzeit getrennt berechnet werden:
-
@paul53
Hy Paul, wo hast du blos all das Wissen her? Ich verstehe nur noch Bahnhof, aber es scheint mit dem Testschalter zu funktionieren.
Jetzt geht mein Problem natürlich weiter, wo setze ich im script jetzt die Werte des Sensors SR04? Leer 110cm, voll 23cm?
Ich versuche es mal und poste das script danach.
Danke dir vielmals -
@paul53
Ich habe jetzt das script auf den SR04 angepasst.
Funktioniert mein script so? Bleibt der Trigger nach wie vor "ist kleiner als letztes" oder muss ich den ändern auf "wurde aktualisiert"
Bei der Distanz unter 21cm ist der Tank voll und bei > 110 cm ist er leer.
Da der Tank jetzt voll ist kann ich das script nicht testen...
Script:
Code:
-
@paul53
Wie funktioniert das mit Spoiler oder Export? Coole Sache -
@albi_63 sagte:
Script:
Der Trigger funktioniert so nicht. Korrektur:
@albi_63 sagte in Anzahl Tage berechnen:
Wie funktioniert das mit Spoiler oder Export?
Im Spoiler bitte noch Code tags verwenden.
-
@paul53
So Paul
Jetzt habe ich alles so angepasst wie es sein muss. Habe das script mit dem SR04 Sensor getestet und, "oh staune", es klappt.
Du bist der Beste, tausend Dank
Im Anhang noch das fertige script:
Script für all diejenigen die es interessiert:
-
-
@paul53
Hallo Paul
Ich hoffe du bist wohl auf.......
Beim letzten Script der Tagebrechnung meines Wassertankes hatten wir ja den Trigger mit Wert und verheriger Wert gesetzt.
Jetzt kommt es leider zeitweise vor, dass der Trigger auslöst und mir das Startdatum neu setzt. Ich vermute dass der Sensor zeitweise Fehlmessungen verursacht und so den Trigger neu startet.
Wenn ich jetzt die Range höher setze zb: Wert < 23 und vorheriger > 30, wird der Trigger nicht ausgelöst.
Wie könnte man das definieren damit es trotzdem funktioniert? -
@paul53
Ich habe mal den Sensor geloggt, dieser schwankt tatsächlich mal hoch mal runter30.018 true 2020-11-10 21:12:16.361 30.035 true 2020-11-10 21:11:46.334 30.018 true 2020-11-10 21:11:16.401 30.018 true 2020-11-10 21:10:16.385 30 true 2020-11-10 21:09:46.321 30.035 true 2020-11-10 21:09:16.325 29.561 true 2020-11-10 21:08:46.202 29.579 true 2020-11-10 21:08:16.281 29.579 true 2020-11-10 21:07:46.301 30 true 2020-11-10 21:07:16.303 29.982 true 2020-11-10 21:06:46.306 29.579 true 2020-11-10 21:06:16.314 30.035 true 2020-11-10 21:05:46.249 30.053 true 2020-11-10 21:05:16.294 30.018 true 2020-11-10 21:04:46.261 29.579 true 2020-11-10 21:04:16.321 29.561 true 2020-11-10 21:03:51.669 null true 2020-11-10 21:03:51.669
-
@paul53
Hallo Paul
Könnte mein Trigger so funktionieren?
-
@albi_63 sagte:
dass der Trigger auslöst und mir das Startdatum neu setzt.
Ist es ein Problem, wenn als Startdatum die Zeit des letzten Unterschreiten des Grenzwertes verwendet wird (außer das die Telegram-Meldung mehrfach kommt) ? Offenbar schwankt der Pegel etwas.
-
@paul53
Hy Paul
Wenn er mir das Startdatum ändert, dann stimmt doch die Berechnung nicht mehr, wie lange der Tank reichte.
Oder liege ich hier falsch. -
@albi_63 sagte:
stimmt doch die Berechnung nicht mehr, wie lange der Tank reichte.
Solange der Wert um 30 schwankt, ist der Tank voll. Oder ?
-
@paul53
Ja -
@paul53
Aber wenn der Tankinhalt fällt, zb, auf 50cm , dann wird der Sensor mir wieder ein wenig auf und ab varieren und das reicht aus um das Startdatum wieder zu ändern -
@albi_63 sagte:
wenn der Tankinhalt fällt, zb, auf 50cm
Was sind 50 cm ? Fast voll ?
Wenn der Wert über 30 bleibt, wird das Startdatum nicht mehr geändert. -
@paul53
Der Wert steigt dauernd mit jedem Verbrauch. 30 cm voll, 110 cm leer