Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.
Moderatoren: seppy , udo1toni
technick90
Beiträge: 57 Registriert: 24. Jul 2019 16:56
Answers: 1
Beitrag
von technick90 » 4. Sep 2025 20:58
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:
Ich kann nix dazu finden das sich bezüglich Timer etwas geändert hat. Weiß gerade nicht wie ich das beheben soll.
udo1toni
Beiträge: 15354 Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt
Beitrag
von udo1toni » 5. Sep 2025 01:31
Bei mir funktionieren die Timer noch
erster Versuch: Starte openHAB noch mal neu.
zweiter Versuch: ändere den createTimer Aufruf von
hin zu
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ß...
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)
technick90
Beiträge: 57 Registriert: 24. Jul 2019 16:56
Answers: 1
Beitrag
von technick90 » 5. Sep 2025 07:12
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.
nw378
Beiträge: 327 Registriert: 22. Sep 2018 10:38
Answers: 5
Beitrag
von nw378 » 5. Sep 2025 08:13
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.
openHAB 5.0.1 @ RPi 5 / M.2 SSD - InfluxDB2 und Grafana @ Synology Docker - KNX, Viessmann vcontrol, u.v.m.
technick90
Beiträge: 57 Registriert: 24. Jul 2019 16:56
Answers: 1
Beitrag
von technick90 » 5. Sep 2025 08:32
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.
udo1toni
Beiträge: 15354 Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt
Beitrag
von udo1toni » 5. Sep 2025 13:50
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"
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)
technick90
Beiträge: 57 Registriert: 24. Jul 2019 16:56
Answers: 1
Beitrag
von technick90 » 5. Sep 2025 14:00
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..
technick90
Beiträge: 57 Registriert: 24. Jul 2019 16:56
Answers: 1
Beitrag
von technick90 » 5. Sep 2025 14:34
die alte Lueften.rules funktioniert.
In der alten Rule wird simpel ein Timer gestartet und dann geprüft ob das Fenster noch auf ist.
technick90
Beiträge: 57 Registriert: 24. Jul 2019 16:56
Answers: 1
Beitrag
von technick90 » 5. Sep 2025 14:53
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
technick90
Beiträge: 57 Registriert: 24. Jul 2019 16:56
Answers: 1
Beitrag
von technick90 » 5. Sep 2025 18:02
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