Seite 1 von 1

MQTT Null Werte abfragen

Verfasst: 26. Nov 2023 10:27
von manes
ich habe hier etliche ESp über MQTT eingebunden, mit Temperatursensoren. Ab und an kommt es vor, das Sensor keine DAten liefert. Dann wird im MQTT Explorer NULL angezeigt. In OH3 wird aber der letzte Wert angezeigt. Wie kann man erreichen, das OH merkt, das NULL geliefert wird und kein gültiger Wert mehr?

Re: MQTT Null Werte abfragen

Verfasst: 26. Nov 2023 12:59
von udo1toni
openHAB bekommt schon mit, dass null geliefert wird, unterdrückt dies aber, vermutlich, weil die Persistence sonst nicht korrekt funktioniert.

Was meist Du damit, dass der MQTT Explorer NULL anzeigt?
Wenn ein Sensor keine Daten liefert, dann kommen auch keine Messages über MQTT rein, der MQTT Explorer würde also den letzten empfangenen Wert anzeigen, oder (falls er erst nach dem letzten Publish gestartet wurde) das Topic taucht erst gar nicht in der Liste der Topics auf.

In openHAB kannst Du eine NULL-Anzeige nach einem Timeout leicht erreichen, indem Du dem Item einen Expiration Timer verpasst (Item Metadata) und dort ein postUpdate NULL einträgst. Wenn ein Sensor alle 5 Minuten einen Wert sendet, stellst Du als Time z.B. 305 Sekunden ein, dann wird nach 305 Sekunden der Status auf NULL wechseln. Das geschieht aber erst 305 Sekunden nach dem letzten empfangenen Telegramm, also im Normalfall nie.

Re: MQTT Null Werte abfragen

Verfasst: 26. Nov 2023 13:17
von manes
im MQTT Explorer steht bei den Werten Temperature/Humidity "null" als Wert, wenn da nichts geschrieben wird vom Sensor. Ansonsten stehe da die Werte vom Sensor drin. das meinte ich damit

Re: MQTT Null Werte abfragen

Verfasst: 26. Nov 2023 17:34
von udo1toni
Aber dann ist das ja der Sensor selbst, der da Probleme macht...

Re: MQTT Null Werte abfragen

Verfasst: 26. Nov 2023 17:58
von manes
das ist ja egal, mir geht es darum das ich dass mitbekomme. Bisher ist es so, das da ein Wert in OH steht, der eigentlich schon lange nicht mehr gültig ist. Sprich das System arbeitet mit falschen Werten im Zweifelsfale. Wenn man jetzt NULL abfangen kann, dann kann man sich zumindest eine Nachricht schicken dazu und dann reagieren. Ob ein ESP mit Tasmota online ist, das kann man gut abfragen, aber wenn nur ein Sensor ausfällt, dann verschwindet sowas schonmal im Gedränge.

Re: MQTT Null Werte abfragen

Verfasst: 26. Nov 2023 19:51
von udo1toni
Ich fürchte, eine null-Payload kannst Du nicht aktiv erkennen. Du kannst lediglich erkennen, dass der Wert nicht aktualisiert wurde (über das Timeout), ob das nun wegen eines gar nicht geschickten Topics oder einer null-Payload in einem Topic passiert, sollte eigentlich egal sein.

Re: MQTT Null Werte abfragen

Verfasst: 17. Apr 2024 19:57
von klaus1
kann man auch den aktuellen wert mit einem Vorzeichen oder fett oder in rot oder so darstellen, sobald ein Timeout erreicht ist ? Dazu würde ich nicht null sondern sowas wie -%s oder so (variable) erwarten.

Re: MQTT Null Werte abfragen

Verfasst: 18. Apr 2024 06:57
von udo1toni
Du kannst eine passende Regel erstellen, die dann (über ein zweites Item) die Anzeige des eigentlichen Wertes beeinflusst.
Die Regel könnte z.B. beim aktualisieren des Wertes getriggert werden. Die Regel stellt dann die "normale" Ansicht ein und (re-)startet einen Timer. Läuft der Timer ab, wird weiterer Code ausgeführt, der die Anzeige in der gewünschten Art beeinflusst (fett, rot, whatever...).
Wie die Ansicht am besten manipuliert wird, hängt von der verwendeten UI ab, in Sitemaps wäre mein Ansatz z.B. über den Parameter labelcolor und/oder valuecolor (Schriftart bzw. Schriftschnitt lassen sich hier allerdings nicht beeinflussen), das steuernde Item muss nicht das angezeigte Item sein, also genau passend.
In der Main UI geht das noch sehr viel umfangreicher, da ich das selbst nicht nutze, möchte ich hier aber auf die diversen Beispiele hier, im englischen Forum und/oder Widgets im Marketplace verweisen. Der Schüssel ist aber immer der gleiche, Du erstellst eine Regel, welche in Abhängigkeit des Zeitpunkts des letzten Updates ein Item setzt, welches dann zum steuern der Anzeige verwendet wird. Evtl. kann man innerhalb der Main UI auch direkt auf den Zeitstempel zugreifen, dann könnte man auch ohne Regel und zusätzliches Item auskommen..
Wenn Du mehr als zwei, drei Widgets auf diese Weise steuern willst, bietet es sich an, die entsprechende Regel so zu gestalten, dass eine Regel für alle Items gleichzeitig arbeiten kann, ist etwas aufwändiger, weil Du ja trotzdem pro Widget einen Timer brauchst, das geht aber Timer Arrays.