GELÖST - Ein notify macht mich bald wahnsinnig

Begonnen von Mitch, 04 Juli 2014, 08:50:06

Vorheriges Thema - Nächstes Thema

Mitch

Hallo Zusammen,

ich werde bald verrückt. Habe eine menge (ca. 30) NOTIFYs, die alle ohne Probleme laufen, aber ein bestimmter (bzw. eigentlich 2) wollen einfach nicht.

Was will ich: wenn der Türstatus auf "zu" geht und noch ein Fenster offen ist, soll eine Pushover Nachricht verschickt werden.
Was habe ich dazu: Tür/Fensterkontakt an der Tür und an den Fenstern, das Pushover Modul (funktioniert auch).

Folgender Notify funktioniert ohne Probleme:
define TürZuPush notify Haustuer:zu set Pushover msg 'FHEM 'Türe zu'

Folgender Notify liefert kein Ergebnis:
define TürZu_FensterAuf_Push notify Haustuer:zu {
  if(ReadingsVal("FHT_.*", "window", "") eq "open") {
    fhem ("set Pushover msg 'FHEM-WARNUNG' 'Es ist noch ein Fenster offen\n@ %'");
}
}


Folgender Notify liefert nur das Ergebnis Tür zu:
define TürZu_FensterAuf_Push notify Haustuer:zu {
  fhem ("set Pushover msg 'FHEM 'Türe zu'");{
  if(ReadingsVal("FHT_.*", "window", "") eq "open") {
    fhem ("set Pushover msg 'FHEM-WARNUNG' 'Es ist noch ein Fenster offen\n@ %'");
  }
}
}


Ein Notify nur auf die Fenster liefert kein Ergebnis beim Öffnen:
define FensterCheck notify FHT_.*:window:open set Pushover msg 'FHEM-WARNUNG' 'Es ist noch ein Fenster offen\n@ %'

Ich habe das ganze dann noch mit den Fensterkontakten (über einen CUNO) direkt probiert:
CUL_FHTK_.*:window:open
auch ohne Erfolg.

Hat jemand eine Idee, wo mein Denkfehler ist?
FHEM im Proxmox Container

Deudi

Ich bin mir zwar nicht 100% sicher aber ich denke mal dass das if(ReadingsVal("FHT_.*", schon nicht geht, da es kein Device gibt, dass "FHT_.*" heisst. Du musst hier entweder alle Fenster "anschauen" oder du machst dir ein virtuelles "worst case" Fenster_Alle (so habe ich es, bedeutet wenn mindestens ein Fenster offen ist, ist Fenster_Alle offen ...).

Gruß Deudi
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

Mitch

#2
das "FHT_.*" sollte schon gehen, weil alle FHT beim mir nach der Logik FHT_Zimmername benannt sind.

Habe aber zum Test gerade folgendes definiert:
define TestFenster readingsGroup FHT_.*:window

liefert eine schöne Liste aller Fenster mit Status. Geht also.
FHEM im Proxmox Container

marvin78

Ein Regex in einer ReadingsGroup ist etwas anderes als den Regex in der Funktion ReadingsVal zu verwenden. ReadingsVal erwartet EIN bestimmtes Device.

Vorschlag: Schau dir mal structure an, packe alle relevanten Fenster in eine structure und prüfe auf

ReadingsVal("STRUCTURENAME","window",0) ne "closed"

Mitch

Ah, danke, das wusste ich nicht.

Habe jetzt mal eine structur angelegt.
Sobald ich Zuhause bin, werde ich testen und Rückmeldung geben.

Vielen Dank für den Hinweis.
FHEM im Proxmox Container

peterk_de

#5
Ich mache soetwas ähnliches und hatte das auch erst mit einer structure gemacht. Die hat mir allerdings zu viele eigene Events produziert, die dann auch geloggt wurden. Ich hab mir dann folgendes gebastelt:


define tuernoti notify flur.haustuer.*offen.* {
  my @@monitored=devspec2array("((.*\\.tuer)|.*fenster):FILTER=STATE=offen");
  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) {
prowl("Achtung, ".$msgtext." offen!","Wohnung verlassen","1");
  } else {
prowl("Alles zu, auf Wiedersehen :-)","Wohnung verlassen","0");
  }
}


Meldet mir offene Türen und Fenster schon wenn die Haustür AUF geht - und eine grammatikalisch korrekte Auflistung, welche ;-)

Die Türen und Fenster heißen, damit das klappt, alle am Ende ".tuer" bzw. ".fenster" - also z.B. bad.oben.tuer oder kueche.fenster. Die herausgenommene Haustür muss flur.haustuer heißen. In der Push-Nachricht werden die Alias-Namen verwendet, eine Meldung sieht dann z.B. so aus:

"Achtung, Küchentür, Stubentür und Badfenster oben offen!"
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Mitch

structur hat grundsätzlich funktioniert, aber zu wissen, welches Fenster offen steht ist schon sehr hilfreich.

Habe jetzt mal Deinen Code etwas "manipuliert", aber noch nicht getestet:


define FensterCheckTest notify Haustuer:zu {
  my @@monitored=devspec2array("(CUL_FHTTK_.*):FILTER=STATE=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.'");
  } else {
fhem ("set Pushover msg 'FHEM' 'Alle Fenster zu'");
  }
}
FHEM im Proxmox Container

peterk_de

FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Mitch

#8
geht leider nicht, kommt immer "Alle Fenster zu"   :-\

Kannst Du mir bitte genau erklären, was das macht:
my @@monitored=devspec2array("(CUL_FHTTK_.*):FILTER=STATE=open")

Wenn ich das richtig verstehe, dann wird ein Array angelegt, welches den STATE der Fensterkontakte (CUL_FHTTK_.*) beinhaltet, richtig?
Irgendwo da liegt wohl das Problem.
FHEM im Proxmox Container

Groby

Du kannst zum überprüfen auch:


list CUL_FHTTK_.*:FILTER=STATE=open


in die cmd line eingeben.

Dann solltest Du eine Liste der devices erhalten. Sofern der Filter zutrifft.

Mitch

Der Befehlt bewirkt bei mir rein gar nichts??  :o
FHEM im Proxmox Container

peterk_de

#11
Lass mal das CUL_ im Regex weg. In deinen früheren Beispielen hatten deine Kontakte ja auch einen Namen ohne CUL_ am Anfang . Das Statement gibt eine Liste mit Devices zurück, die gem. dem Regex heißen (Name, nicht Typ) und dann nach dem entsprechenden State gefiltert werden. In dem Array sind dann die Devicenamen als String (nicht der State) drin.

Edit: Alternativ poste mal ein list von einem einzelnen (offenen) Fensterkontakt.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Mitch

Hab jetzt mal ein bisschen mit list gespielt. Ist etwas merkwürdig, welchen STATE fhem da so annimmt bzw. rauslist.

Auf jeden Fall habe ich es jetzt so gelöst:
{
  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. noch offen'");
  } else {
fhem ("set Pushover msg 'FHEM' 'Alle Fenster zu'");
  }
}


Tausend Dank für eure Hilfe!!
FHEM im Proxmox Container