Du geht einen zu komplizierten Weg

Es reicht, ein passendes Generic mqtt Thing mit passenden Channels anzulegen (sowie natürlich die passenden Items):
Code: Alles auswählen
Bridge mqtt:broker:broker "Mosquitto" [
host="192.168.178.55",
] {
Thing topic weather "Wetterstation" {
Channels:
Type number : temp "Temperatur" [ stateTopic= "pfad zum topic", transformationPattern="JSONPATH:$.temperature", unit="d°C" ]
Type number : hum "Luftfeuchte" [ stateTopic= "pfad zum topic", transformationPattern="JSONPATH:$.humidity", unit="%" ]
Type number : wspeed "Tempo Wind" [ stateTopic= "pfad zum topic", transformationPattern="JSONPATH:$.wind_speed", unit="m/s" ]
Type number : gspeed "Tempo Böen" [ stateTopic= "pfad zum topic", transformationPattern="JSONPATH:$.gust_speed", unit="m/s" ]
Type number : rain "Regen" [ stateTopic= "pfad zum topic", transformationPattern="JSONPATH:$.rain", unit="mm/h" ]
Type string : dir "Windrichtung" [ stateTopic= "pfad zum topic", transformationPattern="JSONPATH:$.wind_direction" ]
Type switch : bat "Batterie" [ stateTopic= "pfad zum topic", transformationPattern="JSONPATH:$.battery_low", onValue="true", offValue="false" ]
}
}
Items:
Code: Alles auswählen
Number:Temperature OWS_Temperatur "Temperatur" {channel="mqtt:topic:broker:weather:temp", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Dimensionless OWS_Luftfeuchte "Luftfeuchte" {channel="mqtt:topic:broker:weather:hum", unit="%", stateDescription=""[pattern="%.1f %"]}
Number:Speed OWS_TempoWind "Windgeschwindigkeit" {channel="mqtt:topic:broker:weather:wspeed", unit="m/s", stateDescription=""[pattern="%.1f km/h"]}
Number:Speed OWS_TempoBoeen "Windböen" {channel="mqtt:topic:broker:weather:gspeed", unit="m/s", stateDescription=""[pattern="%.1f km/h"]}
Number:Speed OWS_Regen "Regenmenge" {channel="mqtt:topic:broker:weather:rain", unit="mm/h", stateDescription=""[pattern="%.1f mm/h"]}
String OWS_Richtung "Windrichtung" {channel="mqtt:topic:broker:weather:dir"}
Switch OWS_BatterieLeer "Batteriestand kritisch" {channel="mqtt:topic:broker:weather:bat"}
Ich habe hier die Textform genutzt, Du kannst die Parameter aber genauso gut auch über die UI setzen (die entsprechenden Felder kann man ganz gut aus der Textdefinition ableiten).
Hinweis: Die
unit als Parameter steht nur im Number Channel zur Verfügung (advanced Options).
Ein Channel mit gesetzter Unit sollte unbedingt immer mit einem Number:QuantityType Item verlinkt werden. Alle UoM Items (Units of Measurement; eben die QuantityType Items) haben ab OH4.0.0 ebenfalls einen
unit Parameter, der zwingend gesetzt werden muss. Der Parameter bestimmt, in welcher Einheit der Wert im Item gehalten wird - und damit auch, wie der Wert persistiert wird.
Die
stateDescription ist Teil der Metadaten. Dort wird festgelegt, wie der Wert dargestellt wird.
%.1f bedeutet: Der Wert wird als Float Wert mit einer Nachkommastelle dargestellt. Die angegebene Einheit muss zu der Einheit des Items passen, also bei Temperature z.B.
°C,
°F oder
K. Man kann aber (siehe Channel) auch die gebräuchlichen Vorsilben setzen, hier z.B.
d°C -> deziGrad Celsius. Im Item zeigen wir
°C an und das Komma wird automatisch um eine Stelle nach links verschoben.
Wenn Du willst, kannst Du auch noch das Semantic Model ergänzen (das habe ich mir hier gespart, damit wird die Textdefinition etwas länglich...)
Für die Windrichtung gibt es eine Besonderheit, denn dort wird ja ein Text geliefert.
Um nun sinnvolle Ausgaben zu erhalten, bietet sich die MAP-Transformation an.
Du musst dazu lediglich in der State Description unten Wertepaare eingeben, also z.B.
Allerdings musst Du dazu natürlich erst mal alle möglichen Werte kennen. Hast Du mehrere Items, die das selbe Mapping brauchen, kannst Du das Mapping auch in eine Textdatei auslagern und darauf verlinken.
Links vom Gleichheitszeichen müssen Leerzeichen mit einem vorangestellten \ escaped werden. Die Texte sind exakt anzugeben (Groß-/Kleinschreibung pro Buchstabe beachten)
Der Batteriestatus kann bequem über ein Switch Item signalisiert werden, dazu muss man lediglich aus true/false ein ON/OFF machen, was schon im Channel über die gesetzten Parameter passiert. In der UI kann ein Switch ohne Probleme auch nur angezeigt werden (also ohne Schalter, nur der Status).
legt man noch passende Icons ab (
battery-on und
battery-off) und verlinkt auf
battery als Icon, so bekommt man sogar eine volle bzw. leere Batterie als Icon angezeigt, je nach Zustand des Switch Items.
PS: bestimmt sind da jede Menge Tippfehler...

openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet