Seite 1 von 1

Timer abbrechen von anderer Rule vor Ausführung

Verfasst: 6. Apr 2022 15:07
von tommesd
Hallo zusammen,
ich möchte eine Alarmanlage so konfigurieren, dass im Falle eines Alarms zunächst der visuelle Alarm ausgelöst wird und anschließend, nach 10 - 15 Sekunden der akkustische Alarm folgt.
Ich habe das in einer Rule über einen Timer realisiert. Wie kann ich diesen Timer über eine andere Rule abbrechen, wenn während des optischen Alarms die Deaktivierung erfolgt?
Ich möchte das gerne über mehrere Rules abbilden, da ich mehrere Alarm Szenarien und auch Deaktivierungen verwenden möchte.

Timer abbrechen von anderer Rule vor Ausführung

Verfasst: 6. Apr 2022 15:52
von udo1toni
Wenn Du das als DSL Rule in einer *.rules Datei machst, ist das kein Problem. Du musst lediglich in einem Objekt den Zeiger auf den Timer speichern.

Code: Alles auswählen

var Timer tMyTimer = null

rule „meine Rule“
…
then
    tMyTimer = createTimer(…,[…])
end

rule „meine zweite Rule“
…
then
    tMyTimer.cancel
end


Gesendet von iPad mit Tapatalk

Re: Timer abbrechen von anderer Rule vor Ausführung

Verfasst: 6. Apr 2022 19:36
von tommesd
Und wie geht das in verschiedenen rule Dateien?

Re: Timer abbrechen von anderer Rule vor Ausführung

Verfasst: 6. Apr 2022 23:40
von udo1toni
Gar nicht. Oder einfach so.

Grundsätzlich haben Variablen ihre Gültigkeit nur im Kontext, in dem sie definiert wurden. Da die Variable in der rules-Datei definiert wurde, sollte sie in den anderen Dateien nicht definiert sein.
Andererseits sind Variablen, die außerhalb von Rules definiert wurden global, sollten also übergreifend gültig sein.

Mein Tipp: probiere es aus. Wenn es nicht funktioniert, packe alle Rules, die auf die Variable zugreifen müssen in eine Datei, fertig.