[Gelöst] Dynamischer Watchdog

Begonnen von Talkabout, 28 Februar 2015, 22:41:17

Vorheriges Thema - Nächstes Thema

Talkabout

Hallo zusammen,

ich versuche gerade meinen Watchdog für Fenster, der nach 20 Minuten bescheid gibt, dass man das Fenster doch bitte wieder schliessen sollte, so zu dynamisieren, dass ich diesen nicht für jedes Fenster definieren muss. Der aktuell für jedes Fenster definierte Watchdog sieht so aus:

define WZFensterkontakt01_watchdog watchdog WZFensterkontakt01:opened 00:20 WZFensterkontakt01:closed {\
  Say("Bitte nicht vergessen das Fenster im Wohnzimmer zu schliessen");;\
  fhem "setstate WZFensterkontakt01_watchdog defined";;\
}

Zur Erklärung: Wenn das Fenster geöffnet wird startet der Watchdog, der nach 20 Minuten bescheid gibt, dass man doch bitte das Fenster wieder schliesst. Zusätzlich reaktiviere ich dann den Watchdog wieder.

Dazu noch eine Zwischenfrage: Wie stelle ich es an, dass der Watchdog, wenn er nach 20 Minuten auslöst, das Fenster aber weitere 20 Minuten offen bleibt, noch mal triggert?

Nun habe ich mir gedacht, warum denn den Watchdog für jedes Fenster definieren (ich habe 15 davon), wenn man es doch vermutlich auch mit einem hinbekommt. Hier mein erster Versuch:

define Fensterkontakt_watchdog watchdog *Fensterkontakt*:opened 00:20 {NAME_DES_DEVICES_IN_REGEXP1}:closed {\
  Say("Bitte nicht vergessen das Fenster " . AttrVal({NAME_DES_DEVICES}, 'roomNameForSentence'', '') . " zu schliessen");;\
  fhem "setstate {NAME_DES_WATCHDOGS} defined";;\
}

NAME_DES_DEVICES_IN_REGEXP1: wie bekomme ich es hin, dass an dieser Stelle der reguläre Ausdruckt verwendet wird, der für den trigger verwendet wurde?
NAME_DES_DEVICES: wie bekomme ich hier den Namen des Devices raus, welches den Watchdog getriggert hat? (%NAME?)
NAME_DES_WATCHDOGS: wie bekomme ich hier den Namen das aktuellen Watchdogs raus?

Ich hoffe da kann mir jemand helfen. Es wäre wirklich schön wenn man das alles in einen Watchdog packen könnte.

Danke!

Gruss

marvin78

Zitat aus der Commandref zu watchdog:

Zitata generic watchdog (one watchdog responsible for more devices) is currently not possible.

Benutze dafür notify und at.

Talkabout

Zitat von: marvin78 am 28 Februar 2015, 22:43:17
Zitat aus der Commandref zu watchdog:

Benutze dafür notify und at.
Das ging flott, danke für die Antwort :)

Gruss

Benni

Ich habe das bei mir übrigens trotzdem mit einzelnen Watchdogs gemacht. Da ich aber von Haus aus faul bin, habe ich mir in meiner 99_MyUtils eine Prozedur gebastelt, die mir einen Fenster-Watchdog definiert. Ich muss lediglich den Device-Namen des Fensterkontaktes übergeben und anschließend noch eventuell die Zeit anpassen.
Bei mir wird nämlich unterschiedlich gemeckert, mal nach 3,  mal nach 5 oder mal nach 10 Minuten.

Wenn die Watchdogs dann erst einmal eingerichtet sind muss man da in aller Regel auch nie mehr was dran machen von daher ist es auch nicht so schlimm, wenn man 15 davon hat :)

Gruß Benni.

Talkabout

Hallo zusammen,

habe es nun so gelöst:

define Fensterkontakt_Reminder notify .*Fensterkontakt.*:opened {\
  fhem "delete %NAME_OpenedTimer";;\
  fhem "define %NAME_OpenedTimer at +00:20:00 { Say('Bitte nicht vergessen das Fenster ' . AttrVal('%NAME', 'roomNameForSentence', '') . ' zu schliessen') }"\
}
define Fensterkontakt_Reminder_Reset notify .*Fensterkontakt.*:closed {\
  fhem "delete %NAME_OpenedTimer";;\
}


das erste Notify reagiert auf den "opened" state. Es löscht erst einmal den Timer für dieses Device (falls einer existiert) und legt dann einen an, der die Erinnerung triggert. Das 2. Notify reagiert auf den "closed" state und löscht den Timer, der möglicherwise läuft.Mit dem Attribut "roomNameForSentence" definiere ich den Raumnamen für den Satz (z.b. "im Wohnzimmer" oder "in der Küche"), damit ich die Nachricht dynamisch generieren kann. Damit kann ich alle Fensterkontakte (habe 11 davon) mit diesen 2 Notifies "abfrühstücken". Falls man unterschiedliche Zeiten für die Devices haben möchte, könnte man das noch mit einem zusätzlichen Attribut lösen.

Gruss

Benni

Zitat von: Talkabout am 02 März 2015, 18:49:22
Falls man unterschiedliche Zeiten für die Devices haben möchte, könnte man das noch mit einem zusätzlichen Attribut lösen.

Gute Idee! Gefällt mir insgesamt eigentlich sehr gut. Das mit den einzelnen Watchdogs ist noch aus meinen Anfangszeiten und da es seither problemlos funktioniert habe ich es auch nicht mehr hinterfragt.
Vielleicht stelle ich das bei Gelegenheit mal noch um. Danke! 8)

Ach ja, kennzeichnest du bitte in deinem ersten Beitrag den Betreff noch als gelöst?

Benni

Ich habe mal etwas an dieser Idee gefeilt und sie für mich angepasst.

Siehe dazu den separaten Thread Globale, flexible Fenster-/Tür-Offen-Meldungen im Bereich Codeschnipsel.

Reisbaua

Ich weiß, ich weiß. Der Thread ist Uralt, aber er hat mir mit meinem Problem der generischen Watchdogs bei meinen Fensterkontakten geholfen.
Also Danke!