Der Status des Items soll den Zustand eines externen Geräts widerspiegeln. Nehmen wir mal eine schaltbare Steckdose als externes Gerät an. Du kannst die Steckdose ein- und ausschalten, mehr nicht (soll ja möglichst einfach sein) Das bedeutet für openHAB: Du musst einen Befehl senden können, um die Steckdose zu schalten.
Auf der anderen Seite willst Du aber den Zustand der Steckdose kennen, und zwar möglichst den
echten Zustand, also den von der Steckdose gemeldeten Zustand.
Ich versuche es mal mit einer Art Tabelle:
Code: Alles auswählen
sendCommand postUpdate
UI X -
Channel (kommend) - X
Channel (gehend) X -
Rule triggert received command update
changed - (X)
Wann immer Du in der UI eine Item manipulierst, löst das ein sendCommand aus.
Wann immer ein Channel etwas empfängt,ist das ein Update des Status
Wann immer Du einen Channel steuern möchtest, musst Du sendCommand verwenden.
Rules triggern gezielt, je nachdem, welchen Trigger Du verwendest.
Changed wird natürlich nur getriggert, wenn das postUpdate zu einer Änderung des Status geführt hat.
So.
Und weil das allzu einfach war: Das Default Verhalten von openHAB ist, dass jedes sendCommand automatisch ein postUpdate nach sich zieht.
openHAB setzt also automatisch den neuen Status im Item (um diesen neuen Status möglichst schnell anzuzeigen). Man kann dieses Verhalten aber abschalten (Parameter autoupdate = false in den Metadaten des Items).
Das Verhalten ist also als Default:
- sendCommand(ON)
- postUpdate(ON)
- (gleichzeitig) Channel sendet Kommando ON
- Steckdose schaltet
- Steckdose sendet Zustand ON
- ON wird als neuer Zustand geladen
Und mit autoupdate=false:
- sendCommand(ON)
- Channel sendet Kommando ON
- Steckdose schaltet
- Steckdose sendet Zustand ON
- Status ON wird übernommen
Im ersten Fall ist also die Reaktionszeit "optimiert", allerdings kann die Annahme des neuen Status auch gehörig schief gehen, insbesondere bei Dimmern, das führt dann zu mehrfachen Updates und springenden Schiebestellern in der UI.
Der größte Unterschied zwischen postUpdate und sendCommand ist also die Auswirkung zum einen auf einen verbundenen Channel (postUpdate->keine Auswirkung; sendCommand->steuert Channel) und zum anderen auf die Rules (abhängig vom Trigger)
Man sollte es sich nicht zu einfach mit der Verwendung von sendCommand machen und darüber postUpdate vergessen, es sind zwei grundverschiedene Befehle, die nur durch das Default Verhalten
scheinbar die gleiche Wirkung haben.
Schaltet man das autoupdate aus, tritt der Unterschied klar zutage: sendCommand wirkt auf verlinkte Channel, postUpdate wirkt ausschließlich auf das Item selbst.
Und weil es noch nicht kompliziert genug ist... Es gibt Ausnahmen vom Standardverhalten, abhängig von der Konfiguration der verlnkten Channel und eines eventuell gesetzten Profiles (dabei geht es vor allem um die Möglichkeit, ankommende Updates als Befehl zu werten, damit man z.B. mit einem WLAN Schalter ohne eine Rule zu verwenden z.B. ein Homematic Licht schalten kann).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet