FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rhoffm34 am 02 Mai 2021, 12:34:48

Titel: (gelöst) DOIF mit der Abfrage von vielen Zuständen vereinfachen
Beitrag von: rhoffm34 am 02 Mai 2021, 12:34:48
Moin zusammen.

Ich habe ein DOIF in dem viele Schalter abgefragt werden ob diese auf "off" stehen.

if ([Garten_Schalter_1] eq "off" and [Garten_Schalter_2] eq "off" and [Garten_Schalter_3] eq "off" ... )
{fhem("set UVert.3_HM_Sw_1_PowerUVert.4 on-for-timer 600");}

Meine Frage ist, wie kann ich die Abfrage eleganter zusammenfassen?

Probiert habe ich

if ([UVert.4_HM_Sw_1_.*] eq "off")

das funktioniert nicht...

Vielleicht kann einer weiterhelfen.

Titel: Antw:DOIF mit der Abfrage von vielen Zuständen vereinfachen
Beitrag von: Otto123 am 02 Mai 2021, 12:40:23
Hi,

unabhängig von DOIF würde ich die Schalter zunächst in einer structure zusammenfassen und die structure abfragen.

Gruß Otto
Titel: Antw:DOIF mit der Abfrage von vielen Zuständen vereinfachen
Beitrag von: rhoffm34 am 02 Mai 2021, 13:42:03
Danke Otto, structure kannte ich noch nicht. Das ist genau das was ich gebraucht habe.

Vielen Dank für die schnelle Antwort
Titel: Antw:(gelöst) DOIF mit der Abfrage von vielen Zuständen vereinfachen
Beitrag von: Sany am 03 Mai 2021, 11:59:25
um bei DOIF zu bleiben:
Zitathttps://fhem.de/commandref_modular_DE.html#DOIF_aggregation
schon mal gesehen?

das könnte bei Dir dann etwa so aussehen:
[#"^Garten_Schalter_":state:$_ !~ "off"]
"Summe der Devices die mit Garten_Schalter_ beginnen und deren state nicht "off" enthält"
also wenn alle off sind kommt hier 0 raus, ansonsten die Anzahl derer, die on sind.
if([#"^Garten_Schalter_":state:$_ !~ "off"] > 0){
    fhem("set UVert.3_HM_Sw_1_PowerUVert.4 on-for-timer 600");
    }


solltest Du zufällig noch Devices haben, die auch mit Garten_Schalter beginnen, aber nicht überprüft werden sollen, dann könntest Du alle zu überprüfenden in eine Gruppe packen (Bsp: attr XXX group ueberwacht) und dann die Def erweitern:
[#"^Garten_Schalter_":state:$_ !~ "off" and $group =~ "ueberwacht"]

zum testen kannst Du die Abfrage einfach als DOIF_Reading in Dein DOIF reinschreiben und zusehen, ob es entsprechend funktioniert
attr DeinDOIF DOIF_Readings GartenSchalterNotOFF:[#"^Garten_Schalter_":state:$_ !~ "off"]

Viel Erfolg!

(alles ungetestet, nur bei mir funktionierende Defs umgeschrieben!)