NEWS
Zeitdifferenz berechnen
-
@matthias-i sagte: jetzt müsste ich nur noch wissen, wie man Zeiten addieren kann.
"erhöhe einschaltdauer" kumuliert bereits. Man müsste also den Wert einmal pro Woche auf 0 zurück setzen.
-
@paul53 ich habe das auf folgendem Wege gelöst:
Im nächsten Schritt müsste jetzt "LaufzeitAktuell" nach jedem Mähen zu "LaufzeitTag" addiert werden. -
@paul53 ich habe es wie folgt hinbekommen:
Datum/Zeit nach String konvertiert.
Den String "Ziffer" für Ziffer (also ZehnerStunde, EinerStunde, ZehnerMinute, EinerMinute, ZehnerSekunde, EinerSekunde) in Variablen überführt.
Dann stellenweise addiert und ggf. Überträge verrechnet.
Dann den String mit der korrekten Zeitdauer konvertiert nach Datum/Zeit.Das funktioniert, aaaber: Geht das nicht leichter/einfacher/schneller?
Besteht keine Möglichkeit zwei Datenpunkte der Form SS:MM:ss zu addieren, sodass das Ergebnis ebenfalls das Format SS:MM:ss hat? -
@matthias-i sagte: Geht das nicht leichter/einfacher/schneller?
Ja.
@matthias-i sagte in Zeitdifferenz berechnen:
Besteht keine Möglichkeit zwei Datenpunkte der Form SS:MM:ss zu addieren, sodass das Ergebnis ebenfalls das Format SS:MM:ss hat?
Man kann nur Zahlen addieren, keine Strings.
-
@paul53 Wie kann man das realisieren?
Wenn ich dich richtig verstehe müsste man ja dann SS:MM:ss je zu einer Zahl konvertieren, dann die Addition vornehmen und dann von Zahl wieder zu SS:MM:ss konvertieren? Könntest du mir sagen, wie das geht? -
@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.
-
@paul53 Vielen Dank für die schnelle Antwort!
Es geht mir auch darum, zu verstehen, wie man mit Datenpunkten des Formates SS:MM:ss rechnen kann.
Auch bei der Ladezeit des E-Autos möchte ich gerne Zeiten auf diese Weise berechnen.
Zusammenfassen kann man also sagen, dass SS:MM:ss in Millisekunden umgewandelt werden muss, dann kann man mit dem Wert (als Zahl) rechnen und wandelt das ganze anschließend wieder in das gewünschte Datum-/Zeitformat wie z.B. SS:MM:ss um, richtig? -
@matthias-i sagte: SS:MM:ss in Millisekunden umgewandelt werden muss
Eine Zeitdifferenz in "hh:mm:ss" muss so gewandelt werden, damit mit der Differenz in ms weiter gerechnet werden kann:
-
Ich möchte nicht unbedingt ein neues Thema eröffnen - ich hoffe, mein Anliegen passt hier rein.
Ich würde gerne die Zeitdifferenz (Minutengenau bzw Stundengenau (als Kommazahl) würde ausreichen) der aktuellen Tageszeit bis zum Sonnenuntergang und Sonnenaufgang berechnen.Habt Ihr eine Idee, ob / wie das möglich ist?
Besten Dank im Voraus
-
@strobi sagte: Stundengenau (als Kommazahl) würde ausreichen) der aktuellen Tageszeit bis zum Sonnenuntergang
-
@paul53 Hallo,
ich möchte gerne die Laufzeit meines Roombas mit Hilfe der Start- und der Endzeit berechnen und habe folgendes Blockly gemacht. Allerdings wird die Differenz/Laufzeit nicht korrekt berechnet. Die berechnete Dauer ist im Bsp. 2St. 16min. Tatsächlich sind es aber 1 Std. und 16 min.
Wer kann mir helfen?
-
@newbie2007 Die berechnette Zeit in Millisekunden ist noch richtig. Sie wird im folgenden jedoch als Timestamp vom 01.01.1970 berechnet und so weit ich mich erinnern kann in der falschen Zeitzone
-
@homoran was kann ich tun?
-
@homoran sagte: in der falschen Zeitzone
Ja, siehe hier.
-
@paul53 Das war´s.
Danke euch beiden.
-
Ich schließe mich mit einem ähnlichen Thema mal an..
Ich möchte nach Beginn einer Aktion, die per Bool festgehalten wird, nach 20 Sekunden feststellen, ob sie in den letzten 10 Sekunden weiter ausgeübt wurde
<block xmlns="https://developers.google.com/blockly/xml" type="on" id="jK!Srf4|s?My,i]Z?.e_" x="38" y="37"> <field name="OID">zigbee.1.00158d000799f9ae.opened</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="FDm6(4_CSQM.|d^|cYG2"> <value name="IF0"> <block type="logic_compare" id="72v{*O0YKSIW;h)t.%wM"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="(65c_U3)Y7RM59}@$|Kr"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="?~ft#;0JMLPi^5_=iFmQ"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="controls_if" id="HMVL(8UgPCqNF2+seN/5"> <value name="IF0"> <block type="logic_compare" id="{p,x[K=9#5HqN6]e4/;8"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="~`RyQBMVd+],i;a3%/Ou"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Hometrainer_Skripte.Aussetzung_Benachrichtigungen</field> </block> </value> <value name="B"> <block type="logic_boolean" id="At+vP+3x:dXo*226VG:1"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="update" id="x]/[eU$U^~U?E~Yb%2Z)"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Hometrainer_Skripte.Aussetzung_Benachrichtigungen</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="i.NxT_cZm:D3pDq|nfYY"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="update" id="CqBYKGD%HdGVtp.D-`=}"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Hometrainer_Skripte.Aussetzung_Benachrichtigungen</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2</field> <field name="UNIT">min</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="U6f`+?oKBw0xTIG*|lsb"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="zqFe_u[sWLj;+]dMW##1"> <field name="VAR" id="xE-PO6fl5.;X+JU}_9rQ">Zeitdifferenz in ms</field> <value name="VALUE"> <block type="math_arithmetic" id="MQ6nN[*zAT8GVfWg1;-O" inline="false"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="uvD{f=e]!:O/B,9ALM*y"> <field name="NUM">1</field> </shadow> <block type="time_get" id="|wMCWeum)VGvX$e~)i4R"> <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="Bz#Vj4[#pNfW8n`Wr+[m"> <field name="NUM">1</field> </shadow> <block type="on_source" id="A~{K`b1A3*:7V2.%c:=4"> <field name="ATTR">state.ts</field> </block> </value> </block> </value> <next> <block type="timeouts_wait" id="ca*Hm,2ZbBK$qTmx;#)4"> <field name="DELAY">20</field> <field name="UNIT">sec</field> <next> <block type="comment" id="6#xzLsShVx+oic{%WeO;"> <field name="COMMENT">Zeitberechnung: erste Zahl für Start bei 00:00</field> <next> <block type="comment" id="PeRcRKspnBrM1f!.o6Zn"> <field name="COMMENT">1000 für 1 Sekunde x 10</field> <next> <block type="comment" id="dKTi=DXeE:d~t:`oElVJ"> <field name="COMMENT">Zeitdifferenz darf maximal <10 Sekunden sein</field> <next> <block type="controls_if" id="~jT?0Z)3UnK1.zIu0LJS"> <value name="IF0"> <block type="logic_compare" id=":GPAg!:7I%ju?fd)KX0E" inline="false"> <field name="OP">LT</field> <value name="A"> <block type="convert_from_date" id="czfF9^;@3a@u.-_-nu{G"> <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="variables_get" id="SROQT(0H9:`1U/|,B7Fc"> <field name="VAR" id="xE-PO6fl5.;X+JU}_9rQ">Zeitdifferenz in ms</field> </block> </value> </block> </value> <value name="B"> <block type="convert_from_date" id="cZos(T}ax%]7`},ACGmj"> <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="@C-m9AQ}$VRn$dkvAmrS"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id=".H8tQuQ;VnV8w2ZW@|%h"> <field name="NUM">-3600000</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="/Jsy}]]3/khN%]%JMKI)"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="9ToNQ#]u8^EP]_?=nvtk"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="x*HYUV1ky~+[EDmXu@Tz"> <field name="NUM">1000</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="#~^=`kMd}9)_t|v;.N]9"> <field name="NUM">10</field> </shadow> </value> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="pB:;!`u9TxYb{eB+GSJO"> <field name="INSTANCE">.1</field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="`w]AkcjR$}Tus_1HsmPo"> <field name="TEXT">Testnachricht: Kurbeln längere Zeit gedreht</field> </shadow> </value> <value name="USERNAME"> <block type="text" id="%?/-9(?N0.HXoD4gOL:l"> <field name="TEXT">Patrick</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block>
Leider komme ich einfach nicht drauf. Nach ca. 10 Stunden heutiger Beschäftigung mit IoBroker scheitere ich leider an der Berechnung, vielleicht auch an der Logik?
Was mache ich falsch?
-
@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.