Guten Abend,
ich bin noch neu in der OH2 Welt und baue mir gerade eine eigene Umgebung.
Aktuelle scheitere ich an einer Regel die mir eine Nachricht übermittelt wenn ein Fenster zu lange offen ist. Wahrscheinlich ist es nur ein Denkfehler aber ich kann den Fehler nicht sehen. Ich bekomme zwar eine Meldung wenn das Fenster 10 Minuten geöffnet ist aber der Timer bricht nicht ab wenn ich das Fenster vorher schließe und ich bekomme die Meldung trotzdem.
Außerdem bekomme ich die Meldung ein zweites mal um die Zeit verzögert seit dem schließen des Fensters.
Das erklärt es sofort. Ein String ist ein String. Ein Status ist ein Status. Ich behaupte mal, (ohne homematic selbst zu nutzen), dass Du den Channel mit einem Contact Item verlinken müsstest. Falls das nicht funktionieren sollte (und nur dann!) kannst Du auch weiterhin das String Item verwenden und nun aber die Abfrage anpassen:
Begründung: Das Contact Item ist der korrekte Itemtyp für einen Boolean Wert (vor allem, wenn er sich auf einen Tür- oder Fensterkontakt bezieht).
Ansonsten ist ein Status normalerweise ein Status und kein String, aber in diesem Fall beinhaltet das String Item tatsächlich einen String als Status und eben kein Datum vom Typ OpenClosedType, also muss man auch mit einem String vergleichen.
Dass die Meldung zweimal ausgegeben wird, rührt daher, dass ein zweiter Timer angelegt wird, dabei wird der Zeiger auf den ersten Timer mit dem neuen Timer überschrieben, der erste Timer wird dabei nicht gelöscht!.
Hast Du Dir mal das events.log angeschaut, zum Zeitpunkt des Fenster öffnens (und schließens)? Für mich hört es sich so an, als spränge das Item wieder auf etwas anderes als CLOSED zurück.
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.9 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
2020-01-16 22:32:16.498 [vent.ItemStateChangedEvent] - OF_CD_01_STATE changed from CLOSED to OPEN
2020-01-16 22:32:16.917 [vent.ItemStateChangedEvent] - OF_HT_01_SETPOINTTEMPERATURE changed from 17.00 °C to 12.00 °C
2020-01-16 22:32:30.041 [vent.ItemStateChangedEvent] - OF_CD_01_STATE changed from OPEN to CLOSED
2020-01-16 22:42:16.740 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.Timer 42 2020-01-16T22:42:16.735+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
sendBroadcastNotification(<XStringLiteralImpl>)
<null>.WindowTimer = <XNullLiteralImplCustom>
} ] threw an unhandled Exception:
java.lang.IllegalStateException: Cannot resolve proxy: windows_test.rules#/1
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getRawType(JavaReflectAccess.java:108) ~[?:?]
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getField(JavaReflectAccess.java:57) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._assignValueTo(XbaseInterpreter.java:1337) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter._assignValueTo(ScriptInterpreter.java:211) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.assignValueTo(XbaseInterpreter.java:1310) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1302) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy369.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [bundleFile:?]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]
2020-01-16 22:42:16.783 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.Timer 42 2020-01-16T22:42:16.735+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
sendBroadcastNotification(<XStringLiteralImpl>)
<null>.WindowTimer = <XNullLiteralImplCustom>
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [bundleFile:?]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]
Caused by: java.lang.IllegalStateException: Cannot resolve proxy: windows_test.rules#/1
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getRawType(JavaReflectAccess.java:108) ~[?:?]
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getField(JavaReflectAccess.java:57) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._assignValueTo(XbaseInterpreter.java:1337) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter._assignValueTo(ScriptInterpreter.java:211) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.assignValueTo(XbaseInterpreter.java:1310) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1302) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy369.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
... 1 more
Ich schätze mal, Du hast die rules Datei zwischendurch bearbeitet. Dabei werden Variablen neu initialisiert. Der Timer bleibt aber bestehen, nur ist er jetzt verwaist, so dass er nicht mehr beendet werden kann. Starte openHAB mal durch, bevor Du die Rule testest. der Code sieht eigntlich gut aus, vielleicht abgesehen von der etwas ungewohnten Formatierung (das ist aber Geschmackssache).
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.9 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
Aber kleine Fehler hat die Rule trotzdem oder ist es gewollt, das die Meldung "Balkontür im Büro wurde geschlossen!" nur kommt wenn ein Timer aktiv ist? Sprich die Meldung kommt nicht wenn die Tür nach 11 Minuten geschlossen wird.
Ich persönlich würde die Meldung, das die Tür geschlossen wurde, nur auslösen lassen wenn sie schon länger als 10 Minuten geöffnet ist und nicht umgekehrt.