Zusammenfassung mehrere gleicher DOIFs

Begonnen von Spezialtrick, 25 Februar 2017, 21:43:27

Vorheriges Thema - Nächstes Thema

Spezialtrick

Hallo!

Ich würde gerne nachfolgende DOIF zusammenfassen:


define SZ.Lueften.Automatik DOIF

         ([SZ.Klimasensor:schimmelGefahr] eq "ja" and [SZ.Klimasensor:lueftenMoeglich] eq "ja" and [SZ.Fenster:state] eq "closed") (set SZ.Lueften Lüften zwingend notwendig) (set Pushover msg 'Lüften im Bad notwendig!')
DOELSEIF ([SZ.Klimasensor:schimmelGefahr] eq "ja" and [SZ.Klimasensor:lueftenMoeglich] eq "ja" and [SZ.Fenster:state] eq "open") (set SZ.Lueften wird gelüftet)

DOELSEIF ([SZ.Klimasensor:schimmelGefahr] eq "nein" and [SZ.Klimasensor:lueftenMoeglich] eq "nein" and [SZ.Fenster:state] eq "closed") (set SZ.Lueften Lüften sollte vermieden werden)
DOELSEIF ([SZ.Klimasensor:schimmelGefahr] eq "nein" and [SZ.Klimasensor:lueftenMoeglich] eq "nein" and [SZ.Fenster:state] eq "open") (set SZ.Lueften Fenster sollte geschlossen werden) (set Pushover msg 'Fenster im Bad schließen!')

DOELSEIF ([SZ.Klimasensor:schimmelGefahr] eq "ja" and [SZ.Klimasensor:lueftenMoeglich] eq "nein" and [SZ.Fenster:state] eq "closed") (set SZ.Lueften Lüften nicht möglich heizen?)
DOELSEIF ([SZ.Klimasensor:schimmelGefahr] eq "ja" and [SZ.Klimasensor:lueftenMoeglich] eq "nein" and [SZ.Fenster:state] eq "open") (set SZ.Lueften Fenster schließen Lüften bringt nichts mehr!) (set Pushover msg 'Fenster im Bad schließen! Lüften bringt nichts!')

DOELSEIF ([SZ.Klimasensor:schimmelGefahr] eq "nein" and [SZ.Klimasensor:lueftenMoeglich] eq "ja" and [SZ.Fenster:state] eq "closed") (set SZ.Lueften Lüften möglich aber nicht nötig!)
DOELSEIF ([SZ.Klimasensor:schimmelGefahr] eq "nein" and [SZ.Klimasensor:lueftenMoeglich] eq "ja" and [SZ.Fenster:state] eq "open") (set SZ.Lueften wird gelüftet ist aber nicht nötig!)



define BZ.Lueften.Automatik DOIF

         ([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften zwingend notwendig) (set Pushover msg 'Lüften im Bad notwendig!')
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "open") (set BZ.Lueften wird gelüftet)

DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften sollte vermieden werden)
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open") (set BZ.Lueften Fenster sollte geschlossen werden) (set Pushover msg 'Fenster im Bad schließen!')

DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften nicht möglich heizen?)
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open") (set BZ.Lueften Fenster schließen Lüften bringt nichts mehr!) (set Pushover msg 'Fenster im Bad schließen! Lüften bringt nichts!')

DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften möglich aber nicht nötig!)
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "open") (set BZ.Lueften wird gelüftet ist aber nicht nötig!)


Ich nutze diese für Hinweise zum Lüften und zur Vorbeugung von Schimmel in allen Räumen, sodass für jeden Raum ein DOIF, ein Dummy, ein Fensterkontakt und ein Klimasensor vorhanden ist.

Lassen sich die DOIF zusammenfassen? Macht das überhaupt Sinn?
FHEM - Debmatic - Zigbee2MQTT - Homekit

Ellert

Wenn SZ.Lueften ein Dummy ist, der nur zur Anzeige dient, könntest Du darauf verzichten und stattdessen das Attribut cmdState einsetzen, dann kann DOIF selbst als Anzeigeelement dienen.

cmdState Lüften zwingend notwendig|wird gelüftet|Lüften sollte vermieden werden|...

Da die Zustände der beiden DOIF unabhängig voneinander sind, würde ich sie nicht zusammen fassen.

Aber Du kannst eine Zusammenfassung ausprobieren und dann entscheiden, ob es für Dich Sinn ergibt. Eine Idee, wie man es lösen könnte wird hier besprochen: https://forum.fhem.de/index.php/topic,46327.msg592493.html#msg592493

Per

Ich würde das aufteilen:


define SZ.Lueften.Automatik DOIF
         ([*.Klimasensor:schimmelGefahr] or [*.Klimasensor:lueftenMoeglich] or [*.Fenster:state])
                  (99_sub_lueften([{("$DEVICE"=~/(.*)\..*\.(.*)/;"$1.Klimasensor")}],[{("$DEVICE"=~/(.*)\..*\.(.*)/;"$1.Klimasensor")}],[{("$DEVICE"=~/(.*)\..*\.(.*)/;"$1.Fenster")}]))

Und die Abfrage sebst einmalig mit Perl in der 99_myUtil darstellen.

Habe das jetzt nur zusammenkopiert, Klammern und so müsste man also definitiv nochmal nachzählen ;)

Spezialtrick

Zitat von: Ellert am 26 Februar 2017, 00:02:21
Wenn SZ.Lueften ein Dummy ist, der nur zur Anzeige dient, könntest Du darauf verzichten und stattdessen das Attribut cmdState einsetzen, dann kann DOIF selbst als Anzeigeelement dienen.

cmdState Lüften zwingend notwendig|wird gelüftet|Lüften sollte vermieden werden|...

Danke für den Tipp! Ich werde nun für jeden Raum ein DOIF anlegen und mir dafür den Dummy sparen. :)
FHEM - Debmatic - Zigbee2MQTT - Homekit

Ellert

Zitat von: Spezialtrick am 05 März 2017, 10:53:19
Danke für den Tipp! Ich werde nun für jeden Raum ein DOIF anlegen und mir dafür den Dummy sparen. :)

Der Vorschlag ergibt natürlich nur einen Vorteil, wenn Du die DOIF pro Raum nicht zusammenlegen kannst.

Wenn Du es schaffst ein DOIF für alle Räume zu bauen, könntest statt der Anzeige-Dummys, Readings im DOIF zur Anzeige nutzen und z.B. über stateFormat oder einer readingsGroup zusammenfassen.