MQTT Channel Link

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
kasper1806@gmail.com
Beiträge: 2
Registriert: 1. Feb 2025 11:17
Answers: 0

MQTT Channel Link

Beitrag von kasper1806@gmail.com »

Hallo,

Ich habe ein Buttonplus Room Controller. Dafür möchte ich einige Werte von Openhab über das MQTT Binding richtung den Controller schicken. z.B. Das Datum bzw. die Uhrzeit. Bei KNX funktioniert das ja wunderbar über ein Channel Link mit dem NTP Binding. Jetzt habe ich eine Channel Link mit dem MQTT Binding und dem NTP Binding eingerichtet. Siehe Code

mqtt.thing

Code: Alles auswählen

Thing mqtt:topic:buttonplus (mqtt:broker:mosquitto){
    Channels:
    Type datetime : buttonplus_openhab_time                  [commandTopic="buttonplus/openhab/time", formatBeforePublish="%1$tH:%1$tM"]
    Type number   : buttonplus_openhab_outsidetemp       [commandTopic="buttonplus/openhab/outsidetemp"]}
mqtt.item

Code: Alles auswählen

DateTime    mqtt_buttonplus_time_time           {channel="mqtt:topic:buttonplus:buttonplus_openhab_time", channel="ntp:ntp:timeserver:dateTime"}
Number      mqtt_buttonplus_outsidetemp         {channel="mqtt:topic:buttonplus:buttonplus_openhab_outsidetemp", channel="mqtt:topic:ebus:heating_ebus_broadcast_outsidetemp"}             
Leider werden die Werte nicht geschickt. :oops:

Sobald ich aber eine Rule anlege funktioniert es.

Code: Alles auswählen

rule "buttonplus - time"
when
    Item mqtt_buttonplus_time_time changed
    
then
    mqtt_buttonplus_time_time.sendCommand(mqtt_buttonplus_time_time.state.toString)
end
Was mach ich falsch? Danke für eure Hilfe!

Grüße vom Kasper 8-)
Openhab 4.3.2 on Rasberry 5 8GB per Docker - KNX - Zigbee - MQTT

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

Re: MQTT Channel Link

Beitrag von udo1toni »

Du musst den mqtt Channel mit Profile="follow" definieren.

Code: Alles auswählen

DateTime    mqtt_buttonplus_time_time           {channel="mqtt:topic:buttonplus:buttonplus_openhab_time"[profile="follow"], channel="ntp:ntp:timeserver:dateTime"}
Number      mqtt_buttonplus_outsidetemp         {channel="mqtt:topic:buttonplus:buttonplus_openhab_outsidetemp"[profile="follow"], channel="mqtt:topic:ebus:heating_ebus_broadcast_outsidetemp"}             
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

kasper1806@gmail.com
Beiträge: 2
Registriert: 1. Feb 2025 11:17
Answers: 0

Re: MQTT Channel Link

Beitrag von kasper1806@gmail.com »

Jetzt funktioniert es! Danke!

Könntest/würdest du mir noch erklären, was der Unterschied zum KNX Binding ist? Da muss es ja nicht stehen?!
Openhab 4.3.2 on Rasberry 5 8GB per Docker - KNX - Zigbee - MQTT

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

Re: MQTT Channel Link

Beitrag von udo1toni »

Doch, beim knx Binding wäre das auch notwendig, wenn Du "reguläre" Channel verwendetest.
Du hast aber datetime-control verwendet, die verhalten sich anders als "normale" Channel.

Normale Channel:
Ein sendCommand() Ereignis auf einem verlinkten Item führt dazu, dass der Befehl an den Channel übergeben und versendet wird.
Ein postUpdate() wird ignoriert.
Ankommende Werte werden als postUpdate() an alle verlinkten Items weitergegeben.

*.control Channel (nur bei knx vorhanden):
Ankommende Werte werden als sendCommand() an alle verlinkten Items weitergereicht.
sendCommand() Ereignisse auf einem verlinkten Item werden ignoriert.
postUpdate() Ereignisse werden an den Channel weitergereicht und an knx gesendet.

Bei anderen Bindings gibt es teilweise den Parameter isCommand (mqtt, http?), der eine ähnliche Wirkung haben sollte. Allerdings ist es unüblich, das dort so zu lösen, stattdessen nutzt man eben das follow-Profile

Dass es bei knx diese Sonderlösung gibt, hat historische Gründe. Grundsätzlich wird alles, was ankommt, als Status gewertet und nur Befehle werden versendet. Bei knx gibt es auf dem Bus aber keinen Unterschied zwischen Befehl und Status, was zu Endlosschleifen geführt hat. Die "Lösung" waren dann gerichtete Channel, auch, um ohne Rules von knx aus Nicht-knx-Geräte steuern zu können (z.B. knx Wandtaster schaltet WLAN-Steckdose)
Profiles wurden erst danach eingeführt :), wenn ich es richtig erinnere, kam knx2 mit OH2.3, während Profiles erst in OH2.5 eingebaut wurden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten