"Entwarnung" nach Auslösen eines Watchdogs

Begonnen von fruemmel, 27 November 2014, 17:40:26

Vorheriges Thema - Nächstes Thema

fruemmel

Hallo,

ich nutze watchdogs in Verbindung mit PRESENCE, um Meldungen auszugeben, falls ein Gerät per IP nicht mehr erreichbar ist.
Nun würde ich gerne eine Entwarnungsmeldung geben, wenn das Gerät wieder erreichbar ist.

Idee: Nachdem der watchdog ausgelöst hat, setze ich ihn ja mit trigger direkt wieder in den Zustand defined. Wenn nun das passende Event mit "present" kommt, wird der Watchdog ja wieder aktiviert und startet die Überwachung. Könnte man nicht ein Attribut für Perl-Code erfinden, der beim Wechsel vom Zustand "defined" in den Zustand "activated" ausgeführt wird?

Mir ist klar, dass man das mit einem notify problemlos bauen kann, mir werden das nur ein paar notifies zu viel für die Geräte.
Oder gibt es eine ganz andere Lösung (außer ein Nagios aufzusetzen  ;))?

Gruß Wolfgang

rudolfkoenig

Habs unter dem Namen execOnActivate eingebaut.

fruemmel

Hallo Rudolf,

vielen Dank, das ist eine super Sache. Allerdings führt er das execOnActivate jedesmal aus, auch wenn der watchdog vorher schon aktiviert war. Lässt sich das ändern, dass execOnActivate nur ausgeführt wird, wenn der watchdog vorher im Status defined war? Dann würde das perfekt zum PRESENCE passen.

rudolfkoenig

Kannst du mir das anhand des Trivialbeispiels:
define d1 dummy
define w1 watchdog d1:on 00:00:05 d1:off { Log 1, "my w1 triggered" }
attr w1 execOnActivate { Log 1, "my w1 active" }

die ich z.Bsp. mit
set d1 on
ausloesen kann, demonstrieren, wann was passieren soll?

fruemmel

Hallo Rudolf,

ich habe dein Beispiel ein bißchen modifiziert und PRESENCE verwendet:
define p1 PRESENCE lan-ping ipCamera 60 60
define w1 watchdog p1:present 00:02:00 same  { Log 1, "ipCamera nicht erreichbar"; fhem("trigger w1 ."); }
attr w1 execOnActivate { Log 1, "ipCamera wieder OK" }


Grundsätzlich funktioniert das, hat aber den Haken, das execOnActivate derzeit auch jedesmal ausgelöst wird, wenn das lan-ping ein present erzeugt, obwohl der watchdog gar nicht ausgelöst hat.
Das könnte man im Moment wohl umgehen, wenn man bei p1 das event-on-change Attribut nutzt.

Anders gesagt: derzeit wird in Deinem Beispiel jedesmal, wenn ein Event d1:on kommt, auch das execOnActivate ausgeführt, obwohl das d1:off vielleicht noch gar nicht vermisst wurde.

Ich habe mir aber auf der derzeitigen Basis ein Workaround gebaut, dass ein individuelles Attribut setzt, wenn der watchdog getriggert wurde. Dieses wird dann im execOnActivate abgefragt, und zurückgesetzt, bevor ich die OK-Meldung ausgebe.

Ich hoffe, das war soweit verständlich. Schwierigkeit ist eben derzeit, dass ein PRESENCE viele "present" schickt, bevor mal ein "absent" kommt.

Gruß Wolfgang

rudolfkoenig

Ok, ich habe es in execOnReactivate umbenannt, und den code entsprechend geaendert.
Es wird dann ausgefuehrt, falls zwischen der letzten und der aktuellen Aktivierung der watchdog ausgeloest wurde.

fruemmel

Hallo Rudolf,

hab's gerade nochmal getestet, das ist wirklich super Vielen Dank für die perfekte Umsetzung!

Gruß Wolfgang