FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cerberus am 26 November 2013, 10:13:52

Titel: komme nicht weiter mit notify
Beitrag von: cerberus am 26 November 2013, 10:13:52
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
Titel: Antw:komme nicht weiter mit notify
Beitrag von: OiledAmoeba am 26 November 2013, 12:01:40
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.