FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FHEMAN am 27 August 2016, 23:48:26

Titel: Notify mit event delay?
Beitrag von: FHEMAN am 27 August 2016, 23:48:26
Hallo,

mit meinem Notify fasse ich zwei Fensterkontakte zu einem einzelnen Dummy mit den Zuständen open:closed:tilt zusammen. Mit einem weiteren Notify auf dieses Dummy reagiere ich entsprechend auf die drei Status.
Durch den Drehgriff am Fenster kommt vor tilt jedoch zwangsläufig open. Im Falle von tilt möchte ich aber das erste open Event möglichst "unterdrücken". Oder 1-2 Sekunden warten, ob das zweite open noch kommt (Kipp Stellung).

Meine erste Idee mittels EventDlyTime an den Kontakten funktioniert nicht, denke ich, da bei Tilt dann beide open Signale ja nur verzögert gefeuert werden und das erste open auch nicht verhindert wird. Außerdem scheint EventDlyTime bei den HM-SCI-FM buggy zu sein.

Da ich an die Devices nur schwer herankomme, wäre eine Umsetzung innerhalb FHEM ideal.
Ich hoffe insgeheim auf etwas eleganteres als ein für 1-2 Sekunden blockierendes AT.

Kann mir jemand einen Tipp geben?

Gruß
Ronny
Titel: Antw:Notify mit event delay?
Beitrag von: DeeSPe am 28 August 2016, 00:08:58
Dann mach doch ein notify auf das open und dann mit z.B. "sleep 2" zwei Sekunden verzögern und dann abfragen ob der Status tilt ist.
Somit kannst Du sogar verschiedene Sachen bei open und tilt im selben notify machen.

Gruß
Dan
Titel: Antw:Notify mit event delay?
Beitrag von: DeeSPe am 28 August 2016, 00:20:06
Beispiel:
notify
define n_Fenster_tilt Fenster:open {fhem "sleep 2;{FensterTilt($NAME)}"}

Sub für 99_myUtils
FensterTilt($)
{
  my ($name) = @_;
  if (Value($name) eq "tilt")
  {
    # Tue bei tilt was immer du möchtest
    fhem "set xxx yyyy";
  }
}


Das notify und die Funktion sind darauf ausgelegt dass tilt im Reading state steht. Andernfalls musst Du statt Value() ReadingsVal() benutzen und das notify entsprechend anpassen.

Gruß
Dan
Titel: Antw:Notify mit event delay?
Beitrag von: FHEMAN am 28 August 2016, 01:12:50
Hallo Dan,

mein Notify sieht bisher so aus:
Zitat
(TFK.Kueche.Sw.[0-9]*.*) {
   my $WindowState = "";
   $WindowState = (Value("TFK.Kueche.Sw.02.Kipp") eq "open") ? "tilt" : Value("TFK.Kueche.Sw.01.Verschluss");
   fhem("set TFK.Kueche.Sw.Dummy " . $WindowState);
}

Wie bekomme ich hier das Fhem Sleep unter? (Sleep war doch immer etwas hakelig und auch blockierend, soweit ich mich erinnere. Einfach Sleep 2; funktioniert ja nicht?)

Zitat
(TFK.Kueche.Sw.[0-9]*.*) {
   fhem("Sleep 2");
   my $WindowState = "";
   $WindowState = (Value("TFK.Kueche.Sw.02.Kipp") eq "open") ? "tilt" : Value("TFK.Kueche.Sw.01.Verschluss");
   fhem("set TFK.Kueche.Sw.Dummy " . $WindowState);
}

Gruß
Ronny
Titel: Antw:Notify mit event delay?
Beitrag von: DeeSPe am 28 August 2016, 02:48:37
Eben genau so wie ich es oben im Beispiel geschrieben habe.
Nein, mit sleep blockiert du gerade eben nicht!!!

Gruß
Dan
Titel: Antw:Notify mit event delay?
Beitrag von: CoolTux am 28 August 2016, 09:09:29
Ich empfehle Dir Deine beiden Fenster zu einer Structure zusammen zu fügen und dann mit clientstate_priority zu arbeiten.
Titel: Antw:Notify mit event delay?
Beitrag von: frank am 28 August 2016, 09:59:05
ZitatMeine erste Idee mittels EventDlyTime an den Kontakten funktioniert nicht, denke ich, da bei Tilt dann beide open Signale ja nur verzögert gefeuert werden und das erste open auch nicht verhindert wird. Außerdem scheint EventDlyTime bei den HM-SCI-FM buggy zu sein.
es wird nur der letzte status nach dem delay gesendet, egal wie oft du den hebel rotierst hast.
Titel: Antw:Notify mit event delay?
Beitrag von: FHEMAN am 29 August 2016, 01:00:25
Zitat von: DeeSPe am 28 August 2016, 09:59:05
Eben genau so wie ich es oben im Beispiel geschrieben habe.
Ich verstehe es so, dass ich dann von Perl nach FHEM und dort wieder auf Perl Syntax umschalten muss:

(TFK.Kueche.Sw.[0-9]*.*) {
   fhem("Sleep 2; {
     my $WindowState = "";
     $WindowState = (Value("TFK.Kueche.Sw.02.Kipp") eq "open") ? "tilt" : Value("TFK.Kueche.Sw.01.Verschluss");
     fhem("set TFK.Kueche.Sw.Dummy " . $WindowState);
    "}
  }

Hmmm, da krieg ich irgendwie Augenkrebs.. und Bauchschmerzen.

Zitat von: frank am 28 August 2016, 09:59:05
es wird nur der letzte status nach dem delay gesendet, egal wie oft du den hebel rotierst hast.
Oha, dann habe ich EventDlyTime falsch interpretiert. Und das wäre sicher die elegantere Lösung. Auch wenn ich mir jetzt die Finger breche beim Ausbau, um ans Knöpfchen zu kommen. (Aber besser als Augenkrebs und Bauchweh ;D )
Titel: Antw:Notify mit event delay?
Beitrag von: DeeSPe am 29 August 2016, 01:05:40
Genau wegen dem Augenkrebs hatte ich vorgeschlagen dass in eine Sub auszulagern.
So wie Du es jetzt hast müsstest Du wohl auch die Semikolon verdoppeln.

Bitte meinen Beitrag einfach nochmal anschauen:
Zitat von: DeeSPe am 28 August 2016, 00:20:06
Beispiel:
notify
define n_Fenster_tilt Fenster:open {fhem "sleep 2;{FensterTilt($NAME)}"}

Sub für 99_myUtils
FensterTilt($)
{
  my ($name) = @_;
  if (Value($name) eq "tilt")
  {
    # Tue bei tilt was immer du möchtest
    fhem "set xxx yyyy";
  }
}


Gruß
Dan