Hauptmenü

Probleme mit einem Befehl

Begonnen von Kiter192, 10 März 2013, 22:39:54

Vorheriges Thema - Nächstes Thema

Kiter192

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?





Kiter192

Hat keiner eine Ahnung?
Oder habe ich mich schlecht ausgedrückt?

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Rohan

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
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Zrrronggg!

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.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Kiter192

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.

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

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  ;-)
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL