Item Wert per mqtt an Mosquitto Broker

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
wellem
Beiträge: 1
Registriert: 20. Feb 2023 08:21
Answers: 0

Item Wert per mqtt an Mosquitto Broker

Beitrag von wellem »

Hallo zusammen,

ich habe in Openhab 4.01 einen Item Wert Außentemperatur.
Diesen Wert möchte ich über mqtt anderen Systemen bereitstellen.

Bei mir läuft mosquitto als mqtt broker in einem eigenständigen Docker.
Mosquitto funkotiniert einwandfrei und ich habe viele Geräte darüber eingebunden.

Folgende Konfiguration habe ich ausprobiert:
- Thing: MQTT Broker

Code: Alles auswählen

UID: mqtt:broker:2a58240301
label: MQTT_Mosquitto
thingTypeUID: mqtt:broker
configuration:
  lwtQos: 0
  publickeypin: true
  clientid: a4d15167-074c-42e4-8089-ae4859e45c58
  keepAlive: 60
  hostnameValidated: true
  birthRetain: true
  secure: false
  certificatepin: true
  shutdownRetain: false
  protocol: TCP
  qos: 0
  reconnectTime: 60000
  mqttVersion: V3
  host: 192.168.55.9
  lwtRetain: true
  enableDiscovery: false
- Thing Generic Mqtt

Code: Alles auswählen

UID: mqtt:topic:2a58240301:d50b126705
label: MQTT_Publish
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:2a58240301
channels:
  - id: Mqtt_Aussentemp
    channelTypeUID: mqtt:number
    label: Mqtt_Aussentemp
    description: ""
    configuration:
      formatBeforePublish: "%"
      commandTopic: temperatur/aussentemp/
      retained: false
- im Channel ist das Item für die Aussentemperatur hinterlegt

Leider wird der Wert des Items nicht an den Broker übergeben.

Wo ist mein Denkfehler?

Schöne Grüße
Michael

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Item Wert per mqtt an Mosquitto Broker

Beitrag von nw378 »

wenn du alles korrekt konfiguriert hast, sollte ein simples

Code: Alles auswählen

mein_mqtt_item.sendCommand(mein_neuer_Wert) 
reichen.

Alternativ kannst Du auch folgendes probieren:

Code: Alles auswählen

actions.publishMQTT("temperatur/aussentemp", mein_mqtt_item.state.toString)
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: Item Wert per mqtt an Mosquitto Broker

Beitrag von udo1toni »

Herzlich willkommen im openHAB Forum!

Wenn Du den Wert nicht speziell formatieren willst, lass das Feld formatBeforePublish einfach leer. Du musst hier nur etwas eintragen, wenn Du "um den Wert herum" noch statischen Text ausgeben willst, beispielsweise um einen Wert als JSON Objekt zu publizieren.
Der korrekte Platzhalter für den Wert wäre dann gewöhnlich %s, evtl. wird inzwischen auch %f unterstützt (um z.B. mit %.1f nur die erste Nachkommastelle mit zu übergeben), da ist die Dokumentation aber unklar.
Außerdem musst Du einen Endpunkt angeben, das Topic temperatur/aussentemp/ ist aber ein"Verzeichnis". Lass also den abschließenden Slash weg, dann wird der Wert unter dem Topic temperatur/aussentemp publiziert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

floeg
Beiträge: 19
Registriert: 26. Feb 2020 17:44
Answers: 0

Re: Item Wert per mqtt an Mosquitto Broker

Beitrag von floeg »

Hallo,
ich war länger nicht in Openhab unterwegs und mit der Oberfläche in Openhab 4 noch nicht so vertraut und soll für einen Bekannten nun die Werte seiner PV Anlage per MQTT aus Openhab an den MQTT Server schicken.

Thing MQTT Broker ist eingerichtet und funktioniert (Birth und Shutdown Messages kommen an)
Thing Generic MQTT ist eingerichtet; der Code sieht vom Aufbau aus, wie bei wellem.
Channel ist angelegt und item ist dem Channel zugeordnet

Dazu habe ich eine Frage:
Wo muss ich nun den code von nw378 ergänzen? Als Script, als Regel, oder direkt im Code vom Generic MQTT Thing. Falls letzteres: an welcher Stelle und welche Besonderheiten gibt ggf es zu beachten?

Vielen Dank für eure Unterstützung und einen schönen Ostermontag.

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

Re: Item Wert per mqtt an Mosquitto Broker

Beitrag von udo1toni »

Grundsätzlich gibt es verschiedene Optionen, die Aufgabe umzusetzen.

Die "einfachste" Variante: Sorge dafür, dass jedes Update des Items per mqtt weitergeleitet wird. Dazu legst Du lediglich in einem Generic mqtt Thing einen passenden Channel an, der den Wert an das gewünschte Topic sendet. Anschließend verlinkst Du diesen Channel mit dem gewünschten Item, wobei Du im Link das Profile "Follow" wählst.
Vorteil: simpel
Nachteil: evtl. bekommst Du unnötig viele Updates; evtl. wird zu viel weitergeleitet (ein QuantityType Item enthält die Einheit, die sollte vermutlich im mqtt Payload nicht enthalten sein, das kann schief gehen) Aber evtl. funktioniert es direkt und ohne weiteres Zutun...

Eine weitere Option: Du legst ein eigenes mqtt-Sende-Item an und definierst eine Rule. Die rule wird bei "zu sendendes Item changed" getriggert, extrahiert den aktuellen Status und sendet ihn aktiv an das mqtt Item, welches die Payload auf dem gewählten Topic publizierrt.
Vorteil: sollte immer funktionieren, senden nur wenn nötig, man kann evtl. störende Informationen (Einheiten...) direkt ohne Umwege wegfiltern.
Nachteil: je Wert eine Rule plus ein Item extra, oder zusätzlicher Aufwand, um die Rule zu generalisieren, so dass sie mit mehreren Itempaaren zusammenarbeiten kann.

Dritte Option: Du legst eine Rule an, welche auf Wertänderungen einer Gruppe von Items reagiert. In der Gruppe sind alle Items zusammengefasst, die Du versenden willst.
Die Rule wertet aus, welches Item die Rule getriggert hat und wählst darauf beruhend das passende Topic zum Versand aus. Anschließend bestimmt die Rule den zu versendenden Wert und versendet ihn direkt, ohne Umweg über ein Item bzw. einen mqtt Channel.
Vorteil: sehr schlank, Du brauchst lediglich das Group Item (und selbst das könnte man weg lassen, nur bringt die Gruppe Vorteile beim Schreiben der passenden Rule...). Du brauchst weder zusätzliche Items noch zusätzliche mqtt things/channel, da der Versand direkt aus der Rule heraus per mqtt Action geschieht.
Nachteil: Die Rule ist evtl. etwas aufwändiger.

Je nachdem, wie die Randbedingungen sind, kann dennoch die dritte Option die schlanke Variante sein (zumindest wenn es mehr als nur ein Wert sein soll)

Der Code aus dem Posting wäre in einer Rule zu platzieren, welche dann jeweils bei einem changed Ereignis getriggert wird, ohne weiteres Drumherum wäre das also Option 2 - von der ich eher abraten möchte - entweder richtig oder gar nicht... ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Antworten