Hallo zusammen,
Ich nutze folgendes notify um meine Alarmanlage auszulösen.
.*:(open|sabotageError:.on|tilted) {if(Value("Alarmanlage") eq "An") { fhem("set Sirene on") }}
Gibt es eine Möglichkeit, einen Fensterkontakt vom notify "auszuschließen"
Das device um was es geht sendet ebenfalls open|closed und ist so definiert.
HM_A5B520
Gruß Feinfinger
Regel 1: mit Value() sollte man überhaupt nicht arbeiten, sondern besser mit Werten aus readings arbeiten.
Regel 2: in einer if Abfrage kannst mehrere Bedingungen beliebig kombinieren, also prinzipiell z.B. sowas:
if (blaIrgendwas(Alarmanlage) && devive != HM_A5B520)
--
Und es gibt bei notify auch das attr ignoreRegexp - das ist genau dafür eingeführt worden ;)
https://fhem.de/commandref_modular_DE.html#notify
Ja, aber damit macht man "Logiken" immer komplizierter und fehleranfälliger, weil man die regex in ein Attribut verlegt, anstatt sie auf den ersten Blick im DEF zu erkennen.
Wenn man im DEF bereits perl Code verwendet, sollte man die Fallunterscheidungen auch dort machen.
In notify, in denen man nur einen direkten FHEM Befehl ausführt, kann der Ausschluß per Attribut vielleicht Sinn machen.
--
Ohne mich mit dem Attribut beschäftigt zu haben, aus Interesse die Frage wie denn dann die Syntax für bspw. zwei Geräte wäre, wenn die Syntax die gleiche wie in der DEF ist ?
(bla2|bla1)
?
So? define n_bla notify bla.:.* {}
attr n_bla ignoreRegexp bla3:.*
Habs jetzt mal ausprobiert und bin der Meinung das es schon so reicht wie ich vermutet habe nur das mit den Klammern war Käse, wenn man wie hier gewünscht ein Gerät (in meinem Bsp. halt zwei) komplett ignorieren möchte.
Die Angabe eines Readings/Events nicht zwingend nötig ?
Beispiel anhand ich es nachvollzogen habe:
defmod not_FB_433_2_TasteX_Test notify FB_433_1_TasteA|FB_433_1_TasteB|FB_433_1_TasteC|FB_433_1_TasteD:.* saysonos $EVENT
attr not_FB_433_2_TasteX_Test ignoreRegexp FB_433_1_TasteA|FB_433_1_TasteB
attr not_FB_433_2_TasteX_Test room Test
Zitat von: Otto123 am 07 März 2021, 13:56:26
So? define n_bla notify bla.:.* {}
attr n_bla ignoreRegexp bla3:.*
Das werde ich mal testen, klingt plausibel :-)
Solle
(?!auszuschliessendesDevice).*:(open|sabotageError:.on|tilted) {if(Value("Alarmanlage") eq "An") { fhem("set Sirene on") }}
nicht auch funktionieren?
Ansonsten mit gut strukturierten Namen arbeiten, dann kann man darüber filtern, zB
Sensor.*:(open|sabotageError:.on|tilted) {if(Value("Alarmanlage") eq "An") { fhem("set Sirene on") }}
Zu den letzten beiden Beispielen empfehle ich diese Literatur :)
https://forum.fhem.de/index.php?topic=115414.0