Hallo zusammen,
ich habe folgenden Code der funktioniert:
define XY notify Tuer1.*(contact:.open).*{fhem("set Alarm on")}
Ich möchte nun aber die Abfrage des contact in eine if Schleife fassen, da ich in Zukunft noch weitere türschalter per ODER miteinbeziehen möchte.
Die "einfache" Schleife sieht bei mir dann so aus:
define XY2 notify Tuer1 {if Tuer1:contact.*open{ fhem("set Alarm on")}}
Leider stimmt die syntax nicht, zumindest wird sie im log angemeckert. Ich weiß aber leider nicht warum?
Kann mir da jemand auf die Sprünge helfen?
Hat keiner eine Ahnung?
Oder habe ich mich schlecht ausgedrückt?
Hallo,
versuch mal
define XY2 notify Tuer1:.* {
if (Tuer1:contact.*open) {
fhem("set Alarm on");
}
}
ungetestet aber mit den Einzeilern komm ich leider nicht zurecht.
Grüße
Hi,
Zitat von: Kiter192 schrieb am So, 10 März 2013 22:39define XY2 notify Tuer1 {if Tuer1:contact.*open{ fhem("set Alarm on")}}
Hmmm....
"if (Tuer1:contact.*open)" setzt mM doch voraus, dass "Tuer1:contact.*open"
True liefert, was es wohl nicht tut, daher musst du auf eine Übereinstimmung prüfen wie z.B.
if (ReadingsVal("Tuer1", "contact", 0) eq "open") { \
mach was \
}
mal so ins Unreine gedacht.
Gruß
Thomas
Lies dir mal Wiki "Alarmanlage" durch.
Da wird so Kram ausführlichst behandelt.
ZitatOder habe ich mich schlecht ausgedrückt?
Nee, aber die Überschrift "Probleme mit einem Befehl" hat mich z.b. nicht angesprochen.
Das sollte schon ein bisschen deskriptiver sein.
Hallo,
das ganze sollte auch so klappen:
define XY2 notify Tuer1:contact.* {
if ("%" eq "open") {
fhem("set Alarm on");
}
}
Oder sonst Zrrronggg!!!`s Link hat auch was.
Grüße
Danke,
die Überschrift werde ich nächstes mal besser überdenken. ;)
Die Alarmanlage kenne ich schon. Das Problem dabei ist, das der Türschalter, wenn er betätigt wird, im Log mehrere Status aufweist.
Unter anderem
open
contact open (send to...)
Das führt dazu das die if bedingung bei Abfrage auf open mindestens schon zwei mal ausgeführt wird.
Ich möchte expliziet nur den Contact auf auf bzw zu abfragen können.
Wie anfangs beschrieben habe ich ein notify hinbekommen, welches nur auf "contact" reagiert.
Hallo,
überarbeitet:
define XY2 notify Tuer1:contact {
if ("%" eq "open") {
fhem("set Alarm on");
}
}
Zur Not musst du dir noch zusätzlich einen Dummy schalten und in die Abfrage einbauen der beim ersten
Tuer1:contact open
gesetzt wird um den set-Befehl nur einmal zu setzen.
Grüße
ZitatDie Alarmanlage kenne ich schon. Das Problem dabei ist, das der Türschalter, wenn er betätigt wird, im Log mehrere Status aufweist.
Unter anderem
open
contact open (send to...)
Deshalb verwies ich auf den Artikel, denn genau aus diesen Gründen hat die Alarmanlage einen Abstraktionslayer eingeführt. D.H. ein Dummy für jeden Kontakt der zunächst mit einem eigenen notify unter genauen Bedingungen gefüllt wird, um dann später etwas zu haben, was nur die Status hat, die man braucht. Man kann dann sogar, um die Logeinträge zu minimieren den Zustand des dummys nur setzen, wenn er vorher ANDERS war.Durch "attr loglevel 6" im eigentlichen Sensor kann man dann auch denLogmüll eingrenzen.
Insgesamt ist der Vorteil einer Zwischenschicht, dass man nicht alle Logik in eine überkomplexe if-abfrage für die Alramauslösung legen muss, sondern in der Befüllung des Dummys bereits logik bauen kann. Wenn du mehrere Sensoren hast wird dir noch mehr an Logik einfallen, die du unterbringen musst, trust me. So Kram wie "Ach ja, das Fenster soll aber KEINEN Alarm auslösen, wenn es offen ist und der Wäschetrockern an" und so Kram. Das packst du dann später alles in die Logik, die den Dummy befüllt.
ZitatZur Not musst du dir noch zusätzlich einen Dummy schalten und in die Abfrage einbauen der beim ersten
Tuer1:contact open
gesetzt wird um den set-Befehl nur einmal zu setzen.
Siehst du... Puschel74 hat die selbe Idee ;-)