FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Mitch am 28 August 2014, 09:04:59

Titel: Problem mit einem notify auf Keymatic
Beitrag von: Mitch am 28 August 2014, 09:04:59
Hallo Zusammen,

ich habe gerade einen "Hänger"  ;D

Folgendes möchte ich gerne erreichen: Wenn Keymatic verriegelt, soll eine Pushnachricht mit den noch offenen Fenstern versendet werden.

Ich habe eigentlich alles so weit angelegt und es läuft "grundsätzlich" seit Wochen.
Allerdings hat das Keymatic die (unpraktische) Angewohnheit, seinen state beim Betätigen immer ganz genau mitzuteilen.
Heißt konkret, wenn es auf locked steht und man nun ein set unlock sendet, wird erstmal ein locked gemeldet, danach dann unlocked.
Somit wird auch beim Aufsperren mein notify auf locked ausgelöst und ich bekomme eine Pushnachricht mit den offenen Fenstern.

Nun meine Frage: wie kann ich das umgehen?

Meine "Idee" aus dem Bauch ist ja so etwas wie: wenn state unlocked annimmt checke erstmal, ob es nicht gerade locked war.

Hier mal die Codes dazu:
define FensterNotify notify Keymatic:locked.* {
  my @@monitored=devspec2array("window=open");
  my $cnt_devs=@@monitored;
  my $i = 0;
  my $msgtext = "";
  foreach(@@monitored) {
  $msgtext .= AttrVal($_,"alias",$_);
  if ($i < $cnt_devs - 2) {
    $msgtext .= ", ";
  }
  if ($i == $cnt_devs - 2) {
    $msgtext .= " und ";
  }
  $i++;
  }
  if ($cnt_devs > 0) {
    fhem ("set Pushover msg 'FHEM-WARNUNG' '$msgtext Fenster noch offen'");
  } else {
fhem ("set Pushover msg 'FHEM' 'Alle Fenster zu'");
  }
}

Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: martinp876 am 28 August 2014, 14:11:45
a) hast du event-on-change-reading .* gesetzt? Dann sollte es nicht passieren, das erst locked kommt.
b) "state" ist immer so eine Sache. Ich nutze gerne andere readings - spezifische. "lock" würde nur den lockstate anzeigen (was "state" schon einmal nicht garantiert)

was hältst du von
attr Keymatic event-on-change-reading .*
define FensterNotify notify Keymatic:lock:.* {
  my @@monitored=map {AttrVal($_,"alias",$_)}devspec2array("window=open");
  my $cnt_devs= @@monitored;
  if ($cnt_devs) {
    my $msgtext = join(", ", @@monitored[0..$cnt_devs-2])." und @@monitored[$cnt_devs-1]");
    fhem ("set Pushover msg 'FHEM-WARNUNG' '$msgtext Fenster noch offen'");
  } else {
    fhem ("set Pushover msg 'FHEM' 'Alle Fenster zu'");
  }
}
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: Mitch am 28 August 2014, 14:34:50
Danke martin.

Den event-on-change hatte ich schon drinnen, hat aber nichts gebracht.

Trigger jetzt auf lock statt state. Mal sehen, ob es funktioniert.

Keymatic:lock:locked.* {
  my @@monitored=devspec2array("window=open");
  my $cnt_devs=@@monitored;
  my $i = 0;
  my $msgtext = "";
  foreach(@@monitored) {
  $msgtext .= AttrVal($_,"alias",$_);
  if ($i < $cnt_devs - 2) {
    $msgtext .= ", ";
  }
  if ($i == $cnt_devs - 2) {
    $msgtext .= " und ";
  }
  $i++;
  }
  if ($cnt_devs > 0) {
    fhem ("set Pushover msg 'FHEM-WARNUNG' '$msgtext Fenster noch offen'");
  } else {
fhem ("set Pushover msg 'FHEM' 'Alle Fenster zu'");
  }
}
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: Mitch am 28 August 2014, 15:18:09
So, gerade getestet.

Ein Keymatic:lock:locked.* oder ein Keymatic:lock:* funktioniert gar nicht. Der notify löst dann nicht mehr aus.
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: martinp876 am 28 August 2014, 15:24:39
Keymatic:lock:*
kann ja nicht. Das sind beliebig viele ':' (schau dir einmla regexp an)
Keymatic:lock:.*

evtl ist da ein leerzeichen drin, dann also
Keymatic:lock:.locked.*

aber die Events solltest du einfach einmal anschauen, dann kannst du diesen selbst anpassen
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: Mitch am 28 August 2014, 15:32:26
Ich hasse diese Regexp Sachen  ;D

Hab jetzt nochmal probiert und auch im Eventmonitor nachgesehen. Dort steht nur
2014-08-28 15:30:56 Keymatic locked
Also das was auch im state steht.

Irgendwie steh ich grad total auf dem Schalauch.

Achja, das Keymatic:lock:.locked.* funktioniert auch nicht
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: martinp876 am 28 August 2014, 16:37:45
Wenn du auf und zu machst sollten in der readings verschiedene Einträge gesetzt werden. state ist eine davon. STATE in internal ist eine kopie von state in Readings - das macht state eine nummer komplexer. Schicke ggf ein list des device
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: Mitch am 28 August 2014, 16:45:29
Nochmal Danke Martin.

Habe jetzt mal etwas ganz anderes probiert. Habe stateformat auf lock gesetzt und der notify reagiert wie gehabt auf state.
Heute Abend werde ich dann mal testen, ob das etwas verändert.
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: martinp876 am 28 August 2014, 17:27:38
wenn dem so ist, muss es auch ein Reading "lock" geben, und das Notify sollte funktionieren.
Ob du den STATE ändern willst ist eine anderen Sache. Wegen dem Notify würde ich es nicht machen, sondern das Problem verstehen. Sonst scheiterst du beim nächsten wieder
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: Mitch am 28 August 2014, 21:01:59
Das reading lock gibt es ja.

Ich habe aber schon immer das Problem, dass ein notify nur auf state funktioniert.
So etwas z.B. geht bei mir nicht:
FHT:window:open also Device:reading:event

Ich habe keine Ahnung warum.
Titel: Antw:Problem mit einem notify auf Keymatic
Beitrag von: martinp876 am 28 August 2014, 21:47:14
Kann eigentlich nicht sein. Das solltest du loesen
Ist der name deines device keymatic?