Seite 1 von 1
Verzögerung für die Aktivierung eines rules (Alarm)
Verfasst: 20. Mär 2020 15:22
von Boris099
Ich möchte für mein Alarmanalage rule eine zeitliche Verzögerung einbauen.
Wie gehe ich denn da vor?
das ist die IF-Abfrage mit der das rule losrennt
Code: Alles auswählen
if(E_Touch10_2.state == OFF) {
logInfo("bw_alarm","Alarmanlage aus, Rule Ende!")
return;
}
nun würde ich gerne die Aktivierung des Switch E_Touch10_2, oder die Aktivierung des rule an sich, um 3 Minuten verzögern, geht das?
Re: Verzögerung für die Aktivierung eines rules (Alarm)
Verfasst: 20. Mär 2020 15:33
von Darkwin101
na mit einem Timer und bitte poste die ganze rule eventuell kann mann auch einiges eleganter schreiben wenn z.B. solche Leute wie Udo1Toni drüber schauen. Es ist immer schwer etwas zu beurteilen wenn mann nur Code Schnipsel hat und den Kontext nicht kennt.
Re: Verzögerung für die Aktivierung eines rules (Alarm)
Verfasst: 20. Mär 2020 16:40
von Boris099
OK,
also die eigentliche Aktivierung ist mit dem Switch E_Touch10_2.state == OFF
Code: Alles auswählen
import java.util.List
var List<Timer> timers = newArrayList
var Timer shutoffTimer = null
var Timer LEDTimer1 = null
var Timer LEDTimer2 = null
var Timer SireneTimer1 = null
var DateTime lastRun = 0
rule "Rule Datei eingelesen"
when
System started
then
lastRun = now.minusMinutes(2)
end
rule "Bewegung 5 mal in einer Minute"
when
Member of gBW changed from OFF to ON
then
if(MailSenden.state == ON) {
val mailText = "Bewegungsmelder " + triggeringItem.name + " hat ausgelöst"
mailActions.sendMail("xxxx@gmail.com","Alarm "+ triggeringItem.name, mailText)
}
if(TelegramSenden.state == ON) {
val telegramAction = getActions("telegram","telegram:telegramBot:xxxx")
telegramAction.sendTelegram("Bewegungsmelder An - %s", triggeringItem.name)
}
if(E_Touch10_2.state == OFF) {
logInfo("bw_alarm","Alarmanlage aus, Rule Ende!")
return;
}
if(LEDTimer1 === null) {
gLED.sendCommand(ON)
LEDTimer1 = createTimer(now.plusSeconds(7), [ |
gLED.sendCommand(OFF)
LEDTimer1 = null
] )
}
if(SireneTimer1 === null) {
Sirene_Gaeste.sendCommand(ON)
SireneTimer1 = createTimer(now.plusSeconds(1), [ |
Sirene_Gaeste.sendCommand(OFF)
SireneTimer1 = null
] )
}
if(shutoffTimer !== null) {
logInfo("bw_alarm","Alarm schon aktiv, Rule Ende!")
return;
}
if(lastRun.isAfter(now.minusMinutes(2))) {
logInfo("bw_alarm","letzter Alarm vor weniger als 2 Minuten, Rule Ende!")
return;
}
if(timers.size < 5) {
val t = createTimer(now.plusMinutes(1), [ |
timers.remove(0)
] )
timers.add(t)
}
if(timers.size == 5) {
if(MailSenden.state == ON) {
val mailActions = getActions("mail","mail:smtp:xxxx")
mailActions.sendMail("xxx@gmail.com","Sirene aktiviert ", "Sirene ON")
}
if(TelegramSenden.state == ON) {
val telegramAction = getActions("telegram","telegram:telegramBot:xxxx")
telegramAction.sendTelegram("Sirene AN")
}
Sirene_Gaeste.sendCommand(ON)
LEDTimer2 = createTimer(now.plusMillis(10), [ |
if(gLED.state != ON) {
gLED.sendCommand(ON)
LEDTimer2.reschedule(now.plusSeconds(3))
} else {
gLED.sendCommand(OFF)
LEDTimer2.reschedule(now.plusSeconds(3))
}
] )
lastRun = now
while(timers.size > 0) {
timers.get(0).cancel
timers.remove(0)
}
shutoffTimer = createTimer(now.plusSeconds(90), [ |
Sirene_Gaeste.sendCommand(OFF)
logInfo("Alarmrule", "Sirene Ende")
LEDTimer2?.cancel
LEDTimer2 = null
if(gLED.state != OFF)
gLED.sendCommand(OFF)
shutoffTimer = null
] )
}
end
Re: Verzögerung für die Aktivierung eines rules (Alarm)
Verfasst: 21. Mär 2020 12:55
von udo1toni
Ich erinnere mich an die Rule
Du solltest den Alarm Switch E_Touch10_2 durch ein Proxy Item ersetzen. Das Proxy Item wiederum schaltest Du über eine Rule ein und aus. Das Einschalten verzögerst Du mittels Timer um drei Minuten.
Re: Verzögerung für die Aktivierung eines rules (Alarm)
Verfasst: 21. Mär 2020 16:39
von Boris099
Proxy Item? Ups da muss ich erst Mal recherchieren, habe ich noch nie was von gehört...
Da fällt mir noch was ein, wenn der Alarm nun ausgelöst wird, kann ich den Alarm eigentlich mit dem Deaktivieren des Switch, momentan noch ohne Proxy und später mit Proxy, ausschalten?
Oder ist ein Proxy Item ein Dummy Item?
Re: Verzögerung für die Aktivierung eines rules (Alarm)
Verfasst: 21. Mär 2020 18:57
von udo1toni
Ein Proxy Item ist ein Item ohne Bindung an einen Channel. Es wird eingesetzt, um Signale über einen Umweg an andere Items weiterzugeben. Wenn Du über *.items Dateien konfigurierst, lässt Du einfach den Teil in den geschweiften Klammern {} weg.