Hauptmenü

Watchdog mit DOIF realisieren

Begonnen von Reinerlein, 08 Februar 2016, 09:46:32

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo Damian,

ich versuche mich gerade an einer generalisierten Version von DOIF um einen Battery-Watchdog zu bauen:
Ich möchte eine Nachricht bekommen, wenn der letzte gesendete Status ein "low" war, und in den letzten 20 Minuten nichts mehr vom Device gesendet wurde.

Ich dachte an folgende Definition:

([":^(b|B)attery: low"]) ((
  set telegram msg Device $DEVICE hat sich seit [$DEVICE:battery:sec]s nicht mehr gemeldet!
))

für die Attribute habe ich dann folgendes vorgesehen:

do always
wait 1200

Damit wollte ich erreichen, dass durch die Verzögerung (die ja beim Neueintreffen eines Events zurückgesetzt wird), 20 Minuten nach dem (dann letzten) Empfang eines Events eine Nachricht versendet wird.

Im Prinzip läuft das auch. Allerdings wird (wie bei meinem anderen Versuch mit den offenen Fenstern auch) der Timer auch durch ein anderes Device zurückgesetzt, und nicht nur durch das ursprünglich auslösende.

Hast du eine Idee, wie (und ob) man das mit der jetzigen Form von DOIF umsetzen kann?
Wenn nein, hast du schon ein Vorhaben, um die wait-timer für die generalisierte Version nutzbar zu machen?
Du müsstest letztendlich mehrere Timer ermöglichen, und beim Eintreffen eines Events nur den Timer zurücksetzen, der zu dem Device des eintreffenden gehört (also von einem vorhergehenden Event dieses Devices mal erzeugt wurde). Da im Timer ja bereits enthalten ist (zumindest in der Readingsanzeige) von welchem Device das mal provoziert wurde, geht es in der Hauptsache darum, ob (oder wie) das Modul vernünftig mehrere Timer starten und speichern kann.

So wie ich das momentan sehe, machen Wait-Angaben im Zusammenhang mit Device-Regex-Angaben keinen Sinn, oder?

Danke schon mal für deine Mühen...

Grüße
Reiner

Damian

Zitat von: Reinerlein am 08 Februar 2016, 09:46:32

So wie ich das momentan sehe, machen Wait-Angaben im Zusammenhang mit Device-Regex-Angaben keinen Sinn, oder?

Für diese Anforderung wird es wohl so sein. Der watchdog kann es auch nicht. Wait mit Rücksetzung funktioniert auf der cmd-Ebene und ist eben, wie du schon festgestellt hast, nicht deviceabhängig.

Mit Device-Regex wollte ich noch die Lücke zum notify schließen und das was sich sonst daraus ergibt. Immerhin konnte ich die E-Mail-Benachrichtigung für Batteriewarnung damit realisieren (siehe Commandref). Bestimmt ergeben sich noch Möglichkeiten, die mir jetzt noch nicht einfallen. Es war schon nicht einfach gewesen im Nachhinein Device-Regex in das Modul einzubauen, weil es sonst immer deviceorientiert arbeitet. Für noch mehr konzeptionelle Änderungen im Modul habe ich leider keine Zeit, desweiteren bestünde die Gefahr das Modul instabil zu machen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF