MQTT Warning --> Exception

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Oekel
Beiträge: 201
Registriert: 28. Aug 2021 10:34
Answers: 0

MQTT Warning --> Exception

Beitrag von Oekel »

Moin,

wenn ich folgende Exception im Log lese:

Code: Alles auswählen

2023-11-19 11:53:12.399 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Incoming payload '{"Version":"9.5.0.8(tasmota)","BuildDateTime":"2021.09.03 15:34:57","Module or Template":"Luani Button+Temp","RestartReason":"Exception","Uptime":"192T14:31:04","Hostname":"Licht016-3252","IPAddress":"192.168.5.12","RSSI":"48","Signal (dBm)":"-76","WiFi LinkCount":19,"WiFi Downtime":"0T00:00:37","MqttCount":41,"LoadAvg":19}' not supported by type 'NumberValue'
(Und das Device im vorheringen OH 3 problemlos lief...)
...ich jenes gerade erst wieder eingebunden habe, dass

Mein Broker für diese Exception gesorgt hat und nicht die Firmware des Devices selber?? (Siehe "Uptime":"192T14:31:04")

Mein Log ist voll von diesen Zeilen. Was mache ich falsch? (Derzeit ist nur ein MQTT Device in OH4 eingebunden (per discover gefunden worden)
Es existieren jedoch noch 3 weitere baugleiche Module. Funken diese auch bereits über den Broker ins Log?

LG David

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

Re: MQTT Warning --> Exception

Beitrag von udo1toni »

Ich breche die Zeile mal so um, dass man besser erkennen kann, was Sache ist:

Code: Alles auswählen

2023-11-19 11:53:12.399 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Incoming payload '

{
	"Version": "9.5.0.8(tasmota)",
	"BuildDateTime": "2021.09.03 15:34:57",
	"Module or Template": "Luani Button+Temp",
	"RestartReason": "Exception",
	"Uptime": "192T14:31:04",
	"Hostname": "Licht016-3252",
	"IPAddress": "192.168.5.12",
	"RSSI": "48",
	"Signal (dBm)": "-76",
	"WiFi LinkCount": 19,
	"WiFi Downtime": "0T00:00:37",
	"MqttCount": 41,
	"LoadAvg": 19
}

' not supported by type 'NumberValue'
Es ist also so, dass Du einen Number Channel definiert hast (type 'NumberValue'). Das Topic, welches Du als stateTopic für diesen Channel definiert hast, empfängt ein JSON Objekt (alle zwischen { und } einschließlich der Klammern). Das JSON Objekt ist ein String. Mutmaßlich willst Du auf einen bestimmten Wert innerhalb des JSON Objekts zugreifen, dazu musst Du State Transformation nutzen, in diesem Fall gewöhnlich JSONpath. Angenommen, der gesuchte Wert ist RSSI, dann heißt der Eintrag für die state transformation entsprechend JSONPATH:$.RSSI
Vielleicht hast Du das auch entsprechend eingerichtet, aber vergessen, JSONPath zu installieren (das ist ein Addon wie jedes andere auch...)
Anhand des Hostname und/oder der IPAddress kannst Du das Gerät identifizieren, welches das Topic sendet. Die Tasmota Version ist ja schon etwas älter :) insofern kann ich nur raten, wie das exakte Topic heißt, aber Du hast ja eh mehr als nur diese eine Zeile. Du musst halt die entsprechenden Channel identifizieren und die Konfiguration dieser Channel korrigieren.

Hast Du ein Werkzeug wie z.B. MQTT Explorer, so kannst Du dir dort die passenden Topics raus suchen, oder Du schaust halt au openHAB-Seite, welche Channel keine validen Daten liefern.

Da Du Auto Discovery genutzt hast... das spricht dafür, dass einfach das JSONPath Addon nicht installiert ist (Auto Discovery richtet die Geräte nur ein, prüft aber nicht, ob alle Voraussetzungen erfüllt sind, um die Geräte auch zu nutzen)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Oekel
Beiträge: 201
Registriert: 28. Aug 2021 10:34
Answers: 0

Re: MQTT Warning --> Exception

Beitrag von Oekel »

udo1toni hat geschrieben: 19. Nov 2023 14:14 Ich breche die Zeile mal so um, dass man besser erkennen kann, was Sache ist:
Danke dir für die schnelle Antwort. Wenn man nicht täglich damit arbeitet ist es ganz schön schwer an "Item" zu denken, aber dann doch das Objekt "Channel-Link" ausfindig zu machen ;)

Folgendes Funktioniert scheinbar
Bildschirmfoto 2023-11-19 um 21.03.26.png
auch wenn ich nicht JSONPATH vorweg geschrieben habe, wie es in allen Dokus und in deiner Erklärung der Fall ist.
Da es hier keinen Button für die Codeansicht gibt ist es wirklich schwer zu erraten, ob man nun

Code: Alles auswählen

$.DS18B20.Temperature
oder

Code: Alles auswählen

JSONPATH:$.DS18B20.Temperature
schreiben muss.

Könntest du mir diesbezüglich noch 2-3 Tipps geben?
  • Wie könnte ich das event manuell triggern, um den Ausdruck zu testen?
  • Was kann JINJA im Vergleich und was macht eingentlich der Standard?
  • Wie würde ich ein solches MQTT Thing manuell einrichten? (Scheinbar lassen sich ja sämtliche Parameter im Nachgang nicht mehr ändern.
LG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: MQTT Warning --> Exception

Beitrag von udo1toni »

Das ist eine andere Stelle, um JSONPATH zu nutzen. Allerdings funktioniert das nur, wenn der Channel vom Typ String ist, den nder Channel muss jka das gesamte JSON weiterleiten.
Es sollte aber unnötig sein, wenn das Thing per Auto Discovery eingebunden wurde.

Zur Verdeutlichung der Weg der Information:

Tasmota Hardware <-> MQTT Broker <-> openHAB mqtt Binding <-> mqtt Thing/Channel <-> Item.

Der Ausschnitt Channel <-> Item kann noch etwas detaillierter sein:

Channel -> transformationPattern -> Link -> Item
Channel <- formatBeforePublish <- (Link) <- Item

Es gibt hier also abhängig von der Richtung unterschiedliche Dinge zu konfigurieren. Im transformationPattern (das ist Bestandteil des Channels, NICHT des Links) kannst Du JSONPath ebenfalls einsetzen, aber hier steht keine Auswahl zur Verfügung, weshalb Du JSONPATH: vor das Argument schreiben musst. transformationPattern ist eine Advanced Option, die musst Du also zunächst einblenden :)

Manuell legst Du ein Thing einfach über der Weiße Plus im blauen Kreis an (rechts unten wenn Du in der Things-Ansicht bist). Im ersten Schritt wählst Du dann das mqtt Binding aus und wählst im "Add Manual" Bereich "Generic MQTT Thing" aus. Und dann fügst Du halt alle Daten entsprechend ein.

Wie gesagt, sollte bei Auto Discovery automatisch der korrekte Ausdruck eingefügt werden. Falls das nicht funktioniert hat, wäre mein Tipp, das entsprechende Thing zu löschen und neu anlegen zu lassen.
Falls das hartnäckig nicht funktioniert, ist das manuelle Anlegen tatsächlich die einfachste Variante.

Tasmota 9.5 ist halt auch schon gut abgehangen, aktuell ist V13.2, und auch wenn man nicht unbedingt updaten muss (und Theo Arends soger davon abrät, wenn man keine Probleme hat), kann es halt gut sein, dass gerade die Autokonfiguration (homeassistant-kompatibel) inzwischen ganz anders läuft. openHAB implementiert eventuell nur das aktuelle Protokoll, so dass dann nicht alle Features korrekt genutzt werden.

Die anderen Punkte im Profile (im Link zwischen Channel und Item) beziehen sich jeweils auf andere Möglichkeiten, den ankommenden Wert zu manipulieren, bevor er im Item landet. Standard bedeutet, dass der Wert unverändert weitergeleitet wird.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten