Seite 1 von 2

KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 15. Mai 2020 18:30
von iLion
Hallo,

ich bitte um Nachsicht, falls ich hier im Forum keinen passenden Beitrag zu meiner Frage gefunden habe. Die Suche nach dem Stichwort "MQTT" meldet leider immer, dass das Suchwort "mqtt" aufgrund zu hohem Vorkommen nicht beachtet wurde. Zudem suche ich seit rund zwei Wochen bei Google und YouTube nach Themen zur Einbindung von MQTT in meine openHAB-Installation. Natürlich habe ich einiges gefunden, viele Beiträge nutzen aber z.B. immer die Paper UI. Mein aktueller Stand ist jedoch, dass ich als Bindings KNX, Hue und AVM FRITZ!Box Geräte eingebunden und alle .things, sowie .items Dateien per Hand geschrieben habe. Die zugehörige Sitemap auch. Soweit kann ich die Geräte aktuell manuell über die Basic UI steuern. Parallel schaue ich mir aber auch ioBroker an und finde dort Blockly super. Daher war eine Idee, Werte aus openHAB über MQTT an ioBroker durchzureichen. Der ioBroker openHAB-Adapter ist nämlich seit längerem nicht weiterentwickelt worden. Die verschiedenen Regel-Engines von openHAB überfordern mich zur Zeit etwas.

Als Broker habe ich in meinen Ubuntu Server Mosquitto installiert und das MQTT Binding v2.5.4. Meine zugehörige "mqtt.things"-Datei sieht zur Zeit so aus:

Code: Alles auswählen

Bridge mqtt:broker:mosquitto    "Mosquitto MQTT Broker" @ "openHAB"   [
    host="ip-Adresse",
    port=1883,
    secure=false,
    qos=0,
    clientID="openHAB"
] {
    Thing topic bj_reg_1_1_2_dg "(MQTT KNX 1.1.2)" @ "Treppenhaus Büro" {
        Type switch : mqtt_d1_a2_k1 "Deckenlampen 1 Büro" [ stateTopic="openHAB/KNX/1/4/16/state", commandTopic="openHAB/KNX/1/4/16/command" ]
    }
}
Die Idee war, den Status im Topic ".../state" auslesen zu können und per ".../command" die Lampe dann zu schalten.

Dem zugehörigen item in meiner "knx.items" Datei habe ich dann im { channel= }-Bereich noch folgendes zum KNX-channel hinzugefügt:

Code: Alles auswählen

[ channel="knx:brigde:..., channel="mqtt:topic:mosquitto:bj_reg_1_1_2_dg:mqtt_d1_a2_k1", ...]
Den Mosquitto-Broker habe ich dann per MQTT-Explorer beobachtet. Zuerst passierte gar nichts. In der Paper UI hatte ich dann neben dem Switch für den KNX-Aktor noch einen zweiten Switch für das MQTT-Objekt. Wenn ich jetzt die Leuchte am Schalter (an der Wand) geschaltet habe, sind beide Schalter in der Paper UI umgesprungen und im Broker wurde das ".../command"-Objekt mit einer 1 angelegt. Wenn ich in der Paper UI oder am richtigen Schalter das Licht ausgeschaltet habe, wurde dieser Wert auf 0 gesetzt. Einen Status-Wert habe ich aber leider nicht erhalten und der Versuch mit dem MQTT-Explorer in das Command-Topic mit einer "1" oder "0" das Licht zu schalten hat auch nicht funktioniert.

Es wäre toll, wenn mir hier jemand helfen könnte. Vielleicht bin ich ja auch auf dem Holzweg. Leider findet man durch die MQTT-Bindungs 1.x und 2.x viele veraltete Tutorials und im Vergleich zu anderen Bindings in der openHAB-Dokumentation wenig bis keine Beispiele für die Anwendung.

Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 15. Mai 2020 19:23
von udo1toni
Also, die Punkte sind ja schön und gut, aber wenn es um Konfiguration geht, ist ein "sieht ungefähr so aus" nicht hilfreich.



Gesendet von meinem SM-G973F mit Tapatalk


Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 15. Mai 2020 19:35
von iLion
Was fehlt denn? Die mqtt.things Datei ist bis auf die entfernte IP genau so, wie ich sie gespeichert habe. Und in der KNX.items heisst die vollständige Zeile

Code: Alles auswählen

Switch   s_dg_buero_deckenleuchten_1   "Deckenleuchten 1 Büro"   <light>   (gBuero_N, gLicht, gSchalter)   { channel="knx:device:bridge:bj_reg_1_1_2_dg:d1_a2_k1", channel="mqtt:topic:mosquitto:bj_reg_1_1_2_dg:mqtt_d1_a2_k1", alexa="Switchable" [category="LIGHT"] }
Ich denke, dass da nichts weiter drin steckt, was sich direkt auf MQTT auswirkt, oder?

Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 15. Mai 2020 20:46
von udo1toni

iLion hat geschrieben:Ich denke, dass da nichts weiter drin steckt, was sich direkt auf MQTT auswirkt, oder?
Das nicht, aber man kann das an einer unvollständigen (und in dieser Form falschen) Konfiguration schlecht erkennen...

Gesendet von meinem SM-G973F mit Tapatalk


Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 15. Mai 2020 20:52
von udo1toni
Eventuell musst Du als Profile follow setzen.

Gesendet von meinem SM-G973F mit Tapatalk


Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 15. Mai 2020 21:26
von iLion
Hallo Udo,

was meinst Du denn mit "in dieser Form falschen" Konfiguration? Ich habe bis jetzt im Netz noch nach weiteren Infos gesucht und bin dabei auf einen Fehler gestossen - in meiner mqtt.things fehlte wohl noch die Zeile "Channels:" vor dem "Type switch". Auf der anderen Seite hat das in den Log-Dateien keine Einträge ausgelöst und in der Paper UI ist der Channel auch normal aufgetaucht stand auf "Online". Was mir dann aber noch aufgefallen ist, dass es einen Eintrag hinter dem "Show More" mit "Is Command" gibt. Nach weitere Suche habe ich den jetzt aktiviert. Ein Hinweis an andere, die hier mal über das Thema stolpern. In der openHAB Community gibt es viele Beiträge, in denen steht, man müsse postCommand="true" schreiben. So springt der Schalter in der Paper UI aber nicht auf aktiv. Erst nachdem ich mich gewundert hatte, dass meine MQTT Einträge immer im Broker verschwinden, bin ich über "retained" gestolpert und in diesen Beispielen wurde immer "retained=true" geschrieben. Wenn man das ganze also so schreibt

Code: Alles auswählen

Bridge mqtt:broker:mosquitto    "Mosquitto MQTT Broker" @ "openHAB"   [
    host="ip-Adresse",
    port=1883,
    secure=false,
    clientID="openHAB"
] {
    Thing topic mqtt_bj_reg_1_1_2_dg "(MQTT KNX 1.1.2)" @ "Treppenhaus Büro" {
        Channels:
            Type switch : mqtt_d1_a2_k1 "Deckenlampen 1 Büro" [ stateTopic="openHAB/KNX/1/4/16/state", commandTopic="openHAB/KNX/1/4/16/command", postCommand=true, retained=true ]
    }
}
, sind die beiden Optionen in der PaperUI aktiv. Ich hatte gehofft, dass so auch die Befehle an den KNX-Bus gesendet werden, aber das hat leider immer noch nicht geklappt. MQTT zeichnet so jetzt lediglich die einzelnen Schaltungen mit 0 und 1 auf und ich kann sie im MQTT-Explorer in der History einsehen.

Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 15. Mai 2020 23:19
von udo1toni
Retained bedeutet, dass der Broker den zuletzt empfangenen Payload des Topics aufhebt und falls ein Client das Topic abonniert, bekommt er den letzten Payload ausgeliefert.


Gesendet von meinem SM-G973F mit Tapatalk


Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 16. Mai 2020 08:15
von iLion
Ja, das war es ja, was ich erreichen wollte. Die Werte von openHAB sollten in der MQTT-Datenbank bestehen bleiben und wenn ich den (einen) MQTT-Client starte, wollte ich die Werte sehen. Das klappt ja nun auch. Leider hatte der postCommand-Wert nicht die erwartete Auswirkung. Die Beschreibung der Dokumenation sagt ja:
postCommand: Wenn der empfangene MQTT-Wert wahr ist, wird der Status der verknüpften Elemente nicht nur aktualisiert, sondern auch befohlen. Der Standardwert ist falsch. In der Regel muss dies wahr sein, wenn Ihr Element auch mit einem anderen Kanal verknüpft ist, z. B. mit einem KNX-Aktor, und Sie möchten, dass eine empfangene MQTT-Nutzlast diesen KNX-Aktor befehligt.
Insofern hatte ich die Hoffnung, dass ein mit dem Client geschriebener manueller Wert als Kommende den Status beeinflusst. Das passiert aber leider nicht.

Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 16. Mai 2020 12:15
von udo1toni
postCommand: Wie in der Dokumentation deutlich zu lesen (sogar im Google Translate...) geht es hier darum, dass eine Statusänderung in mqtt als Befehl an die übrigen Addons weitergeleitet wird, also genau die falsche Richtung.

Hast Du meinen Hinweis auf profile=follow gesehen?

Re: KNX Wert in Mosquitto per MQTT schreiben und lesen

Verfasst: 16. Mai 2020 16:14
von iLion
Hallo, also zuerst einmal bin ich Dir dankbar, dass Du Dich überhaupt mit meinem Problem beschäftigst. Aber...
dass eine Statusänderung in mqtt als Befehl an die übrigen Addons weitergeleitet wird, also genau die falsche Richtung.
Nein, eigentlich ist es genau das, was ich will. Ich möchte mit einem Tool wie dem MQTT-Explorer, bzw. später mit ioBroker, das Topic ändern und die Änderung soll von openHAB übernommen und in diesem Fall an den KNX Bus übergeben werden.

Was ich mit meiner Konfiguration im Moment erreicht habe, dass jede Statusänderung in das MQTT Topic als 0 oder 1 geschrieben und so ausgelesen werden kann. Dabei spielt es keine Rolle, ob ich einen physischen Schalter an der Wand nutze, oder einen virtuellen Switch im Browser oder in der App.
Hast Du meinen Hinweis auf profile=follow gesehen?
Ja, und auch mal gesetzt. Aber das ändert nichts am Verhalten und ich interpretiere es so, dass eben nur der Status synchron ist, aber keine Befehle übernommen würden.