Autor Thema: [Gelöst] Dynamischer Watchdog  (Gelesen 5469 mal)

Offline Talkabout

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 886
[Gelöst] Dynamischer Watchdog
« am: 28 Februar 2015, 22:41:17 »
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
« Letzte Änderung: 03 März 2015, 21:51:58 von Talkabout »

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5898
Antw:Dynamischer Watchdog
« Antwort #1 am: 28 Februar 2015, 22:43:17 »
Zitat aus der Commandref zu watchdog:

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

Benutze dafür notify und at.

Offline Talkabout

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 886
Antw:Dynamischer Watchdog
« Antwort #2 am: 28 Februar 2015, 22:48:46 »
Zitat aus der Commandref zu watchdog:

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

Gruss

Offline Benni

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2376
  • FHEMinist
Dynamischer Watchdog
« Antwort #3 am: 01 März 2015, 06:31:28 »
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.

Offline Talkabout

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 886
Antw:Dynamischer Watchdog
« Antwort #4 am: 02 März 2015, 18:49:22 »
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

Offline Benni

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2376
  • FHEMinist
Antw:Dynamischer Watchdog
« Antwort #5 am: 03 März 2015, 20:12:04 »
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?

Offline Benni

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2376
  • FHEMinist
Antw:[Gelöst] Dynamischer Watchdog
« Antwort #6 am: 20 April 2015, 20:24:22 »
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.

Offline Reisbaua

  • New Member
  • *
  • Beiträge: 10
Antw:[Gelöst] Dynamischer Watchdog
« Antwort #7 am: 28 November 2021, 13:33:47 »
Ich weiß, ich weiß. Der Thread ist Uralt, aber er hat mir mit meinem Problem der generischen Watchdogs bei meinen Fensterkontakten geholfen.
Also Danke!

 

decade-submarginal