NEWS
Anzahl Tage berechnen
-
Moin Leute
Ich habe einen Wassertank von 1000 lt. Mittels Wemos D1 ermittle ich die Distanz der Wasseroberfläche zum Sensor SR04 und ermittle so den aktuellen Füllstand. das funktioniert soweit ohne Probleme.
jetzt möchte ich die Anzahl Tage ermitteln zwischen voll und leer, damit ich abschätzen kann wie lange der Tank reicht.
Wie könnte man das realisieren? -
@albi_63 Zwei Datenpunkte erzeugen: 1. VOLL 2. LEER.
Jeweils beim Erreichen der Werte das aktuelle Datum mit Zeit setzen.
Bei LEER Zustand Anzahl Tage berechnen. -
@MCU
Hy
Ich versuche gerade das script zu erstellen, leider ckecke ich nicht, wie man mit Datum rechnen kann im blockly...
Ich beschreibe im script über einen Testschalter true (später Wassertank voll) die Variable voll. Diesen Wert wird mir in den Datenpunkt Voll geschrieben, dasselbe mit dem Wert Leer. Das funktioniert soweit und ich sehe in den Datenpunkten das Datum und die Uhrzeit.
Das script sieht folgendermassen aus:
Log:11:08:11.468 info javascript.0 (13638) Stop script script.js.common.Wassertank.Anz_Tage 11:08:11.532 info javascript.0 (13638) Start javascript script.js.common.Wassertank.Anz_Tage 11:08:11.536 info javascript.0 (13638) script.js.common.Wassertank.Anz_Tage: registered 1 subscription and 0 schedules 11:08:27.658 warn javascript.0 (13638) script.js.common.Wassertank.Anz_Tage: Der Wassertank reichte für NaN Tage
Wie muss ich die Zeitvormatierung machen damit ich meine Tage, Stunden, Minuten, Sek. berechnet komme?
Wir rechnet man allgemein mit Datums?... -
@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