[90_at.pm] Problem mit datespec aus Funktion

Begonnen von betateilchen, 02 Dezember 2020, 13:43:17

Vorheriges Thema - Nächstes Thema

betateilchen

Hallo Rudi,

im define eines at ist grundsätzlich die Angabe der Ausführungszeit im Format "1609455540" (unix seconds) oder "2020-12-31T23:59:00" (ISO8601) möglich. Funktioniert auch prima.

Das Ganze funktioniert aber nicht, wenn die Ausführungszeit in einem dieser Formate von einer Funktion zurückgeliefert wird.
Dann scheitert die Prüfung GetTimeSpec() in der fhem.pl mit einer Fehlermeldung.

Wäre es ein großer Aufwand, dieses Ansinnen zu ermöglichen?

Mein Anwendungsfall:

  • ich möchte ein periodisches at anlegen, dessen Ausführungszeit von einer Funktion berechnet wird
  • Die errechnete Ausführungszeit kann dabei mehrere Tagen/Wochen im voraus liegen
  • Die Berechnung durch meine Funktion funktioniert auch schon korrekt, die Funktion liefert Unix-Sekunden zurück

Mit sunrise() funktioniert das problemlos, vermutlich, weil da HH:MM:SS zurückkommt, was in meinem Szenario nicht ausreichend wäre.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Habs eingebaut.
Ist mir nicht so elegant gelungen, wie ich das haben wollte.

betateilchen

Danke für die Unterstützung, es funktioniert aber noch nicht ganz.

define at_test at *{ultimo} {}

ultimo() liefert 1609455540 zurück.

Fehlermeldung:

datespec is not allowed with + or *
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Wenn die datespec Prüfung auf Wiederholung entfernt wird, funktioniert das Anlegen wie gewünscht.
Dann findet aber auch keine Prüfung mehr statt, wenn beim Anlegen direkt eine datespec angegeben wird.

Irgendwie finde ich das auch nicht die beste Lösung.

Man sollte die Prüfung nur abschalten, wenn eine Funktion für die Berechnung verwendet wird, in diesem Fall liegt dann die Verantwortung beim Anwender.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

* war auch nicht bestellt.

Ich habe jetzt die Pruefung auf + eingeschraenkt, mit dem Seiteneffekt, dass *{time()} zur Endlosschleife wird.
Bei *{1234567890} passiert nix "schlimmes", das at wird nur einmal ausgefuehrt.

betateilchen

Zitat von: rudolfkoenig am 02 Dezember 2020, 14:57:06
* war auch nicht bestellt.

eigentlich schon... :)

Zitat von: betateilchen am 02 Dezember 2020, 13:43:17
Mein Anwendungsfall:

  • ich möchte ein periodisches at anlegen, dessen Ausführungszeit von einer Funktion berechnet wird
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: rudolfkoenig am 02 Dezember 2020, 14:57:06
Ich habe jetzt die Pruefung auf + eingeschraenkt,

Danke, scheint jetzt zu funktionieren.

Es gibt ja immer wieder den Wunsch, am Monatsletzten um 23:59 Uhr irgendwelche Aufgaben von FHEM erledigen zu lassen (z.B. bestimmte Monatswerte loggen). Bisher ist der immer wieder zitierte Lösungsweg "prüfe jeden Tag um 23:59, ob morgen ein neuer Monat ist. Wenn nicht, mache nix." Dafür existiert dann ein at, das 30 von 31 Mal im Monat überhaupt nix zu tun hat. Effektiv ist das nicht.

Deshalb will ich eine Funktion bauen, die das at immer nur einmal pro Monat aufruft.

Vielleicht werde ich die Funktion auch für den Einbau in 90_at.pm oder in die 99_Utils.pm vorschlagen. Aber erst, wenn ich sicher bin, dass sie korrekt funktioniert. Dafür ist der Dezember gerade ideal, weil dann sowohl ein Monats- als auch ein Jahreswechsel ansteht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!