Openhab 5 - Timer funktionieren nicht mehr

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

technick90
Beiträge: 58
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von technick90 »

Habe eben openhabian aufgesetzt und nur die Tools (postgres usw..) als docker laufen gehabt. Selbe Problematik.#
Selbst einfache Rules wie für meinen Bewegungsmelder funktionieren nicht mehr. Das Licht geht an, wird aber nicht wieder ausgeschaltet.
Auch hier wieder ein Timer.

Code: Alles auswählen

var Timer BWM_Timer = null
val Integer BWM_TimeOut = 25

rule "BWM schalten"  //schalten Licht Front
when
    Item MQTTOutdoorsensor2_Zustand received update ON or
    Item MQTTOutdoorsensor1_Zustand received update ON
then
    BWM_Timer?.cancel                                          // Timer abbrechen
    if((MQTTOutdoorSensor_Sperre.state != ON) && (Schaltaktor_Steckdose_Aussen_Dachkasten_Vorne.state != ON)) {                          // falls nicht eingeschaltet
        Schaltaktor_Licht_Aussen_Vorgarten.sendCommand(ON)                        // Einschalten
    } 
    BWM_Timer = createTimer(now.plusSeconds(BWM_TimeOut), [| // Timer anlegen
        if (Schaltaktor_Licht_Aussen_Vorgarten.state == ON) {
		Schaltaktor_Licht_Aussen_Vorgarten.sendCommand(OFF)                       // und Aus
        BWM_Timer = null                                       // kann bei dieser Variante auch entfallen!
		}
    ])
end

nw378
Beiträge: 327
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von nw378 »

Kannst Du mal gucken, was bei

Code: Alles auswählen

 logInfo("Test", now.toString)
im Log erscheint?
Wenn ich mir mit date das Datum im Docker Image ausgeben lasse, ist dies korrekt.
Das (date) ist die Uhrzeit des Betriebssystems, diese ist nicht zwingend gleich der Java-Zeit.
(und dann gibt es noch als drittes die Zeit auf dem OH-Bus, wenn NTP Binding installiert...)
openHAB 5.0.1 @ RPi 5 / M.2 SSD - InfluxDB2 und Grafana @ Synology Docker - KNX, Viessmann vcontrol, u.v.m.

technick90
Beiträge: 58
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von technick90 »

2025-09-06T14:44:21.611901296+02:00[Europe/Berlin]

Ist doch korrekt oder nicht? Ich verstehe das wirklich nicht.
Jedes mal beim Major Release Wechsel habe ich Ärger, ich drücke mich schon immer davor.

technick90
Beiträge: 58
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von technick90 »

Habe jetzt mit Zeit verkürzen und Kontakt auslösen folgenden Zwischenstand gesehen:
Die Lüfter Rule wird auch bis zum Timer Aufruf durchlaufen. Dann sollte er aus der Gruppe ermitteln wo die Zeit überschritten ist und die Meldung ausgeben.
Der Part wird dann nicht mehr ausgeführt.
Unmittelbar danach kommt unter anderem folgende Warnung im Log.

Code: Alles auswählen

db.internal.influx2.InfluxDB2RepositoryImpl
database not ready
Habe bezüglich der persistenten auf PostgresSQL und InfluxDB gewechselt, stand so in der Anleitung.
In InfluxDB sehe ich auch Items, mehr Ahnung habe ich davon aber nicht.

Kann hier eine Ursache zu suchen sein?

nw378
Beiträge: 327
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von nw378 »

Das klingt so, als ob Du ein Problem mit der Persistence hast.

Vermutlich findet die Rule keine Daten für

Code: Alles auswählen

   val tTimestamp = i.lastChange()
und bricht dann ab.

Guck mal, ob Deine Zugangsdaten/Konfiguration in OH für Influxdb passen.

Und auch, ob die Datei influxdb.persist korrekt gefüllt ist.
openHAB 5.0.1 @ RPi 5 / M.2 SSD - InfluxDB2 und Grafana @ Synology Docker - KNX, Viessmann vcontrol, u.v.m.

technick90
Beiträge: 58
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von technick90 »

Habe jetzt mariadb eingerichtet. Items werden definitiv in der DB gespeichert, Rule geht weiterhin nicht.

Ich werde von der alten SD booten, openhabian aktualisieren, Backup einspielen und testen.
Plan gescheitert, war bisher 32bit OS.

Benutzeravatar
udo1toni
Beiträge: 15354
Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von udo1toni »

Also, ein paar Dinge, an denen es hängen könnte:
1. Falsche default Persistence. Lösung: explizit die zu verwendende Persistence angeben (statt i.lastChange() schreibst Du z.B. i.lastChange("influxdb") hin, dann nimmt der die Daten aus der InfluxDB, egal welche Persistence als default gewählt ist.)
2. Daten werden nicht persistiert. Die Daten müssen natürlich zur Verfügung stehen. Auf Postgres zu wechseln, beinhaltet auch, eine Postgres Datenbank aufzusetzen. Gleiches gilt natürlich auch für InfluxDB. Wenn es heißt: database not ready deutet es darauf hin, dass entweder die Datenbank gar nicht läuft, oder zumindest die Verbindung zur Datenbank nicht zustande kommt. Wenn InfluxDB in einem eigenen Container läuft, könnte sich z.B. der Port geändert haben, oder der Port ist von einem anderen Container blockiert, oder...
Die erste Rule (Fenster Status) sieht auf den ersten Blick unverdächtig aus. Zur weiteren Fehlereingrenzung musst Du Werte ausgeben lassen.
Im Zweifel z.B. so:

Code: Alles auswählen

            Fenstersensoren.members.filter[s|s.state.toString == "Offen"].forEach[i|
                logInfo("lueften","Filterschleife aktiv")
                val tTimestamp = i.lastChange()
                logInfo("lueften","Timestamp für {}: {}",i.name,tTimestamp)
also unmittelbar vor der "verdächtigen" Zeile eine Meldung im Log erzeugen und unmittelbar danach, dann aber auch mit dem konkreten Wert. Die logBefehle beherrschen zu diesem Zweck Substitution, d.h. jedes {} Klammerpaar wird durch den nächsten durch Komma separierten Wert ersetzt, also die erste {} wird durch i.name ersetzt (der aktuelle Itemname), die zweite {} wird durch die ermittelte Timestamp ersetzt. der Logger formatiert den Wert automatisch korrekt (oder zumindest sollte das so sein).

Bei der zweiten Rule (bzw. dem Code-Fragment) ist die Sache klar, das Item MyCounter_Poolpumpe enthält keinen gültigen Zahlenwert. Prüfe vorher so: if(MyCounter_Poolpumpe.state instanceof Number), ob der enthaltene Wert zu den Zahlen gehört (QuantityType ist ebenfalls Teil von Number).

Die dritte Rule (BWM schalten) ist komplett unverdächtig und müsste auf jeden Fall funktionieren. Eventuell ist drumherum irgendwas "kaputt". Wie hast Du das Betriebssystem aufgesetzt? Welche Hardware? Welche Software(-versionen)?

Ganz allgemein kann ich Dir versichern, dass Timer super stabil laufen, so wie alles andere auch. Ich habe hier openHAB als LX Container laufen, das sollte eigentlich ähnlich docker laufen.
Ich habe auch eine openHAB Installation unter docker laufen, aber die nutze ich nur zum testen, da ist es etwas schwierig, zu beurteilen, ob alle Funktionen stabil arbeiten...
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

technick90
Beiträge: 58
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von technick90 »

Habe jetzt openhabian 64bit neu aufgesetzt und das Backup von openhab5, mosquitto und zigbee2mqtt eingespielt und mariadb wieder installiert.
Die Lüfter Rule hat eben funktioniert.
Für heute reicht es, morgen teste ich den Rest.

Ich denke es lag an der persistenten Speicherung, obwohl das z. B. den Bewegungsmelder nicht erklärt. Mit mariadb kam ich super klar, grafana brauche ich nicht. Also belasse ich es bei mariadb.

Die Bewegungsmelder Rule löst auf einmal tausende Fehler aus. Ich werde echt verrückt hier. Schluss für heute.

Code: Alles auswählen

resolution of uriFragment '|::0.1.1.1::1::/0' failed.

Benutzeravatar
udo1toni
Beiträge: 15354
Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von udo1toni »

Die Uri scheint IPv6 zu sein und wenn ich es richtig interpretiere, handelt es sich um eine linklokale Adresse, also so etwas wie localhost.

Falls Du aktiv kein IPv6 verwendest, könntest Du es mal testweise abschalten.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

technick90
Beiträge: 58
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Openhab 5 - Timer funktionieren nicht mehr

Beitrag von technick90 »

Meine Versuche ipv6 zu deaktivieren sind erstmal fehlgeschlagen, Fehler sind trotzdem weg.
Die Java Zeit war auf dem neu aufgesetzten System falsch, dadurch kam das Astro Binding eine Stunden zu früh hoch. Habe ich korrigiert.

Jetzt sollte die Lueften Regel die Benachrichtigung ausgeben und dabei trat folgender Fehler auf:

Code: Alles auswählen

Scheduled job '<unknown>' failed and stopped


java.lang.reflect.UndeclaredThrowableException
at jdk.proxy340/jdk.proxy340.$Proxy484.apply(Unknown Source)
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:189)
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:88)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.openhab.core.model.script.engine.ScriptExecutionException: Could not cast NULL to java.lang.Number; line 24, column 33, length 94
at org.openhab.core.model.script.interpreter.ScriptInterpreter._doEvaluate(ScriptInterpreter.java:252)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:257)
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:225)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:877)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:243)
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:225)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:936)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:287)
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:225)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251)
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:225)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:213)
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47)
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30)
at jdk.proxy340/jdk.proxy340.$Proxy544.accept(Unknown Source)
at com.google.common.collect.Iterables$4.lambda$forEach$0(Iterables.java:589)
at java.base/java.lang.Iterable.forEach(Unknown Source)
at java.base/java.util.Collections$UnmodifiableCollection.forEach(Unknown Source)
at com.google.common.collect.Iterables$4.forEach(Iterables.java:586)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1195)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1170)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1156)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1101)
at org.openhab.core.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:881)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:243)
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:225)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251)
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:225)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:213)
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47)
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30)
Die Loginfo kam bis zum Punkt "Alle Fenster werden durchlaufen..".

Code: Alles auswählen

var Timer tFensteralarm = null

rule "Fenster Status"
when
    Member of Fenstersensoren changed
then
    logInfo("lueften-test-udo.rules","Trigger hat ausgelöst.")
	if(tFensteralarm !== null && Fenstersensoren.members.filter[s|s.state.toString == "Offen"].size == 0) {
        tFensteralarm.cancel
        tFensteralarm = null
    } else if(tFensteralarm === null && Fenstersensoren.members.filter[s|s.state.toString == "Offen"].size > 0) {
        logInfo("lueften-test-udo.rules","Timer wurde gestartet...")
		tFensteralarm = createTimer(now.plusMinutes(10), [|
            tFensteralarm.reschedule(now.plusMinutes(5))
            logInfo("lueften-test-udo.rules","Timer läuft...")
			val StringBuilder sb = new StringBuilder
            sb.append("Folgende Fenster sind zu lange geöffnet: ")
            Fenstersensoren.members.filter[s|s.state.toString == "Offen"].forEach[i|
                val tTimestamp = i.lastChange()
                val strID = i.name.split("_").get(1)
                val iTimeout = (Fenstersensoren_Sperrzeitfenster.members.filter[s|s.name.contains(strID)].head.state as Number).intValue 
				logInfo("lueften-test-udo.rules","Timer: Durchlauf aller Fenster")
				if(tTimestamp.plusMinutes(iTimeout).isBefore(now)) {
                     logInfo("lueften-test-udo.rules","Timer überschritten...")
					 sb.append(i.label + " ")
                }
            ]
            val text = sb.toString
            if(text.length > 42) {
                if(Anwesenheit == OFF)
                    sendBroadcastNotification(text, "contact", "Info")
                else {
					AlexaWohnzimmer_Ankuendigung.sendCommand(text)
					AlexaBad_TTS.sendCommand(text)
					AlexaArbeitszimmer_TTS.sendCommand(text)
					AlexaKueche_TTS.sendCommand(text)
                    if (UniFiWirelessClientRobert_Online.state == ON) {sendNotification("@.com", text, "contact", "Info")}
					if (UniFiWirelessClientMartin_Online.state == ON) {sendNotification("@.com", text, "contact", "Info")}
					}
            }
        ])
    }
end

Antworten