Tag 11: MQTT

Hinter dem heutigen Türchen finden Sie wieder einen Satz Kabel, die wir für die nächsten Tage und die komplexer werdenden Aufbauten benötigen werden.

In den letzten Tagen haben wir die meisten unserer Daten mittels UDP übertragen. Dieses Protokoll ist sehr praktisch, da es einerseits einen kleinen Overhead (Daten, die neben den eigentlichen Nutzdaten übermittelt werden) hat und andererseits Broadcast-fähig ist und somit gleich an mehrere Geräte gleichzeitig Daten senden kann. Heute wollen wir aber noch ein zweites Protokoll näher kennenlernen, das im Bereich IoT eine große Rolle spielt. Es geht um das Nachrichtenprotokoll MQTT (Message Queue Telemetry Transport), das speziell für die Kommunikation von Maschine zu Maschine (M2M) entwickelt wurde. Der Grund dafür, dass dieses Protokoll so genial ist, liegt in der Kompaktheit und Einfachheit, mit der Daten wie Steuerdaten, Messdaten oder Texte zwischen Geräten ausgetauscht werden können. Im Vergleich zu HTTP ist der Overhead sehr klein. Deswegen können auch Embeded Devices, also Mikrocontroller wie unser NodeESP, die Daten gut verarbeiten.

Grundlange für die Kommunikation bildet ein sogenannter Broker. Ein Broker ist eine Serveranwendung, die alle Nachrichten verarbeitet. Ein Gerät wie unser NodeESP kann sich mit dem Broker verbinden und Nachrichten veröffentlichen (publishen), also an den Broker senden. Ein anderes Gerät kann dann bestimmte Themen (Topics genannt) abonnieren (subscriben) und bekommt sofort alle neu zu diesem Thema veröffentlichten Nachrichten vom Broker zugestellt.

Der MQTT-Broker stellt die Nachrichten zu

Der MQTT-Broker stellt die Nachrichten zu

Die Topics sind hierarchisch strukturiert, wobei Unterthemen jeweils durch ein / getrennt sind. Zusätzlich gibt es sogenannte Wildcards. Durch + oder # können mehrere Themen gleichzeitig abonniert werden.

Die Topics MyHome/Kitchen/Temperature und MyHome/Bathroom/Temperature können so z. B. durch das Subscriben des Themas MyHome/+/Temperature gleichzeitig empfangen werden. Das Plus ersetzt dabei immer nur eine Topic-Ebene, die Raute ersetzt gleich alle. Mit dem Topic MyHome/# empfangen Sie also gleich alle Nachrichten, die in allen Untertopics von MyHome gepublished werden. Eine Nachricht kann so ziemlich alles sein: vom reinen Text über Messwerte bis zu einfachen 1/0-Befehlen zum Schalten von Licht.

Für heute brauchen Sie keinen Hardwareaufbau, denn wir beginnen mit ein paar grundlegenden Tests. Schauen Sie sich zunächst die Einstellungen auf der Konfigurationsseite an. Bestimmt ist Ihnen schon der Bereich MQTT Settings aufgefallen. Hier finden Sie bereits die richtig vorkonfigurierten Einstellungen. Als Broker-Adresse ist ein speziell für das Adventskalenderprojekt eingerichteter Server angegeben, nämlich broker.fkainka.de. Sie können aber auch selbst einen Broker aufsetzen, z. B. auf Ihrem Raspberry Pi.

Ich empfehle dazu die Open-Source-Software Mosquitto. Die Client-ID wurde anhand der MAC-Adresse des Boards generiert. Der Grund dafür ist, dass diese ID serverweit nur von einem einzigen Gerät genutzt werden darf. Da eine MAC-Adresse weltweit eindeutig sein sollte, bietet sie sich hier als ID an. Einen Usernamen und ein Passwort brauchen Sie für den Testbroker nicht.

Sie können die Verbindung testen, indem Sie weiter unten auf den Button Test Connection klicken. Nun sollte die Farbe der Fläche daneben auf Grün wechseln, wenn die Verbindung zum Broker erfolgreich hergestellt wurde. Falls es mal nicht funktioniert, kann es sein, dass der Server down ist und Sie den Broker wechseln müssen. Ein alternativer frei verfügbarer Broker ist z. B. broker. mqttdashboard.com.

Nachdem Sie die prinzipielle Verbindung getestet haben, können Sie nun das Programm des heutigen Tages einstellen. Gehen Sie anschließend auf die Seite

https://www.hivemq.com/demos/websocket-client/?

und klicken Sie dort auf Try the websocket client. Es erscheint eine Oberfläche, mit der Sie sich auf einem MQTT-Broker mit Websocket-Unterstützung anmelden können. Unter Host müssen Sie einen Broker, also hier broker.fkainka.de, eintragen und anschließend mit connect eine Verbindung herstellen. Es öffnet sich die Oberfläche aus der Abbildung. Sie können nun mit Klick auf Add New Topic Subscription Ihr eigenes, persönliches Topic abonnieren. Dieses setzt sich aus dem Begriff NodeESP und der Client-ID zusammen. Bei meinem Board war das zum Beispiel:

NodeESP/240AC48178E4/

Sämtliche MQTT-Kommunikation vom und zum Board beginnt mit diesem Topic. Ich werde den Client-IDTeil in Zukunft mit [PID] für „persönliche ID“ abkürzen. Sie müssen diesen Teil durch Ihre Client-ID ersetzen. Im ersten Versuch können Sie alle Kommunikation vom Board mit dem Topic

NodeESP/[PID]/#

empfangen. Wenn Sie das Board resetten, sehen Sie nach kurzer Zeit eine Meldung, die Ihnen sagt, dass sich das Board mit dem Broker verbunden hat. Diese Meldung wurde in das Topic NodeESP/[PID]/status geschrieben und durch das Subscriben mit # ebenfalls empfangen. Nun können Sie eine erste Nachricht an das Board übermitteln. Dazu geben Sie im Publish-Bereich im Feld Topic Ihr persönliches Topic plus das Subtopic testtopic ein, also in meinem Fall:

NodeESP/[PID]/testtopic

In dem Feld Message können Sie jetzt eine beliebige Nachricht eingeben. Das Feld kann sogar leer bleiben. Klicken Sie anschließend auf Publish, und nur wenige Augenblicke später haben Sie zwei weitere Nachrichten im Messages-Bereich. Die eine Nachricht ist ein Begrüßungstext und wurde im Topic NodeESP/[PID]/testtopic/out veröffentlicht. Die andere Nachricht enthält ebenfalls den Begrüßungstext, allerdings als JSON-String inklusive Kommando-Key, und wurde im Topic NodeESP/[PID]/out veröffentlicht.

Diese beiden Nachrichten kommen dadurch zustande, dass das Board die Topics in das bekannte Kommandoformat übersetzt und dann auswertet. Die Antworten erscheinen in einem Topic, das sich aus dem Kommando und out zusammensetzt, hier also …/testtopic/out, und gleichzeitig im Kanal NodeESP/ [PID]/out.

Äquivalent zum out-Topic gibt es ein in-Topic, in das Sie direkt Kommandos im JSON-Format publishen können. Wenn Sie zum Beispiel in das Topic NodeESP/[PID]/in den JSON-String {"cmd":"testtopic"} schreiben, käme es zu den gleichen Antworten wie beim ersten Versuch. Sie können also ein Kommando entweder über ein entsprechendes Topic oder über den in-Channel als JSON-Objekt schicken. Wundern Sie sich nicht darüber, dass einige bekannte Kommandos wie z. B. get_wifi_status etc. nicht funktionieren. Das liegt daran, dass diese Kommandos durchaus sensible Daten enthalten können und deswegen nicht über einen öffentlichen Broker gesendet werden sollten.

Die Verbindung zum Board über MQTT steht also. Morgen schauen wir uns genauer an, was wir damit machen können.

41 Kommentare

  1. Alex

    Toller Kalender, haha

    bin per MQTT mit dem fkainka Broker verbunden, aber websocket client keine Verbindung möglich

    NodeESP/807D3ADC5XXX/

    funktioniert nicht.

    Bitte um schnelle Klärung

    Antworten
    1. fk (Beitrag Autor)

      Hallo,
      tatsächlich scheint mit der DNS-Weiterleitung etwas nicht mehr zu funktionieren.
      Du kannst aber auch die direkte IP des Servers nutzen bis ich das Problem gefunden habe.

      Konkret heißt das statt auf der HiveMQ-Seite broker.fkainka.de einzugeben sollte da nun 5.189.182.151 stehen.
      Damit lassen sich die Projekte auch durchführen. Ich schreibe sobald die Weiterleitung wieder wie beschrieben funktioniert.

      Viele Grüße,
      FK

      Antworten
      1. Alex

        Hallo,

        der NodeESP kann sich ja mit dem Broker verbinden, jedoch nicht der

        http://www.hivemq.com/demos/websocket-client/

        Also Bitte um Klärung oder Geld zurück

        Antworten
        1. fk (Beitrag Autor)

          Hast du eventuell die Broker.fkainka.de im Browser aufgerufen? Aus irgendeinem Grund funktioniert die Weiterleitung zum Broker dann nämlich nicht mehr mit dem Gerät. Am besten mit Smartphone testen oder alternativ die IP benutzten: 5.189.182.151

          Antworten
          1. Alex

            Also nochmal. Der ESP ist connected, aber

            Konkret heißt das statt auf der HiveMQ-Seite broker.fkainka.de einzugeben sollte da nun 5.189.182.151 stehen.

            Mit Hive Mq bekommt man kein Connect hin. Egal ob ip Adresse oder der Name. Bitte überprüfen.
            Vielleicht ist die Anleitung ja falsch, da viele ja das Problem haben

    2. Reinhold Klass

      Bei mir Funktioniert die Verbindung (Schaltfeld wird grün), aber die Seite http://www.hivemq.com/try.out/ gibt es nicht. Mir werden dort die verschiedensten Downloads angeboten….
      Was soll ich hier machen ??? Muß man etwas installieren ? oder gibt es einen WEB Tryout ?
      In der Anleitung stewht leider nichts….

      Antworten
      1. fk (Beitrag Autor)

        Auf dieser Seite steht die richtige URL. In der Anleitung des Kalenders, der eigentlich vom letzen Jahr 2018 ist, steht noch die alte URL, die sich im Laufe des Jahres geändert hat.

        Antworten
    3. Reinhold Klass

      Funktioniert tatsächlich nicht, man kommt nach etwas Herumproobieren tatsächlich auf das web-trial, leider steht nichts darüber in der Anleitung…..
      TOLLER KALENDER ??????
      Ich denke, es ist eher eine Blamage für Conrad Electronic….

      Zumindest erwarte ich eine etwas bessere Anleitung…

      Antworten
    4. Reinhold Klass

      Sobald man Publish drückt, passiert ein Disconnect ????

      Also: ich gebe jetzt auf und sende das gesamte Paket an Conrad Electronic zurück. Ist zwar eine super Idee, und es steckt viel Know How und Technologie dahinter.
      Allerdings ist es so miserabel gemacht, mit Fehlern und unvollständiger Doku versehen, Anleitung nicht vollständig oder sehr verwirrend, dass ich es einfach keine Lust mehr habe, mich damit rumzuärgern.

      Schade + Blamabel !!

      Antworten
      1. fk (Beitrag Autor)

        Wenn du beim Publish die Verbindung getrennt wirst versucht du sehr wahrscheinlich in ein falsches Topic zu publishen, was der Broker mit einem Disconnect bestraft.

        Antworten
    5. fk (Beitrag Autor)

      Die URL und die IP stimmen. Welchen Browser verwendest du?

      Antworten
      1. Markus

        Hinweis: Die verlinkte URL ist noch die alte, nur die angezeigte ist korrekt.
        Sonst habe ICH bis jetzt keinerlei Probleme dem Kalender bzw. der Anleitung (online) zu folgen, alles ist ausreichend erklärt.
        Man muss schon Lust haben sich damit zu beschäftigen …

        Antworten
        1. fk (Beitrag Autor)

          Oh tatsächlich, sry. Ich hab dir URL angepasst und danke für den Hinweis.
          LG FK

          Antworten
          1. Karl-Heinz

            Ich bekomme keine Verbindung zum Board, keine Antwort

        2. Karl-Heinz

          Hallo Markus,
          ich zB. bin 64 Jahre alt und habe mich seit einem halben Jahr mit Arduino beschäftigt. Nun habe ich diesen Kalender geschenkt bekommen und bin auch gut bis hierher gekommen. Das ganze ist total berufsfremd für mich aber ich will nicht aufgeben. Ich versuche es jetzt schon den ganzen Tag und bin am googeln und machen aber ich schaffe es einfach nicht. Kannst du da weiterhelfen bitte.

          Antworten
          1. fk (Beitrag Autor)

            Hallo,
            ich versuche mal ein paar beliebte Fehlerquellen auszuschließen:

            – wie genau sieht das Topic aus, das du subscribst? Die # am Ende ist sehr wichtig. Es kann auch leicht zu Tippfehlern in der Client ID kommen
            – Ist das Board gerade mit dem WLAN-Verbunden (leuchtet die LED grün)?
            – Ist das richtige Programm ausgewählt?

            EDIT: Ich sehe jetzt wo der Fehler herkommt. Du schreibst in das Topic NodeESP/840D8E1D93A8/ nicht in NodeESP/840D8E1D93A8/testtopic wie im Text erwähnt. Ich verstehe nun aber auch die Verwirrung da auf dem Foto auf dieser seite das testtopic nicht zu sehen ist. Ich tausche das Foto bei Gelegenheit aus.
            Viele Grüße,FK

          2. Karl-Heinz

            Danke, das "#" hat gefehlt, das war alles.
            Da jetzt bald 0:00 Uhr ist mach ich gleich mit Tag 12 weiter. :-). Vielen Dank für die Hilfe.

    6. Stefan Bräuer

      Bei mir funktionierte es erst, als ich die Client-ID aus den MQTT-Settings genommen habe. Die automatische Angabe in der Websocket-Seite ist offenbar eine falsche ID.
      Dieser Hinweis, wie viele ähnliche Hinweise, fehlen in der Beschreibung der Versuche. Schade.

      Antworten
  2. guesel

    Ich bekomme die gleiche Fehlermeldung wie Patrick: Connect failed: AMQJS0007E Socket error:undefined.
    Die Meldung bekomme ich, wenn ich vom PC oder vom Handy auf die HiveMQ Webseite gehe.

    Antworten
  3. luidd

    Hi Patrick,

    Ich kann dein Problem verstehen.
    Aber fangen wir von Vorne wieder an!
    Nimm Tag 1 und vergiss alles andere. Entweder Hotspot oder WPS.
    Nimm die IP, wie du es ja schon gemacht hast.
    Ob die sich geändert hat entscheidet dein Router, sollte da drin stehen.

    Wenn nichts geht, hilft ein flashen der Firmware, sie fk. Link https://iot.fkainka.de/nodeesp-firmware-reinstallieren

    Viele Grüße,

    luidd

    Antworten
  4. Patrick

    hat jemand eine Idee, warum, um Himmels Willen der MQTT Client keine Verbindung zum Server broker.fkainka.de aufnehmen kann?
    Ich bekomme nur Time out…
    Und da die einzelen Tage auf einander aufbauen stecke ich nun schone seit einer Woche fest…

    Antworten
    1. fk (Beitrag Autor)

      Hast du Mqtt-Einstellungen verändert? Kannst du mit der Hive-MQ Seite eine Verbindung zum Broker herstellen? Und hast du sonst Mal einen alternativen öffentlichen Broker verwendet?

      Antworten
      1. Patrick

        Hallo Fabian,
        die Mqtt-Einstellungen des (oder der?) NodeESP habe ich nicht geändert.
        Mit der NodeESP bekomme ich augenscheinlich eine Vebindugn zu dem Mqtt Server den Du aufgesetzt hast, das Feld wird grün, wenn man auf Connect drückt.
        Ich habe das Problem, das der Hive-MQ democlient keine Verbindungmit dem server von Dir aufnimmt.
        Anfangs habe ich noch fehlende firewall Reglen bei mir vermutet, das sollte jedoch nicht zutreffen, da der Hive-MQ client doch eigentlich direkt auf Deinen Server zugreifen müsste.
        Nun kommt hier vermutlich die client ID in’s Spiel. Die kennt ja ersteinmal nur meine NodeESP (Mac Adresse). Das geht durch meine offensichtlich durch meine firewall (Feld wird Grün).
        Kann man serverseitig schauen, ob meine NodeESP erreichbar ist?
        Das würde eine mögliche Erklärung sein.
        LG
        Patrick

        Antworten
        1. Patrick

          Schade,
          aufgrund der Probleme mit meinem Kalender kann ich nun die Teile dem Elektroschrott übereignen.
          50€ In den Sand gesetzt.

          Antworten
          1. fk (Beitrag Autor)

            Vielleicht kannst du Mal ein Screenshot senden wie du die HiveMQ Seite eingestellt hast? Du kannst auch mit einem Smartphone auf die HiveMQ Seite gehen und testen ob das Board sendet. Oder von einem anderen PC aus.

          2. Patrick

            Von einen anderen Rechner, welcher nicht in meinem Netz steht bekomme ich folgende Nachricht (siehe Bild)

  5. Patrick

    hallo,
    nun wir die Fläche neben dem Button Test Connection grün, wie erwartet.
    Leider bekomme ich beim Verbinden mit dem MQTT Broker die Meldung
    "Connect failed: AMQJSC0001E Connect timed out."
    Damit bin ich auch heute keien Schritt weiter und die anderen Türchen warten auf mich.

    Antworten
  6. Bernd

    Einen eigenen Broker (Mosquitto) am PC aufzusetzen ist mir nun auch gelungen. Username/Passwort habe ich gar nicht erst konfiguriert/ausprobiert, weil es laut den Kommentaren wohl eh nicht funktionieren würde.

    Antworten
  7. derandiunddasbo

    Kann es sein, dass die MQTT Username/Password-Einstellungen des Boards nicht oder nicht richtig funktionieren? Mit meinem eigenen (Mosquitto-)Broker kann ich nur dann erfolgreich eine Verbindung herstellen, wenn ich den anonymen Zugriff erlaube. Ist der anonyme Zugriff deaktiviert, schlägt die Authentifizierung am Broker fehl, trotz trivialer Passwörter, die mehrmals eingegeben und überprüft wurden.

    Antworten
  8. Thorsten

    Hallo,
    ich versuche alles mögliche,mein Board mit MQTT zu verbinden ohne Erfolg!!
    Wenn ich "NodeESP/240AC48178E4/" bei HIVE MQ wie beschriben eingebe passiert garnichts.
    ausserdem habe ich die ID von dem Boardsettings versucht auch ohne Erfolg.und resettet habe ich auch schon.
    ich glaube mit dem Board stimmt irgendwas nicht.

    Antworten
  9. Tobias

    Hallo Fabian,

    der Link http://www.hivemq.com/try-out/ funktioniert nicht mehr, man gelangt zu
    https://www.hivemq.com/download/
    was ist zu tun?

    MfG,
    Tobias

    Antworten
    1. fk (Beitrag Autor)

      Hallo, die URL hat sich scheinbar geändert. Die neue URL lautet : http://www.hivemq.com/demos/websocket-client/?

      Antworten
      1. fk (Beitrag Autor)

        ich hab die URL jetzt auch im Text angepasst

        Antworten
        1. Wolfgang

          Hallo,

          der Text auf der Seite ist angepasst, aber der Link nicht!

          Viele Grüße
          Wolfgang

          Antworten
  10. paulaner

    Hallo Fabian,

    Der Text oder Teile davon stammen sich aus dem Text zun NanoESP.

    Zitat:

    … Deswegen können auch Embeded Devices, also Mikrocontroller wie unser NodeESP, die Daten gut verarbeiten.

    Zweiter Absatz, letzter Satz.
    Auch im Begleitheft ist es nicht aktuell.

    Antworten
    1. paulaner

      ich meinte 3. Absatz

      Zitat:
      … Broker. Ein Broker ist eine Serveranwendung, die alle Nachrichten verarbeitet. Ein Gerät wie unser NanoESP kann sich mit dem Broker verbinden …

      Hier ist vom NanoESP die Rede.

      Antworten
      1. fk (Beitrag Autor)

        Oh stimmt, vielen Dank für den Hinweis

        Antworten
  11. Niklas

    Ich hab seit ein paar Tagen vergessen die Türchen zu öffnen, jetzt habe ich Türchen 6 ausprobiert und das Board kann keine Verbindung aufbauen. Die grüne LED leuchtet und manchmal kann ich mich mit der Website verbinden, aber sobald ich auf die Config Page gehen möchte, stürzt die Seite ab oder der Wifi Status ist rot und es werden keine Netzwerke angezeigt.

    Kann ich das Board reseten ohne auf die Website zu gehen?

    Antworten
    1. J.J.

      Hast Du schon mal in den Kommentar-Bereich von Tag #6 gesehen?

      Alternativ hier: https://iot.fkainka.de/forum/topic/nodeesp-storung-nach-tag-6-touch-to-speech/#post-2716

      Antworten
  12. Patrick

    Bedauerlicherweise stürzt mein Board nach dem Betätigen der Connect Taste unter MQTT ab..
    Vielleicht hat jemand ja eine Erklärung
    LG
    Patrick

    Antworten
  13. Taraxacum

    Hilfreich ist der Beitrag vom Adventskalender 2016:
    https://iot.fkainka.de/day-20-mqtt-message-queue-telemetry-transport
    Hier wird noch mehr zu MQTT erklärt. Der Kalender 2016 basiert verwendet aber ein NanoESP und nicht das NodeESP.

    Antworten

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.