Alarmanlage - Meldung nach Wartezeit
Verfasst: 2. Okt 2022 15:17
Hallo zusammen,
nachdem ich nun nach tatkräftiger Hilfe von udo1toni (
) endlich meine Regel mit Timern hinbekommen habe, wollte ich mich an eine kleine nervige Sache mit meiner "Alarmanlage" machen.
Ausgangslage ist: Der Bewegungsmelder im Flur meldet einen Alarm, wenn 1. die "Alarmanlage" angeschaltet ist UND 2. wenn mein Handy nicht mit dem WLAN verbunden ist. Das klappt soweit zuverlässig und sehr gut.
Nervig dabei ist allerdings, dass wenn ich nach Hause komme, dass ich jedes mal einen Alarm auslöse, da das Handy etwas zeit braucht, um sich mit dem WLAN zu verbinden und auch, dass der Status im OH3 ankommt.
Meine Lösung wäre ein Timer in die Rule einzubauen, der eine Minuten die Rule "aufhält" und dann erst startet... Wenn ich dann zuhause bin, soll der Timer einfach abgebrochen werden und die Regel beendet.
Klappt nur leider nicht und ich bekomme ich Log einen Fehler...
Im Log steht:
P.S.: Gundlegend hat mich dieser Post auf die Idee gebracht: viewtopic.php?p=46630&hilit=timer+in+einer+rule#p46630
nachdem ich nun nach tatkräftiger Hilfe von udo1toni (

Ausgangslage ist: Der Bewegungsmelder im Flur meldet einen Alarm, wenn 1. die "Alarmanlage" angeschaltet ist UND 2. wenn mein Handy nicht mit dem WLAN verbunden ist. Das klappt soweit zuverlässig und sehr gut.
Nervig dabei ist allerdings, dass wenn ich nach Hause komme, dass ich jedes mal einen Alarm auslöse, da das Handy etwas zeit braucht, um sich mit dem WLAN zu verbinden und auch, dass der Status im OH3 ankommt.
Meine Lösung wäre ein Timer in die Rule einzubauen, der eine Minuten die Rule "aufhält" und dann erst startet... Wenn ich dann zuhause bin, soll der Timer einfach abgebrochen werden und die Regel beendet.
Code: Alles auswählen
configuration: {}
triggers:
- id: "1"
configuration:
groupName: Group_Bewegungsmelder
state: ON
type: core.GroupStateChangeTrigger
actions:
- inputs: {}
id: "2"
configuration:
type: application/vnd.openhab.dsl.rule
script: >
var Timer tAlarm = null
var Integer iAlarm = 1
val mySwitch = Group_Bewegungsmelder_ExpirationTimer.members.filter[i|i.name.startsWith(triggeringItem.name)].head
tAlarm = createTimer(ZonedDateTime.now.plusMinutes(iAlarm), [|
if(mySwitch.state == OFF && (Haus_Alarmanlage_Manuell.state == ON || Group_Anwesenheitsstatus.state == OFF)){
var String ItemNameON = triggeringItem.label.toString
val String strMessage = "NACHRICHT"
val mailActions = getActions("mail","mail:smtp:Mail_SMTP")
val success = mailActions.sendMail("test@test.de", "Nachricht von Zuhause",strMessage)
val actions = getActions("pushover", "pushover:pushover-account:test")
actions.sendPriorityMessage(strMessage,"Nachricht von zuhause",1)
mySwitch.postUpdate(ON) } else {
tAlarm = null
} ])
type: script.ScriptAction
Im Log steht:
GrüßeCannot refer to the non-final variable tAlarm inside a lambda expression;
P.S.: Gundlegend hat mich dieser Post auf die Idee gebracht: viewtopic.php?p=46630&hilit=timer+in+einer+rule#p46630