Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Grundsatzfrage zu den MQTT Adaptern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Grundsatzfrage zu den MQTT Adaptern

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @mr1burns last edited by mickym

      @mr1burns So jetzt wird das schon etwas deutlicher.

      Ich gehe mal davon aus - Du nutzt nun nicht 2 Instanzen des mqtt-Client/Server Adapters, sondern

      mqtt.0 = ist Dein Server/Broker
      mqtt-client.0 = ist Dein Client

      Du hättest auch mit einem Adapter auskommen können - aber das tut erst mal nichts zur Sache. Ich würde auf dem Broker grundsätzlich auch erst mal alle Haken weg machen. Die Maske zum Veröffentlichen der eigenen States beim Broker heißt immer

      mqtt.0.*
      

      das heißt dort sind die States gespeichert, die der Broker verwaltet. Auf dem Client gibst Du nun an , was Du veröffentlichst. So ich habe mir gerade angeschaut - wie dieser mqtt-client funktioniert, da ich den normalerweise nicht verwende. Aber habs kapiert. Das heißt in dem Client gibst Du nur einzelne States ein, die gepublisht werden sollen und gibst oben drüber an in welches Topic. (also über das Zahnrad neben dem State) Für einzelne States funktioniert das sicher sehr gut - wenn Du allerdings Deinen ganzen Baum (also eines ganzen Adapters) publishen willst dann eignet sich der Client/Server Adapter besser.

      Also als erstes in Deinem Broker die eigenen States richtig stellen. Als Subscriber in Deiner MQTT Box - kannst ja auch mal # eingeben, dann siehst Du alles was sich verändert - aber mach bitte alle Haken in Deinem Broker weg. Das braucht es einfach nicht. Ach ja in Deiner mqtt Box - die kennt nur die mqtt topics und keine Adapter instanzen. Da gehören also die / hin und keine Punkte. Das muss dann genauso aussehen, wie das topic oben. Aber wie gesagt wenn Du eine subscription auf # machst, bekommst Du alles mit, was neu in Deinem Broker ist.

      Wichtig ist auch, dass Dein Topic Leerzeichen enthält - das musst Du auch genauso eingeben bei den Topic in Deiner mqtt Box - es wird nicht durch Unterstriche ersetzt.

      Hier mal ein Beispiel mit dem ich es nachgestellt habe:

      Im Datenpunkt ändert sich was - bei Dir unter modbus.0 - bei mir unter 0_userdata.0 - Ich setze folgenden String:

      7346378a-296d-4023-b9ea-f3d5a72c3eda-image.png

      Der mqtt-Client Adapter erstellt in der Regel automatisch das topic - kann man aber ändern:

      d70d4b1d-8e83-4947-bc74-722b55617705-image.png

      Du siehst das topic enthält einige Leerzeichen.

      Im Broker - bei mir ist das allerdings auch ein Client kommt das topic entsprechend an - aber hier ist der Name und nicht die ID für mqtt relevant:

      ed666aad-6a75-475b-acfb-22b1082c940e-image.png

      In der Subscription bzw. in einem neutralen MQTT-Client müssen die Leerzeichen miteingegeben werden:

      fcdde78f-37fc-4190-9135-333b41806557-image.png

      Also wie gesagt entweder gibst Du in Deiner mqtt Box # oder modbus/# ein oder wirklich das ganze Topic mit Leerzeichen und nicht mit Unterstrichen.

      Also

      modbus/0/inputRegisters/5016 Total DC Power
      

      Wichtig ist aber in meinen Augen

      1. mqtt.0.* - als Einzige Maske für die eigenen States
      2. ggf. nur mit dem Client/Server mqtt Adapter arbeiten, wenn Du ganze Adapterinstanzen exportieren willst - sollte aber das System nicht überlasten, sonst lieber einzelne Datenpunkte.
      3. Das mqtt topic hat nichts mit der ID des iobrokers zu tun. Das topic wird vom mqtt Adapter meist als Namen gesetzt.
      1 Reply Last reply Reply Quote 1
      • mickym
        mickym Most Active @mr1burns last edited by mickym

        @mr1burns So ich hab das nun mal für Dich alles nachgestellt - wobei ich kurzfristig mal bei dem mqtt Client/Server Adapter die neueste Version genutzt habe - aber das kommt nur dann in Frage, wenn Du ganze Bäume hochlädst.

        Es gab für mich jedoch eine sehr erhellende Erkenntnis. Ich benutze ja mosquitto als Broker - deswegen stimmt das unten auch nur halb.

        Fakt ist:

        Wenn Du den mqtt-Adapter als Broker verwendest und gleichzeitig einen mqtt-Client Adapter oder auch den mqtt Adapter als Client - das zerschiesst Dir immer das System, wenn Du keinen Prefix verwendest. Das ist dann eine Endlosschleife.

        Deshalb funktioniert das Publishen mit dem mqtt-Adapter als Broker NUR, wenn du dafür eigene Präfixe nimmst.

        Im mqtt-Client Adapter also ein Präfix einstellen:

        77f4ab8d-3c85-40fc-9827-54c9ccbdfb0d-image.png

        Nur dann werden Endlosschleifen vermieden:

        d1fe2dab-f444-4046-bc4b-bf76740c2044-image.png

        Ansonsten wenn Du einen ganzen Adapter veröffentlichen willst - brauchst Du die neueste Version des mqtt Client/Server Adapters.

        081e8249-5538-4d51-b128-fdafcf9fb17e-image.png

        Damit kannst Du, wie von Dir geplant ganze Adapterbäume veröffentlichen:

        2fa16d49-7d31-40fd-ac01-674035171dd8-image.png

        Bei den Subscriber topics ist es wohl wurscht, ob man was einträgt oder nicht - wird wohl bei einem leeren Feld # verwendet.

        M 1 Reply Last reply Reply Quote 1
        • M
          mr1burns @mickym last edited by

          @mickym
          Du bis echt gut drauf... ich sag schon mal danke.. in der MQTTBox bekomme ich schon was... werde aber erst morgen oder am WE weiter Testen können...

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @mr1burns last edited by mickym

            @mr1burns So naja - interessiert mich ja selbst etwas.

            So ich habe noch war rausgefunden - grundsätzlich exportiert ein mqtt-Client Server Adapter alle topics - die als eignen definiert werden.

            Falls das topic jedoch mit einem Namen beginnt der einem der Root-Namen im iobroker entspricht, dann werden die nicht mehr reimportiert - auch nicht wenn es über mosquitto läuft. Deshalb muss man immer einen eigenen Präfix mitgeben. Im Subtree ist es kein Problem. Das heißt Adapterinstanzen können ohne Prefix zwar exportiert werden - aber man wird sie nie in einer mqtt Instanz finden. Deshalb funktioniert das Publishen nur mit eigenem Präfix.

            Habs auch gerade getestet - wenn man Zustände braucht - Du rennst sofort in eine Endlosschleife.

            Also GRUNDSATZ: Alles was Du exportierst aus eigenen internen Zuständen macht man am Besten irgendein Schwachsinn in das subscription Feld eintragen - sonst nimmt der Adapter leider willkürlich # und subscribed alles und wenn man den eigenen Präfix nimmt - gibts bei Zuständen sofort wieder Endlosschleifen. 😞

            Also wenn man Zustände benötigt - da fremde Adapter ja die Werte bestätigt in Ihren Namensraum schreiben - dann kann man mit dem mqtt Client/Server in der Version 4.0.7 folgende Konfiguration verwenden - getestet mit dem backitup Adapter:

            mqtt Export- Einstellungen.png

            und hier sieht man das Ergebnis:

            mqtt Export BackitUp.png

            So damit ist das Thema erstmal wieder für mich abgeschlossen. Ich hoffe es hat manchen wieder etwas geholfen und ich habe ja auch wieder was dazugelernt.

            Issr4k 1 Reply Last reply Reply Quote 1
            • Issr4k
              Issr4k @mickym last edited by Issr4k

              @mickym

              Ich lese mir den Thread bereits zum fünften Mal durch.

              In der Hoffnung das mir nichts entgeht... leider komme ich aber nicht ans Ziel.

              Gerne poste ich auch meine Einstellungen der Adapter, aber dort steht durch das viele ausprobieren sowieso nurnoch Käse drin.

              Ich verwende den MQTT Adapter und diesen als Server/Broker.
              der mir quasi nur einen Impuls an meinen Client senden soll.

              Der Client ist ein Arduino, welcher entsprechend mit einem Koppelrelais versehen ist und einen Impuls (true -> 1s -> false) auf mein Garagentorantrieb gibt.
              Der abgebildete Datenpunkt Befehl kommt über die Vis bzw über den javascript Adapter der direkt in den abgebildeten Baum des mqtt Adapters schreibt.

              Das hat bisher auch gut funktioniert nur seit dem Update auf 4.07... geht es leider nicht mehr.
              Und leider ist mein Verständnis für deine Erklärung nur begrenzt und ich verstehe nicht wie ich Präfixe verwenden muss.

              Ein Denkanstoß wäre sehr willkommen.

              Vielen Dank vorab!

              mqtt.PNG
              objekte.PNG

              Edit: das "Online" Lebenszeichen erhalte ich weiterhin Ordnungsgemäß vom Arduino.

              mickym 1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @Issr4k last edited by mickym

                @issr4k Hallo, wie ich bereits schon mal erwähnt habe - published ein Broker eigentlich gar nicht. Ich würde mal alle Haken aus der mqtt Konfig rausnehmen und einen den separaten mqtt-Client installieren - den Adapter mit dem Zahnrad - das ist keine neue Instanz dieses Adapters, sondern ein komplett anderer.

                Diesem client-Adapter gibts Du als Broker dann die lokale Instanz Deines jetzt bereits als Broker installiertem Instanz mit.

                f23da994-fbe9-4f2a-b823-204597d6650f-image.png

                Die 1. Kachel ist der Adapter, den Du bereits installiert hast und den Du als Broker konfiguriert hast. Der 2. Adapter heißt nur mqtt-Client und der stellt Dir das Zahnrad zur Verfügung.

                Bei diesem gibst Du dann als Broker local host ein, da ja Dein Broker Adapter auf der gleichen Maschine läuft:

                c0ef42c3-6768-45fd-9d3f-b223330e3eac-image.png

                hier musst Du auch keine Präfixe eingeben beim Publishen - darf halt grundsätzlich nicht wie ein Adapter heißen.

                ebd9c738-b489-4597-87de-11129a0db4cc-image.png

                Das Publishen stellst Du dann bei den Datenpunkten über das Zahnrad in den Objekten ein:

                066f1240-43f1-44b3-8fac-07a0c8114fc3-image.png

                das schöne an dem reinen Client-Adapter ist, dass Du hier völlig frei in der Wahl des Topics bist:

                In diesem Fall würde ich auch nichts abonnieren:

                088351bd-3b78-4bd1-aab8-533d33ca588b-image.png

                Falls ein anderer Client was in dieses Topic reinschreiben sollte, bekommst Du das ja über Deine Broker instanz mit.

                Nachtrag:

                Der abgebildete Datenpunkt Befehl kommt über die Vis bzw über den javascript Adapter der direkt in den abgebildeten Baum des mqtt Adapters schreibt.

                Leg lieber einen eigenen Datenpunkt unter 0_userdata.0 an - so wie sich das gehört und schreib mit VIS bzw. über den Javascript Adapter in diesen Datenpunkt. Der mqtt-client Adapter published es dann an den Server - Deine mqtt-Broker Instanz und informiert Deinen Client (Ardunino), dass ein neuer Wert vorhanden ist und schickt ihn dann. Ein Broker ist unter mqtt - eigentlich immer ein passives Kerlchen, der zwar schickt, aber nur wenn ein Client das subscribed - abonniert hat.

                Das andere mit dem in den Datenpunkt direkt unter der mqtt-Instanz reinschreiben, funktioniert mit dem anderen Adapter nur dann richtig, wenn dieser als Client zu einem anderen Broker betrieben wird.

                BananaJoe 1 Reply Last reply Reply Quote 2
                • BananaJoe
                  BananaJoe Most Active @mickym last edited by

                  @mickym was spricht dagegen eine 2. Instanz des MQTT Broker/Client zu nehmen und als Client zu konfigurieren? Bzw. was ist der Vorteil.
                  Ich wollte gerade schreiben das der MQTT-Client scheinbar weniger gepflegt wird, aber Apollon77 hat sich dem wohl angenommen - der wird also gepflegt und Fehler behoben.

                  mickym 2 Replies Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @BananaJoe last edited by mickym

                    @bananajoe
                    Nachteile des mqtt-Broker/Client Adapters

                    1. Du musst zwingend ein Präfix verwenden, da wie erläutert topics, die mit einem Adapterpfad beginnen, nicht wieder reimportiert werden. Ist nicht schlimm, aber man muss es dem Arduino Client halt sagen, dass ein anderes Topic abonniert werden muss.
                    2. topic können nicht frei vergeben werden.
                    3. nicht einfach über Zahnrad einzelne states auswählbar.

                    Es geht aber auch 2. Instanz des mqtt-Broker/Client Adapters als Client konfiguriert
                    Man kann eine 2. Instanz als des mqtt Client/Broker Adapters verwenden, dann alles bei mqtt.1.* belassen, aber wie gesagt dann ist Präfix Pflicht und auf keinen Fall was subscriben. Muss man halt nur in Ardunio das Topic zum Subscriben ändern. Also Pattern zum subscriben auf nothing oder sowas setzen, das wird wohl in einer der nächsten Versionen angeboten, dass der subscribe Eintrag als Option ignoriert werden kann. dann kann man auch in selbst erstellte Datenpunkte unter mqtt.1 via VIS oder JS was publishen. Betreibt man den Adapter als Broker scheint das halt manchmal Probleme zu machen, sowohl direkt was in die Objekte der Adapterinstanz was reinzuschreiben als auch mit SendTo, wie in einem Parallelthread zu lesen..
                    @BananaJoe Wir Betreiben den Adapter ja nicht als Broker, sondern als Client zu mosquitto. Das ist der Unterschied.

                    Vielleicht gehts auch als Broker aber Präfix ist immer notwendig beim publishen mit diesem Adapter

                    1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @BananaJoe last edited by

                      @bananajoe sagte in Grundsatzfrage zu den MQTT Adaptern:

                      Ich wollte gerade schreiben das der MQTT-Client scheinbar weniger gepflegt wird, aber Apollon77 hat sich dem wohl angenommen - der wird also gepflegt und Fehler behoben.

                      dachte ich bis vor 1 Jahr auch, da war das auch total antiquiert mit Listen, aber da hat sich massiv was getan mit dem Zahnrad.

                      Issr4k 1 Reply Last reply Reply Quote 0
                      • Issr4k
                        Issr4k @mickym last edited by

                        Hallo @mickym

                        bin leider erst heute morgen ans Testen gekommen und was soll ich sagen... in einem anderen Thread wurdest du als MQTT -Meister betitelt und das würde ich auch unterschreiben... 🙂

                        Habe wie du gesagt hast den client dazu genommen, die States neu angelegt, mit MQTT Explorer rumexperimentiert und jetzt funktioniert es... irgendwie...

                        Ich sehe am Ende eines laaaangen, laaangen Tunnels etwas Licht, aber noch ein weiter Weg für mich, bis ich das wirklich verstanden habe.

                        Vielen, vielen Dank an dich!
                        auch an @BananaJoe

                        1 Reply Last reply Reply Quote 0
                        • J
                          Jockel_Bln last edited by

                          Sorry wenn ich diesen Faden wieder ausgrabe, aber ich bin gerade mit meinem Latein am Ende.
                          Nachdem ich nur den mqtt-Broker/Client Adapter verwendet habe um einige Topics an meine Wärmepumpe zu schicken, wollte ich es nun richtig machen und Broker und Client trennen.
                          Eingestellt ist am Broker folgendes
                          e3221ac7-3a26-45b5-b85d-8e93da3d3b2a-image.png
                          Am Client Adapter sieht s so aus, admin und Passwort stimmen natürlich auch.
                          2bd0fe35-f068-406a-856a-6bb20a26eabf-image.png

                          Leider bekomme ich keine Verbindung zustande, im Log steht dann immer folgendes
                          58964621-5e65-493d-a1b3-44e9a2711265-image.png

                          Das Ganze läuft bei mir in einem Proxmox Container, die Verbindung von meiner Wärmepumpe zum MQTT Broker funktioniert einwandfrei und Ping an localhost funktioniert auch. Getestet habe ich auch mit 127.0.0.1 und 192.168.178.38 - immer das gleiche Ergebnis.
                          Das ist /etc/hosts

                          127.0.0.1       localhost
                          ::1             localhost ip6-localhost ip6-loopback
                          ff02::1         ip6-allnodes
                          ff02::2         ip6-allrouters
                          # --- BEGIN PVE ---
                          192.168.178.38 iobroker.home iobroker
                          # --- END PVE ---
                          

                          Vielleicht hat ja noch jemand eine Idee, ich komme einfach nicht mehr weiter.
                          Ich muss dazu sagen, dass ich mit Ü60 nicht so der Linuxexperte bin und mir alles nach und nach angelesen habe.

                          J 1 Reply Last reply Reply Quote 0
                          • J
                            Jockel_Bln @Jockel_Bln last edited by

                            Ich habe nun eine andere Lösung für mich gefunden.
                            Für die wenigen Datenpunkte, die ich an die WP schicken möchte, benutze ich nun einfach einen sendTo Block in Blockly. Hier ein Beispiel
                            595ad5bf-b065-493e-90d6-2513b3385223-image.png
                            Funktioniert bisher gut. So kann ich mir die entsprechenden Datenpunkte unter 0_userdata anlegen und muss nicht mehr in mqtt.0 rum schreiben. Den Client Adapter kann ich damit dann wohl auch sparen.

                            1 Reply Last reply Reply Quote 0
                            • S
                              stefu87_CH last edited by stefu87_CH

                              Hallo zusammen

                              Ich steige neu in Arduino ESP 32 ein und möchte die Infos vom ESP an IOB senden, was soweit auch klappt.
                              Aber ich habe das Problem, das ich auch noch Shelly auf dem IOB habe mit MQTT.

                              Jetzt ist meine Frage, kann ich im MQTT Adapter irgenwas einstellen, das er nur die Daten vom ESP 32 anzeigt in den Instanzen, ohne die Shellys miteinzubinden??

                              Im Shelly Logt er mir das alles voll:

                              2025-05-17 15:21:53.570 - error: shelly.1 (3935900) [MQTT] (Shelly?) device unknown, configuration for client with id "ESP32Waage" (ESP32Waage / ESP32Waage / undefined) does not exist! Maybe this device is not supported in this adapter version.
                              2025-05-17 15:21:53.570 - error: shelly.1 (3935900) [MQTT] DO NOT CHANGE THE CLIENT-ID OF YOUR SHELLY DEVICES (see adapter documentation for details)
                              2025-05-17 15:21:53.581 - info: shelly.1 (3935900) [MQTT] Client Close: (ESP32Waage / ESP32Waage / undefined) (false)
                              2025-05-17 15:21:58.588 - error: shelly.1 (3935900) [MQTT] (Shelly?) device unknown, configuration for client with id "ESP32Waage" (ESP32Waage / ESP32Waage / undefined) does not exist! Maybe this device is not supported in this adapter version.
                              2025-05-17 15:21:58.588 - error: shelly.1 (3935900) [MQTT] DO NOT CHANGE THE CLIENT-ID OF YOUR SHELLY DEVICES (see adapter documentation for details)
                              
                              Samson71 1 Reply Last reply Reply Quote 0
                              • Samson71
                                Samson71 Global Moderator @stefu87_CH last edited by

                                @stefu87_ch sagte in Grundsatzfrage zu den MQTT Adaptern:

                                Aber ich habe das Problem, das ich auch noch Shelly auf dem IOB habe mit MQTT.

                                Nutzt Du den Shelly-Adapter dafür oder tatsächlich "reines" MQTT?

                                S 1 Reply Last reply Reply Quote 0
                                • S
                                  stefu87_CH @Samson71 last edited by

                                  @samson71 sagte in Grundsatzfrage zu den MQTT Adaptern:

                                  Nutzt Du den Shelly-Adapter dafür oder tatsächlich "reines" MQTT?

                                  Den Shelly Adapter rein für die Shellys der neuen Generation und jetzt möchte ich gerne den ESP32 mit dem MQTT Adapter verwenden. Die Shellys sollen weiterhin mit dem Shelly Adapter kommunizieren.

                                  Samson71 1 Reply Last reply Reply Quote 0
                                  • Samson71
                                    Samson71 Global Moderator @stefu87_CH last edited by

                                    @stefu87_ch
                                    Dann hast Du doch keine Probleme. Den Shelly-Adapter so lassen wie er ist und die ESP in eine Instanz vom MQTT-Adapter. Natürlich auf unterschiedlichen Ports. So bleiben die Geräte dann auch "separat" in ihren jeweiligen Adaptern. Oder versuchst Du etwa die ESP mit in den Shelly-Adapter zu integrieren?

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      stefu87_CH @Samson71 last edited by

                                      @samson71 Nein die sollen getrennt bleiben.

                                      Das heisst ich kann im MQTT Adapter irgendeinen freien Port nehmen und den gleichen im ESP definieren, und dann sollte das klappen?

                                      Samson71 1 Reply Last reply Reply Quote 0
                                      • Samson71
                                        Samson71 Global Moderator @stefu87_CH last edited by

                                        @stefu87_ch sagte in Grundsatzfrage zu den MQTT Adaptern:

                                        Das heisst ich kann im MQTT Adapter irgendeinen freien Port nehmen und den gleichen im ESP definieren, und dann sollte das klappen?

                                        Im Prinzip ja. Zumindest wenn ioBroker auch gleichzeitig der MQTT-Server ist und da kein externer wie Mosquitto o.ä. mit im Spiel ist. Also Shelly z.B. auf Port 1883 und MQTT auf Port 1884. In den Endgeräten entsprechend die Ports setzen und gut ist.

                                        S 1 Reply Last reply Reply Quote 0
                                        • S
                                          stefu87_CH @Samson71 last edited by

                                          @samson71 Ok werde das mal testen. Ja ioBroker ist als Server eingestellt im MQTT Adapter

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          568
                                          Online

                                          31.7k
                                          Users

                                          79.7k
                                          Topics

                                          1.3m
                                          Posts

                                          10
                                          27
                                          3903
                                          Loading More Posts
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          The ioBroker Community 2014-2023
                                          logo