Aktueller Code:
Code: Alles auswählen
var Timer tAlarm = null // Zeiger auf Scheduler Eintrag
var String strAlarmItem = "" // Speicher für gemeldete Items
rule "Alarmanlage_Home_Automatik"
when
Member of Group_Bewegungsmelder changed to ON or
Member of Group_Fensterkontakt_Binaereingang changed to OPEN or
Item Haus_Alarmanlage_Benachrichtigung changed to OFF or
Item Group_Anwesenheitsstatus changed to ON
then
if(Haus_Alarmanlage_Benachrichtigung.state == OFF && Group_Anwesenheitsstatus.state == ON) { // Falls deaktiviert
tAlarm?.cancel // lösche Timer, falls vorhanden
tAlarm = null // lösche den Zeiger
strAlarmItem = "" // entferne den Itemnamen
return; // und brich die Rule ab.
}
if(triggeringItem === null) { // Rule wurde nicht durch Member getriggert
return;
}
val mySwitch = Group_Bewegungsmelder_ExpirationTimer.members.filter[i|i.name.startsWith(triggeringItem.name)].head
if(mySwitch.state != OFF){ // wurde bereits alarmiert?
return; // dann Abbruch
}
mySwitch.postUpdate(ON) // Alarmfrequenz begrenzen
if(strAlarmItem != "") // Falls schon ein Alarm besteht
strAlarmItem = strAlarmItem + ", " // ergänze die Aufzählung
strAlarmItem = strAlarmItem + triggeringItem.label // Itemnamen zwischenspeichern
if(tAlarm !== null) // Falls Timer bereits läuft
return; // nicht erneut erzeugen
tAlarm = createTimer(now.plusSeconds(60),[| // Lege Timer an
val String strMessage = "ACHTUNG: Folgender Bewegungsmelder hat ausgelöst: "+strAlarmItem+". Bewegung erkannt am: "+new DateTimeType().format("%1$td.%1$tm.%1$ty %1$tH:%1$tM") // Meldetext festlegen
val mailActions = getActions("mail","mail:smtp:Mail_SMTP") // Handle für Mail holen
val pushActions = getActions("pushover", "pushover:pushover-account:Test") // Handle für Push holen
mailActions.sendMail("mail@mail.de", "Alarmanlage",strMessage) // Mail versenden
pushActions.sendPriorityMessage(strMessage,"Alarmanlage",1) // Push versenden
strAlarmItem = "" // Itemnamen entfernen
tAlarm = null // und Zeiger auf Scheduler entfernen
])
end
Ich würde diesen noch um einen generellen Aus- & Einschalter erweitern:
Code: Alles auswählen
if((Haus_Alarmanlage_Benachrichtigung.state == OFF && Group_Anwesenheitsstatus.state == ON) || Haus_Alarmanlage_Ausschalter.state == OFF) {