at mit disabledForIntervals -> FHEM Befehle am Anfang und Ende des Intervals

Begonnen von yersinia, 23 März 2025, 21:25:26

Vorheriges Thema - Nächstes Thema

yersinia

Hallo zusammen,
ich habe ein periodisches at mit disabledForIntervals, in etwa so:
defmod at_Test at +*00:15:00 {\
#perlstuff
}
attr at_Test disabledForIntervals {sunset_abs()}-24:00 00:00-{sunrise_abs()}
Das funktioniert auch gut und wie erwartet.

Nun würde ich gerne am Anfang und am Ende des Intervals (wenn das at disabled ist) einmalig jeweils verschiedene fhem Befehle absetzen/perl code ausführen. Idealerweiser gerne in direkter Verbindung mit bzw im at Device.

Ich dachte an
  • jeweils ein at zum sunset_abs() und sunrise_abs() definieren - dann hätte ich insgesamt drei at devices
  • mit einem notify auf die Änderung des at readings state reagieren - kann notify auf die Änderung (Event; disabled -> next: nn bzw next: nnn -> disabled) reagieren?
Gibt es noch eine andere Optionen/Ideen? Oder "weiß" ein at device ggf wann es das erste bzw letzte mal am Tag ausgeführt (werden) wird?

Danke vorab für Denkanstöße. :)
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

Ein at ändert seinen state nicht wegen disabledForIntervals, deshalb scheidet ein notify aus.

Ein at ist grundsätzlich "dumm" was seine Ausführungszeiten und Betriebszustände angeht und prüft erst, sobald es aufgerufen wird, ob es überhaupt etwas tun soll, oder ob es wegen irgendwelcher attribute oder anderer widriger Umstände zu diesem Zeitpunkt "disabled" spielen soll.

Um es anders zu sagen: weder "disabled" noch "disabledForIntervals" noch "set inactive" schalten ein at tatsächlich aus. Es wird nur das Abarbeiten des Ausführungsteils unterbunden und direkt der nächste Ausführungszeitpunkt gemäß der timespec in DEF berechnet.

Die einzige funktionierende Variante sind deshalb die zusätzlichen at zu sunrise() bzw. sunset().
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

yersinia

Danke für die schnelle Antwort. Ich hab es "befürchtet", dass ich weitere at Devices dafür benötige.
Zitat von: betateilchen am 23 März 2025, 21:38:53Ein at ändert seinen state nicht wegen disabledForIntervals
Obwohl das reading state sich tatsächlich nach jeder at-Runde ändert (disabled bzw Next: hh:mm:ss), erzeugt dies kein Event auf welches ein notify reagieren könnte?
Im Event-Monitor finde ich einen entsprechenden Event - der Wert entspricht dem neuen Wert des readings state:
2025-03-24 09:40:17 at at_Test Next: 09:55:17(selbst dann bleibt noch die Frage, ob ein notify auf eine Änderung des states von disabled zu Next: hh:mm:ss und Next: hh:mm:ss zu disabled mitbekommt)

Zitat von: betateilchen am 23 März 2025, 21:38:53Die einzige funktionierende Variante sind deshalb die zusätzlichen at zu sunrise() bzw. sunset().
und wahrscheinlich die einfachste Lösung in dem Kontext.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

So, jetzt habe ich das tatsächlich mal ausprobiert. Die Aussage, dass sich state nicht ändert, nehme ich zurück.

defmod test_at at +*00:00:15 {}
attr test_at disabledForIntervals 09:53-09:54

liefert im Event Monitor:

2025-03-24 09:52:01 at test_at Next: 09:52:16
2025-03-24 09:52:16 at test_at Next: 09:52:31
2025-03-24 09:52:31 at test_at Next: 09:52:46
2025-03-24 09:52:46 at test_at Next: 09:53:01
2025-03-24 09:53:01 at test_at disabled
2025-03-24 09:54:01 at test_at Next: 09:54:16

man könnte also tatsächlich irgendwas stricken, um den Zustandswechsel auszuwerten.
Aber vermutlich bräuchte man dann zwei notify und müsste sich auch noch irgendwo einen vorherigen Zustand merken. Das wäre m.E. nicht weniger aufwändig, als zwei at devices, die das gewünschte Verhalten sauber und leicht verständlich abbilden.

Bei mir gibt es in FHEM nur jeweils ein at für sunrise() und sunset(), und die Abarbeitung aller Aufgaben, die zu diesen Zeitpunkten erfolgen soll, ist in der 99_myUtils.pm hinterlegt. Das vereinfacht die Pflege und ggf. Fehlersuche erheblich.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!