[SOLVED]Alarm Rule - Bitte checken ob korrekt?
Verfasst: 19. Feb 2020 21:20
Ich habe hier ein rule für eine Alarmanlage, welche aus 7 Sensoren und einer Sirene besteht.
Die rule soll bei dreimaliger Aktivierung innerhalb einer Minute (egal welcher Sensor) die Sirene aktivieren.
Das rule wurde mit Unterstützung des englischen Openhab Forums zusammengebaut, das ist auf Englisch aber alles so mühselig:-) Das wurde mit Openhab 2.1 erstellt und ich möchte bevor ich es nun aktiviere nochmal von euch checken lassen, ob das so OK ist, oder ob ihr da evtl. noch Verbesserungen seht, oder ....
Ich bin Anfänger und bin erst mal stolz das dieses Ding überhaupt läuft, obwohl ich bei weitem nicht
jedem Befehl folgen kann.
Benötigt man denn wirklich diese Befehle wie var List timers .. und import java.util.List?
Ich habe auch den Umstand, wenn eingeschaltet, braucht es warum auch immer 4 Aktivierungen,
danach nur 3 zum Auslösen der Sirene, ist nicht weiter schlimm aber irgendwie eigenartig, kann man das ändern?
Der Befehl AlarmAussen.state == OFF (Das ist ein Dummy Switch den ich definiert habe, um die Alarmanlage scharf zu schalten) bedeutet doch wenn der Status OFF ist, müsste das denn nicht genau andersrum abgefragt werden?
Und was macht eigentlich lastRun.isAfter(now.minusMinutes(2))) return;?
und Vielen Dank im Voraus
Die rule soll bei dreimaliger Aktivierung innerhalb einer Minute (egal welcher Sensor) die Sirene aktivieren.
Das rule wurde mit Unterstützung des englischen Openhab Forums zusammengebaut, das ist auf Englisch aber alles so mühselig:-) Das wurde mit Openhab 2.1 erstellt und ich möchte bevor ich es nun aktiviere nochmal von euch checken lassen, ob das so OK ist, oder ob ihr da evtl. noch Verbesserungen seht, oder ....
Ich bin Anfänger und bin erst mal stolz das dieses Ding überhaupt läuft, obwohl ich bei weitem nicht
jedem Befehl folgen kann.
Benötigt man denn wirklich diese Befehle wie var List timers .. und import java.util.List?
Ich habe auch den Umstand, wenn eingeschaltet, braucht es warum auch immer 4 Aktivierungen,
danach nur 3 zum Auslösen der Sirene, ist nicht weiter schlimm aber irgendwie eigenartig, kann man das ändern?
Der Befehl AlarmAussen.state == OFF (Das ist ein Dummy Switch den ich definiert habe, um die Alarmanlage scharf zu schalten) bedeutet doch wenn der Status OFF ist, müsste das denn nicht genau andersrum abgefragt werden?
Und was macht eigentlich lastRun.isAfter(now.minusMinutes(2))) return;?
und Vielen Dank im Voraus
Code: Alles auswählen
import java.util.List
var List timers = newArrayList
var Timer shutoffTimer = null
var lastRun = now
rule "Sonbas Motion changed from OFF to ON 3 times in a minute"
when
Item BW_Kueche changed from OFF to ON or
Item BW_Schwimmbad changed from OFF to ON or
Item BW_Tobias changed from OFF to ON or
Item BW_Nachbar changed from OFF to ON or
Item BW_Wohnzimmer changed from OFF to ON or
Item BW_Eingang changed from OFF to ON or
Item BW_Wintergarten changed from OFF to ON
then
if(shutoffTimer !== null || AlarmAussen.state == OFF || lastRun.isAfter(now.minusMinutes(2))) return;
if(timers.size < 3) {
val t = createTimer(now.plusMinutes(1), [ | timers.remove(t) ] )
timers.add(t)
}
if(timers.size == 3) {
sendMail("xxx@gmail.com", "Sonbas", "Sonbas Motion")
Sirene_Gaeste.sendCommand(ON)
lastRun = now
logInfo("RuleInfo", "Siren START")
timers.clear()
shutoffTimer = createTimer(now.plusSeconds(10)) [ |
Sirene_Gaeste.sendCommand(OFF)
logInfo("RuleInfo", "Siren STOP")
shutoffTimer = null ]
}
end