Mehrere DOIFs mit selbem "Shema" zusammenfassen/vereinfachen

Begonnen von PS915, 07 Februar 2019, 20:56:09

Vorheriges Thema - Nächstes Thema

PS915

Guten Abend zusammen,

mal angenommen, man hat mehrere DOIFS mit immer dem selben "Schema" und möchte diese vereinfachen. Zum Beispiel nur mit einem DOIF. Ist das in irgendeiner Form möglich? Wie würde so eine Struktur aussehen?

define push.raum1.sabotage DOIF ([windows.raum1:sabotageError] eq "on" and [push_allowed.raum1] eq "yes") (set pushmsg msg 'Raum1' 'Achtung! Sabotagealarm in Raum 1')
define push.raum2.sabotage DOIF ([windows.raum2:sabotageError] eq "on" and [push_allowed.raum2] eq "yes") (set pushmsg msg 'Raum2' 'Achtung! Sabotagealarm in Raum 2')
define push.raum3.sabotage DOIF ([windows.raum3:sabotageError] eq "on" and [push_allowed.raum3] eq "yes") (set pushmsg msg 'Raum3' 'Achtung! Sabotagealarm in Raum 3')
define push.raum4.sabotage DOIF ([windows.raum4:sabotageError] eq "on" and [push_allowed.raum4] eq "yes") (set pushmsg msg 'Raum4' 'Achtung! Sabotagealarm in Raum 4')
define push.raum5.sabotage DOIF ([windows.raum5:sabotageError] eq "on" and [push_allowed.raum5] eq "yes") (set pushmsg msg 'Raum5' 'Achtung! Sabotagealarm in Raum 5')
[...]


Hintergrund: Wenn ich an dem "Shema" etwas ändern möchte, zum Beispiel den Text von "Achtung! Sabotagealarm" auf "ALARM! Sabotagealarm" ändern möchte, müsste ich haufenweise DOIFS editieren.

Gruß,
Phil

doman75

heissen die alle ([windows.raum1:sabotageError] oder auch raum2 raum3 etc?

PS915

Ja, sie heißen natürlich raum1,raum2, das hatte ich vergessen zu ändern. Ist nun editiert. Die Räume wären quasi durchnummeriert, wenn man aber verschiedene Räume wie

define push.raum_bad.sabotage DOIF ([windows.raum_bad:sabotageError] eq "on" and [push_allowed.raum_bad] eq "yes") (set pushmsg msg 'Bad' 'Achtung! Sabotagealarm in Bad')
define push.raum_schlafzimmer.sabotage DOIF ([windows.raum_schlafzimmer:sabotageError] eq "on" and [push_allowed.schlafzimmer] eq "yes") (set pushmsg msg 'Schlafzimmer' 'Achtung! Sabotagealarm in Schlafzimmer')


benennt, wäre das natürlich auch cool. Könnte man nicht auf den Alias des Sensors/Device verwenden um daraus auf die readings und anderen dummys zu schließen?

Beta-User

Erfordert vielleicht etwas tiefere Einarbeitung und paßt auch nicht ganz genau (da es um "normale Öffnungen" geht, nicht um den Sabotagekontakt), aber vielleicht mal als Muster/Anregung:
Globale, flexible Fenster-/Tür-Offen-Meldungen
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Damian

#4
In solchen Fällen musst du von konkreten Readingangaben weg und auf Ereignisse mit RegEx umsteigen.

Bsp.:

define push.raum1.sabotage DOIF (["^windows.raum:sabotageError",""] eq "on" and [?push_allowed_$DEVICE] eq "yes") (set pushmsg msg '$DEVICE' 'Achtung! Sabotagealarm in $DEVICE')

Hier wird auf alles was mit windows.raum beginnt mit sabotageError getriggert. Aus dem Event wird der Wert entnommen und mit "on" verglichen, dann wird vor den triggernden Devicenamen pusch_allowed davorgehängt und dieses Devices auf "yes" abgefragt.

Dazu müssen pusch_allowed-Devices den Aufbau haben:

push_allowed_windows.raum<nr>
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF