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
Null in Item oder Channel abfangen
-
- Beiträge: 162
- Registriert: 26. Jul 2021 20:14
- udo1toni
- Beiträge: 14387
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Null in Item oder Channel abfangen
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).
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
-
- Beiträge: 162
- Registriert: 26. Jul 2021 20:14
Re: Null in Item oder Channel abfangen
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).