FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: holzwurm83 am 04 November 2018, 14:35:10

Titel: Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: holzwurm83 am 04 November 2018, 14:35:10
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
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: CoolTux am 04 November 2018, 14:46:24
Dir fehlt eine Abbruchbedingung. Also ein zweiter Zweig. DOELSEIF
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: holzwurm83 am 04 November 2018, 15:27:46
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?
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: CoolTux am 04 November 2018, 15:32:50
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.
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: Newbie am 04 November 2018, 15:48:38
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.
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: holzwurm83 am 04 November 2018, 16:28:53
Danke dir, dass habe ich im Commandref auch gefunden, habe es nur nicht hinbekommen und wollte es eigentlich relativ einfach halten
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: holzwurm83 am 04 November 2018, 16:49:18
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
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag 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")')}}
....
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: Damian am 04 November 2018, 17:45:20
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")')}}

Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: holzwurm83 am 04 November 2018, 18:05:08
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
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: Damian am 04 November 2018, 22:18:45
Ersetze mal

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

durch

{ if ([".*_Fenster_.*:open"]) {set_Exec ("$DEVICE",10,'logwin',"$DEVICE")}}
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: holzwurm83 am 05 November 2018, 09:21:18
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.
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: Damian am 05 November 2018, 09:47:27
Ich vermute, dass du eine alte DOIF-Version hast. Die letzte ist von gestern.
Titel: Antw:Keine Meldung wenn das Fenster geschlossen ist
Beitrag von: holzwurm83 am 05 November 2018, 18:01:35
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....