NEWS
Zeitdifferenz falsch + wie Benachrichtigung nur 2x erhalten
-
Hallo zusammen,
ich habe einen akkubetriebenen ESP8266 mit einem DHT22 (Temperatur und Luftfeuchtigkeitssensor), der über mqtt alle 10 min die Werte an den iobroker schickt. Dazwischen geht er in den deepsleep um Energie zu sparen.
Nun wollte ich mir eine (indirekte) Betriebsüberwachung basteln:Alle 10s wird von der aktuellen Uhrzeit der Zeitstempel des DPs abgezogen. Ist die Differenz größer 15 min wird über Telegram eine Nachricht verschickt.
Zum Testen habe ich einen debug output vorangestellt. Dieser gibt mir z.B. dieses aus:
javascript.0 2022-03-16 08:45:30.002 info script.js.Testskripte.Alter_DP_blockly: 01:1508:4508:30
01:15 -> Differenz aktuelle Zeit - Zeitstempel DP in Stunden und Minuten
08:45 -> aktuelle Zeit in Stunden und Minuten
08:30 -> Zeitstempel DP in Stunden und MinutenDie Differenz sollte mMn 15 min betragen und nicht 1h15 min. Woran liegt diese Abweichung? Interessanterweise schickt es die Nachricht auch nur bei Differenz >01:15. Also scheint es ja irgendwie doch zu stimmen?!
Das Skript schickt mir nun alle 10s eine Nachricht, so lange die Differenz >15 min ist. Wie kann ich es umschreiben, dass es mir nur 2 Nachrichten schickt? Das cron Intervall werde ich später auf 10 min setzen, zum Testen ist es jedoch auf 10s gestellt.
Geht dies über Schleifen? Folgendes hatte ich getestet:Allerdings startet hier die Schleife alle 10s neu, oder?
Hier noch mein blockly als Code:
Grüße
-
@thohilde sagte: Woran liegt diese Abweichung? Interessanterweise schickt es die Nachricht auch nur bei Differenz >01:15.
Es liegt an der Zeitzone - siehe hier.
-
@thohilde Warum willst Du den Zeitstempel alle x Minuten prüfen. Die ganze Funktion sollte viel einfacher gehen:
- Variable
MsgCount
auf 0. - Trigger auf den Datenpunkt, Wert wurde aktualisiert, darin:
anhalten Intervall
MsgCount
= 0Ausführen Intervall
alleX
minuten:
-- Wenn MsgCount > 0 dann Nachricht an Telegramm: Sensor hat seitMsgCount
*X
Minuten keine Nachricht gesendet.
-- WennMsgCount
> 2 dannanhalten Intervall
--MsgCount
=MsgCount
+1
Dabei muss
X
grösser als das Aktualisierungsintervall des Sensors sein, ansonsten bekommst du regelmässig Meldungen.A.
- Variable
-
-
@asgothian Danke. Ich bin noch ziemlicher Anfänger in blockly. Interessant, wie man so ein Problem auch elegant lösen kann.
Ich habe deine Textanleitung mal versucht umzusetzen. Mein blockly weicht dabei aber von @paul53 ab.Ist meine Variante falsch oder einfach nur aufgebläher und weniger elegant?
-
@thohilde sagte: Ist meine Variante falsch oder einfach nur aufgebläher und weniger elegant?
Beides. Falsch:
- Trigger ändern in "wurde aktualisiert"
- Nach dem Senden darf das Intervall nicht gestoppt werden
- "sonst falls" wird nie ausgeführt
Unnötig ist die Abfrage > 0.
-
@paul53 Danke.
Für mein Verständnis: das erste stoppen der zyklischen Ausführung ist dafür da, dass keine Nachricht gesendet wird, falls das Intervall gestartet wurde aber innerhalb der Zeit der DP doch geändert wird? -
@thohilde sagte: das erste stoppen der zyklischen Ausführung ist dafür da, dass keine Nachricht gesendet wird, falls das Intervall gestartet wurde aber innerhalb der Zeit der DP doch geändert wird?
Richtig: Aktualisiert wird (Wertänderung ist nicht nötig).