Watchdog: <timespec> in Abhängigkeit setzen?

Begonnen von Gernott, 15 April 2014, 23:33:47

Vorheriges Thema - Nächstes Thema

Gernott

Hallo

ich möchte gern die Triggerzeit des Watchdogs in Abhängigkeit z.B. von einem Temperatur-Reading setzen, z.B mit IF. Was müßte man denn dafür nach dem Test in die Klammer schreiben?

IF ([hm.temp_rH_sensor:temperature] < 10)(..?..)

Es soll dann z.B. 00:10 zurückgegeben werden. Habe schon ("00:10") probiert, geht aber nicht. Geht so etwas inline überhaupt? Wenn ich eine fhem-Anweisung in die Klammer schreibe, wird diese ausgeführt.

Viele Grüße
Gernot

Damian

Zitat von: Gernott am 15 April 2014, 23:33:47
Wenn ich eine fhem-Anweisung in die Klammer schreibe, wird diese ausgeführt.
ja, siehe Beispiele zu IF in der Commandref.

Gruß

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

Gernott

Hallo Damian

das war von mir bereits eine Feststellung.
Die Frage war, ob man den Parameter <timespec> durch eine IF-bedingung setzen kann.

Gruß
Gernot

Damian

#3
Zitat von: Gernott am 16 April 2014, 20:20:04
Hallo Damian

das war von mir bereits eine Feststellung.
Die Frage war, ob man den Parameter <timespec> durch eine IF-bedingung setzen kann.

Gruß
Gernot

Wo willst du den IF überhaupt einbauen? So alleine macht er keinen Sinn.

Edit: IF ist ein FHEM-Befehl und wird vom FHEM-Parser überall dort erkannt, wo ein FHEM-Befehl stehen darf. Wenn du <timespec> vom Watchdog meinst, dann wird es nicht funktioniert, weil an diese Stelle kein FHEM-Befehl hinkommt.

Gruß

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

Gernott

Schade. Kann man das vielleicht mit einer Variable lösen?
Meine Anwendung wäre, die Alarmzeit eines geöffneten Fensters in Abhängigkeit von der Außentemperatur zu setzen.

Gruß
Gernot

mi.ke

#5
Ich bekomme im Winter eine Pushover Nachricht über watchdog bei geöffnetem Fenster, wenn's draussen kälter als 12° ist. Allerdings hab ich ebenfalls nicht rausgefunden, wie man die "timespec" dynamisch gestalten könnte.

Bei 2° Aussentemperatur wäre mir eine andere "timespec" lieber als bei einer Aussentemperatur von  10° oder 20°

Einen Lösungsansatz such ich auch noch, mit Variablen hab ich's nicht hinbekommen. . . . .

PS.
gerne mit if oder IF
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Damian

Zitat von: mi.ke am 17 April 2014, 00:54:11
Ich bekomme im Winter eine Pushover Nachricht über watchdog bei geöffnetem Fenster, wenn's draussen kälter als 12° ist. Allerdings hab ich ebenfalls nicht rausgefunden, wie man die "timespec" dynamisch gestalten könnte.

Bei 2° Aussentemperatur wäre mir eine andere "timespec" lieber als bei einer Aussentemperatur von  10° oder 20°

Einen Lösungsansatz such ich auch noch, mit Variablen hab ich's nicht hinbekommen. . . . .

PS.
gerne mit if oder IF

Wenn im watchdog nur eine Zeichenkette vom Typ TT:MM:SS vorgesehen ist, dann muss man den watchdog per if/IF mit define (evtl. modify) abhängig der der Temperatur neu aufsetzen.

Gruß

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

mi.ke

Zitat von: Damian am 17 April 2014, 08:30:56
Wenn im watchdog nur eine Zeichenkette vom Typ TT:MM:SS vorgesehen ist, dann muss man den watchdog per if/IF mit define (evtl. modify) abhängig der der Temperatur neu aufsetzen.

Nur um den <timespec> zu ändern ?
Nun, das scheint mir aber nicht die perfekte Lösung zu sein.

Beispiel.
define Bad_Fenster_Status_wd watchdog 0G_Fenster_Bad:Window:.*(offen) 00:15 0G_Fenster_Bad:Window:.*(geschlossen) {......abhängig von Anwesenheit, Nachtruhe und Temperatur etc. werden Pushover-Nachrichten versandt }

Und dann? mit notify watchdogs erzeugen ?
Dazu müsste man
1.) prüfen, ob der watchdog existiert
2.) den watchdog löschen
3.) bei 5mal  verschiedenen Aussentemperature/timespec, also
  <-10° = 00:05    <-1° = 00:10   <5° = 00:15   <12 °= 00:30   <20° = 01:00
neue watchdogs erzeugen. (incl. allen attr.)

Der Sinn erschließt sich mir ehrlich gesagt nicht, nur um den timeout zu verändern
Oder hab ich hier einen dicken Denkfehler drin ?

PS.
modify hate ich schon versucht, tuts leider auch nicht
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Damian

Zitat von: mi.ke am 21 April 2014, 13:20:48

Oder hab ich hier einen dicken Denkfehler drin ?

Nein. Du kannst dir auch eigenes Modul programmieren, was das leistet.

Gruß

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

marvin78

Grundsätzlich ist der Watchdog doch "nur" ein Hilfsmittel um notifys und ats zu sparen. Ich würde sagen, dass man jeden watchdog auch aus einer Kombination von notify und at nachbauen kann und innerhalb eines notifys kann man dann auch mit der Zeit spielen.

mi.ke

Zitat von: Damian am 21 April 2014, 13:48:08
Du kannst dir auch eigenes Modul programmieren, was das leistet.

Wenn ich das könnte, hätte ich nicht gefragt, wie ich einen timeout verändere,
sondern einen Link gepostet, wo man sich einen patch runterladen kann.

Ehrlich gesagt, find ich die Antwort einem Laien gegenüber, so wie ich es leider nun einmal bin, gelinde gesagt: "überheblich".

Aber naja . . .

Zitat von: marvin78 am 21 April 2014, 13:54:59
Grundsätzlich ist der Watchdog doch "nur" ein Hilfsmittel um notifys und ats zu sparen.

Klar kann diese Anforderung ohne einen watchdog abgefrühstückt werden.
Deshalb ja auch meine Frage, ob ich bei meiner Überlegung einen Denkfehler habe und ich vielleicht bei der Lösungsfindung zu sehr auf einen watchdog baue, es vielleicht aber über einen anderen Weg einfacher und komfortabel geht.

Wenn ich eins im letzten Jahr gelernt habe, dann ist es, dass es mit fhem/Perl immer mind. 3-5 Lösungswege gibt, die unter Umständen völlig anderst das Ergebnis bringen, schlussendlich aber ans Ziel führen.

Und um wieder zum Topic dieses Threds zu kommen:
Vermutlich lautet die Antwort einfach: "nein, das geht nicht"

Was ja auch nicht schlimm ist . . .



FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Damian

Zitat von: mi.ke am 21 April 2014, 15:53:56
Wenn ich das könnte, hätte ich nicht gefragt, wie ich einen timeout verändere,
sondern einen Link gepostet, wo man sich einen patch runterladen kann.

Ehrlich gesagt, find ich die Antwort einem Laien gegenüber, so wie ich es leider nun einmal bin, gelinde gesagt: "überheblich".

Aber naja . . .

Klar kann diese Anforderung ohne einen watchdog abgefrühstückt werden.
Deshalb ja auch meine Frage, ob ich bei meiner Überlegung einen Denkfehler habe und ich vielleicht bei der Lösungsfindung zu sehr auf einen watchdog baue, es vielleicht aber über einen anderen Weg einfacher und komfortabel geht.

Wenn ich eins im letzten Jahr gelernt habe, dann ist es, dass es mit fhem/Perl immer mind. 3-5 Lösungswege gibt, die unter Umständen völlig anderst das Ergebnis bringen, schlussendlich aber ans Ziel führen.

Und um wieder zum Topic dieses Threds zu kommen:
Vermutlich lautet die Antwort einfach: "nein, das geht nicht"

Was ja auch nicht schlimm ist . . .

Es war überhaupt nicht überheblich gemeint, sondern ernst. Als Laie hast du alle Punkte richtig erkannt, deswegen ging ich davon aus, dass du keiner bist. So hätte ich es zumindest gemacht. Es war also kein Denkfehler von dir. Ich befürchte, es gibt dafür keine einfache Lösung (auch nicht mit notifys und at´s), es sei denn du überredest den Autor von watchdog, diesen zu erweitern, so dass man anstelle von timespec eine Perlfunktion angeben kann, wie bei at, die du dann allerdings noch deinen Anforderungen entsprechend mit Leben füllen müsstest.

Gruß

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

mi.ke



Damian, bitte Entschuldige !
Das hab ich dann ja wohl völlig in den falschen Hals gekriegt.


Wenn's mit dem Modul watchdog nicht geht, dann bastel ich mir halt mit anderen Mittel was zurecht.
Irgendwie hab ich dank Forum lesen, Gxxgle oder commandref etc. immer einen Weg gefunden.

Aber es hilft schon mal ungemein, dass ich nicht mehr am "falschen" Lösungsweg rumsuchen muss.

Danke für die Hilfe.
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

rudolfkoenig

Ich habe watchdog modifiziert, dass beim modify alle Parameter optional sind. D.h. fuer das Aendern der timespec reicht:
modify watchdogname re1 newtimespec
Damit is das Verhalten aehnlich wie bei at. Die Aenderung wirkt sich nur bei re1=="." auf einem bereits aktivierten  Watchdog aus. Mit aktiviert meine ich STATE ist "Next:..." und nicht "defined", weil re1 eingetroffen war.