notify Status während disabledAfterTrigger bzw disabledForIntervals

Begonnen von yersinia, 11 März 2026, 15:47:45

Vorheriges Thema - Nächstes Thema

yersinia

Ich hab eine (eher kosmetische, völlig unkritische) Frage zu notify in Verbindung mit disabledAfterTrigger und disabledForIntervals.

Ich nutze, vereinfacht, folgende funktionierende(!) notify Definiton:
defmod notify_test notify Device:.* { \
    Log(3, "Yeah, Event triggered");;\
}
attr notify_test disabledAfterTrigger 30
attr notify_test disabledForIntervals 20:00-24:00 00:00-08:00
Device generiert alle 60s Events für mehrere Readings (ist gewollt und imho ok); disabledAfterTrigger 30 nutze ich zum entprellen - also die Aktion nur einmalig auszuführen nachdem das erste Reading aus dem Device ein Event erzeugt hat.
Zwischen 20Uhr und 8Uhr benötige ich das notify gar nicht, daher disabledForIntervals.
Das alles funktioniert wie erwartet.

Was mich etwas verwirrt ist die Tatsache, dass ich im FHEMWEB nicht einfach erkennen kann, ob das notify Device gerade disabled ist (auf Basis der zwei Attribute) oder es keinen triggernden Event gab. STATE liefert die letzte Triggerzeit (mWn) und state, dass das notify aktiv ist:
   NOTIFYDEV  Device
   NR         474
   NTFY_ORDER 50-notify_test
   REGEXP     Device:.*
   STATE      2026-03-11 15:44:47
   TRIGGERTIME 1773240287.61623
   TYPE       notify
   READINGS:
     2026-03-11 09:04:05   state           active

Natürlich kann ich im Device nachsehen, wann der letzte Trigger war und es dann ausrechnen/abschätzen - aber gibt es auch einen eleganteren Weg zu erkennen, ob
- das notify Device gerade (temporär) disabled ist nach einem trigger (disabledAfterTrigger) aber nach Ablauf der Zeit (hier 30s) wieder aktiv lauscht?
- das notify Device gerade (temporär) disabled ist wegen (disabledForIntervals)?
- das notify Device nicht getriggert hat, weil es keinen passenden Event gegeben hat?

Generell sind STATE und state für mich so auch in Ordnung: ich finde es praktisch, dass STATE den letzten Trigger anzeigt. Ich finde auch den generellen state active passend, weil im Prinzip das Device auch nicht disabled/inactive und somit aktiv ist.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Trixie (perl 5.40.1) | 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

Zitat von: yersinia am 11 März 2026, 15:47:45gibt es auch einen eleganteren Weg zu erkennen, ob
- das notify Device gerade (temporär) disabled ist nach einem trigger (disabledAfterTrigger) aber nach Ablauf der Zeit (hier 30s) wieder aktiv lauscht?
- das notify Device gerade (temporär) disabled ist wegen (disabledForIntervals)?
- das notify Device nicht getriggert hat, weil es keinen passenden Event gegeben hat?

  • nein
  • nein
  • nein

Das notify wird IMMER getriggered und ausgeführt. Es prüft erst bei der Ausführung für sich selbst, ob es aufgrund irgendwelcher Attribute (oder set active/inactive) disabled ist oder nicht.

Sollte es zu der Erkenntnis kommen, dass es gerade nicht aktiv sein soll, dann bricht es die Verarbeitung einfach ab.

Es gibt aber zumindest einen eleganten Weg, herauszufinden, ob ein device disabled ist oder nicht:

{IsDisabled("at_nextion")}
liefert eine 1 wenn das device "at_nextion" disabled ist.
Den Grund für das disable findest Du so aber auch nicht heraus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Guybrush

ich glaub das was du willst geht vom Modul her nicht. das wird meine ich nur intern berücksichtigt.

Du könntest aber zb im notify ein reading 'temporaryDisabled' (oder anders benannt) im notify_test device auf true oder 1 setzen. Dann noch ein at device mit +30 sek anlegen, was das reading wieder auf false oder 0 setzt. ob man das wirklich braucht bezweifel ich, da man 30 sekunden ja auch schnell am timestamp ablesen kann und das ja eigentlich nur fürs konfiguieren wenn überhaupt nötig ist?