"at" vor anderem "at" schalten

Begonnen von xeenon, 24 Juli 2023, 19:11:03

Vorheriges Thema - Nächstes Thema

xeenon

Hallo,

ich habe ein einfaches at, welches um 20:00 was ausschaltet.

Ich würde gern dynamisch 5 Minuten vorher ein zweites at schalten. Mit dynamisch meine ich, dass die Zeit angepasst wird wenn sich das erste at ändert.

[at1:TIMESPEC]-00:05:00

Das scheint mir zu einfach gedacht, funktioniert leider nicht.

Irgendwelche Tipps?

Viele Grüße

betateilchen

defmod erstes_at at *19:55 {}
defmod zweites_at at *20:00 {}
defmod at_notify notify global:MODIFIED.zweites_at {my $t=InternalVal("zweites_at","TRIGGERTIME",0)-300;; fhem("defmod erstes_at at *$t ".InternalVal("erstes_at","COMMAND","{}"));;}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Aber wäre es nicht logischer, das zweite at fünf Minuten nach dem ersten auszuführen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

xeenon

Hoppala, das muss ich erst verstehen 🥴 danke dir.

In dem Fall nicht. Es geht um eine Dosierung.

betateilchen

Zitat von: xeenon am 24 Juli 2023, 19:32:28Hoppala, das muss ich erst verstehen

und, hast Du das Prinzip durchschaut?

  • Lege die drei devices an wie beschrieben.
  • Dann mache ein "defmod zweites_at at *21:17 {}"
  • Dadurch wird "erstes_at" auf 21:12 geändert

Zum Verstehen des Ganzen am besten das notify von rechts nach links anschauen.

  • Das notify ändert die Uhrzeit von "erstes_at" und übernimmt dabei den bestehenden Befehl des at
  • Die neue Uhrzeit wird aus "zweites_at" gebildet, indem 300 Sekunden von dessen Ausführungszeitpunkt abgezogen wird
  • Das Ganze wird ausgeführt, wenn "zweites_at" mittels defmod geändert wird und der entsprechende event erzeugt wird


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!