Seite 1 von 2

Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 4. Sep 2025 20:58
von technick90
Hallo,

ich habe von Openhab 4.3.5 auf 5.0.1 gewechselt.
Nun scheinen die Regeln mit Timer nicht mehr zu funktionieren. Soweit ich das nachvollziehen kann, wird der Timer scheinbar einfach nicht ausgeführt.

Beispiel für einen Timerstart in meinen Regeln:

Code: Alles auswählen

createTimer(now.plusMinutes(30)) [|]
Ich kann nix dazu finden das sich bezüglich Timer etwas geändert hat. Weiß gerade nicht wie ich das beheben soll.

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 01:31
von udo1toni
Bei mir funktionieren die Timer noch :)
erster Versuch: Starte openHAB noch mal neu.
zweiter Versuch: ändere den createTimer Aufruf von

Code: Alles auswählen

createTimer(now.plusMinutes(30)) [|]
hin zu

Code: Alles auswählen

createTimer(now.plusMinutes(30), [|])
Das heist, das Lambda wird als Parameter der Funktion übergeben. Das sollte eigentlich keinen Unterschied machen, openHAB lässt beide Schreibweisen zu, aber wer weiß...

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 07:12
von technick90
Habe den Timer jetzt mal als Script standlone ohne Schnickschnack erstellt, der Timer funktioniert.
Das ist also nicht das Problem. Hmm. Meine Regeln fürs Lüften funktioniert aber nicht, siehe
viewtopic.php?p=66191#p66191

Des Weiteren habe ich eine Regel die 30min nach Sonnenuntergang die Beschattung herunterfährt, das ging gestern Abend auch nicht mehr.

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 08:13
von nw378
Nur ein ganz leiser Verdacht (und dürfte mit dem Timer nix zu tun haben, wohl aber wenn Du Zeiten z.B, mit dem Astrobinding vergleichst):

Schau mal in der Datei /etc/default/openhab, ob Deine Java-Zeit korrekt ist.
In der Zeile EXTRA_JAVA_OPTS= sollte der Parameter -Duser.timezone=Europe/Berlin stehen. bei Update auf 5.0.x steht dort Lomdon.

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 08:32
von technick90
Beide Regeln vergleichen Zeiten. Der Tipp gefällt mir daher.
Ich habe aber von openhabian auf raspbian mit Docker gewechselt.
Im Dockerimage gibt es die Datei /etc/default/openhab nicht.
Per ENV ist im Docker Container das Attribut m. E. aber richtig gesetzt:
EXTRA_JAVA_OPTS -Duser.timezone=Europe/Berlin

Wenn ich mir mit date das Datum im Docker Image ausgeben lasse, ist dies korrekt.

Dennoch passt deine Fehlerursachenbeschreibung zur Symptomatik. Hmmm.

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 13:50
von udo1toni
Wie sieht deine Startdatei exakt aus? Bitte als Code markiert einfügen, damit auch Einrückungsfehler erkennbar werden.

So sieht das in meiner Testumgebung aus:

Code: Alles auswählen

version: '2.2'

services:
  openhab:
    image: "openhab/openhab:milestone"
    restart: unless-stopped

    network_mode: host
    ports: 
      - 8080:8080
      - 8443:8443
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
      - "/portainer/Files/AppData/Config/openHAB5/openhab_addons:/openhab/addons"
      - "/portainer/Files/AppData/Config/openHAB5/openhab_conf:/openhab/conf"
      - "/portainer/Files/AppData/Config/openHAB5/openhab_userdata:/openhab/userdata"
    environment:
      CRYPTO_POLICY: "unlimited"
      EXTRA_JAVA_OPTS: "-Duser.timezone=Europe/Berlin"
      OPENHAB_HTTP_PORT: "8080"
      OPENHAB_HTTPS_PORT: "8443"
      USER_ID: "998"
      GROUP_ID: "997"

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 14:00
von technick90
Habe docker-compose.yml und .env.

docker-compose.yml

Code: Alles auswählen

services:
  openhab:
    image: openhab/openhab:${OPENHAB_VERSION}
    depends_on:
      - influxdb
      - mosquitto
    restart: always
    # if you do not need persistent log files
    #tmpfs:
    #   - /openhab/userdata/logs
    command: "bash -c 'if [ -e /openhab/restore/restore.zip ]; then echo y |/openhab/runtime/bin/restore /openhab/restore/restore.zip ; fi; exec tini -s ./start.sh server'"
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
      - "./data/openhab/conf:/openhab/conf"
      - "./data/openhab/addons:/openhab/addons"
      - "./data/openhab/restore:/openhab/restore"
      - "./data/openhab/backup:/openhab/backup"
      - "./data/openhab/userdata:/openhab/userdata"
    environment:
      - TZ=${TZ}
      - OPENHAB_HTTP_PORT=${OPENHAB_HTTP_PORT}
      - OPENHAB_HTTPS_PORT=${OPENHAB_HTTPS_PORT}
      - "CRYPTO_POLICY=unlimited"
      - "EXTRA_JAVA_OPTS=-Duser.timezone=${TZ}"
      # If you need more memory
      #- "EXTRA_JAVA_OPTS=-Xms1024m -Xmx2048m -Duser.timezone=${TZ}"
      - USER_ID=9001
      - GROUP_ID=9001
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    network_mode: host
.env

Code: Alles auswählen

# Config File for openHAB Application

# Docker Compose Project Name
# max length 11 characters
PROJECT_NAME=openhab5

# Port Configuration openHab
OPENHAB_VERSION=5.0.1
OPENHAB_HTTP_PORT=8080
OPENHAB_HTTPS_PORT=8443

# Timezone
TZ=Europe/Berlin
Ich teste gleich nochmal ausführlicher was nun geht und was nicht..

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 14:34
von technick90
die alte Lueften.rules funktioniert.
In der alten Rule wird simpel ein Timer gestartet und dann geprüft ob das Fenster noch auf ist.

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 14:53
von technick90
Also die Regel für Fenster offen/geschlossen (Lüften) scheint bis zum Schritt zur Ermittlung der geöffneten Fenster zu kommen.
Habe Log-Schritte eingefügt.
1. Trigger ausgelöst
2: Timer wurde gestartet
3. Timer läuft
3. Timer: Durchlauf aller Fenster
4. Timer überschritten

Er loggt bis zu Schritt 3 und dann ist Schluss.

Code: Alles auswählen

var Timer tFensteralarm = null

rule "Fenster Status"
when
    Member of Fenstersensoren changed
then
    logInfo("lueften.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.rules","Timer wurde gestartet...")
		tFensteralarm = createTimer(now.plusSeconds(20), [|
            tFensteralarm.reschedule(now.plusMinutes(5))
            logInfo("lueften.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.rules","Timer: Durchlauf aller Fenster")
				if(tTimestamp.plusMinutes(iTimeout).isBefore(now)) {
                     logInfo("lueften.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

Re: Openhab 5 - Timer funktionieren nicht mehr

Verfasst: 5. Sep 2025 18:02
von technick90
Meine Regel für die Betriebsstunden der Poolpumpe geht auch nicht mehr.

Trigger: Poolpumpe wird aus/eingeschaltet.

Code: Alles auswählen

    if (MQTT_Tuya_Steckdose_2_Power.state == ON) dtStart = now.toEpochSecond                     
    else if (MQTT_Tuya_Steckdose_2_Power.state == OFF) {  
      if(previousState == NULL) return;
      var double dSum = (MyCounter_Poolpumpe.state as QuantityType<?>).doubleValue                                              
      dSum = dSum + ((now.toEpochSecond - dtStart).doubleValue / 60.0)
      MyCounter_Poolpumpe.postUpdate(dSum)  }
Hier kommt es zu einem Fehler im Eventlog:

Code: Alles auswählen

Script execution of rule with UID 'betriebsdauer-poolpumpe-1' failed: Could not cast NULL to org.openhab.core.library.types.QuantityType; line 8, column 26, length 44 in betriebsdauer-poolpumpe