Hallo, ich habe einige notifys für die Beschaltung meines Licht Carports angelegt und wollte nun diese in einer Funktion zusammenfassen.
Der alte Code schaute so aus:
define notify_Licht_Carport_Taster_onfortimer notify Taster_Licht_Carport_Aussen:on-for-timer set Licht_Carport_Aussen on-for-timer 120
define notify_Licht_Carport_Taster_off notify Taster_Licht_Carport_Aussen:off-for-timer set Licht_Carport_Aussen off
define notify_Licht_Carport_Annaeherungsschalter_onfortimer notify Annaeherungsschalter_Garage_C1:on set Licht_Carport_Aussen on-for-timer 120
define notify_Licht_Carport_Handsender_onfortimer notify Mini_Handsender_C2:on set Licht_Carport_Aussen on-for-timer 120
define notify_Licht_Carport_Handsender_off notify Mini_Handsender_C2:off set Licht_Carport_Aussen off
Nun habe ich das in dieser Funktion zusammengefasst:
define notify_Licht_Carport_Aussen_onfortimer notify (Taster_Licht_Carport_Aussen|Annaeherungsschalter_Garage_C1|Mini_Handsender_C2) {\
if (Value("Taster_Licht_Carport_Aussen") eq "on-for-timer" || Value("Annaeherungsschalter_Garage_C1") eq "on" || Value("Mini_Handsender_C2") eq "on") {\
fhem("set Licht_Carport_Aussen on-for-timer 120") }\
else { fhem("set Licht_Carport_Aussen off");;\
}\
}
Mein Problem ist nun das wenn ich zb. den Mini_Handsender auf off betätige, was ich im Event monitor auch sehe, wird ein set Licht_Carport_Aussen on-for-timer 120 ausgeführt und kein off
Gruß
cerberus
siehe LOG
Der Fehler steckt im if:
Taster=on-for-timer ODER Annäherungsschalter=on ODER Handsender=on
Wenn nun der Befehl Handsender=off kommt, schaltet fhem korrekt das Licht für 2 Minuten an, weil Taster immer noch on for timer oder Annäherungsschalter immer noch on ist. Damit ist das if-Statement erfüllt und es wird in then-Zweig gegangen. Der else-Zweig wird nur aufgerufen, wenn alle drei Gründe nicht mehr zutreffen.