Null in Item oder Channel abfangen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Jensemann_P
Beiträge: 162
Registriert: 26. Jul 2021 20:14
Answers: 0

Null in Item oder Channel abfangen

Beitrag von Jensemann_P »

Hi Leute,

ich suche gerade nach einer Möglichkeit "NULL" abzufangen. Ich habe einige Sensoren über MQTT, bei denen auch mal länger ein update auf diesem Topic ausbleibt und daher eben NULL bleibt. Leider werdne diese dann z.b. in der HABpanel-Timeline nicht dargestellt (Zustand "NULL" mag er nicht).
Wie kann ich denn am besten dafür sorgen, dass bei diesen Items aus "NULL" z.B. "OPEN" wird?

LG
Jens

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

Re: Null in Item oder Channel abfangen

Beitrag von udo1toni »

Also, es kommt dabei natürlich nicht unwesentlich auf den Itemtyp an.
Einen Typ Number würde ich immer mittels if(myNumberItem.state instanceof Number) testen. Ist die Bedingung nicht erfüllt, so enthält der Status keine gültige Zahl (und ist damit NULL oder UNDEF)
Für "Bit"-Items (Contact oder Switch) würde ich auf die gültigen Werte testen:
if(mySwitchItem.state != ON) mySwitchItem.postUpdate(OFF) oder if(myContactItem.state != CLOSED) myContactItem.postUpdate(OPEN)
Hier wird auf den einzigen gültigen Wert getestet, der ungleich dem "default" Wert ist.
Man könnte natürlich hintereinander auf beide Werte testen, das wäre dann aber ein weiterer Vergleich, der nur unnötig Zeit kostet.
Natürlich kannst Du auch explizit auf NULL testen if(myContactItem.state == NULL) myContactItem.postUpdate(OPEN) aber wie gesagt gibt es mindestens noch einen weiteren möglichen "fehlerhaften" Wert (UNDEF).
openHAB4.2.0 stable in einem Debian-Container (bookworm) (Proxmox 8.2.4, LXC), mit openHABian eingerichtet

Jensemann_P
Beiträge: 162
Registriert: 26. Jul 2021 20:14
Answers: 0

Re: Null in Item oder Channel abfangen

Beitrag von Jensemann_P »

Danke dir, das hat -wie immer- geholfen. Ich habe den code so ähnlich in eine Rule eingebaut, die Zyklisch mal durschaut und alle relevanten Items setzt (ändert sich ja über MQTT nichts, wenn nicht aktiv werte kommen).

Antworten