Sleep aber doch nicht sleep ist hier die Frage

Begonnen von deathworm, 03 April 2023, 21:10:08

Vorheriges Thema - Nächstes Thema

deathworm

Hi!

Ich habe meine Angewohnheit, dass ich meist meine Jeans für 4 Tage an habe. Nun ist es jedoch so, dass ich oft froh bin, wenn ich mich noch dran erinnere was ich gestern zum Essen hatte. Ergo ist es immer wieder eine Tortur sich das zu merken. Ein Kalender zum eintragen war schon Mal ein guter Versuch, aber seit dem ich meinen Klamottenschrank getrennt von meinem Badschrank mit den benutzen Klamotten oben drauf habe, klappt das leider auch nicht mehr.

Darum würde ich mir gerne einen Shellyknopf in den Schrank legen, den ich einfach nett drücke und der dann das event speichert. Nun könnte ich natürlich einfach einen sleep reinmachen mit 345.600 Sekunden (4Tage), aber das is ja dann doof weil:
Mal zieh ich gleich morgens eine neue an, Mal mittags und Mal abends.

Somit brauche ich eigentlich ein Event, dass beim trigger einfach 4 Tage später um Uhrzeit X die Nachricht schickt.


z.B.: Hose wird am Montag um 6:12 angezogen. Donnerstag um 18Uhr bekomm ich die Nachricht


Ist das "simpel" möglich oder ist das höhere Programmierkunst?

betateilchen

Du könntest Dir auf Knopfdruck ein at definieren, das in 96 Stunden eine Benachrichtigung auslöst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

deathworm

Nabend teilchen,

wenn ich aber simpel 96 Stunden angebe, dann ist ja die triggerzeit ausschlaggebend. Mir geht es mehr darum, dass es am Triggertag, egal zu welcher Uhrzeit, 4 Tage später zu einer bestimmten Uhrzeit mir ein event schickt.

Und da weiss ich nicht, ob das einfach machbar ist oder ob ich dafür meine Seele verkaufen müsste.

betateilchen

#3
Du kannst ein at auch mit einer Zeitangabe definieren, die so aussieht

define test_at at 2023-04-07T18:00:00 { mache irgendwas }
Auf das heutige Datum 4 Tage draufrechnen, um so einen String zu basteln, ist wirklich nicht kompliziert:

my $string = strftime ("%Y-%m-%dT18:00:00", localtime(time+4*DAYSECONDS));
In Kombination ergibt sich daraus:

define test_at at {strftime("%Y-%m-%dT18:00:00",localtime(time+4*DAYSECONDS))} { mache irgendwas }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

deathworm

#4
Moin

Eben reingemacht und per execnow getestet - funktioniert einwandfrei. Vielen lieben Dank!!


ALs Umsetzung habe ich folgendes gemacht:
DOIF:
([MQTT2_shellybutton1_3C6XXXXXXXXX:event] eq "S") (delete klamotten_hose_at, define klamotten_hose_at at {strftime("%Y-%m-%dT19:00:00",localtime(time+1*DAYSECONDS))} {fhem ("set Telegram _msg Hose in die Wäschetonne") })


Beim drücken des Shellybuttons wird das event S gesetzt. Das DOIF geht hin und macht bei S erstmal ein delete des at, weil dieses beim erneuten drücken nicht geändert werden kann, sondern erst gelöscht werden muss. Dann wird das AT neu definiert mit fester Uhrzeit 19Uhr + 1Tag. Wenn das Ereignis eintritt, wird eine Telegramnachricht verschickt.