Seite 1 von 1

MQTT Channel Link

Verfasst: 1. Feb 2025 21:20
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-)

Re: MQTT Channel Link

Verfasst: 1. Feb 2025 21:31
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"}             

Re: MQTT Channel Link

Verfasst: 1. Feb 2025 22:21
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?!

Re: MQTT Channel Link

Verfasst: 2. Feb 2025 12:44
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.