[Gelöst] aktueller Stand watchdog mit 2 Ereignisketten

Begonnen von ftsinuglarity, 14 Februar 2018, 19:36:33

Vorheriges Thema - Nächstes Thema

ftsinuglarity

Hallo zusammen,

ist der momentane Stand noch, das watchdog nur auf auf ein Event reagieren kann ?

Ich habe zwei Present Devices für das Modem, die bei absent und present unterschiedlich reagieren sollen. Das würde ich gern auf eines reduzieren. Geht noch nicht, richtig ?

Wünschenswert wäre in etwa sowas:
defmod wd_Modem watchdog Modem:absent 00:01:00 Modem:present set Modem off;sleep2;set Modem on reverse tts("Internet Online)

reverse wäre dann die Umkehrung dessen, was vorn steht

rudolfkoenig

Zitatist der momentane Stand noch, das watchdog nur auf auf ein Event reagieren kann ?
Vermutlich verstehe ich es nicht richtig, aber watchdog reagiert auf beliebige, per Regexp spezifizierbare Events.

ftsinuglarity

#2
Zitat von: rudolfkoenig am 14 Februar 2018, 20:47:01
Vermutlich verstehe ich es nicht richtig, aber watchdog reagiert auf beliebige, per Regexp spezifizierbare Events.

Die Events können unterschiedlichst sein, aber im Grunde wird nur auf eines reagiert.

define wd watchdog Device:Event1 Z:e:i:t Device:Event2  mach(was)
... reagiert mach(was) auf Event1, wenn nach Z:e:i:t nicht Event2 passiert.

Wenn ich beispielsweise mit einer einfachen Ansage auf Present Devices hören möchte, kann ich sowas formulieren:
define wd_on watchdog  Device:present 00:00:01 Device:absent  MyTTS("Device Online");

Für die Offline Ansage brauche ich in meinem bisherigen Verständnis einen 2. watchdog:
define wd_off watchdog Device:absent 00:01:01 Device:present  MyTTS("Device Offline");

Soweit ich es gelesen habe, geht es nicht, das ich beides in einem Watchdog mach.


Edit: ist ein einfaches Beispiel das man eleganter lösen kann. Mir gings nur um die Verdeutlichung beim watchdog 

betateilchen

Zitat von: ftsinuglarity am 14 Februar 2018, 22:42:54
Soweit ich es gelesen habe, geht es nicht, das ich beides in einem Watchdog mach.

Du willst doch zwei verschiedene Aktionen auslösen - also macht es auch Sinn, dafür zwei watchdog devices zu definieren.

Vermutlich geht es mir wie Rudi - ich verstehe das eigentliche Problem nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ftsinuglarity

#4
Zitat von: betateilchen am 14 Februar 2018, 23:25:28
Du willst doch zwei verschiedene Aktionen auslösen - also macht es auch Sinn, dafür zwei watchdog devices zu definieren.
Vermutlich geht es mir wie Rudi - ich verstehe das eigentliche Problem nicht.

2 verschiedene Aktionen, die sich auf ein auslösendes Device beziehen.
Ich versuche meinen Code immer mehr zu vereinfachen und stand/stehe vor einigen Fragen. ZB der, ob ich Aktionen, die sich auf ein Device beziehen, mit watchdog vereinheitlichen kann.
Letztlich gehts mir gar nicht so sehr um die Kürzung des eigentlichen Codes, als mehr um die Übersicht, wo was ausgelöst wird. Die kann man schonmal verlieren bei all dem getrigger.


Edit: ein einfaches "geht nicht" reicht mir vollkommen.
Wenn sowas aus eurer Sicht keinen Sinn macht, in Ordnung:
define wdInternet watchdog Internet:absent 00:01:00 Internet:present play("Internet Offline") reverse play("Internet Online")

reverse würde die Bedingung umdrehen: Internet:present 00:01:00 Internet:absent

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Benni

Zitat von: betateilchen am 15 Februar 2018, 07:51:40
ok: geht nicht.

Zumindest nicht mit watchdog.

Allerdings könnte man sich sowas (ähnliches) mit einem notify unter Verwendung eines benannten sleep selbst bauen:

Man nehme ein notify für die Events:


define nyDoubleWatchdog notify Internet:.* {}


Ändere den Perl-Teil im DEF des notify wie folgt ab:


{
    fhem('cancel slpDblWd quiet');
   
    if($EVTPART1 eq 'absent') {
        fhem('sleep 60 slpDblWd;{play(\'Internet Offline\')}');
    } else {
        fhem('sleep 60 slpDblWd;{play(\'Internet Online\')}');
    }
}


Hinweise:

  • Ich gehe im Beispiel davon aus, dass das Internet nur 'absent' und 'present' als Event-Parameter liefert
  • event-on-change-reading
  • Den code habe ich nicht getestet
  • Ob das nun besser/schöner/übersichtlicher als 2 watchdogs ist, darüber kann man streiten (muss man aber nicht!)
  • Wahrscheinlich geht das auch mit DOIF, damit kenne ich mich aber nicht aus.

Gruß Benni.

Damian

Hier ein Beispiel mit DOIF

define di_internet DOIF ([Internet:"absent"]) {play("Internet Offline")} DOELSEIF ([Internet:"present"])  {play("Internet Online")}
attr di_internet wait 60:60


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

betateilchen

Zitat von: Benni am 15 Februar 2018, 08:47:50
Zumindest nicht mit watchdog.

Allerdings könnte man sich sowas (ähnliches) mit einem notify unter Verwendung eines benannten sleep selbst bauen:

Natürlich kann man sowas bauen. Aber die Frage war ja explizit nach watchdog und nicht nach notify oder DOIF.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ftsinuglarity

#9
Ersteinmal ein ernstgemeintes Danke für eure Bereidschaft auch auf Fragen zu antworten, die aus eurer Sicht vlt abwegig oder unsinnig erscheinen (ist ja nicht meine erste Frage, die in die Richtung ziehlt) !!

Zur eigentlichen Frage: watchdog dann nicht mit solchen Konstrukten. Die Erweiterung mit reverse (oder irgenwas, war nur ein Vorschlag) scheint eurer Vorstellung von dem was watchdog ist zu widersprechen. Kann ich für mich so stehen lassen. 



Zitat von: betateilchen am 15 Februar 2018, 09:15:23
Natürlich kann man sowas bauen. Aber die Frage war ja explizit nach watchdog und nicht nach notify oder DOIF.

Jups Benni, das Beispiel ließe sich zB mit notify/funktion (DOIF hab ich noch nicht genutzt) sehr einfach machen.
Wie du schon meintest Betateilchen, es ging um ein möglichst einfaches watchdog Beispiel, nicht um den Inhalt.

ftsinuglarity

#10

Zitat von: Damian am 15 Februar 2018, 09:02:51
attr di_internet wait 60:60




Danke Damian, das kannte ich noch nicht

Benni

Zitat von: ftsinuglarity am 15 Februar 2018, 14:56:08
Jups Benni, das Beispiel ließe sich zB mit notify/funktion (DOIF hab ich noch nicht genutzt) sehr einfach machen.
Wie du schon meintest Betateilchen, es ging um ein möglichst einfaches watchdog Beispiel, nicht um den Inhalt.

Geschenkt!  ::)