Dann hast Du die Expiration Action falsch konfiguriert

Du kannst als Action einstellen, dass der
Status geändert wird, oder dass ein
Command gesendet wird.
Du musst hier wählen, dass ein Command gesendet wird.
Leider gibt es für Items bisher keine Code Ansicht (was auch daran liegen dürfte, dass sich die verschiedenen Eigenschaften eines Items über verschiedene Dateien verteilen)
Deshalb hier als Beispiel die Textdefinition eines Switch Items mit Expiration Timer:
Code: Alles auswählen
Switch Luefter1 "Lüfter 1" {channel="...",expire="10s,command=OFF"}
Wenn der
Status des Items
nicht OFF ist, wird 10 Sekunden nach dem letzten Update der
Befehl OFF gesendet.
Du kannst an dieser Stelle (z.B. aus einer Rule heraus) durchaus aktiv
verhindern, dass die Expiration greift, indem Du nach einem
ON Befehl ein
OFF Update sendest.
Damit wechselt dann der
Status des Items auf
OFF, womit die Expiration nicht mehr ausgeführt wird.
Wenn aber alles korrekt konfiguriert ist, wird openHAB immer einen OFF Befehl senden, solange das Item nicht auf OFF steht.
Ganz wichtig: Ein Item hat einen
Status, der verrät im Idealfall, welchen Zustand eine bestimmte Eigenschaft (eines Geräts) hat, also z.B. ob eine Steckdose gerade eingeschaltet ist oder nicht. Der Status eines Items kann jederzeit frei gesetzt werden - aus einer Rule heraus per
.postUpdate().
Ein Item kann außerdem (bis auf eine Ausnahme -
Contact) auch Befehle empfangen. Dieser Befehl wird dann an die verbundenen Channel weitergeleitet und darüber auch an die betroffenen Geräte geschickt.
Grundsätzlich wird nur ein
Befehl weitergeleitet, keine Statusänderung. (Grundsätzlich -> es gibt Ausnahmen zu dieser Regel).
Der Channel sendet also nur den Befehl an das Gerät, welches dann auch auf den Befehl reagiert und seinerseits den Befehl ausführt, sowie (wenn korrekt eingerichtet) den neuen Zustand an openHAB sendet (mindestens, wenn sich der Zustand durch den Befehl geändert hat).
Da es diverse Systeme gibt, die entweder sehr lange brauchen, um den neuen Zustand zu melden, oder dies gar nur unzuverlässig tun, ist in openHAB aber noch ein automatisches Update des Status eingebaut.
Abhängig vom gesendeten Befehl wird also auch der Status des Items geändert, also z.B. ich sende ON an ein Switch Item, dann wechselt auch der Status des Items auf ON. Dies kann man verhindern, indem man über die Metadaten des Items
autoupdate=false konfiguriert (eigentlich sollte man diese Betriebsart bevorzugen, sie ist aber leider nicht das default Verhalten)
Die beiden Funktionen Befehl und Status sind grundverschieden, auch wenn sie sehr häufig ein sehr ähnliches Ergebnis haben, aber als Beispiel:
Ich habe knx Dimmer, bei denen ich eine Grundhelligkeit definieren kann. Wenn der Dimmer den Befehl ON empfängt (nicht 100!) dann dimmt er auf diese Helligkeitsstufe, nicht zwingend auf 100. Es ist also ein Unterschied, ob ich den Dimmer über einen Slider einschalte (bei dem ich nur absolute Helligkeitswerte senden kann) oder ein Switch Widget verwende, bei dem ich den "echten" ON Befehl senden kann.
Und an dieser Stelle kommt ganz erheblich die Sache mit dem autoupdate zum Tragen.
autoupdate=true -> Ich sende ON -> openHAB sendet ON in Richtung Dimmer und setzt den Status auf 100. Der Dimmer dimmt aber nur auf 80, und zwar innerhalb 5 Sekunden (weil so konfiguriert). Am Ende des Dimmvorgangs sendet der Dimmer seine aktuelle Helligkeit, also 80, was von openHAB auch als neuer, aktueller Status gespeichert wird. In der UI (oder auch im Log) sehe ich also Befehl ON -> Status 100 -> Status 80, die 100 ist komplett falsch

autoupdate=false -> ich sende ON -> openHAB sendet ON. Nach Abschluss des Dimmvorhgangs empfängt openHAB die 80 vom Dimmer und setzt den Status auf 80, also Befehl ON -> Status 80, so wie es sein soll.
Dass die Meldung der 80 erst nach 5 Sekunden erfolgt ist ebenfalls korrekt, denn vorher dimmt der Dimmer ja noch

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet