Hallo,
ich bastle gerade an einer kleinen Alarmanlage, welche über Fensterkontakte ausgelöst wird.Mein Test-DOIF für eine Sirene sieht so aus
define 99_ALARM_Sirene DOIF ((["^EG_:open"] or ["^KG_:open"]) and [01_Alarmanlage_Status] eq "scharf") (set teleBot message ALARMANLAGE - alarmOn) (set teleBot message ALARMANLAGE - alarmOff) DOELSEIF (["^EGv_:open"] and [01_Alarmanlage_Status] eq "scharf") (set teleBot message ALARMANLAGE - alarmOn verzögert) (set teleBot message ALARMANLAGE - alarmOff verzögert)
attr 99_ALARM_Sirene do always
attr 99_ALARM_Sirene group Alarmanlage
attr 99_ALARM_Sirene repeatcmd 10:10
attr 99_ALARM_Sirene repeatsame 5:5
attr 99_ALARM_Sirene sortby 99
attr 99_ALARM_Sirene wait 0,10:15,10
Fensterkontakte fangen alle mit EG_ oder KG_ an und sollen das doif auslösen wenn gleichzeitig der Dummy 01_Alarmanlage_Status "scharf" ist.
Es gibt noch Fensterkontakte EGv_, welche verzögert auslösen sollen.
Soweit funktioniert erstmal alles sobald ein Fenster geöffnet wird aber was ich nicht hinbekomme ist ein vorzeitiges abbrechen der Ausführung.
Z. Bsp. wenn ein Fenster EGv_ aufgemacht wird sollte man Zeit haben den Dummy über einen Schalter auf "unscharf" zu setzen.
Aber das doif hat ja bereits getriggert und arbeitet die Befehle ab.
Welche Möglichkeit habe ich das vorzeitig abzubrechen? An dieser Stelle komme ich momentan nicht weiter.
Wenn 01_Alarmanlage_Status auf was anderes als "scharf" wechselt, sind beide Bedingungen nicht mehr erfüllt. Allerdings kann das DOIF den Zustand nicht wechseln, weil es keinen anderen Zustand gibt. Deshalb werden die wait-Timer nicht unterbrochen.
Du könntest ein DOELSE ergänzen oder eben ein DOELSEIF([01_Alarmanlage_Status] ne "scharf")(...). Dann könnte das DOIF den Zustand wechseln, wodurch die Timer gelöscht werden und die Abarbeitung unterbrochen wird.
Danke für den Tip, damit funktioniert es wie gewünscht.