Keine Meldung wenn das Fenster geschlossen ist

Begonnen von holzwurm83, 04 November 2018, 14:35:10

Vorheriges Thema - Nächstes Thema

holzwurm83

Hallo zusammen,

sorry wenn ich das Thema anschneiden muss, aber irgendwie stehe ich da voll auf dem Schlauch.

Ich habe mir ein DOIF eingerichtet welches mir eine verzögerte Meldung ausgeben soll, wenn ein Fenster offen ist. Mein problem ist allerdings, dass wenn innerhalb der Zeit das Fenster geschlossen wurde ich trotzdem eine Meldung bekomme, die ich aber nicht mehr benötige. Das heißt, wenn innerhalb der Verzögerung das Fenster wieder geschlossen wird soll keine Meldung mehr gesendet werden.

defmod di_window_open DOIF ([".*_Fenster_.*:open"]) (set teleBot _msg  Fenster $DEVICE schließen)
attr di_window_open do resetwait
attr di_window_open repeatcmd 900
attr di_window_open repeatsame 3
attr di_window_open room Setup
attr di_window_open wait 900
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

CoolTux

Dir fehlt eine Abbruchbedingung. Also ein zweiter Zweig. DOELSEIF
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

holzwurm83

Dann heb ich da wohl was falsch gemacht. Ich hatte das mit

Zitatsetreading di_window_open wait_timer no timer

probiert, aber das hat nichts gebracht, oder wie muss dieser Zweig in dem Fall genau aussehen?
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

CoolTux

Da muss mal jemand mit Ahnung ran. Das Problem ist ja das du sicherlich den Abbruch haben willst wenn genau dieses Fenster geschlossen wird und nicht irgendein anderes.
Auf jeden Fall muss da eine Abbruchbedingung rein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Newbie

Schon mal in die Commandref geschaut?

da gibt es zum Beisoiel das hier:

Verzögerte Fenster-offen-Meldung mit Wiederholung für mehrere Fenster

define di_window DOIF
subs {
  sub logwin {                                       # Definition der Funktion namens "logwin"
    my ($window)=@_;                                 # übernehme Parameter in die Variable $window
    Log 3,"Fenster offen, bitte schließen: $window"; # protokolliere Fenster-Offen-Meldung
    set_Exec ("$window",1800,"logwin",$window);      # setze Timer auf 30 Minuten für eine wiederholte Meldung
  }
}
{ if (["_window$:open"]) {set_Exec ("$DEVICE",600,'logwin("$DEVICE")')}} # wenn, Fenster geöffnet wird, dann setze Timer auf Funktion zum Loggen namens "logwin"
{ if (["_window$:closed"]) {del_Exec ("$DEVICE")}}                       # wenn, Fenster geschlossen wird, dann lösche Timer


Sollte sich doch leicht an deine Bedürfnisse anpassen lassen.
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

holzwurm83

Danke dir, dass habe ich im Commandref auch gefunden, habe es nur nicht hinbekommen und wollte es eigentlich relativ einfach halten
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

holzwurm83

So, ich habe ich das jetzt einmal umgebaut und ausprobiert.

define di_window DOIF
subs {
  sub logwin {                                       # Definition der Funktion namens "logwin"
    my ($window)=@_;                                 # übernehme Parameter in die Variable $window
    Log 3,"Fenster offen, bitte schließen: $window"; # protokolliere Fenster-Offen-Meldung
    set_Exec ("$window",1800,"logwin",$window);      # setze Timer auf 30 Minuten für eine wiederholte Meldung
  }
}
{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",600,'logwin("$DEVICE")')}} # wenn, Fenster geöffnet wird, dann setze Timer auf Funktion zum Loggen namens "logwin"
{ if ([".*_Fenster_.*:closed"]) {del_Exec ("$DEVICE")}}                       # wenn, Fenster geschlossen wird, dann lösche Timer


Soweit scheint das jetzt doch zu funktionieren.

Was ich nur noch nicht verstehe, wie ich die Meldung
set teleBot _msg  Fenster $DEVICE schließen
da einbauen soll
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Newbie



....
{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",600,'logwin("$DEVICE")','fhem_set("teleBot _msg  Fenster $DEVICE schließen")')}}
....
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

Damian

Zitat von: Newbie am 04 November 2018, 17:31:21

....
{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",600,'logwin("$DEVICE")','fhem_set("teleBot _msg  Fenster $DEVICE schließen")')}}
....


Das dürfte nicht funktionieren, da an dieser Stelle optional ein Parameter für die davor angegebene Funktion übergeben wird.

Entweder die Funktion logwin erweitern:

Zitatsubs {
  sub logwin {                                       # Definition der Funktion namens "logwin"
    my ($window)=@_;                                 # übernehme Parameter in die Variable $window
    Log 3,"Fenster offen, bitte schließen: $window"; # protokolliere Fenster-Offen-Meldung
    fhem_set("teleBot _msg  Fenster $window schließen");
    set_Exec ("$window",1800,"logwin",$window);      # setze Timer auf 30 Minuten für eine wiederholte Meldung
  }
}

Dann wird die Meldung allerdings wiederholt.

Oder einmalig mit einem eigenen Timer z. B. 20 Minuten nach dem Öffnen:

{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",600,'logwin("$DEVICE")');set_Exec ("$DEVICE_teleBot",1200,'fhem_set("teleBot _msg  Fenster $DEVICE schließen")')}}

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

holzwurm83

Hallo Damian,

ich habe nun beide Versionen ausprobiert. Ich bekomme leider einen Fehler angezeigt:
in logwin("WZ_Fenster_OST_L"): syntax error at (eval 3016413) line 1, near ")("

Das war meine letze version, die ich ausprobiert habe:
define di_window DOIF
subs {
  sub logwin {                                       # Definition der Funktion namens "logwin"
    my ($window)=@_;                                 # übernehme Parameter in die Variable $window
    Log 3,"Fenster offen, bitte schließen: $window"; # protokolliere Fenster-Offen-Meldung
fhem_set("teleBot _msg  Fenster $window schließen");
    set_Exec ("$window",30,"logwin",$window);      # setze Timer auf 30 Minuten für eine wiederholte Meldung
  }
}
{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",10,'logwin("$DEVICE")')}} # wenn, Fenster geöffnet wird, dann setze Timer auf Funktion zum Loggen namens "logwin"
{ if ([".*_Fenster_.*:closed"]) {del_Exec ("$DEVICE")}}                       # wenn, Fenster geschlossen wird, dann lösche Timer
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Damian

Ersetze mal

{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",10,'logwin("$DEVICE")')}}

durch

{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",10,'logwin',"$DEVICE")}}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holzwurm83

Hi,

habe das so ausgetauscht und habe nun folgendes im DEF stehen:
subs {
  sub logwin {                                       # Definition der Funktion namens "logwin"
    my ($window)=@_;                                 # übernehme Parameter in die Variable $window
    Log 3,"Fenster offen, bitte schließen: $window"; # protokolliere Fenster-Offen-Meldung
fhem_set("teleBot _msg  Fenster $window schließen");
    set_Exec ("$window",1800,"logwin",$window);      # setze Timer auf 30 Minuten für eine wiederholte Meldung
  }
}
{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",600,'logwin',"$DEVICE")}} # wenn, Fenster geöffnet wird, dann setze Timer auf Funktion zum Loggen namens "logwin"
{ if ([".*_Fenster_.*:closed"]) {del_Exec ("$DEVICE")}}                       # wenn, Fenster geschlossen wird, dann lösche Timer


allerdings hat er nun in der Zeile 5 einen weiteren Fehler.

in logwin: Undefined subroutine &main::fhem_set called at (eval 3064334) line 5.
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Damian

Ich vermute, dass du eine alte DOIF-Version hast. Die letzte ist von gestern.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holzwurm83

Zitat von: Damian am 05 November 2018, 09:47:27
Ich vermute, dass du eine alte DOIF-Version hast. Die letzte ist von gestern.

Danke dir, dass war der entscheidende Punkt....
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN