NEWS
MQTT und KNX
-
@marc-berg said in MQTT und KNX:
@frankentronik sagte in MQTT und KNX:
Ja. Wenn man im Objekt (KNX Iobroker) auf true oder false drückt. kommt ein Fenster, welches den Wert (auch aus Delphi) übernimmt. Dort ist ein Schalter mit Wert senden. Dann wird die Aktion ausgeführt.
Leider schreibst du nichts zu deiner MQTT-Umgebung (also welcher Broker, welcher Adapter).
Ich nehme an, du nutzt den MQTT Adapter als Client oder Broker. Dieser schreibt MQTT Nachrichten als "acknowledged" in die Objekte. Damit reagiert dein KNX Adapter richtigerweise nicht.
Abhilfe: Entweder den MQTT-Client Adapter nutzen oder per Skript/Blockly/Node Red den KNX State setzen.Hallo
In Delphi nutze ich den TMSMQTT Client
Im IOBroker den mqtt Broker/Client V5.2.0 eingestellt als Server/BrokerWas ist dann der MQTT-Client Adapter?
Viele Grüße
Stefan
-
@frankentronik sagte in MQTT und KNX:
Was ist dann der MQTT-Client Adapter?
Das ist ein ioBroker Adapter, der installiert werden muss und der als MQTT Client läuft. Hier hast du den Vorteil, dass man das "Ack" Flag abschalten kann:
Du müsstest also im MQTT Adapter das Publizieren der KNX States abschalten (ich nehme an, das hast du gemacht)
und stattdessen den MQTT-Client Adapter für den Datenpunkt (wie immer der auch heißt) aktivieren. Wie das MQTT Topic heißt, kannst du definieren.
-
@marc-berg said in MQTT und KNX:
@frankentronik sagte in MQTT und KNX:
Was ist dann der MQTT-Client Adapter?
Das ist ein ioBroker Adapter, der installiert werden muss und der als MQTT Client läuft. Hier hast du den Vorteil, dass man das "Ack" Flag abschalten kann:
Du müsstest also im MQTT Adapter das Publizieren der KNX States abschalten (ich nehme an, das hast du gemacht)
und stattdessen den MQTT-Client Adapter für den Datenpunkt (wie immer der auch heißt) aktivieren. Wie das MQTT Topic heißt, kannst du definieren.
Der Client läuft aber in Delphi. Im IOBrocker benötige ich den Server. Deshalb habe ich den MQTT Broker/Client installiert und als Server eingerichtet.
Ich werde morgen mal TMS anschreiben, was die dazu sagen. In dem Befehl, den ich gerade verwendet habe, gibt es ein Retain-Flag. Dieser hat aber keinerlei Auswirkung. Vom ACK steht auch nichts im Datenblatt.Viele Grüße und Danke
-
@frankentronik sagte in MQTT und KNX:
Der Client läuft aber in Delphi. Im IOBrocker benötige ich den Server. Deshalb habe ich den MQTT Broker/Client installiert und als Server eingerichtet.
Ja, ich weiß. Und mit dem MQTT-Client Adapter kommt ein weiterer Client hinzu.
Ich werde morgen mal TMS anschreiben, was die dazu sagen. In dem Befehl, den ich gerade verwendet habe, gibt es ein Retain-Flag. Dieser hat aber keinerlei Auswirkung. Vom ACK steht auch nichts im Datenblatt.
Gut gemeinter Rat: Beschäftige dich mal kurz mit den ioBroker Grundlagen (insbesondere das Thema "ack/bestätigt"-Flag).
https://www.youtube.com/watch?v=p5FyeifYUnwDann wird vielleicht klarer, was ich meine.
-
@frankentronik sagte in MQTT und KNX:
Der Client läuft aber in Delphi.
Ja, du brauchst einen MQTT Broker, der muss eigentlich nur die Pakete verwalten können.
du brauchst aber ggf. mehrere Clients, die publishen oder subscriben.
https://www.iobroker.net/#de/adapters/adapterref/iobroker.mqtt-client/README.md
https://www.iobroker.net/#de/adapters/adapterref/iobroker.mqtt/README.md
(etwas ältere Doku!)@frankentronik sagte in MQTT und KNX:
Vom ACK steht auch nichts im Datenblatt.
ist ja auch iobroker spezifisch
-
@marc-berg said in MQTT und KNX:
@frankentronik sagte in MQTT und KNX:
Der Client läuft aber in Delphi. Im IOBrocker benötige ich den Server. Deshalb habe ich den MQTT Broker/Client installiert und als Server eingerichtet.
Ja, ich weiß. Und mit dem MQTT-Client Adapter kommt ein weiterer Client hinzu.
Ich werde morgen mal TMS anschreiben, was die dazu sagen. In dem Befehl, den ich gerade verwendet habe, gibt es ein Retain-Flag. Dieser hat aber keinerlei Auswirkung. Vom ACK steht auch nichts im Datenblatt.
Gut gemeinter Rat: Beschäftige dich mal kurz mit den ioBroker Grundlagen (insbesondere das Thema "ack/bestätigt"-Flag).
https://www.youtube.com/watch?v=p5FyeifYUnwDann wird vielleicht klarer, was ich meine.
Das mit ACK ist schon klar. Ich verstehe nur noch nicht, warum ich einen weiteren Client im IOBroker brauche.
Das würde ja bedeuten, ich greife nicht aufs Objekt (KNX) direkt zu (was ja funktioniert), sondern muss von Delphi (Client) -> Server -> Client->auf KNX zugreifen.
Das müsste doch funktionieren, wenn entweder der Server generel kein ACK sendet, oder ich das von Delphi aus steuern kann. Habe ehrlich gesagt keine Lust, für jeden KNX Datenpunkt nochmal ein Script oder Client Datenpunkte zu erstellen. -
@frankentronik sagte in MQTT und KNX:
Das müsste doch funktionieren, wenn entweder der Server generel kein ACK sendet, oder ich das von Delphi aus steuern kann.
Es geht halt nicht mit dem MQTT-Adapter, da er seine Datenpunkte immer mit "ack" Flag schreibt.
Habe ehrlich gesagt keine Lust, für jeden KNX Datenpunkt nochmal ein Script oder Client Datenpunkte zu erstellen.
Das musst du doch auch nicht tun. Mit dem Vorschlag musst du weder scripten noch separate Datenpunkte anlegen:
- Installation MQTT-Client Adapter
- Konfiguration der neuen Instanz mit den Verbindungdaten zum MQTT-Broker (in deinem Fall der MQTT Adapter)
- Aktivieren des MQTT-Client Adapters auf dem vorhandenen(!) KNX-Datenpunkt (über das Zahnrädchen rechts)
a) nur "Subscription" aktivieren und den Haken bei "ack" deaktivieren
b) setzen eines beliebigen Topics (z.B. "KNX/Datenpunkt1") - vom Delphi-Client publishest du auf das Topic "KNX/Datenpunkt1"
In diesem Szenario benutzt du den MQTT-Adapter lediglich als Broker, der theoretisch auch gegen einen Mosquitto oder etwas anderes ausgetauscht werden könnte. Darum unbedingt den Eintrag in "publish own states" für den KNX-Namensraum wieder entfernen.
-
@frankentronik sagte in MQTT und KNX:
Ich verstehe nur noch nicht, warum ich einen weiteren Client im IOBroker brauche.
wie auch @Marc-Berg schreibt
@homoran sagte in MQTT und KNX:
du brauchst einen MQTT Broker, der muss eigentlich nur die Pakete verwalten können.
für alles andere sind Clients zuständig.
lediglich der iobroker MQTT Adapter im Broker Modus, kann einiges nehr, aber auch nicht alles was ein vollwertiger Client kann.Dazu gibt es den MQTT Client Adapter.
da brauchst du nichts zu scripten, sondern nur in den Objekten am jeweiligen state die spezifischen Einstellungen vorzunehmen -
@marc-berg said in MQTT und KNX:
@frankentronik sagte in MQTT und KNX:
Das müsste doch funktionieren, wenn entweder der Server generel kein ACK sendet, oder ich das von Delphi aus steuern kann.
Es geht halt nicht mit dem MQTT-Adapter, da er seine Datenpunkte immer mit "ack" Flag schreibt.
Habe ehrlich gesagt keine Lust, für jeden KNX Datenpunkt nochmal ein Script oder Client Datenpunkte zu erstellen.
Das musst du doch auch nicht tun. Mit dem Vorschlag musst du weder scripten noch separate Datenpunkte anlegen:
- Installation MQTT-Client Adapter
- Konfiguration der neuen Instanz mit den Verbindungdaten zum MQTT-Broker (in deinem Fall der MQTT Adapter)
- Aktivieren des MQTT-Client Adapters auf dem vorhandenen(!) KNX-Datenpunkt (über das Zahnrädchen rechts)
a) nur "Subscription" aktivieren und den Haken bei "ack" deaktivieren
b) setzen eines beliebigen Topics (z.B. "KNX/Datenpunkt1") - vom Delphi-Client publishest du auf das Topic "KNX/Datenpunkt1"
In diesem Szenario benutzt du den MQTT-Adapter lediglich als Broker, der theoretisch auch gegen einen Mosquitto oder etwas anderes ausgetauscht werden könnte. Darum unbedingt den Eintrag in "publish own states" für den KNX-Namensraum wieder entfernen.
Hallo zusammen
Vielen Dank.
Geht nun. Objekte lassen sich schalten.
Wenn ich das richtig sehe, muss ich das dann auch bei jedem KNXDatenpunkt machen und jeweils einen Topic Namen vergeben.Zu abonnieren direkt aufs KNX-Objekt oder auch über den MQTT Client?
Viele Grüße
Stefan
-
@frankentronik sagte in MQTT und KNX:
Wenn ich das richtig sehe, muss ich das dann auch bei jedem KNXDatenpunkt machen und jeweils einen Topic Namen vergeben.
... oder du lässt die Topic-Bezeichnung einfach so wie vorgeschlagen ("knx.0. ...")
Zu abonnieren direkt aufs KNX-Objekt oder auch über den MQTT Client?
Die Frage verstehe ich leider nicht.